diff --git a/ai/tasks/actions/get_quest.gd b/ai/tasks/actions/get_quest.gd index b2aada8..ca39373 100644 --- a/ai/tasks/actions/get_quest.gd +++ b/ai/tasks/actions/get_quest.gd @@ -73,6 +73,7 @@ func _on_navigation_complete() -> void: func _on_navigation_failed() -> void: wait_time_remaining = randf_range(.5, 2) agent.navigation_finished.disconnect(_on_navigation_complete) + agent.navigation_failed.disconnect(_on_navigation_failed) func get_quest(): phase = Phases.OBTAIN diff --git a/ai/tasks/actions/use_guild_equipment.gd b/ai/tasks/actions/use_guild_equipment.gd index 8d73534..9969351 100644 --- a/ai/tasks/actions/use_guild_equipment.gd +++ b/ai/tasks/actions/use_guild_equipment.gd @@ -80,6 +80,7 @@ func _on_navigation_complete() -> void: func _on_navigation_failed() -> void: wait_time_remaining = randf_range(.5, 2) agent.navigation_finished.disconnect(_on_navigation_complete) + agent.navigation_failed.disconnect(_on_navigation_failed) func interact(): phase = Phases.INTERACT diff --git a/ai/tasks/actions/use_guild_service.gd b/ai/tasks/actions/use_guild_service.gd index b79acf8..a6d4ff9 100644 --- a/ai/tasks/actions/use_guild_service.gd +++ b/ai/tasks/actions/use_guild_service.gd @@ -80,6 +80,7 @@ func _on_navigation_complete() -> void: func _on_navigation_failed() -> void: wait_time_remaining = randf_range(.5, 2) agent.navigation_finished.disconnect(_on_navigation_complete) + agent.navigation_failed.disconnect(_on_navigation_failed) func use_service(): phase = Phases.SERVICE diff --git a/data/items/accessory.gd b/data/items/accessory.gd index 3233d7e..4110416 100644 --- a/data/items/accessory.gd +++ b/data/items/accessory.gd @@ -1,5 +1,7 @@ class_name Accessory extends Equipment +func can_equip_slot(slot : Slots) -> bool: + return slot == Slots.ACCESSORY func item_type_name() -> String: return "Accessory" diff --git a/data/items/armor.gd b/data/items/armor.gd index b92eb6d..f6d2c24 100644 --- a/data/items/armor.gd +++ b/data/items/armor.gd @@ -1,5 +1,9 @@ class_name Armor extends Equipment + +func can_equip_slot(slot : Slots) -> bool: + return slot == Slots.ARMOR + func item_type_name() -> String: return "Armor" #TODO: Add different armor classes diff --git a/data/items/equipment.gd b/data/items/equipment.gd index c2f2642..d0418b5 100644 --- a/data/items/equipment.gd +++ b/data/items/equipment.gd @@ -1,4 +1,6 @@ class_name Equipment extends Item +@export var stats : StatBlock = StatBlock.new(0) + func item_type_name() -> String: return "Equipment" diff --git a/data/items/item.gd b/data/items/item.gd index f4462e5..9a695aa 100644 --- a/data/items/item.gd +++ b/data/items/item.gd @@ -1,5 +1,10 @@ class_name Item extends Resource +enum Slots{ + WEAPON, + ARMOR, + ACCESSORY +} @export var image : Texture2D @export var name : StringName @@ -10,5 +15,16 @@ class_name Item extends Resource @export var per : bool @export var grade : String = "F" + func item_type_name() -> String: return "Item" + +func can_equip_slot(slot : Slots) -> bool: + return false + +static func slot_name(slot : Slots) -> String: + match(slot): + Slots.WEAPON: return "Weapon" + Slots.ARMOR: return "Armor" + Slots.ACCESSORY: return "Accessory" + return "ERROR" diff --git a/data/items/pitchfork.tres b/data/items/pitchfork.tres index 8bfc1a9..73169cf 100644 --- a/data/items/pitchfork.tres +++ b/data/items/pitchfork.tres @@ -1,13 +1,23 @@ -[gd_resource type="Resource" script_class="Weapon" load_steps=3 format=3 uid="uid://8k1lnfoi4xww"] +[gd_resource type="Resource" script_class="Weapon" load_steps=5 format=3 uid="uid://8k1lnfoi4xww"] [ext_resource type="Texture2D" uid="uid://clrvwaqb61lpv" path="res://graphics/items/pitchfork.png" id="1_fpnr6"] [ext_resource type="Script" uid="uid://bgn8ipx38g28o" path="res://data/items/weapon.gd" id="1_qoils"] +[ext_resource type="Script" uid="uid://727tgvtmq4nb" path="res://data/statblock.gd" id="3_hkspc"] + +[sub_resource type="Resource" id="Resource_hkspc"] +script = ExtResource("3_hkspc") +STR = 3 +DEX = -3 +CHA = 2 +PATK = 1 +metadata/_custom_type_script = "uid://727tgvtmq4nb" [resource] script = ExtResource("1_qoils") min_damage = 1 max_damage = 2 type = 2 +stats = SubResource("Resource_hkspc") image = ExtResource("1_fpnr6") brief = "A humble weapon for a humble beginning." metadata/_custom_type_script = "uid://bgn8ipx38g28o" diff --git a/data/items/weapon.gd b/data/items/weapon.gd index a88a88e..3be991e 100644 --- a/data/items/weapon.gd +++ b/data/items/weapon.gd @@ -1,6 +1,6 @@ class_name Weapon extends Equipment -enum Type{ +enum Types{ FIST, SWORD, SPEAR, @@ -12,21 +12,24 @@ enum Type{ } @export var min_damage : int @export var max_damage : int -@export var type : Type +@export var type : Types func item_type_name() -> String: return "Weapon (%s)" % weapon_type_name() +func can_equip_slot(slot : Slots) -> bool: + return slot == Slots.WEAPON + func primary_stat() -> String: return "Deals %d-%d base damage." % [min_damage, max_damage] func weapon_type_name() -> String: match(type): - Type.FIST: return "Fist" - Type.SWORD: return "Sword" - Type.SPEAR: return "Spear" - Type.STAFF: return "" - Type.DAGGER: return "" - Type.HAMMER: return "" - Type.WHIP: return "" + Types.FIST: return "Fist" + Types.SWORD: return "Sword" + Types.SPEAR: return "Spear" + Types.STAFF: return "Staff" + Types.DAGGER: return "Dagger" + Types.HAMMER: return "Hammer" + Types.WHIP: return "Whip" return "Unknown" diff --git a/data/jobs/farmer.tres b/data/jobs/farmer.tres index b18980f..c828355 100644 --- a/data/jobs/farmer.tres +++ b/data/jobs/farmer.tres @@ -1,5 +1,6 @@ -[gd_resource type="Resource" script_class="JobData" load_steps=2 format=3 uid="uid://db4xces0v3het"] +[gd_resource type="Resource" script_class="JobData" load_steps=3 format=3 uid="uid://db4xces0v3het"] +[ext_resource type="PackedScene" uid="uid://doxmdg4dpnjp1" path="res://graphics/portraits/farmer.tscn" id="1_0iatm"] [ext_resource type="Script" uid="uid://byr5ai03cpa5s" path="res://data/jobs/job_data.gd" id="1_clwor"] [resource] @@ -12,4 +13,6 @@ max_INT = 3 max_CHA = 2 max_FAI = 2 max_LUK = 2 +portrait = ExtResource("1_0iatm") +equippable_weapons = ["Spear", "Fist", "Hammer"] metadata/_custom_type_script = "uid://byr5ai03cpa5s" diff --git a/data/jobs/guildleader.tres b/data/jobs/guildleader.tres new file mode 100644 index 0000000..5f42d28 --- /dev/null +++ b/data/jobs/guildleader.tres @@ -0,0 +1,21 @@ +[gd_resource type="Resource" script_class="JobData" load_steps=2 format=3 uid="uid://bcbnt88ss6loi"] + +[ext_resource type="Script" uid="uid://byr5ai03cpa5s" path="res://data/jobs/job_data.gd" id="1_2ar68"] + +[resource] +script = ExtResource("1_2ar68") +name = "Guildleader" +type = 1 +min_STR = null +max_STR = null +min_DEX = null +max_DEX = null +min_INT = null +max_INT = null +min_CHA = null +max_CHA = null +min_FAI = null +max_FAI = null +min_LUK = null +max_LUK = null +metadata/_custom_type_script = "uid://byr5ai03cpa5s" diff --git a/data/jobs/job_data.gd b/data/jobs/job_data.gd index 910c9ab..14ec9bb 100644 --- a/data/jobs/job_data.gd +++ b/data/jobs/job_data.gd @@ -26,7 +26,11 @@ var test @export var portrait : PackedScene +@export var equippable_weapons : Array[String] = [] #TODO: Implement a more interesting tnl for different jobs func get_tnl(lvl : int) -> int: return lvl * 10 + +func can_equip(item): + return true diff --git a/scripts/quest.gd b/data/quests/quest.gd similarity index 94% rename from scripts/quest.gd rename to data/quests/quest.gd index 7345692..49f65a4 100644 --- a/scripts/quest.gd +++ b/data/quests/quest.gd @@ -1,4 +1,5 @@ -class_name Quest extends Object +class_name Quest extends Resource + @@ -11,6 +12,10 @@ enum Status{ CLOSED } +enum Locations{ + NESTORS_WOODS +} + class Event: var enemy_types: Dictionary[String, PackedScene] = { "goo": preload("res://templates/enemies/goo.tscn") @@ -73,7 +78,9 @@ class Event: c[0].busy.connect(_on_busy.bind(c[0])) c[0].action_complete.connect(_on_combat_action_complete.bind(c[0])) c[0].died.connect(_on_death.bind(c[0])) - var time = delay * dex_speed / c[1] + var time = delay * dex_speed + if c[1] != 0: + time = delay * dex_speed / c[1] turn_queue.append({"combatant":c[0], "time": time - last_time}) last_time = time @@ -124,7 +131,7 @@ class Event: for p : QuestorSprite in participants: p.check_levelup() #TODO: Notify player if level up occurs - time = 10 + time = 5 func defeat(): print("Questor lost!") @@ -193,9 +200,11 @@ class Event: var name : String = "A Basic Quest" var desc : String = "The default quest, with no special anything." var difficulty : int = 1 -var location : String +var location : Locations var steps : int = 1 var rewards : Dictionary +var guild_rewards : Dictionary +var covenant_cost : int = 1 var length : float = 10 var events : Array[Event] = [] @@ -245,7 +254,10 @@ func is_eligible(member : Adventurer) -> bool: func is_taken() -> bool: return status == Status.TAKEN - +func location_name() -> String: + match(location): + Locations.NESTORS_WOODS: return "Nestor's Woods" + return "ERROR" func difficulty_name() -> String: match(difficulty): diff --git a/scripts/quest.gd.uid b/data/quests/quest.gd.uid similarity index 100% rename from scripts/quest.gd.uid rename to data/quests/quest.gd.uid diff --git a/data/quests/sticky_situation.gd b/data/quests/sticky_situation.gd new file mode 100644 index 0000000..93aee95 --- /dev/null +++ b/data/quests/sticky_situation.gd @@ -0,0 +1,18 @@ +extends Quest + +func _init() -> void: + 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 num_events = event_weights.pick_random() + for i in range(num_events): + var evt : Quest.Event = Quest.Event.new() + evt.type = Quest.Event.Type.COMBAT + evt.enemies = ["goo"] + evt.time = 5 + events.append(evt) + 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 = + rewards = {"exp":10, "gold":5} + guild_rewards = {"glory":10, "gold":5} + covenant_cost = 5 + diff --git a/data/quests/sticky_situation.gd.uid b/data/quests/sticky_situation.gd.uid new file mode 100644 index 0000000..e5a4fff --- /dev/null +++ b/data/quests/sticky_situation.gd.uid @@ -0,0 +1 @@ +uid://bvm35omddo1fu diff --git a/data/statblock.gd b/data/statblock.gd index 60d101d..9d46dec 100644 --- a/data/statblock.gd +++ b/data/statblock.gd @@ -1,13 +1,42 @@ class_name StatBlock extends Resource -@export var STR : int = 1 -@export var DEX : int = 1 -@export var INT : int = 1 -@export var CHA : int = 1 -@export var FAI : int = 1 -@export var LUK : int = 1 +@export var STR : int = 0 +@export var DEX : int = 0 +@export var INT : int = 0 +@export var CHA : int = 0 +@export var FAI : int = 0 +@export var LUK : int = 0 +@export var PATK : int = 0 +@export var PDEF : int = 0 +@export var MATK : int = 0 +@export var MDEF : int = 0 +func _init(start : int = 0) -> void: + STR = start + DEX = start + INT = start + CHA = start + FAI = start + LUK = start + PATK = start + PDEF = start + MATK = start + MDEF = start +func _to_string() -> String: + var string = "%s {" % [resource_scene_unique_id] + string += str(STR) + ", " + string += str(DEX) + ", " + string += str(INT) + ", " + string += str(CHA) + ", " + string += str(FAI) + ", " + string += str(LUK) + ", " + string += str(PATK) + ", " + string += str(PDEF) + ", " + string += str(MATK) + ", " + string += str(MDEF) + "}" + return string + static func copy(block : StatBlock) -> StatBlock: var b = StatBlock.new() b.STR = block.STR @@ -16,4 +45,8 @@ static func copy(block : StatBlock) -> StatBlock: b.CHA = block.CHA b.FAI = block.FAI b.LUK = block.LUK + b.PATK = block.PATK + b.PDEF = block.PDEF + b.MATK = block.MATK + b.MDEF = block.MDEF return b diff --git a/external/Test Portrait/Farmer_F/body.png.import b/external/Test Portrait/Farmer_F/body.png.import index b385871..8e18bae 100644 --- a/external/Test Portrait/Farmer_F/body.png.import +++ b/external/Test Portrait/Farmer_F/body.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://crrd8mpcuync2" -path="res://.godot/imported/body.png-5a897720f599ec630383f1f3dd8e9e9e.ctex" +path="res://.godot/imported/body.png-efd5e53b6f03adc4a57de5ce8dc4d3cd.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://external/Test Portrait/Farmer_F/body.png" -dest_files=["res://.godot/imported/body.png-5a897720f599ec630383f1f3dd8e9e9e.ctex"] +source_file="res://external/test portrait/farmer_f/body.png" +dest_files=["res://.godot/imported/body.png-efd5e53b6f03adc4a57de5ce8dc4d3cd.ctex"] [params] diff --git a/external/Test Portrait/Farmer_F/brow_shadow-1.png.import b/external/Test Portrait/Farmer_F/brow_shadow-1.png.import index 04efe38..b6487ec 100644 --- a/external/Test Portrait/Farmer_F/brow_shadow-1.png.import +++ b/external/Test Portrait/Farmer_F/brow_shadow-1.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://pp5ssn5m2n3i" -path="res://.godot/imported/brow_shadow-1.png-94d923d93f9bc0db18f7b963da1021dd.ctex" +path="res://.godot/imported/brow_shadow-1.png-8dff8c187d59ecaaefbb84e877b32e20.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://external/Test Portrait/Farmer_F/brow_shadow-1.png" -dest_files=["res://.godot/imported/brow_shadow-1.png-94d923d93f9bc0db18f7b963da1021dd.ctex"] +source_file="res://external/test portrait/farmer_f/brow_shadow-1.png" +dest_files=["res://.godot/imported/brow_shadow-1.png-8dff8c187d59ecaaefbb84e877b32e20.ctex"] [params] diff --git a/external/Test Portrait/Farmer_F/brow_shadow-2.png.import b/external/Test Portrait/Farmer_F/brow_shadow-2.png.import index a89758a..6f63278 100644 --- a/external/Test Portrait/Farmer_F/brow_shadow-2.png.import +++ b/external/Test Portrait/Farmer_F/brow_shadow-2.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://x4e86o28672u" -path="res://.godot/imported/brow_shadow-2.png-85a8d07465b9b109e67ad99a37d690d1.ctex" +path="res://.godot/imported/brow_shadow-2.png-b5d8d416acf1ddb95fd785200da8d3ce.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://external/Test Portrait/Farmer_F/brow_shadow-2.png" -dest_files=["res://.godot/imported/brow_shadow-2.png-85a8d07465b9b109e67ad99a37d690d1.ctex"] +source_file="res://external/test portrait/farmer_f/brow_shadow-2.png" +dest_files=["res://.godot/imported/brow_shadow-2.png-b5d8d416acf1ddb95fd785200da8d3ce.ctex"] [params] diff --git a/external/Test Portrait/Farmer_F/brow_shadow.png.import b/external/Test Portrait/Farmer_F/brow_shadow.png.import index 3183cba..e584536 100644 --- a/external/Test Portrait/Farmer_F/brow_shadow.png.import +++ b/external/Test Portrait/Farmer_F/brow_shadow.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://sv7bxo8a12i6" -path="res://.godot/imported/brow_shadow.png-e4497bbbff21d0b56dc81b07de4f06bc.ctex" +path="res://.godot/imported/brow_shadow.png-f653be07b461bc5d7a18192996ffb73a.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://external/Test Portrait/Farmer_F/brow_shadow.png" -dest_files=["res://.godot/imported/brow_shadow.png-e4497bbbff21d0b56dc81b07de4f06bc.ctex"] +source_file="res://external/test portrait/farmer_f/brow_shadow.png" +dest_files=["res://.godot/imported/brow_shadow.png-f653be07b461bc5d7a18192996ffb73a.ctex"] [params] diff --git a/external/Test Portrait/Farmer_F/brows-1.png.import b/external/Test Portrait/Farmer_F/brows-1.png.import index 9fdac8e..c3e6ee8 100644 --- a/external/Test Portrait/Farmer_F/brows-1.png.import +++ b/external/Test Portrait/Farmer_F/brows-1.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://tpg08bgn2on7" -path="res://.godot/imported/brows-1.png-70092c4bb56529f3cdeb7b51925eb071.ctex" +path="res://.godot/imported/brows-1.png-86a51529282fffa26d497e35e4cc9367.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://external/Test Portrait/Farmer_F/brows-1.png" -dest_files=["res://.godot/imported/brows-1.png-70092c4bb56529f3cdeb7b51925eb071.ctex"] +source_file="res://external/test portrait/farmer_f/brows-1.png" +dest_files=["res://.godot/imported/brows-1.png-86a51529282fffa26d497e35e4cc9367.ctex"] [params] diff --git a/external/Test Portrait/Farmer_F/brows-2.png.import b/external/Test Portrait/Farmer_F/brows-2.png.import index bf44252..b6faa7b 100644 --- a/external/Test Portrait/Farmer_F/brows-2.png.import +++ b/external/Test Portrait/Farmer_F/brows-2.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://brmta1rtiau4a" -path="res://.godot/imported/brows-2.png-227c9708d0b7fde57b1ef42021508fcf.ctex" +path="res://.godot/imported/brows-2.png-01beea1c4e9cadf04c529dc849682c8a.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://external/Test Portrait/Farmer_F/brows-2.png" -dest_files=["res://.godot/imported/brows-2.png-227c9708d0b7fde57b1ef42021508fcf.ctex"] +source_file="res://external/test portrait/farmer_f/brows-2.png" +dest_files=["res://.godot/imported/brows-2.png-01beea1c4e9cadf04c529dc849682c8a.ctex"] [params] diff --git a/external/Test Portrait/Farmer_F/composite.png.import b/external/Test Portrait/Farmer_F/composite.png.import index f32ac68..e799e0f 100644 --- a/external/Test Portrait/Farmer_F/composite.png.import +++ b/external/Test Portrait/Farmer_F/composite.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://c3wwe6r000gpq" -path="res://.godot/imported/composite.png-b2c2e474fe243b72bd3471af031774d6.ctex" +path="res://.godot/imported/composite.png-a68e5c4a777094ce447b89a2ab45b35b.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://external/Test Portrait/Farmer_F/composite.png" -dest_files=["res://.godot/imported/composite.png-b2c2e474fe243b72bd3471af031774d6.ctex"] +source_file="res://external/test portrait/farmer_f/composite.png" +dest_files=["res://.godot/imported/composite.png-a68e5c4a777094ce447b89a2ab45b35b.ctex"] [params] diff --git a/external/Test Portrait/Farmer_F/ear.png.import b/external/Test Portrait/Farmer_F/ear.png.import index c287ccf..e495de0 100644 --- a/external/Test Portrait/Farmer_F/ear.png.import +++ b/external/Test Portrait/Farmer_F/ear.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://caow8dqiog7j4" -path="res://.godot/imported/ear.png-a1b457892f7236464123f2229af36695.ctex" +path="res://.godot/imported/ear.png-74df11e092bb05fcc54c7e7478ed4d95.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://external/Test Portrait/Farmer_F/ear.png" -dest_files=["res://.godot/imported/ear.png-a1b457892f7236464123f2229af36695.ctex"] +source_file="res://external/test portrait/farmer_f/ear.png" +dest_files=["res://.godot/imported/ear.png-74df11e092bb05fcc54c7e7478ed4d95.ctex"] [params] diff --git a/external/Test Portrait/Farmer_F/eye-white-1.png.import b/external/Test Portrait/Farmer_F/eye-white-1.png.import index cc08b8e..74019a2 100644 --- a/external/Test Portrait/Farmer_F/eye-white-1.png.import +++ b/external/Test Portrait/Farmer_F/eye-white-1.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://csp7xbtu0tpn7" -path="res://.godot/imported/eye-white-1.png-fb75b817d294c00ebeee3e6996a2c02e.ctex" +path="res://.godot/imported/eye-white-1.png-a31a2b044ab6206c129b0739fd4c0c80.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://external/Test Portrait/Farmer_F/eye-white-1.png" -dest_files=["res://.godot/imported/eye-white-1.png-fb75b817d294c00ebeee3e6996a2c02e.ctex"] +source_file="res://external/test portrait/farmer_f/eye-white-1.png" +dest_files=["res://.godot/imported/eye-white-1.png-a31a2b044ab6206c129b0739fd4c0c80.ctex"] [params] diff --git a/external/Test Portrait/Farmer_F/eyes-iris-1.png.import b/external/Test Portrait/Farmer_F/eyes-iris-1.png.import index 1901ca1..e279de5 100644 --- a/external/Test Portrait/Farmer_F/eyes-iris-1.png.import +++ b/external/Test Portrait/Farmer_F/eyes-iris-1.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://mygmunn3voie" -path="res://.godot/imported/eyes-iris-1.png-3c96067ab402ea99f8e1b1b7db594f4c.ctex" +path="res://.godot/imported/eyes-iris-1.png-d2077e2e658acf3840075cfe98f86f4e.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://external/Test Portrait/Farmer_F/eyes-iris-1.png" -dest_files=["res://.godot/imported/eyes-iris-1.png-3c96067ab402ea99f8e1b1b7db594f4c.ctex"] +source_file="res://external/test portrait/farmer_f/eyes-iris-1.png" +dest_files=["res://.godot/imported/eyes-iris-1.png-d2077e2e658acf3840075cfe98f86f4e.ctex"] [params] diff --git a/external/Test Portrait/Farmer_F/eyes-lashes-1.png.import b/external/Test Portrait/Farmer_F/eyes-lashes-1.png.import index 6121c9e..fa0ee94 100644 --- a/external/Test Portrait/Farmer_F/eyes-lashes-1.png.import +++ b/external/Test Portrait/Farmer_F/eyes-lashes-1.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://wnkr20dtf734" -path="res://.godot/imported/eyes-lashes-1.png-8a4535f7647af11ff99b165ee021e8cc.ctex" +path="res://.godot/imported/eyes-lashes-1.png-1460ddc60d7a087da2d517ce8f1a5faa.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://external/Test Portrait/Farmer_F/eyes-lashes-1.png" -dest_files=["res://.godot/imported/eyes-lashes-1.png-8a4535f7647af11ff99b165ee021e8cc.ctex"] +source_file="res://external/test portrait/farmer_f/eyes-lashes-1.png" +dest_files=["res://.godot/imported/eyes-lashes-1.png-1460ddc60d7a087da2d517ce8f1a5faa.ctex"] [params] diff --git a/external/Test Portrait/Farmer_F/eyes.png.import b/external/Test Portrait/Farmer_F/eyes.png.import index 12b4ae4..0977200 100644 --- a/external/Test Portrait/Farmer_F/eyes.png.import +++ b/external/Test Portrait/Farmer_F/eyes.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://dd063tm4qo5nc" -path="res://.godot/imported/eyes.png-1384a95ac331738bfe48af30a8953f10.ctex" +path="res://.godot/imported/eyes.png-da6eb5fdf7f113844fe8e5414a1f2331.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://external/Test Portrait/Farmer_F/eyes.png" -dest_files=["res://.godot/imported/eyes.png-1384a95ac331738bfe48af30a8953f10.ctex"] +source_file="res://external/test portrait/farmer_f/eyes.png" +dest_files=["res://.godot/imported/eyes.png-da6eb5fdf7f113844fe8e5414a1f2331.ctex"] [params] diff --git a/external/Test Portrait/Farmer_F/eyes_shadow.png.import b/external/Test Portrait/Farmer_F/eyes_shadow.png.import index 1f02358..ac345e4 100644 --- a/external/Test Portrait/Farmer_F/eyes_shadow.png.import +++ b/external/Test Portrait/Farmer_F/eyes_shadow.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://li44lgsa0ky" -path="res://.godot/imported/eyes_shadow.png-639516c9b7d6a71a22fcd4597236a89e.ctex" +path="res://.godot/imported/eyes_shadow.png-c0450e5470a67b3e212b544dfeadc885.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://external/Test Portrait/Farmer_F/eyes_shadow.png" -dest_files=["res://.godot/imported/eyes_shadow.png-639516c9b7d6a71a22fcd4597236a89e.ctex"] +source_file="res://external/test portrait/farmer_f/eyes_shadow.png" +dest_files=["res://.godot/imported/eyes_shadow.png-c0450e5470a67b3e212b544dfeadc885.ctex"] [params] diff --git a/external/Test Portrait/Farmer_F/hair_bg.png.import b/external/Test Portrait/Farmer_F/hair_bg.png.import index 0810aed..d83bb4b 100644 --- a/external/Test Portrait/Farmer_F/hair_bg.png.import +++ b/external/Test Portrait/Farmer_F/hair_bg.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://can8npg0ufr3f" -path="res://.godot/imported/hair_bg.png-07f942d8008a0d2581909922002bbbe2.ctex" +path="res://.godot/imported/hair_bg.png-71bd584ff51ea6c704ba2eb2b8124703.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://external/Test Portrait/Farmer_F/hair_bg.png" -dest_files=["res://.godot/imported/hair_bg.png-07f942d8008a0d2581909922002bbbe2.ctex"] +source_file="res://external/test portrait/farmer_f/hair_bg.png" +dest_files=["res://.godot/imported/hair_bg.png-71bd584ff51ea6c704ba2eb2b8124703.ctex"] [params] diff --git a/external/Test Portrait/Farmer_F/hair_fg.png.import b/external/Test Portrait/Farmer_F/hair_fg.png.import index 60f342e..5170c99 100644 --- a/external/Test Portrait/Farmer_F/hair_fg.png.import +++ b/external/Test Portrait/Farmer_F/hair_fg.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://vt17lekvchdg" -path="res://.godot/imported/hair_fg.png-9f5c6bb27fb0349d9ddfba99f87aa5c6.ctex" +path="res://.godot/imported/hair_fg.png-9dfae38fbf9812dad9b45d15a1cbd791.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://external/Test Portrait/Farmer_F/hair_fg.png" -dest_files=["res://.godot/imported/hair_fg.png-9f5c6bb27fb0349d9ddfba99f87aa5c6.ctex"] +source_file="res://external/test portrait/farmer_f/hair_fg.png" +dest_files=["res://.godot/imported/hair_fg.png-9dfae38fbf9812dad9b45d15a1cbd791.ctex"] [params] diff --git a/external/Test Portrait/Farmer_F/hair_fg_shadow.png.import b/external/Test Portrait/Farmer_F/hair_fg_shadow.png.import index 13e85b8..7dbf97c 100644 --- a/external/Test Portrait/Farmer_F/hair_fg_shadow.png.import +++ b/external/Test Portrait/Farmer_F/hair_fg_shadow.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://cru775pghpate" -path="res://.godot/imported/hair_fg_shadow.png-41de10e26ae2147aace92ba197b28075.ctex" +path="res://.godot/imported/hair_fg_shadow.png-609d7f961008e48f548f0e05277dafb4.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://external/Test Portrait/Farmer_F/hair_fg_shadow.png" -dest_files=["res://.godot/imported/hair_fg_shadow.png-41de10e26ae2147aace92ba197b28075.ctex"] +source_file="res://external/test portrait/farmer_f/hair_fg_shadow.png" +dest_files=["res://.godot/imported/hair_fg_shadow.png-609d7f961008e48f548f0e05277dafb4.ctex"] [params] diff --git a/external/Test Portrait/Farmer_F/hat-bg.png.import b/external/Test Portrait/Farmer_F/hat-bg.png.import index 41b5407..107e0a5 100644 --- a/external/Test Portrait/Farmer_F/hat-bg.png.import +++ b/external/Test Portrait/Farmer_F/hat-bg.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://dj6fagfp2sbrx" -path="res://.godot/imported/hat-bg.png-00e20fcd79ddb550d12459624be7d9b1.ctex" +path="res://.godot/imported/hat-bg.png-972a86d8449c11d1a72a4f21b15efd0a.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://external/Test Portrait/Farmer_F/hat-bg.png" -dest_files=["res://.godot/imported/hat-bg.png-00e20fcd79ddb550d12459624be7d9b1.ctex"] +source_file="res://external/test portrait/farmer_f/hat-bg.png" +dest_files=["res://.godot/imported/hat-bg.png-972a86d8449c11d1a72a4f21b15efd0a.ctex"] [params] diff --git a/external/Test Portrait/Farmer_F/hat.png.import b/external/Test Portrait/Farmer_F/hat.png.import index ad9b8b0..db6f143 100644 --- a/external/Test Portrait/Farmer_F/hat.png.import +++ b/external/Test Portrait/Farmer_F/hat.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://b303qa76o5r1m" -path="res://.godot/imported/hat.png-9bb6fa9d1f7f7503ee26b1749cdf7c0a.ctex" +path="res://.godot/imported/hat.png-21e48868d0218210b390afa680a1202d.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://external/Test Portrait/Farmer_F/hat.png" -dest_files=["res://.godot/imported/hat.png-9bb6fa9d1f7f7503ee26b1749cdf7c0a.ctex"] +source_file="res://external/test portrait/farmer_f/hat.png" +dest_files=["res://.godot/imported/hat.png-21e48868d0218210b390afa680a1202d.ctex"] [params] diff --git a/external/Test Portrait/Farmer_F/hat_fg.png.import b/external/Test Portrait/Farmer_F/hat_fg.png.import index c8bdc32..b24f1f6 100644 --- a/external/Test Portrait/Farmer_F/hat_fg.png.import +++ b/external/Test Portrait/Farmer_F/hat_fg.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://dyeu4kwwnxjn5" -path="res://.godot/imported/hat_fg.png-e2cae14f649780ea2aba38b34358b587.ctex" +path="res://.godot/imported/hat_fg.png-2dddd61ae84da22b32d123d3533338c5.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://external/Test Portrait/Farmer_F/hat_fg.png" -dest_files=["res://.godot/imported/hat_fg.png-e2cae14f649780ea2aba38b34358b587.ctex"] +source_file="res://external/test portrait/farmer_f/hat_fg.png" +dest_files=["res://.godot/imported/hat_fg.png-2dddd61ae84da22b32d123d3533338c5.ctex"] [params] diff --git a/external/Test Portrait/Farmer_F/head.png.import b/external/Test Portrait/Farmer_F/head.png.import index df71f44..3d2f1a0 100644 --- a/external/Test Portrait/Farmer_F/head.png.import +++ b/external/Test Portrait/Farmer_F/head.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://dbdjaye6srxhx" -path="res://.godot/imported/head.png-df46fa0b8e2741bbf0fad9b3a03fedea.ctex" +path="res://.godot/imported/head.png-47039f8abc285b87bb176b5b43ee9a5f.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://external/Test Portrait/Farmer_F/head.png" -dest_files=["res://.godot/imported/head.png-df46fa0b8e2741bbf0fad9b3a03fedea.ctex"] +source_file="res://external/test portrait/farmer_f/head.png" +dest_files=["res://.godot/imported/head.png-47039f8abc285b87bb176b5b43ee9a5f.ctex"] [params] diff --git a/external/Test Portrait/Farmer_F/portrait.clip b/external/Test Portrait/Farmer_F/portrait.clip index 24418ee..a798f6b 100644 Binary files a/external/Test Portrait/Farmer_F/portrait.clip and b/external/Test Portrait/Farmer_F/portrait.clip differ diff --git a/external/Test Portrait/blue-eyes.tres b/external/Test Portrait/blue-eyes.tres deleted file mode 100644 index 5d3faf0..0000000 --- a/external/Test Portrait/blue-eyes.tres +++ /dev/null @@ -1,5 +0,0 @@ -[gd_resource type="Gradient" format=3 uid="uid://bdpm22bjpfwpa"] - -[resource] -offsets = PackedFloat32Array(0, 0.25695932, 0.54817986, 0.69164884, 1) -colors = PackedColorArray(0, 0, 0, 1, 0.0012908186, 0.102164544, 0.49609822, 1, 0.07499155, 0.16444942, 0.46347773, 1, 0.2880286, 0.45501614, 0.9395664, 1, 0.06879827, 0.06879828, 0.06879828, 1) diff --git a/external/Test Portrait/blue_hair.tres b/external/Test Portrait/blue_hair.tres deleted file mode 100644 index 46a5f83..0000000 --- a/external/Test Portrait/blue_hair.tres +++ /dev/null @@ -1,8 +0,0 @@ -[gd_resource type="GradientTexture1D" load_steps=2 format=3 uid="uid://c8cvo15p3vosu"] - -[sub_resource type="Gradient" id="Gradient_svc3h"] -offsets = PackedFloat32Array(0, 0.25695932, 0.54817986, 0.69164884, 1) -colors = PackedColorArray(0, 0, 0, 1, 0.0012908186, 0.102164544, 0.49609822, 1, 0.07499155, 0.16444942, 0.46347773, 1, 0.2880286, 0.45501614, 0.9395664, 1, 0.06879827, 0.06879828, 0.06879828, 1) - -[resource] -gradient = SubResource("Gradient_svc3h") diff --git a/external/Test Portrait/fair-eyes.tres b/external/Test Portrait/fair-eyes.tres deleted file mode 100644 index a3a55e8..0000000 --- a/external/Test Portrait/fair-eyes.tres +++ /dev/null @@ -1,8 +0,0 @@ -[gd_resource type="GradientTexture1D" load_steps=2 format=3 uid="uid://bkdvsld7ytk2"] - -[sub_resource type="Gradient" id="Gradient_s3ye8"] -offsets = PackedFloat32Array(0, 0.6465324, 1) -colors = PackedColorArray(0, 0, 0, 1, 0.9485459, 0.9485459, 0.9485459, 1, 1, 1, 1, 1) - -[resource] -gradient = SubResource("Gradient_s3ye8") diff --git a/external/Test Portrait/gradients/blue_hair.tres b/external/Test Portrait/gradients/blue_hair.tres new file mode 100644 index 0000000..4868ca9 --- /dev/null +++ b/external/Test Portrait/gradients/blue_hair.tres @@ -0,0 +1,6 @@ +[gd_resource type="GradientTexture1D" load_steps=2 format=3 uid="uid://c8cvo15p3vosu"] + +[ext_resource type="Gradient" uid="uid://bdpm22bjpfwpa" path="res://external/test portrait/gradients/blue-eyes.tres" id="1_nl7cv"] + +[resource] +gradient = ExtResource("1_nl7cv") diff --git a/external/Test Portrait/brown-skin.tres b/external/Test Portrait/gradients/brown-skin.tres similarity index 100% rename from external/Test Portrait/brown-skin.tres rename to external/Test Portrait/gradients/brown-skin.tres diff --git a/external/Test Portrait/dark-hair.tres b/external/Test Portrait/gradients/dark-hair.tres similarity index 59% rename from external/Test Portrait/dark-hair.tres rename to external/Test Portrait/gradients/dark-hair.tres index a7b3d87..873d4dc 100644 --- a/external/Test Portrait/dark-hair.tres +++ b/external/Test Portrait/gradients/dark-hair.tres @@ -1,8 +1,7 @@ [gd_resource type="GradientTexture1D" load_steps=2 format=3 uid="uid://s2ok31sncevx"] [sub_resource type="Gradient" id="Gradient_s3ye8"] -offsets = PackedFloat32Array(0, 0.6465324, 1) -colors = PackedColorArray(0, 0, 0, 1, 0.9485459, 0.9485459, 0.9485459, 1, 1, 1, 1, 1) +offsets = PackedFloat32Array(0, 0.99776286) [resource] gradient = SubResource("Gradient_s3ye8") diff --git a/external/Test Portrait/dark-skin.tres b/external/Test Portrait/gradients/dark-skin.tres similarity index 100% rename from external/Test Portrait/dark-skin.tres rename to external/Test Portrait/gradients/dark-skin.tres diff --git a/external/Test Portrait/gradients/eyes/(c)blue.tres b/external/Test Portrait/gradients/eyes/(c)blue.tres new file mode 100644 index 0000000..bdd2f6f --- /dev/null +++ b/external/Test Portrait/gradients/eyes/(c)blue.tres @@ -0,0 +1,8 @@ +[gd_resource type="GradientTexture1D" load_steps=2 format=3 uid="uid://cq64vxl2sjtyx"] + +[sub_resource type="Gradient" id="Gradient_465hm"] +offsets = PackedFloat32Array(0, 0.12751675, 0.23489934, 0.47951806, 0.62650603, 0.76626503, 1) +colors = PackedColorArray(0, 0, 0, 1, 0.26620007, 0.07699999, 0.55, 1, 0.13999999, 0.4553334, 1, 1, 0.3168, 0.99, 0.99, 1, 0.4603812, 0.62107074, 0.983972, 1, 0.81, 1, 1, 1, 0, 0, 0, 1) + +[resource] +gradient = SubResource("Gradient_465hm") diff --git a/external/Test Portrait/gradients/eyes/(c)green.tres b/external/Test Portrait/gradients/eyes/(c)green.tres new file mode 100644 index 0000000..724795f --- /dev/null +++ b/external/Test Portrait/gradients/eyes/(c)green.tres @@ -0,0 +1,8 @@ +[gd_resource type="GradientTexture1D" load_steps=2 format=3 uid="uid://c5pwq6q4r3fjs"] + +[sub_resource type="Gradient" id="Gradient_0cjbu"] +offsets = PackedFloat32Array(0, 0.20722891, 0.2987952, 0.53493977, 0.6578313) +colors = PackedColorArray(0, 0, 0, 1, 0, 1, 0.116666794, 1, 0.6165441, 0.66801465, 0.006004907, 1, 0.65, 0.65, 0, 1, 0.839, 1, 0.79, 1) + +[resource] +gradient = SubResource("Gradient_0cjbu") diff --git a/external/Test Portrait/gradients/eyes/(l)default.tres b/external/Test Portrait/gradients/eyes/(l)default.tres new file mode 100644 index 0000000..4608641 --- /dev/null +++ b/external/Test Portrait/gradients/eyes/(l)default.tres @@ -0,0 +1,8 @@ +[gd_resource type="GradientTexture1D" load_steps=2 format=3 uid="uid://c2jnnqayrbyup"] + +[sub_resource type="Gradient" id="Gradient_fetdk"] +offsets = PackedFloat32Array(0, 0.18313253, 0.5373494, 0.73493975, 1) +colors = PackedColorArray(0, 0, 0, 1, 0.32992896, 0.32992896, 0.32992896, 1, 0.9485459, 0.9485459, 0.9485459, 1, 1, 1, 1, 1, 1, 1, 1, 1) + +[resource] +gradient = SubResource("Gradient_fetdk") diff --git a/external/Test Portrait/gradients/eyes/(l)fair.tres b/external/Test Portrait/gradients/eyes/(l)fair.tres new file mode 100644 index 0000000..0b78a0d --- /dev/null +++ b/external/Test Portrait/gradients/eyes/(l)fair.tres @@ -0,0 +1,8 @@ +[gd_resource type="GradientTexture1D" load_steps=2 format=3 uid="uid://24wfq2fftdnn"] + +[sub_resource type="Gradient" id="Gradient_s3ye8"] +offsets = PackedFloat32Array(0, 0.078299776, 0.21923937, 0.3512304, 0.62650603, 1) +colors = PackedColorArray(0, 0, 0, 1, 0.29931465, 0.23565266, 0.25879574, 1, 0.32992896, 0.32992896, 0.32992896, 1, 0.9485459, 0.9485459, 0.9485459, 1, 1, 1, 1, 1, 1, 1, 1, 1) + +[resource] +gradient = SubResource("Gradient_s3ye8") diff --git a/external/Test Portrait/gradients/fair-eyes.tres b/external/Test Portrait/gradients/fair-eyes.tres new file mode 100644 index 0000000..4291526 --- /dev/null +++ b/external/Test Portrait/gradients/fair-eyes.tres @@ -0,0 +1,8 @@ +[gd_resource type="GradientTexture1D" load_steps=2 format=3 uid="uid://bkdvsld7ytk2"] + +[sub_resource type="Gradient" id="Gradient_s3ye8"] +offsets = PackedFloat32Array(0, 0.078299776, 0.21923937, 0.3512304, 0.62650603, 1) +colors = PackedColorArray(0, 0, 0, 1, 0.29931465, 0.23565266, 0.25879574, 1, 0.32992896, 0.32992896, 0.32992896, 1, 0.9485459, 0.9485459, 0.9485459, 1, 1, 1, 1, 1, 1, 1, 1, 1) + +[resource] +gradient = SubResource("Gradient_s3ye8") diff --git a/external/Test Portrait/fair-skin.tres b/external/Test Portrait/gradients/fair-skin.tres similarity index 100% rename from external/Test Portrait/fair-skin.tres rename to external/Test Portrait/gradients/fair-skin.tres diff --git a/external/Test Portrait/gradients/hair/(c)black.tres b/external/Test Portrait/gradients/hair/(c)black.tres new file mode 100644 index 0000000..7f5bd41 --- /dev/null +++ b/external/Test Portrait/gradients/hair/(c)black.tres @@ -0,0 +1,5 @@ +[gd_resource type="Gradient" format=3 uid="uid://bl1crpxfmpm1x"] + +[resource] +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) diff --git a/external/Test Portrait/blonde.tres b/external/Test Portrait/gradients/hair/(c)blonde.tres similarity index 53% rename from external/Test Portrait/blonde.tres rename to external/Test Portrait/gradients/hair/(c)blonde.tres index eb21745..bd67261 100644 --- a/external/Test Portrait/blonde.tres +++ b/external/Test Portrait/gradients/hair/(c)blonde.tres @@ -1,8 +1,8 @@ [gd_resource type="GradientTexture1D" load_steps=2 format=3 uid="uid://cmi82onbn37hi"] [sub_resource type="Gradient" id="Gradient_s3ye8"] -offsets = PackedFloat32Array(0, 0.032119915, 0.4025696, 0.89721626, 1) -colors = PackedColorArray(0.5686275, 0.45490196, 0.17254902, 1, 0.69411767, 0.5647059, 0.11764706, 1, 0.9490196, 0.7882353, 0.22352941, 1, 1, 0.87058824, 0.1882353, 1, 1, 1, 1, 1) +offsets = PackedFloat32Array(0, 0.06487696, 0.27740493, 0.753915, 0.9239374, 1) +colors = PackedColorArray(0.5686275, 0.45490196, 0.17254902, 1, 0.69411767, 0.5647059, 0.11764706, 1, 0.95, 0.589, 0.228, 1, 0.9948097, 0.8413576, 0.19236313, 1, 0.9999996, 0.943655, 0.6828502, 1, 1, 1, 1, 1) [resource] gradient = SubResource("Gradient_s3ye8") diff --git a/external/Test Portrait/gradients/hair/(c)brown.tres b/external/Test Portrait/gradients/hair/(c)brown.tres new file mode 100644 index 0000000..abe5eb5 --- /dev/null +++ b/external/Test Portrait/gradients/hair/(c)brown.tres @@ -0,0 +1,8 @@ +[gd_resource type="GradientTexture1D" load_steps=2 format=3 uid="uid://cd4jsivokd6sk"] + +[sub_resource type="Gradient" id="Gradient_u7u0c"] +offsets = PackedFloat32Array(0, 0.49604222, 0.89973617, 1) +colors = PackedColorArray(0, 0, 0, 1, 0, 0, 0.68, 1, 0.86, 0.86, 1, 1, 0, 0, 1, 1) + +[resource] +gradient = SubResource("Gradient_u7u0c") diff --git a/external/Test Portrait/red-hair.tres b/external/Test Portrait/gradients/hair/(c)red.tres similarity index 57% rename from external/Test Portrait/red-hair.tres rename to external/Test Portrait/gradients/hair/(c)red.tres index 45428ae..685984b 100644 --- a/external/Test Portrait/red-hair.tres +++ b/external/Test Portrait/gradients/hair/(c)red.tres @@ -1,8 +1,8 @@ [gd_resource type="GradientTexture1D" load_steps=2 format=3 uid="uid://0dwdi7m62trg"] [sub_resource type="Gradient" id="Gradient_s3ye8"] -offsets = PackedFloat32Array(0, 0.032119915, 0.4025696, 0.89721626, 1) -colors = PackedColorArray(0.5686275, 0.45490196, 0.17254902, 1, 0.69411767, 0.5647059, 0.11764706, 1, 0.9490196, 0.7882353, 0.22352941, 1, 1, 0.87058824, 0.1882353, 1, 1, 1, 1, 1) +offsets = PackedFloat32Array(0, 0.19486082, 0.4261242, 0.8993576, 1) +colors = PackedColorArray(0.5686275, 0.45490196, 0.17254902, 1, 0, 0, 0, 1, 0.9490196, 0, 0.22352941, 1, 1, 0.4, 0.1882353, 1, 1, 1, 1, 1) [resource] gradient = SubResource("Gradient_s3ye8") diff --git a/external/Test Portrait/gradients/hair/(l)black.tres b/external/Test Portrait/gradients/hair/(l)black.tres new file mode 100644 index 0000000..5a1b82d --- /dev/null +++ b/external/Test Portrait/gradients/hair/(l)black.tres @@ -0,0 +1,8 @@ +[gd_resource type="GradientTexture1D" load_steps=2 format=3 uid="uid://7eaf7qn7h3w"] + +[sub_resource type="Gradient" id="Gradient_8rc2w"] +offsets = PackedFloat32Array(0.33509234, 0.8918206, 0.94459105, 0.9762533) +colors = PackedColorArray(0, 0, 0, 1, 0.23031479, 0.23031497, 0.23031488, 1, 0.5609549, 0.5609549, 0.5609549, 1, 1, 1, 1, 1) + +[resource] +gradient = SubResource("Gradient_8rc2w") diff --git a/external/Test Portrait/gradients/hair/(l)dark.tres b/external/Test Portrait/gradients/hair/(l)dark.tres new file mode 100644 index 0000000..e5ad056 --- /dev/null +++ b/external/Test Portrait/gradients/hair/(l)dark.tres @@ -0,0 +1,8 @@ +[gd_resource type="GradientTexture1D" load_steps=2 format=3 uid="uid://bfvn8f1oxqr7w"] + +[sub_resource type="Gradient" id="Gradient_8rc2w"] +offsets = PackedFloat32Array(0, 0.53825855, 0.88918203, 0.9630607) +colors = PackedColorArray(0, 0, 0, 1, 0.23031479, 0.23031497, 0.23031488, 1, 0.34407577, 0.34407574, 0.34407574, 1, 0.5609549, 0.5609549, 0.5609549, 1) + +[resource] +gradient = SubResource("Gradient_8rc2w") diff --git a/external/Test Portrait/fair-hair.tres b/external/Test Portrait/gradients/hair/(l)fair.tres similarity index 100% rename from external/Test Portrait/fair-hair.tres rename to external/Test Portrait/gradients/hair/(l)fair.tres diff --git a/external/Test Portrait/gradients/hair/(l)red.tres b/external/Test Portrait/gradients/hair/(l)red.tres new file mode 100644 index 0000000..3765952 --- /dev/null +++ b/external/Test Portrait/gradients/hair/(l)red.tres @@ -0,0 +1,8 @@ +[gd_resource type="GradientTexture1D" load_steps=2 format=3 uid="uid://bqmnbsxgbrcpw"] + +[sub_resource type="Gradient" id="Gradient_s3ye8"] +offsets = PackedFloat32Array(0, 0.6147757, 0.9182058, 1) +colors = PackedColorArray(0, 0, 0, 1, 0.59147835, 0.59147835, 0.59147835, 1, 0.86898494, 0.8689849, 0.8689849, 1, 1, 1, 1, 1) + +[resource] +gradient = SubResource("Gradient_s3ye8") diff --git a/external/Test Portrait/mid-skin.tres b/external/Test Portrait/gradients/mid-skin.tres similarity index 100% rename from external/Test Portrait/mid-skin.tres rename to external/Test Portrait/gradients/mid-skin.tres diff --git a/external/Test Portrait/test.gd b/external/Test Portrait/test.gd new file mode 100644 index 0000000..86bc4cd --- /dev/null +++ b/external/Test Portrait/test.gd @@ -0,0 +1,8 @@ +extends Control + + +func _ready() -> void: + $Portrait.set_color(ColorVariant.Types.EYES, "green") + $Portrait.set_color(ColorVariant.Types.SKIN, "dark") + $Portrait.set_color(ColorVariant.Types.HAIR, "blonde") + pass diff --git a/external/Test Portrait/test.gd.uid b/external/Test Portrait/test.gd.uid new file mode 100644 index 0000000..d32e034 --- /dev/null +++ b/external/Test Portrait/test.gd.uid @@ -0,0 +1 @@ +uid://cntcpe7ofdvyx diff --git a/external/Test Portrait/tri-eyes.tres b/external/Test Portrait/tri-eyes.tres index 451b7d8..2941ddd 100644 --- a/external/Test Portrait/tri-eyes.tres +++ b/external/Test Portrait/tri-eyes.tres @@ -1,10 +1,7 @@ -[gd_resource type="ShaderMaterial" load_steps=4 format=3 uid="uid://bjrc8g3mjxh45"] +[gd_resource type="ShaderMaterial" load_steps=2 format=3 uid="uid://bjrc8g3mjxh45"] [ext_resource type="Shader" uid="uid://dbcokq5fn2les" path="res://shaders/trigradient.tres" id="1_1vbiw"] -[ext_resource type="Texture2D" uid="uid://c8cvo15p3vosu" path="res://external/Test Portrait/blue_hair.tres" id="2_1vbiw"] -[ext_resource type="Texture2D" uid="uid://bkdvsld7ytk2" path="res://external/Test Portrait/fair-eyes.tres" id="3_s3g4c"] [resource] +resource_local_to_scene = true shader = ExtResource("1_1vbiw") -shader_parameter/Color_Gradient = ExtResource("2_1vbiw") -shader_parameter/Luminosity_Gradient = ExtResource("3_s3g4c") diff --git a/external/Test Portrait/tri-eyes2.tres b/external/Test Portrait/tri-eyes2.tres index a390b4a..fb8e3e2 100644 --- a/external/Test Portrait/tri-eyes2.tres +++ b/external/Test Portrait/tri-eyes2.tres @@ -1,10 +1,10 @@ [gd_resource type="ShaderMaterial" load_steps=4 format=3 uid="uid://btylsf0bv2b57"] [ext_resource type="Shader" uid="uid://dbcokq5fn2les" path="res://shaders/trigradient.tres" id="1_fetdk"] -[ext_resource type="Texture2D" uid="uid://c8cvo15p3vosu" path="res://external/Test Portrait/blue_hair.tres" id="2_n5pn1"] -[ext_resource type="Texture2D" uid="uid://bkdvsld7ytk2" path="res://external/Test Portrait/fair-eyes.tres" id="3_kr14x"] +[ext_resource type="Texture2D" uid="uid://c5pwq6q4r3fjs" path="res://external/test portrait/gradients/eyes/(c)green.tres" id="2_0xs1n"] +[ext_resource type="Texture2D" uid="uid://c2jnnqayrbyup" path="res://external/test portrait/gradients/eyes/(l)default.tres" id="3_k6wpl"] [resource] shader = ExtResource("1_fetdk") -shader_parameter/Color_Gradient = ExtResource("2_n5pn1") -shader_parameter/Luminosity_Gradient = ExtResource("3_kr14x") +shader_parameter/Color_Gradient = ExtResource("2_0xs1n") +shader_parameter/Luminosity_Gradient = ExtResource("3_k6wpl") diff --git a/external/Test Portrait/tri-hair.tres b/external/Test Portrait/tri-hair.tres index 93ada78..2cb8720 100644 --- a/external/Test Portrait/tri-hair.tres +++ b/external/Test Portrait/tri-hair.tres @@ -1,8 +1,8 @@ [gd_resource type="ShaderMaterial" load_steps=4 format=3 uid="uid://ca43sapn4p61w"] [ext_resource type="Shader" uid="uid://dbcokq5fn2les" path="res://shaders/trigradient.tres" id="1_sifog"] -[ext_resource type="Texture2D" uid="uid://0dwdi7m62trg" path="res://external/Test Portrait/red-hair.tres" id="2_2qy1r"] -[ext_resource type="Texture2D" uid="uid://s2ok31sncevx" path="res://external/Test Portrait/dark-hair.tres" id="3_5udns"] +[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] shader = ExtResource("1_sifog") diff --git a/external/Test Portrait/tri-hair2.tres b/external/Test Portrait/tri-hair2.tres index ba021e6..5d2ae44 100644 --- a/external/Test Portrait/tri-hair2.tres +++ b/external/Test Portrait/tri-hair2.tres @@ -1,10 +1,10 @@ [gd_resource type="ShaderMaterial" load_steps=4 format=3 uid="uid://b4uqjr4midqtn"] [ext_resource type="Shader" uid="uid://dbcokq5fn2les" path="res://shaders/trigradient.tres" id="1_vrnn4"] -[ext_resource type="Texture2D" uid="uid://0dwdi7m62trg" path="res://external/Test Portrait/red-hair.tres" id="2_3qnj1"] -[ext_resource type="Texture2D" uid="uid://s2ok31sncevx" path="res://external/Test Portrait/dark-hair.tres" id="3_5xyld"] +[ext_resource type="Texture2D" uid="uid://cmi82onbn37hi" path="res://external/test portrait/gradients/hair/(c)blonde.tres" id="2_vrnn4"] +[ext_resource type="Texture2D" uid="uid://s2ok31sncevx" path="res://external/test portrait/gradients/dark-hair.tres" id="3_5xyld"] [resource] shader = ExtResource("1_vrnn4") -shader_parameter/Color_Gradient = ExtResource("2_3qnj1") +shader_parameter/Color_Gradient = ExtResource("2_vrnn4") shader_parameter/Luminosity_Gradient = ExtResource("3_5xyld") diff --git a/external/Test Portrait/tri-skin.tres b/external/Test Portrait/tri-skin.tres index 7537de3..33082b6 100644 --- a/external/Test Portrait/tri-skin.tres +++ b/external/Test Portrait/tri-skin.tres @@ -1,16 +1,6 @@ -[gd_resource type="ShaderMaterial" load_steps=6 format=3 uid="uid://btx1o4kx78cbx"] +[gd_resource type="ShaderMaterial" load_steps=2 format=3 uid="uid://btx1o4kx78cbx"] -[ext_resource type="Shader" uid="uid://dbcokq5fn2les" path="res://shaders/trigradient.tres" id="1_5slik"] -[ext_resource type="Gradient" uid="uid://c14ufqed7o6fi" path="res://external/Test Portrait/brown-skin.tres" id="2_5slik"] -[ext_resource type="Gradient" uid="uid://doghspt7i0yml" path="res://external/Test Portrait/dark-skin.tres" id="3_s7k3v"] - -[sub_resource type="GradientTexture1D" id="GradientTexture1D_blxgd"] -gradient = ExtResource("2_5slik") - -[sub_resource type="GradientTexture1D" id="GradientTexture1D_qqpe0"] -gradient = ExtResource("3_s7k3v") +[ext_resource type="Shader" uid="uid://cru1otvka0qn5" path="res://external/test portrait/variant_color.gdshader" id="1_n3xwv"] [resource] -shader = ExtResource("1_5slik") -shader_parameter/Color_Gradient = SubResource("GradientTexture1D_blxgd") -shader_parameter/Luminosity_Gradient = SubResource("GradientTexture1D_qqpe0") +shader = ExtResource("1_n3xwv") diff --git a/external/Test Portrait/tri-skin2.tres b/external/Test Portrait/tri-skin2.tres index 2d4d2d6..3ebbb42 100644 --- a/external/Test Portrait/tri-skin2.tres +++ b/external/Test Portrait/tri-skin2.tres @@ -1,16 +1,16 @@ [gd_resource type="ShaderMaterial" load_steps=6 format=3 uid="uid://dd6afqqkowc1j"] [ext_resource type="Shader" uid="uid://dbcokq5fn2les" path="res://shaders/trigradient.tres" id="1_wsqbt"] -[ext_resource type="Gradient" uid="uid://c14ufqed7o6fi" path="res://external/Test Portrait/brown-skin.tres" id="2_xn0dn"] -[ext_resource type="Gradient" uid="uid://doghspt7i0yml" path="res://external/Test Portrait/dark-skin.tres" id="3_l1lmx"] +[ext_resource type="Gradient" uid="uid://d1654yf47rudx" path="res://external/test portrait/gradients/mid-skin.tres" id="2_wsqbt"] +[ext_resource type="Gradient" uid="uid://c5joet51774ii" path="res://external/test portrait/gradients/fair-skin.tres" id="3_xn0dn"] -[sub_resource type="GradientTexture1D" id="GradientTexture1D_blxgd"] -gradient = ExtResource("2_xn0dn") +[sub_resource type="GradientTexture1D" id="GradientTexture1D_l1lmx"] +gradient = ExtResource("2_wsqbt") -[sub_resource type="GradientTexture1D" id="GradientTexture1D_qqpe0"] -gradient = ExtResource("3_l1lmx") +[sub_resource type="GradientTexture1D" id="GradientTexture1D_ndlxs"] +gradient = ExtResource("3_xn0dn") [resource] shader = ExtResource("1_wsqbt") -shader_parameter/Color_Gradient = SubResource("GradientTexture1D_blxgd") -shader_parameter/Luminosity_Gradient = SubResource("GradientTexture1D_qqpe0") +shader_parameter/Color_Gradient = SubResource("GradientTexture1D_l1lmx") +shader_parameter/Luminosity_Gradient = SubResource("GradientTexture1D_ndlxs") diff --git a/external/Test Portrait/variant_color.gdshader b/external/Test Portrait/variant_color.gdshader new file mode 100644 index 0000000..1c2a4cc --- /dev/null +++ b/external/Test Portrait/variant_color.gdshader @@ -0,0 +1,38 @@ +shader_type canvas_item; +render_mode blend_mix; + +uniform sampler2D color_gradient; +uniform sampler2D luminosity_gradient; + + + +void vertex() { +} + +void fragment() { + vec4 col = texture(TEXTURE, UV); + vec4 cgrad_col = texture(color_gradient, vec2(col.r)); + + vec3 c = vec3(cgrad_col.xyz); + vec4 K = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); + vec4 p = mix(vec4(c.bg, K.wz), vec4(c.gb, K.xy), step(c.b, c.g)); + vec4 q = mix(vec4(p.xyw, c.r), vec4(c.r, p.yzx), step(p.x, c.r)); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + vec3 hsv = vec3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + + vec4 l_col = texture(luminosity_gradient, vec2(col.g)); + + vec3 fin_hsv = vec3(hsv.x, hsv.y, l_col.x); + + + c = fin_hsv; + K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); + vec3 p2 = abs(fract(c.xxx + K.xyz) * 6.0 - K.www); + vec3 fin_rgb = c.z * mix(K.xxx, clamp(p2 - K.xxx, 0.0, 1.0), c.y); + + COLOR.rgb = fin_rgb; + COLOR.a = col.a; + + +} \ No newline at end of file diff --git a/external/Test Portrait/variant_color.gdshader.uid b/external/Test Portrait/variant_color.gdshader.uid new file mode 100644 index 0000000..05da54c --- /dev/null +++ b/external/Test Portrait/variant_color.gdshader.uid @@ -0,0 +1 @@ +uid://cru1otvka0qn5 diff --git a/external/UI tests.clip b/external/UI tests.clip new file mode 100644 index 0000000..4478b7a Binary files /dev/null and b/external/UI tests.clip differ diff --git a/external/first-guild.clip b/external/first-guild.clip index 511acac..c9b3dfb 100644 Binary files a/external/first-guild.clip and b/external/first-guild.clip differ diff --git a/external/first-guild.png b/external/first-guild.png new file mode 100644 index 0000000..f4fc639 Binary files /dev/null and b/external/first-guild.png differ diff --git a/external/first-guild.png.import b/external/first-guild.png.import new file mode 100644 index 0000000..9c2616b --- /dev/null +++ b/external/first-guild.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dhjvnhb70u88h" +path="res://.godot/imported/first-guild.png-845bee99ec87175d7b0021b39c63acc9.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://external/first-guild.png" +dest_files=["res://.godot/imported/first-guild.png-845bee99ec87175d7b0021b39c63acc9.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 diff --git a/external/lvlup-circle.aseprite b/external/lvlup-circle.aseprite new file mode 100644 index 0000000..19b1b00 Binary files /dev/null and b/external/lvlup-circle.aseprite differ diff --git a/external/photo-1539721972319-f0e80a00d424.jpg b/external/photo-1539721972319-f0e80a00d424.jpg new file mode 100644 index 0000000..de416c3 Binary files /dev/null and b/external/photo-1539721972319-f0e80a00d424.jpg differ diff --git a/external/photo-1539721972319-f0e80a00d424.jpg.import b/external/photo-1539721972319-f0e80a00d424.jpg.import new file mode 100644 index 0000000..187ea52 --- /dev/null +++ b/external/photo-1539721972319-f0e80a00d424.jpg.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dgaj0f2qyjqq" +path="res://.godot/imported/photo-1539721972319-f0e80a00d424.jpg-b4abcd33452f13a967e4fb969169eda4.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://external/photo-1539721972319-f0e80a00d424.jpg" +dest_files=["res://.godot/imported/photo-1539721972319-f0e80a00d424.jpg-b4abcd33452f13a967e4fb969169eda4.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 diff --git a/external/portrait-2.clip b/external/portrait-2.clip new file mode 100644 index 0000000..f429d24 Binary files /dev/null and b/external/portrait-2.clip differ diff --git a/external/slime.clip b/external/slime.clip new file mode 100644 index 0000000..1326113 Binary files /dev/null and b/external/slime.clip differ diff --git a/external/test-map.clip b/external/test-map.clip new file mode 100644 index 0000000..413581d Binary files /dev/null and b/external/test-map.clip differ diff --git a/external/test-qsvchar.clip b/external/test-qsvchar.clip index 750e71a..f647079 100644 Binary files a/external/test-qsvchar.clip and b/external/test-qsvchar.clip differ diff --git a/external/test_guild_base.png b/external/test_guild_base.png new file mode 100644 index 0000000..f4fc639 Binary files /dev/null and b/external/test_guild_base.png differ diff --git a/external/test_guild_base.png.import b/external/test_guild_base.png.import new file mode 100644 index 0000000..c2112e6 --- /dev/null +++ b/external/test_guild_base.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dtg77so2ouaem" +path="res://.godot/imported/test_guild_base.png-1e16f4528b7ed1f2fd82afc7a12e2bd2.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://external/test_guild_base.png" +dest_files=["res://.godot/imported/test_guild_base.png-1e16f4528b7ed1f2fd82afc7a12e2bd2.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 diff --git a/external/test_star.png b/external/test_star.png new file mode 100644 index 0000000..2f3b502 Binary files /dev/null and b/external/test_star.png differ diff --git a/external/test_star.png.import b/external/test_star.png.import new file mode 100644 index 0000000..80c6511 --- /dev/null +++ b/external/test_star.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bhupleoa6pkkb" +path="res://.godot/imported/test_star.png-820be8b49079e2bba356c5bfa2f2a4c2.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://external/test_star.png" +dest_files=["res://.godot/imported/test_star.png-820be8b49079e2bba356c5bfa2f2a4c2.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 diff --git a/external/test_star2.png b/external/test_star2.png new file mode 100644 index 0000000..714c7c5 Binary files /dev/null and b/external/test_star2.png differ diff --git a/external/test_star2.png.import b/external/test_star2.png.import new file mode 100644 index 0000000..e6ed124 --- /dev/null +++ b/external/test_star2.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://ct7y401wpmcdf" +path="res://.godot/imported/test_star2.png-59acbb6d73c93b6359f90b0ccc836ae5.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://external/test_star2.png" +dest_files=["res://.godot/imported/test_star2.png-59acbb6d73c93b6359f90b0ccc836ae5.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 diff --git a/external/test_star3.png b/external/test_star3.png new file mode 100644 index 0000000..2c8043f Binary files /dev/null and b/external/test_star3.png differ diff --git a/external/test_star3.png.import b/external/test_star3.png.import new file mode 100644 index 0000000..79bab25 --- /dev/null +++ b/external/test_star3.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://debw0e5n02dov" +path="res://.godot/imported/test_star3.png-b89288350249746a17835cb979891c17.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://external/test_star3.png" +dest_files=["res://.godot/imported/test_star3.png-b89288350249746a17835cb979891c17.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 diff --git a/graphics/first-guild.png b/graphics/first-guild.png index 6145b41..d79f3d6 100644 Binary files a/graphics/first-guild.png and b/graphics/first-guild.png differ diff --git a/graphics/guild-mopt.png b/graphics/guild-mopt.png index a140989..2facc1c 100644 Binary files a/graphics/guild-mopt.png and b/graphics/guild-mopt.png differ diff --git a/graphics/portraits/farmer.tscn b/graphics/portraits/farmer.tscn new file mode 100644 index 0000000..89d607c --- /dev/null +++ b/graphics/portraits/farmer.tscn @@ -0,0 +1,164 @@ +[gd_scene load_steps=28 format=3 uid="uid://doxmdg4dpnjp1"] + +[ext_resource type="Script" uid="uid://m86jmtwv1a22" path="res://scripts/adventurer_portrait.gd" id="1_x16tf"] +[ext_resource type="Texture2D" uid="uid://dj6fagfp2sbrx" path="res://external/test portrait/farmer_f/hat-bg.png" id="2_hh544"] +[ext_resource type="Shader" uid="uid://cru1otvka0qn5" path="res://external/test portrait/variant_color.gdshader" id="3_8fwpu"] +[ext_resource type="Texture2D" uid="uid://can8npg0ufr3f" path="res://external/test portrait/farmer_f/hair_bg.png" id="4_tfbiy"] +[ext_resource type="Script" uid="uid://cdi0oxcug1hup" path="res://scripts/color_variant.gd" id="5_tm83k"] +[ext_resource type="Texture2D" uid="uid://crrd8mpcuync2" path="res://external/test portrait/farmer_f/body.png" id="6_fq3ir"] +[ext_resource type="Texture2D" uid="uid://dbdjaye6srxhx" path="res://external/test portrait/farmer_f/head.png" id="7_gsk6r"] +[ext_resource type="Texture2D" uid="uid://li44lgsa0ky" path="res://external/test portrait/farmer_f/eyes_shadow.png" id="8_olupa"] +[ext_resource type="Texture2D" uid="uid://x4e86o28672u" path="res://external/test portrait/farmer_f/brow_shadow-2.png" id="9_m5lxo"] +[ext_resource type="Texture2D" uid="uid://cru775pghpate" path="res://external/test portrait/farmer_f/hair_fg_shadow.png" id="10_6p4cc"] +[ext_resource type="Texture2D" uid="uid://csp7xbtu0tpn7" path="res://external/test portrait/farmer_f/eye-white-1.png" id="11_okexh"] +[ext_resource type="Texture2D" uid="uid://mygmunn3voie" path="res://external/test portrait/farmer_f/eyes-iris-1.png" id="12_w7h2j"] +[ext_resource type="Texture2D" uid="uid://wnkr20dtf734" path="res://external/test portrait/farmer_f/eyes-lashes-1.png" id="13_4vusa"] +[ext_resource type="Material" uid="uid://btx1o4kx78cbx" path="res://external/test portrait/tri-skin.tres" id="14_42rh0"] +[ext_resource type="Texture2D" uid="uid://caow8dqiog7j4" path="res://external/test portrait/farmer_f/ear.png" id="15_j26n4"] +[ext_resource type="Texture2D" uid="uid://vt17lekvchdg" path="res://external/test portrait/farmer_f/hair_fg.png" id="16_ewrfp"] +[ext_resource type="Texture2D" uid="uid://dyeu4kwwnxjn5" path="res://external/test portrait/farmer_f/hat_fg.png" id="17_cxsyd"] +[ext_resource type="Texture2D" uid="uid://brmta1rtiau4a" path="res://external/test portrait/farmer_f/brows-2.png" id="18_6yrxn"] + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_6ofx4"] +shader = ExtResource("3_8fwpu") + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_4lhir"] +shader = ExtResource("3_8fwpu") + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_ufq70"] +shader = ExtResource("3_8fwpu") + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_n24t2"] +shader = ExtResource("3_8fwpu") + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_d4dbv"] +shader = ExtResource("3_8fwpu") + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_8lmmt"] +resource_local_to_scene = true +shader = ExtResource("3_8fwpu") + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_mrkia"] +shader = ExtResource("3_8fwpu") + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_fa2yd"] +shader = ExtResource("3_8fwpu") + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_5uixj"] +shader = ExtResource("3_8fwpu") + +[node name="Portrait" type="Control"] +layout_mode = 3 +offset_right = 40.0 +offset_bottom = 40.0 +scale = Vector2(0.5, 0.5) +script = ExtResource("1_x16tf") + +[node name="Hat BG" type="TextureRect" parent="."] +layout_mode = 0 +offset_right = 128.0 +offset_bottom = 128.0 +texture = ExtResource("2_hh544") + +[node name="Hair BG" type="TextureRect" parent="."] +material = SubResource("ShaderMaterial_6ofx4") +layout_mode = 0 +offset_right = 256.0 +offset_bottom = 256.0 +texture = ExtResource("4_tfbiy") +script = ExtResource("5_tm83k") +type = 1 + +[node name="Body" type="TextureRect" parent="."] +layout_mode = 0 +offset_right = 128.0 +offset_bottom = 128.0 +texture = ExtResource("6_fq3ir") + +[node name="Head" type="TextureRect" parent="."] +material = SubResource("ShaderMaterial_4lhir") +layout_mode = 0 +offset_right = 128.0 +offset_bottom = 128.0 +texture = ExtResource("7_gsk6r") +script = ExtResource("5_tm83k") + +[node name="Eye Shadows" type="TextureRect" parent="."] +material = SubResource("ShaderMaterial_ufq70") +layout_mode = 0 +offset_right = 128.0 +offset_bottom = 128.0 +texture = ExtResource("8_olupa") +script = ExtResource("5_tm83k") + +[node name="Brow Shadow" type="TextureRect" parent="."] +material = SubResource("ShaderMaterial_n24t2") +layout_mode = 0 +offset_right = 128.0 +offset_bottom = 128.0 +texture = ExtResource("9_m5lxo") +script = ExtResource("5_tm83k") + +[node name="Hair FG Shadow" type="TextureRect" parent="."] +material = SubResource("ShaderMaterial_d4dbv") +layout_mode = 0 +offset_right = 128.0 +offset_bottom = 128.0 +texture = ExtResource("10_6p4cc") +script = ExtResource("5_tm83k") + +[node name="Eyewhites" type="TextureRect" parent="."] +layout_mode = 0 +offset_right = 128.0 +offset_bottom = 128.0 +texture = ExtResource("11_okexh") + +[node name="Irises" type="TextureRect" parent="."] +material = SubResource("ShaderMaterial_8lmmt") +layout_mode = 0 +offset_right = 128.0 +offset_bottom = 128.0 +texture = ExtResource("12_w7h2j") +script = ExtResource("5_tm83k") +type = 2 + +[node name="Eyelashes" type="TextureRect" parent="."] +material = SubResource("ShaderMaterial_mrkia") +layout_mode = 0 +offset_right = 128.0 +offset_bottom = 128.0 +texture = ExtResource("13_4vusa") +script = ExtResource("5_tm83k") +type = 1 + +[node name="Ear" type="TextureRect" parent="."] +material = ExtResource("14_42rh0") +layout_mode = 0 +offset_right = 128.0 +offset_bottom = 128.0 +texture = ExtResource("15_j26n4") +script = ExtResource("5_tm83k") + +[node name="Hair FG" type="TextureRect" parent="."] +material = SubResource("ShaderMaterial_fa2yd") +layout_mode = 0 +offset_right = 128.0 +offset_bottom = 128.0 +texture = ExtResource("16_ewrfp") +script = ExtResource("5_tm83k") +type = 1 + +[node name="Hat FG" type="TextureRect" parent="."] +layout_mode = 0 +offset_right = 128.0 +offset_bottom = 128.0 +texture = ExtResource("17_cxsyd") + +[node name="Brows" type="TextureRect" parent="."] +material = SubResource("ShaderMaterial_5uixj") +layout_mode = 0 +offset_right = 128.0 +offset_bottom = 128.0 +texture = ExtResource("18_6yrxn") +script = ExtResource("5_tm83k") +type = 1 diff --git a/graphics/questview/levelup.png b/graphics/questview/levelup.png new file mode 100644 index 0000000..3b1de03 Binary files /dev/null and b/graphics/questview/levelup.png differ diff --git a/graphics/questview/levelup.png.import b/graphics/questview/levelup.png.import new file mode 100644 index 0000000..e36e98c --- /dev/null +++ b/graphics/questview/levelup.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://p7bvumalu3cs" +path="res://.godot/imported/levelup.png-83374038952bc8d181f4733646e86793.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://graphics/questview/levelup.png" +dest_files=["res://.godot/imported/levelup.png-83374038952bc8d181f4733646e86793.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 diff --git a/graphics/questview/lvlup-circle.png b/graphics/questview/lvlup-circle.png new file mode 100644 index 0000000..1618094 Binary files /dev/null and b/graphics/questview/lvlup-circle.png differ diff --git a/graphics/questview/lvlup-circle.png.import b/graphics/questview/lvlup-circle.png.import new file mode 100644 index 0000000..dc1dbd0 --- /dev/null +++ b/graphics/questview/lvlup-circle.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bu0e077vc8qo1" +path="res://.godot/imported/lvlup-circle.png-0abc039b5ebc4ac403cf05c3aab337dc.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://graphics/questview/lvlup-circle.png" +dest_files=["res://.godot/imported/lvlup-circle.png-0abc039b5ebc4ac403cf05c3aab337dc.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 diff --git a/graphics/reception-table.png b/graphics/reception-table.png index 0832282..03bfe19 100644 Binary files a/graphics/reception-table.png and b/graphics/reception-table.png differ diff --git a/graphics/shelf.png b/graphics/shelf.png new file mode 100644 index 0000000..4ba806f Binary files /dev/null and b/graphics/shelf.png differ diff --git a/graphics/shelf.png.import b/graphics/shelf.png.import new file mode 100644 index 0000000..6fdd9bc --- /dev/null +++ b/graphics/shelf.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://w8xkghjv3t6r" +path="res://.godot/imported/shelf.png-13fce443e1a7892f987166e7034a4620.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://graphics/shelf.png" +dest_files=["res://.godot/imported/shelf.png-13fce443e1a7892f987166e7034a4620.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 diff --git a/graphics/voidcircle.png b/graphics/voidcircle.png new file mode 100644 index 0000000..81a6f17 Binary files /dev/null and b/graphics/voidcircle.png differ diff --git a/graphics/voidcircle.png.import b/graphics/voidcircle.png.import new file mode 100644 index 0000000..40b4915 --- /dev/null +++ b/graphics/voidcircle.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bbh444vapab3y" +path="res://.godot/imported/voidcircle.png-398cdfd68ac4908e5d0306937f9b3b0d.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://graphics/voidcircle.png" +dest_files=["res://.godot/imported/voidcircle.png-398cdfd68ac4908e5d0306937f9b3b0d.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 diff --git a/project.godot b/project.godot index c819dc5..110b554 100644 --- a/project.godot +++ b/project.godot @@ -10,7 +10,7 @@ config_version=5 [application] -config/name="pomchronicles" +config/name="PomChronicles" run/main_scene="uid://dfa6ep4o53s08" config/features=PackedStringArray("4.5", "Forward Plus") config/icon="res://graphics/icon.svg" @@ -99,6 +99,11 @@ profile={ "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":80,"key_label":0,"unicode":112,"location":0,"echo":false,"script":null) ] } +save={ +"deadzone": 0.2, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":90,"key_label":0,"unicode":122,"location":0,"echo":false,"script":null) +] +} [limbo_ai] diff --git a/scenes/loader_screen.tscn b/scenes/loader_screen.tscn new file mode 100644 index 0000000..ea81624 --- /dev/null +++ b/scenes/loader_screen.tscn @@ -0,0 +1,121 @@ +[gd_scene load_steps=2 format=3 uid="uid://ck2j6aayxofvo"] + +[ext_resource type="Script" uid="uid://dntthy6adxa44" path="res://scripts/loader_screen.gd" id="1_dw68p"] + +[node name="LoaderScreen" type="Control"] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +script = ExtResource("1_dw68p") + +[node name="ColorRect" type="ColorRect" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +color = Color(0, 0, 0, 1) + +[node name="PanelContainer" type="PanelContainer" parent="."] +layout_mode = 1 +anchors_preset = -1 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -634.0 +offset_top = -287.5 +offset_right = 634.0 +offset_bottom = 287.5 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="VBoxContainer" type="VBoxContainer" parent="PanelContainer"] +layout_mode = 2 + +[node name="HBoxContainer" type="HBoxContainer" parent="PanelContainer/VBoxContainer"] +layout_mode = 2 + +[node name="MarginContainer2" type="MarginContainer" parent="PanelContainer/VBoxContainer/HBoxContainer"] +layout_mode = 2 +theme_override_constants/margin_left = 10 +theme_override_constants/margin_top = 10 +theme_override_constants/margin_right = 10 +theme_override_constants/margin_bottom = 10 + +[node name="Screenshot" type="TextureRect" parent="PanelContainer/VBoxContainer/HBoxContainer/MarginContainer2"] +unique_name_in_owner = true +custom_minimum_size = Vector2(960, 540) +layout_mode = 2 +expand_mode = 1 + +[node name="MarginContainer" type="MarginContainer" parent="PanelContainer/VBoxContainer/HBoxContainer"] +layout_mode = 2 +theme_override_constants/margin_left = 10 +theme_override_constants/margin_top = 10 +theme_override_constants/margin_right = 10 +theme_override_constants/margin_bottom = 10 + +[node name="VBoxContainer" type="VBoxContainer" parent="PanelContainer/VBoxContainer/HBoxContainer/MarginContainer"] +custom_minimum_size = Vector2(300, 0) +layout_mode = 2 + +[node name="HBoxContainer" type="HBoxContainer" parent="PanelContainer/VBoxContainer/HBoxContainer/MarginContainer/VBoxContainer"] +layout_mode = 2 + +[node name="GuildName" type="Label" parent="PanelContainer/VBoxContainer/HBoxContainer/MarginContainer/VBoxContainer/HBoxContainer"] +unique_name_in_owner = true +custom_minimum_size = Vector2(200, 0) +layout_mode = 2 +text = "Guild Name" + +[node name="GuildLevel" type="Label" parent="PanelContainer/VBoxContainer/HBoxContainer/MarginContainer/VBoxContainer/HBoxContainer"] +unique_name_in_owner = true +custom_minimum_size = Vector2(100, 0) +layout_mode = 2 +text = "Guild Level" +horizontal_alignment = 2 + +[node name="HBoxContainer2" type="HBoxContainer" parent="PanelContainer/VBoxContainer/HBoxContainer/MarginContainer/VBoxContainer"] +layout_mode = 2 + +[node name="PlayerName" type="Label" parent="PanelContainer/VBoxContainer/HBoxContainer/MarginContainer/VBoxContainer/HBoxContainer2"] +unique_name_in_owner = true +custom_minimum_size = Vector2(200, 0) +layout_mode = 2 +text = "Player Name" + +[node name="PlayerLevel" type="Label" parent="PanelContainer/VBoxContainer/HBoxContainer/MarginContainer/VBoxContainer/HBoxContainer2"] +unique_name_in_owner = true +custom_minimum_size = Vector2(100, 0) +layout_mode = 2 +text = "Player Level" +horizontal_alignment = 2 + +[node name="SaveTime" type="Label" parent="PanelContainer/VBoxContainer/HBoxContainer/MarginContainer/VBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +text = "Save Time" + +[node name="HBoxContainer2" type="HBoxContainer" parent="PanelContainer/VBoxContainer"] +custom_minimum_size = Vector2(0, 200) +layout_mode = 2 + +[node name="ContinueButton" type="Button" parent="PanelContainer/VBoxContainer/HBoxContainer2"] +layout_mode = 2 +size_flags_horizontal = 3 +theme_override_font_sizes/font_size = 54 +text = "Continue?" + +[node name="CancelButton" type="Button" parent="PanelContainer/VBoxContainer/HBoxContainer2"] +layout_mode = 2 +size_flags_horizontal = 3 +theme_override_font_sizes/font_size = 54 +text = "Cancel" + +[connection signal="pressed" from="PanelContainer/VBoxContainer/HBoxContainer2/ContinueButton" to="." method="_on_continue_button_pressed"] +[connection signal="pressed" from="PanelContainer/VBoxContainer/HBoxContainer2/CancelButton" to="." method="_on_cancel_button_pressed"] diff --git a/scenes/start_menu.tscn b/scenes/start_menu.tscn index e9deae9..1ef947c 100644 --- a/scenes/start_menu.tscn +++ b/scenes/start_menu.tscn @@ -23,16 +23,10 @@ color = Color(0, 0, 0, 1) [node name="VBoxContainer" type="VBoxContainer" parent="."] layout_mode = 1 anchors_preset = -1 -anchor_left = 0.5 -anchor_top = 0.5 -anchor_right = 0.5 -anchor_bottom = 0.5 -offset_left = -630.0 -offset_top = -247.0 -offset_right = 630.0 -offset_bottom = -39.0 -grow_horizontal = 2 -grow_vertical = 2 +offset_left = 350.0 +offset_top = 150.0 +offset_right = 1610.0 +offset_bottom = 970.0 [node name="Label" type="Label" parent="VBoxContainer"] layout_mode = 2 @@ -47,22 +41,26 @@ theme_override_font_sizes/font_size = 48 text = "We're going to be the bestest guild ever, right? Right?!?" horizontal_alignment = 1 -[node name="Button" type="Button" parent="."] +[node name="Control" type="Control" parent="VBoxContainer"] +custom_minimum_size = Vector2(0, 200) +layout_mode = 2 + +[node name="ContinueButton" type="Button" parent="VBoxContainer"] +unique_name_in_owner = true modulate = Color(4.415934, 4.415934, 4.415934, 1) -custom_minimum_size = Vector2(1000, 250) -layout_mode = 1 -anchors_preset = -1 -anchor_left = 0.5 -anchor_top = 0.5 -anchor_right = 0.5 -anchor_bottom = 0.5 -offset_left = -75.5 -offset_top = 154.5 -offset_right = 75.5 -offset_bottom = 229.5 -grow_horizontal = 2 -grow_vertical = 2 +custom_minimum_size = Vector2(1000, 150) +layout_mode = 2 +theme_override_font_sizes/font_size = 48 +disabled = true +text = "CONTINUE" + +[node name="StartButton" type="Button" parent="VBoxContainer"] +unique_name_in_owner = true +modulate = Color(4.415934, 4.415934, 4.415934, 1) +custom_minimum_size = Vector2(1000, 150) +layout_mode = 2 theme_override_font_sizes/font_size = 48 text = "START" -[connection signal="pressed" from="Button" to="." method="_on_button_pressed"] +[connection signal="pressed" from="VBoxContainer/ContinueButton" to="." method="_on_continue_button_pressed"] +[connection signal="pressed" from="VBoxContainer/StartButton" to="." method="_on_start_button_pressed"] diff --git a/scripts/adventurer.gd b/scripts/adventurer.gd index 608e931..12bf0ef 100644 --- a/scripts/adventurer.gd +++ b/scripts/adventurer.gd @@ -1,5 +1,11 @@ class_name Adventurer extends Node +class Appearance extends Resource: + var hair_color : String + var hair_type : int + var skin_color : String + var eye_color : String + var eye_type : int enum Gender{ MASC, @@ -17,12 +23,11 @@ var max_energy : int = 1 var level : int = 1 var exp : int = 0 var job : JobData +var appearance : Appearance var stats : StatBlock var gold : int = 0 var quest : Quest -var weapon : Weapon -var armor : Armor -var accessory : Accessory +var equipment : Array = [null, null, null] var inventory : Dictionary[Vector2, Item] = {} var inventory_size : Vector2i = Vector2i(3,2) var inventory_count : int = 0 @@ -45,7 +50,7 @@ func generate() -> void: stats.CHA = randi_range(job.min_CHA, job.max_CHA) stats.FAI = randi_range(job.min_FAI, job.max_FAI) stats.LUK = randi_range(job.min_LUK, job.max_LUK) - + generate_appearance() max_life = stats.STR * 10 + stats.CHA * 10 max_energy = stats.INT * 10 + stats.FAI * 10 life = max_life @@ -64,7 +69,6 @@ func gain_level() -> void: level += 1 #TODO: Make stats improve based on job Game.notice("%s has reached level %d!" % [full_name(), level]) - #TODO: Make Sideview display level up changed.emit() levelled.emit() @@ -115,6 +119,50 @@ func pickup_item(item : Item) -> void: inventory_count+=1 changed.emit() +func equip_item(from : Vector2, slot : Item.Slots) -> void: + if !inventory.has(from): + printerr("Cannot equip item from %s, it is empty!" % [from]) + + var itm = inventory[from] + if !itm.can_equip_slot(slot): + printerr("Cannot equip item from %s to %s, it is the wrong type!" % [from, Item.slot_name(slot)]) + + if !job.can_equip(itm): + printerr("Cannot equip item from %s to %s, %s cannot equip it!" % [from, Item.slot_name(slot), job.name]) + + if equipment[slot] != null: + inventory[from] = equipment[slot] + remove_stats_from_item(itm) + else: + inventory.erase(from) + equipment[slot] = itm + apply_stats_from_item(itm) + #Apply Stats from + +func remove_stats_from_item(itm : Item) -> void: + stats.STR -= stats.STR + stats.DEX-= stats.DEX + stats.INT-= stats.INT + stats.CHA-= stats.CHA + stats.FAI-= stats.FAI + stats.LUK-= stats.LUK + stats.PATK-= stats.PATK + stats.MATK-= stats.MATK + stats.PDEF-= stats.PDEF + stats.MDEF-= stats.MDEF + +func apply_stats_from_item(itm : Item) -> void: + stats.STR += stats.STR + stats.DEX+= stats.DEX + stats.INT+= stats.INT + stats.CHA+= stats.CHA + stats.FAI+= stats.FAI + stats.LUK+= stats.LUK + stats.PATK+= stats.PATK + stats.MATK+= stats.MATK + stats.PDEF+= stats.PDEF + stats.MDEF+= stats.MDEF + func move_item(from : Vector2, to: Vector2) -> void: if !inventory.has(from): printerr("Cannot move item from %s to %s, %s is empty!" % [from, to, from]) @@ -126,3 +174,14 @@ func move_item(from : Vector2, to: Vector2) -> void: inventory.erase(from) inventory[to] = itm changed.emit() + +func generate_appearance(features=null) -> void: + if features == null: + appearance = Appearance.new() + #TODO: Handle different types of hair and eyes + appearance.hair_color = AdventurerPortrait.random_color(ColorVariant.Types.HAIR) + #appearance.hair_type = randi_range(0,len(job.portrait.hair_types) - 1) + appearance.eye_color = AdventurerPortrait.random_color(ColorVariant.Types.EYES) + #appearance.eye_type = randi_range(0,len(job.portrait.eye_types) - 1) + appearance.skin_color = AdventurerPortrait.random_color(ColorVariant.Types.SKIN) + changed.emit() diff --git a/scripts/adventurer_portrait.gd b/scripts/adventurer_portrait.gd index e07a0bf..f401ba1 100644 --- a/scripts/adventurer_portrait.gd +++ b/scripts/adventurer_portrait.gd @@ -1 +1,41 @@ -extends Control +class_name AdventurerPortrait extends Control + + +var cv_lists : Array + +func _ready() -> void: + cv_lists = [] + cv_lists.resize(ColorVariant.Types.size()) + for i in range(len(cv_lists)): + cv_lists[i] = [] + for child in get_children(): + if child is ColorVariant: + cv_lists[child.type].append(child) + +func set_appearance(appearance) -> void: + set_color(ColorVariant.Types.HAIR, appearance.hair_color) + set_color(ColorVariant.Types.SKIN, appearance.skin_color) + set_color(ColorVariant.Types.EYES, appearance.eye_color) + +static func random_color(type : ColorVariant.Types) -> String: + var lst + match(type): + ColorVariant.Types.HAIR: lst = ColorVariant.hair_colors + ColorVariant.Types.SKIN: lst = ColorVariant.skin_colors + ColorVariant.Types.EYES: lst = ColorVariant.eye_colors + var max = 0 + for opt in lst.keys(): + max += lst[opt].weight + + var pick = randi_range(1, max) + for opt in lst.keys(): + if lst[opt].weight == 0: #Zero weighted colors are special options. + continue + pick -= lst[opt].weight + if pick < 0: + return opt + return "ERROR" + +func set_color(type : ColorVariant.Types, color : String) -> void: + for cv : ColorVariant in cv_lists[type]: + cv.set_color(color) diff --git a/scripts/adventurer_profile_window.gd b/scripts/adventurer_profile_window.gd index ccf350c..3a243c5 100644 --- a/scripts/adventurer_profile_window.gd +++ b/scripts/adventurer_profile_window.gd @@ -27,6 +27,11 @@ func setup(adv : Adventurer) -> void: for child : ItemSlot in %InventoryGrid.get_children(): item_slots.append(child) child.display_item.connect(_on_display_item) + if data.job: + var portrait : AdventurerPortrait = data.job.portrait.instantiate() + %PortraitFrame.add_child(portrait) + portrait.scale = Vector2(.6,.6) + portrait.set_appearance(data.appearance) #TODO: Show equipment update_items() diff --git a/scripts/color_variant.gd b/scripts/color_variant.gd index 9f6ac00..ad7300a 100644 --- a/scripts/color_variant.gd +++ b/scripts/color_variant.gd @@ -1 +1,135 @@ -extends TextureRect +class_name ColorVariant extends TextureRect + +enum Types{ + SKIN, + HAIR, + EYES +} +static var eye_colors = { + "blue":{ + "weight": 100, + "color": preload("res://external/test portrait/gradients/eyes/(c)blue.tres"), + "luminosity": preload("res://external/test portrait/gradients/eyes/(l)fair.tres"), + }, + "green":{ + "weight": 100, + "color": preload("res://external/test portrait/gradients/eyes/(c)green.tres"), + "luminosity": preload("res://external/test portrait/gradients/eyes/(l)default.tres"), + }, + "brown":{ + "weight": 100, + "color": preload("res://external/test portrait/gradients/eyes/(c)blue.tres"), + "luminosity": preload("res://external/test portrait/gradients/eyes/(c)blue.tres"), + }, + "gold":{ + "weight": 100, + "color": preload("res://external/test portrait/gradients/eyes/(c)blue.tres"), + "luminosity": preload("res://external/test portrait/gradients/eyes/(c)blue.tres"), + }, + "red":{ + "weight": 100, + "color": preload("res://external/test portrait/gradients/eyes/(c)blue.tres"), + "luminosity": preload("res://external/test portrait/gradients/eyes/(c)blue.tres"), + }, + "grey":{ + "weight": 100, + "color": preload("res://external/test portrait/gradients/eyes/(c)blue.tres"), + "luminosity": preload("res://external/test portrait/gradients/eyes/(c)blue.tres"), + }, +} + +static var hair_colors = { + "blue":{ + "weight": 100, + "color": preload("res://external/test portrait/gradients/eyes/(c)blue.tres"), + "luminosity": preload("res://external/test portrait/gradients/eyes/(c)blue.tres"), + }, + "blonde":{ + "weight": 100, + "color": preload("res://external/test portrait/gradients/hair/(c)blonde.tres"), + "luminosity": preload("res://external/test portrait/gradients/hair/(l)fair.tres"), + }, + "brown":{ + "weight": 100, + "color": preload("res://external/test portrait/gradients/hair/(c)brown.tres"), + "luminosity": preload("res://external/test portrait/gradients/hair/(l)dark.tres"), + }, + "black":{ + "weight": 100, + "color": preload("res://external/test portrait/gradients/hair/(c)black.tres"), + "luminosity": preload("res://external/test portrait/gradients/hair/(l)black.tres"), + }, + "red":{ + "weight": 100, + "color": preload("res://external/test portrait/gradients/hair/(c)red.tres"), + "luminosity": preload("res://external/test portrait/gradients/hair/(l)red.tres"), + }, + "silver":{ + "weight": 100, + "color": preload("res://external/test portrait/gradients/eyes/(c)blue.tres"), + "luminosity": preload("res://external/test portrait/gradients/eyes/(c)blue.tres"), + }, +} + +static var skin_colors = { + "pale":{ + "weight": 100, + "color": preload("res://external/test portrait/gradients/eyes/(c)blue.tres"), + "luminosity": preload("res://external/test portrait/gradients/eyes/(c)blue.tres"), + }, + "medium":{ + "weight": 100, + "color": preload("res://external/test portrait/gradients/eyes/(c)blue.tres"), + "luminosity": preload("res://external/test portrait/gradients/eyes/(c)blue.tres"), + }, + "olive":{ + "weight": 100, + "color": preload("res://external/test portrait/gradients/eyes/(c)blue.tres"), + "luminosity": preload("res://external/test portrait/gradients/eyes/(c)blue.tres"), + }, + "brown":{ + "weight": 100, + "color": preload("res://external/test portrait/gradients/eyes/(c)blue.tres"), + "luminosity": preload("res://external/test portrait/gradients/eyes/(c)blue.tres"), + }, + "dark":{ + "weight": 100, + "color": preload("res://external/test portrait/gradients/eyes/(c)blue.tres"), + "luminosity": preload("res://external/test portrait/gradients/eyes/(l)default.tres"), + }, + "white":{ + "weight": 0, + "color": preload("res://external/test portrait/gradients/eyes/(c)blue.tres"), + "luminosity": preload("res://external/test portrait/gradients/eyes/(c)blue.tres"), + }, + "red":{ + "weight": 0, + "color": preload("res://external/test portrait/gradients/eyes/(c)blue.tres"), + "luminosity": preload("res://external/test portrait/gradients/eyes/(c)blue.tres"), + }, +} +@export var type : Types + +#@onready var variant_material : ShaderMaterial = material + +func set_color(color : String) -> void: + var col_gradients + match(type): + Types.SKIN: + if !skin_colors.has(color): + printerr("Tried to set a color '%s' that isn't part of the skin color list!" % color) + return + col_gradients = skin_colors[color] + Types.HAIR: + if !hair_colors.has(color): + printerr("Tried to set a color '%s' that isn't part of the hair color list!" % color) + return + col_gradients = hair_colors[color] + Types.EYES: + if !eye_colors.has(color): + printerr("Tried to set a color '%s' that isn't part of the eye color list!" % color) + return + col_gradients = eye_colors[color] + var mat = material + mat.set_shader_parameter("color_gradient",col_gradients.color) + mat.set_shader_parameter("luminosity_gradient",col_gradients.luminosity) diff --git a/scripts/game_manager.gd b/scripts/game_manager.gd index f2c8927..5cc987b 100644 --- a/scripts/game_manager.gd +++ b/scripts/game_manager.gd @@ -72,3 +72,54 @@ func notice(msg : String, time : float = 1) -> void: func calculate_kill_exp(killer : QuestSprite, killed : QuestSprite) -> int: return clamp(1, (killed.level - killer.level) * 5, 100) + +func test_save() -> void: + var image : Image = get_viewport().get_texture().get_image() + var save_dict = { + "savetime": Time.get_datetime_string_from_system(), + "screenshot": image.save_png_to_buffer().hex_encode() + } + #Save the guild data + save_dict["guildname"] = Guild.name + save_dict["guildlevel"] = Guild.level + #Save the player data + save_dict["playername"] = player.data.full_name() + save_dict["playerlevel"] = player.data.level + #Save the employee data + #Save the adventurer data + #Save the quest data + #Save the quest progress + var save_file = FileAccess.open("user://savefile.save", FileAccess.WRITE) + save_file.store_line(JSON.stringify(save_dict)) + +func get_savefile_data(filename : String) -> Dictionary: + var load_file = FileAccess.open("user://" + filename, FileAccess.READ) + var json = JSON.new() + var json_string = load_file.get_line() + var parse_result = json.parse(json_string) + if not parse_result == OK: + printerr("JSON Parse Error: ", json.get_error_message(), " in ", json_string, " at line ", json.get_error_line()) + return {} + var image = Image.new() + var ss : String = json.data.screenshot + #print(ss.data) + image.load_png_from_buffer(ss.hex_decode()) + var data_dict = { + "playername": json.data.playername, + "playerlevel": json.data.playerlevel, + "guildname": json.data.guildname, + "guildlevel": json.data.guildlevel, + "savetime": json.data.savetime, + "screenshot": image + } + return data_dict + +func test_load(filename : String) -> void: + var load_file = FileAccess.open("user://" + filename, FileAccess.READ) + var json = JSON.new() + var json_string = load_file.get_line() + var parse_result = json.parse_string(json_string) + if not parse_result == OK: + printerr("JSON Parse Error: ", json.get_error_message(), " in ", json_string, " at line ", json.get_error_line()) + return + diff --git a/scripts/generate_quest_dialog.gd b/scripts/generate_quest_dialog.gd index 3c005c6..45d43d9 100644 --- a/scripts/generate_quest_dialog.gd +++ b/scripts/generate_quest_dialog.gd @@ -7,7 +7,7 @@ var quest : Quest func generate_quest() -> void: quest = Quest.new() quest.name = "A Test Quest" - quest.location = "Nestor Woods" + quest.location = Quest.Locations.NESTORS_WOODS quest.difficulty = 1 quest.length = 60 quest.rewards = {"exp":100,"gold":1} @@ -16,7 +16,7 @@ func update_quest_window() -> void: if quest: %NameField.text = quest.name %DifficultyField.text = quest.difficulty_name() - %LocationField.text = quest.location + %LocationField.text = quest.location_name() #for reward in quest.rewards.: func reset() -> void: diff --git a/scripts/item_display_window.gd b/scripts/item_display_window.gd index b6657eb..c454087 100644 --- a/scripts/item_display_window.gd +++ b/scripts/item_display_window.gd @@ -21,6 +21,19 @@ func setup(itm : Item) -> void: item_grade.text = item.grade primary_stat.text = item.primary_stat() #TODO: Implement item secondary stats meaningfully + var ss_string = "" + var ss_count = 0 + var pp_list : Array = item.stats.get_property_list() + print(item.stats) + print(item.stats.INT) + for stat in pp_list.slice(9, len(pp_list)-1): + var val = item.stats.get(stat.name) + if val: + ss_string += stat.name + " " + ("+" if val > 0 else "") + ss_string += str(val) + ("\n" if ss_count % 2 else " ") + ss_count += 1 + if ss_count > 0: + secondary_stats.text = ss_string brief.text = item.brief func _on_drag_region_gui_input(event: InputEvent) -> void: diff --git a/scripts/loader_screen.gd b/scripts/loader_screen.gd new file mode 100644 index 0000000..44acd49 --- /dev/null +++ b/scripts/loader_screen.gd @@ -0,0 +1,19 @@ +extends Control + + +func _ready() -> void: + var data = Game.get_savefile_data("savefile.save") + %GuildName.text = data.guildname + %GuildLevel.text = "Lv" + str(int(data.guildlevel)) + %PlayerName.text = data.playername + %PlayerLevel.text = "Lv" + str(int(data.playerlevel)) + %SaveTime.text = data.savetime + %Screenshot.texture = ImageTexture.create_from_image(data.screenshot) + + +func _on_continue_button_pressed() -> void: + Game.test_load("savefile.save") + + +func _on_cancel_button_pressed() -> void: + get_tree().change_scene_to_file("res://scenes/start_menu.tscn") diff --git a/scripts/loader_screen.gd.uid b/scripts/loader_screen.gd.uid new file mode 100644 index 0000000..7a7ca7f --- /dev/null +++ b/scripts/loader_screen.gd.uid @@ -0,0 +1 @@ +uid://dntthy6adxa44 diff --git a/scripts/main_panel.gd b/scripts/main_panel.gd index a98084c..67c78cd 100644 --- a/scripts/main_panel.gd +++ b/scripts/main_panel.gd @@ -14,6 +14,8 @@ func _ready() -> void: func _process(delta: float) -> void: time_changed.emit(timer.time_left) + if Input.is_action_just_pressed("save"): + Game.test_save() func add_quest_progress_bar(quest : Quest) -> void: var qpb : QuestProgressBar = quest_progress_bar_template.instantiate() diff --git a/scripts/quest_info_window.gd b/scripts/quest_info_window.gd index bbcef95..4bf1636 100644 --- a/scripts/quest_info_window.gd +++ b/scripts/quest_info_window.gd @@ -16,7 +16,7 @@ func setup(qst : Quest) -> void: func update() -> void: nameLabel.text = quest.name difficultyLabel.text = quest.difficulty_name() - locationLabel.text = quest.location + locationLabel.text = quest.location_name() #TODO: Show the current status of the quest func close() -> void: diff --git a/scripts/quest_notice_banner.gd b/scripts/quest_notice_banner.gd new file mode 100644 index 0000000..36682d9 --- /dev/null +++ b/scripts/quest_notice_banner.gd @@ -0,0 +1,12 @@ +extends Sprite2D + +func _ready(): + var move_tween = create_tween() + move_tween.tween_property(self, "position:y", -40, 1.25) + var fade_tween = create_tween() + modulate.a = 0 + fade_tween.tween_property(self, "modulate:a", 1, .15) + fade_tween.tween_interval(0.85) + fade_tween.tween_property(self, "modulate:a", 0, .25) + fade_tween.tween_callback(queue_free) + diff --git a/scripts/quest_notice_banner.gd.uid b/scripts/quest_notice_banner.gd.uid new file mode 100644 index 0000000..1a5154f --- /dev/null +++ b/scripts/quest_notice_banner.gd.uid @@ -0,0 +1 @@ +uid://cv7wuquahc53c diff --git a/scripts/questor_sprite.gd b/scripts/questor_sprite.gd index 1ebcff8..d9d63e9 100644 --- a/scripts/questor_sprite.gd +++ b/scripts/questor_sprite.gd @@ -1,7 +1,8 @@ class_name QuestorSprite extends QuestSprite - +@onready var levelup_banner_template = preload("res://templates/levelup_banner.tscn") var data : Adventurer = null +var banner_lag : float func _ready() -> void: if data: @@ -14,6 +15,10 @@ func _ready() -> void: stats = StatBlock.copy(data.stats) gold = data.gold +func _process(delta) -> void: + if banner_lag > 0: + banner_lag -= delta + func set_animation(anim_name : String) -> void: anim_player.play(anim_name) @@ -28,6 +33,23 @@ func setup(adv : Adventurer) -> void: stats = StatBlock.copy(data.stats) gold = data.gold adv.quest_sprite = self + data.levelled.connect(_on_level_up) + +func show_levelup_banner(lagged : bool = false) -> void: + if !lagged and banner_lag > 0: + var tween = create_tween() + tween.tween_interval(banner_lag) + tween.tween_callback(show_levelup_banner.bind(true)) + banner_lag += .75 + return + var banner = levelup_banner_template.instantiate() + banner.position = Vector2.ZERO + $BannerOffset.add_child(banner) + banner_lag = .75 + func check_levelup() -> void: data.gain_exp(exp) + +func _on_level_up() -> void: + show_levelup_banner() diff --git a/scripts/start_menu.gd b/scripts/start_menu.gd index 4834a06..db63e25 100644 --- a/scripts/start_menu.gd +++ b/scripts/start_menu.gd @@ -1,5 +1,12 @@ extends Control -func _on_button_pressed() -> void: +func _ready() -> void: + %ContinueButton.disabled = !FileAccess.file_exists("user://savefile.save") + +func _on_start_button_pressed() -> void: get_tree().change_scene_to_file("res://scenes/active_scene.tscn") + + +func _on_continue_button_pressed() -> void: + get_tree().change_scene_to_file("res://scenes/loader_screen.tscn") diff --git a/scripts/void_ripple.gd b/scripts/void_ripple.gd new file mode 100644 index 0000000..4e70528 --- /dev/null +++ b/scripts/void_ripple.gd @@ -0,0 +1,58 @@ +@tool +extends Node2D + +@onready var center : Node2D = $Center +@onready var outline : Line2D = $Line2D +@export var cycle_max : float = 30.0 +@export var ripple_num : int = 3 +@export var speed : float = 200 +@export var ripple_width : float = 3 +@export var gradient : Gradient +var l_norms : Array[Vector2] = [] +func _ready(): + recalc_lnorms() + +func _process(delta: float) -> void: + queue_redraw() + print("test") + +func recalc_lnorms(): + var polypoints : PackedVector2Array + polypoints = outline.points.slice(0, -1) + + var left_neighbor : Vector2 + var right_neighbor : Vector2 + #print("Recalc set") + for i in range(len(outline.points)): + var p = outline.points[i] + if i == 0: + left_neighbor = outline.points[-2] + else: + left_neighbor = outline.points[i-1] + + if i == len(outline.points) - 1: + right_neighbor = outline.points[1] + else: + right_neighbor = outline.points[i+1] + var shift : Vector2 = ((left_neighbor - p).normalized() + (right_neighbor - p).normalized()).normalized() + if Geometry2D.is_point_in_polygon(p + shift, polypoints): + #print("Offset moves the point into the polygon, flip!") + shift *= -1 + l_norms.append(shift) + + +func _draw() -> void: + var ripple_line : PackedVector2Array + ripple_line.resize(len(outline.points)) + + var min : float = -cycle_max / ripple_num + var max : float = cycle_max + min + var cycle = wrapf(Time.get_ticks_msec()*speed, min, max) + for j in range(ripple_num): + var color = gradient.sample((cycle / cycle_max)) + for i in len(ripple_line): + ripple_line[i] = outline.points[i] + l_norms[i] * cycle + #print(str(outline.points[i]) + " becomes " + str(ripple_line[i]) + " because of offset " + str(l_norms[i])) + draw_polyline(ripple_line, Color(color, .8 * (cycle_max - cycle) / cycle_max), ripple_width * (cycle_max - cycle) / cycle_max, true) + cycle = wrapf(cycle + cycle_max / ripple_num, min, max) + pass diff --git a/scripts/void_ripple.gd.uid b/scripts/void_ripple.gd.uid new file mode 100644 index 0000000..4a5244b --- /dev/null +++ b/scripts/void_ripple.gd.uid @@ -0,0 +1 @@ +uid://2g4ja3a7o2l diff --git a/shaders/starfield.tres b/shaders/starfield.tres new file mode 100644 index 0000000..41e2800 --- /dev/null +++ b/shaders/starfield.tres @@ -0,0 +1,28 @@ +[gd_resource type="Shader" format=3 uid="uid://dvdm8x66gwu2v"] + +[resource] +code = "shader_type canvas_item; + +uniform vec2 stars_speed = vec2(0.0); +uniform float stars_density: hint_range(0.0, 1.0, 0.001) = 0.01; + +varying vec4 modulate; +varying vec2 position; + +// https://thebookofshaders.com/10/ +float random(vec2 st) { + return fract(sin(dot(st.xy, vec2(12.9898, 78.233))) * 43758.5453123); +} + +// Called for every vertex the material is visible on. +void vertex() { + modulate = COLOR; + position = VERTEX; +} + +// Called for every pixel the material is visible on. +void fragment() { + vec2 uv = (position + TIME * stars_speed) * TEXTURE_PIXEL_SIZE; + uv = fract(uv) * step(random(floor(uv)), stars_density); + COLOR = texture(TEXTURE, uv) * modulate; +}" diff --git a/shaders/trigradient.tres b/shaders/trigradient.tres index 3887b58..cfdeb58 100644 --- a/shaders/trigradient.tres +++ b/shaders/trigradient.tres @@ -1,35 +1,36 @@ [gd_resource type="VisualShader" load_steps=13 format=3 uid="uid://dbcokq5fn2les"] -[ext_resource type="Texture2D" uid="uid://dk1fkcth50ii8" path="res://shaders/test.png" id="1_mue8a"] +[ext_resource type="Texture2D" uid="uid://c8cvo15p3vosu" path="res://external/test portrait/gradients/blue_hair.tres" id="1_mue8a"] + +[sub_resource type="VisualShaderNodeColorFunc" id="VisualShaderNodeColorFunc_n1g6q"] +function = 1 + +[sub_resource type="VisualShaderNodeTexture2DParameter" id="VisualShaderNodeTexture2DParameter_kuvpm"] +parameter_name = "Color_Gradient" + +[sub_resource type="VisualShaderNodeInput" id="VisualShaderNodeInput_m6etp"] +input_name = "texture" + +[sub_resource type="VisualShaderNodeTexture2DParameter" id="VisualShaderNodeTexture2DParameter_s3ye8"] +parameter_name = "Luminosity_Gradient" + +[sub_resource type="VisualShaderNodeTexture" id="VisualShaderNodeTexture_x6ow4"] +source = 5 [sub_resource type="VisualShaderNodeTexture" id="VisualShaderNodeTexture_n1g6q"] -texture = ExtResource("1_mue8a") - -[sub_resource type="VisualShaderNodeVectorDecompose" id="VisualShaderNodeVectorDecompose_kuvpm"] -default_input_values = [0, Quaternion(0, 0, 0, 0)] -op_type = 2 +expanded_output_ports = [0] +source = 5 [sub_resource type="VisualShaderNodeVectorCompose" id="VisualShaderNodeVectorCompose_m6etp"] -[sub_resource type="Gradient" id="Gradient_s3ye8"] -offsets = PackedFloat32Array(0, 0.495114, 1) -colors = PackedColorArray(0, 0.45, 0.14249997, 1, 0.88283366, 1.732707e-06, 0.5201918, 1, 1, 1, 1, 1) - -[sub_resource type="GradientTexture1D" id="GradientTexture1D_x6ow4"] -gradient = SubResource("Gradient_s3ye8") - [sub_resource type="VisualShaderNodeTexture" id="VisualShaderNodeTexture_yjp8t"] -texture = SubResource("GradientTexture1D_x6ow4") - -[sub_resource type="VisualShaderNodeVectorOp" id="VisualShaderNodeVectorOp_3315r"] -operator = 2 - -[sub_resource type="VisualShaderNodeTexture2DParameter" id="VisualShaderNodeTexture2DParameter_n7htp"] -parameter_name = "Texture2DParameter" - -[sub_resource type="VisualShaderNodeTexture" id="VisualShaderNodeTexture_3ksh6"] +expanded_output_ports = [0] +source = 5 texture = ExtResource("1_mue8a") -texture_type = 1 + +[sub_resource type="VisualShaderNodeColorFunc" id="VisualShaderNodeColorFunc_yjp8t"] +expanded_output_ports = [0] +function = 2 [sub_resource type="VisualShaderNodeInput" id="VisualShaderNodeInput_fwk6d"] input_name = "uv" @@ -38,12 +39,12 @@ input_name = "uv" input_name = "vertex" [resource] +resource_local_to_scene = true code = "shader_type canvas_item; render_mode blend_mix; -uniform sampler2D tex_vtx_2 : source_color; -uniform sampler2D tex_frg_3; -uniform sampler2D tex_frg_6; +uniform sampler2D Color_Gradient; +uniform sampler2D Luminosity_Gradient; @@ -56,42 +57,64 @@ void vertex() { vec2 n_out4p0 = UV; -// Texture2D:2 - vec4 n_out2p0 = texture(tex_vtx_2, n_out4p0); - - // Output:0 VERTEX = n_out5p0; UV = n_out4p0; - COLOR.rgb = vec3(n_out2p0.xyz); - COLOR.a = n_out2p0.x; } void fragment() { + vec4 n_out3p0; // Texture2D:3 - vec4 n_out3p0 = texture(tex_frg_3, UV); - - -// VectorDecompose:4 - float n_out4p0 = n_out3p0.x; - float n_out4p1 = n_out3p0.y; - float n_out4p2 = n_out3p0.z; - float n_out4p3 = n_out3p0.w; + n_out3p0 = texture(TEXTURE, UV); + float n_out3p1 = n_out3p0.r; + float n_out3p2 = n_out3p0.g; + float n_out3p4 = n_out3p0.a; + vec4 n_out6p0; // Texture2D:6 - vec4 n_out6p0 = texture(tex_frg_6, vec2(n_out4p0)); + n_out6p0 = texture(Color_Gradient, vec2(n_out3p1)); -// VectorOp:7 - vec3 n_out7p0 = vec3(n_out6p0.xyz) * vec3(n_out4p1); + vec3 n_out9p0; +// ColorFunc:9 + { + vec3 c = vec3(n_out6p0.xyz); + vec4 K = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); + vec4 p = mix(vec4(c.bg, K.wz), vec4(c.gb, K.xy), step(c.b, c.g)); + vec4 q = mix(vec4(p.xyw, c.r), vec4(c.r, p.yzx), step(p.x, c.r)); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + n_out9p0 = vec3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + } + float n_out9p1 = n_out9p0.r; + float n_out9p2 = n_out9p0.g; + + + vec4 n_out15p0; +// Texture2D:15 + n_out15p0 = texture(Luminosity_Gradient, vec2(n_out3p2)); + + +// VectorCompose:5 + vec3 n_out5p0 = vec3(n_out9p1, n_out9p2, n_out15p0.x); + + + vec3 n_out10p0; +// ColorFunc:10 + { + vec3 c = n_out5p0; + vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); + vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www); + n_out10p0 = c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); + } // Output:0 - COLOR.rgb = n_out7p0; - COLOR.a = n_out4p3; + COLOR.rgb = n_out10p0; + COLOR.a = n_out3p4; } @@ -99,24 +122,28 @@ void fragment() { mode = 1 flags/light_only = false nodes/vertex/0/position = Vector2(660, 160) -nodes/vertex/2/node = SubResource("VisualShaderNodeTexture_3ksh6") -nodes/vertex/2/position = Vector2(120, 260) nodes/vertex/4/node = SubResource("VisualShaderNodeInput_fwk6d") nodes/vertex/4/position = Vector2(-240, 160) nodes/vertex/5/node = SubResource("VisualShaderNodeInput_jobvs") nodes/vertex/5/position = Vector2(-240, 60) -nodes/vertex/connections = PackedInt32Array(4, 0, 2, 0, 2, 0, 0, 2, 2, 0, 0, 3, 5, 0, 0, 0, 4, 0, 0, 1) -nodes/fragment/0/position = Vector2(580, 240) +nodes/vertex/connections = PackedInt32Array(5, 0, 0, 0, 4, 0, 0, 1) +nodes/fragment/0/position = Vector2(1000, 80) nodes/fragment/3/node = SubResource("VisualShaderNodeTexture_n1g6q") -nodes/fragment/3/position = Vector2(-500, 60) -nodes/fragment/4/node = SubResource("VisualShaderNodeVectorDecompose_kuvpm") -nodes/fragment/4/position = Vector2(-200, 160) +nodes/fragment/3/position = Vector2(-820, 80) nodes/fragment/5/node = SubResource("VisualShaderNodeVectorCompose_m6etp") -nodes/fragment/5/position = Vector2(260, 160) +nodes/fragment/5/position = Vector2(500, -60) nodes/fragment/6/node = SubResource("VisualShaderNodeTexture_yjp8t") -nodes/fragment/6/position = Vector2(20, -60) -nodes/fragment/7/node = SubResource("VisualShaderNodeVectorOp_3315r") -nodes/fragment/7/position = Vector2(320, 400) -nodes/fragment/8/node = SubResource("VisualShaderNodeTexture2DParameter_n7htp") -nodes/fragment/8/position = Vector2(-780, 440) -nodes/fragment/connections = PackedInt32Array(3, 0, 4, 0, 4, 0, 5, 0, 4, 1, 5, 1, 4, 2, 5, 2, 4, 3, 0, 1, 4, 0, 6, 0, 6, 0, 7, 0, 7, 0, 0, 0, 4, 1, 7, 1) +nodes/fragment/6/position = Vector2(-340, -80) +nodes/fragment/9/node = SubResource("VisualShaderNodeColorFunc_yjp8t") +nodes/fragment/9/position = Vector2(220, -80) +nodes/fragment/10/node = SubResource("VisualShaderNodeColorFunc_n1g6q") +nodes/fragment/10/position = Vector2(740, -40) +nodes/fragment/11/node = SubResource("VisualShaderNodeTexture2DParameter_kuvpm") +nodes/fragment/11/position = Vector2(-880, -340) +nodes/fragment/13/node = SubResource("VisualShaderNodeInput_m6etp") +nodes/fragment/13/position = Vector2(-1120, 160) +nodes/fragment/14/node = SubResource("VisualShaderNodeTexture2DParameter_s3ye8") +nodes/fragment/14/position = Vector2(-880, 440) +nodes/fragment/15/node = SubResource("VisualShaderNodeTexture_x6ow4") +nodes/fragment/15/position = Vector2(-99.206764, 351.4282) +nodes/fragment/connections = PackedInt32Array(6, 0, 9, 0, 3, 1, 6, 0, 9, 1, 5, 0, 9, 2, 5, 1, 5, 0, 10, 0, 11, 0, 6, 2, 13, 0, 3, 2, 3, 4, 0, 1, 10, 0, 0, 0, 14, 0, 15, 2, 3, 2, 15, 0, 15, 0, 5, 2) diff --git a/shaders/void.tres b/shaders/void.tres new file mode 100644 index 0000000..3611a80 --- /dev/null +++ b/shaders/void.tres @@ -0,0 +1,26 @@ +[gd_resource type="Shader" format=3 uid="uid://hr8vdp56p4yo"] + +[resource] +code = "shader_type canvas_item; +render_mode blend_mix; + +uniform sampler2D void_view; + + + +void fragment() { +// Input:4 + vec2 n_out4p0 = SCREEN_UV; + + + vec4 n_out2p0; +// Texture2D:2 + n_out2p0 = texture(void_view, n_out4p0); + + +// Output:0 + COLOR.rgb = vec3(n_out2p0.xyz); + + +} +" diff --git a/shaders/void_composite.gdshader b/shaders/void_composite.gdshader new file mode 100644 index 0000000..4580f73 --- /dev/null +++ b/shaders/void_composite.gdshader @@ -0,0 +1,52 @@ +shader_type canvas_item; +render_mode unshaded; + +const vec2 OFFSETS[8] = { + vec2(-0.71, -0.71), + vec2(-1, 0), + vec2(-0.71, 0.71), + vec2(0, -1), + vec2(0, 1), + vec2(0.71, -0.71), + vec2(1, 0), + vec2(0.71, 0.71) +}; + +uniform bool ripple = false; +uniform float line_thickness : hint_range(0.0, 100.0); +uniform vec4 line_color : source_color = vec4(1.0); +uniform sampler2D screen_texture : hint_screen_texture, repeat_disable, filter_nearest; + +void fragment() { + // Get the size of the pixels on screen, and create a variable for out outline + vec2 size = line_thickness * SCREEN_PIXEL_SIZE; + float outline = 0.0; + + // Project in each direction, and add up the alpha of each projection. + // This is similar to picking a point, hit testing in 8 directions, and + // returning true if the hit test works + for (int i = 0; i < OFFSETS.length(); i++) { + vec2 coordinate_offset = SCREEN_UV + size * OFFSETS[i]; + outline += texture(screen_texture, coordinate_offset).a; + } + + // Force outline to 1 or 0 + //outline = sign(outline); + outline = .4 * (outline / 8.0) + .6 * sign(outline); + // Get the texture from the screen + vec4 c = texture(screen_texture, SCREEN_UV); + + + if(ripple){ + c.rgb = line_color.rgb; + COLOR = c; + }else{ + // If the alpha exists at least a little bit, amplify the colors. + // This ensures alpha and colors remain precise even when reading from screen. + if (c.a > 0.0001) { + c.rgb /= c.a; + } + COLOR = mix(c, line_color, outline - c.a); + } + +} \ No newline at end of file diff --git a/shaders/void_composite.gdshader.uid b/shaders/void_composite.gdshader.uid new file mode 100644 index 0000000..cbafc66 --- /dev/null +++ b/shaders/void_composite.gdshader.uid @@ -0,0 +1 @@ +uid://cenbje61a2wi6 diff --git a/shaders/void_ripple.gdshader b/shaders/void_ripple.gdshader new file mode 100644 index 0000000..ee2d362 --- /dev/null +++ b/shaders/void_ripple.gdshader @@ -0,0 +1,86 @@ +shader_type canvas_item; + +uniform float offset = 0; +uniform bool allow_out_of_bounds = true; +uniform float outline_thickness: hint_range(0.0, 16.0, 1.0) = 1.0; +uniform vec4 outline_color: source_color = vec4(1.0); + +bool is_inside_usquare(vec2 x) { + return x == clamp(x, vec2(0.0), vec2(1.0)); +} + +vec4 blend(vec4 bottom, vec4 top) { + float alpha = top.a + bottom.a * (1.0 - top.a); + if (alpha < 0.0001) return vec4(0.0); + + vec3 color = mix(bottom.rgb * bottom.a, top.rgb, top.a) / alpha; + return vec4(color, alpha); +} + +void vertex() { + float i; + float r = modf(TIME * .5 + offset, i); + float output_min = 1.0; + float output_max = 1.05; + r = output_min + r * (output_max - output_min); + VERTEX = vec2(980, 540) + VERTEX * r - vec2(980.0 * r,540.0 * r); + float ot = modf(outline_thickness, i); + if (allow_out_of_bounds) VERTEX += (UV * 2.0 - 1.0) * ot; +} + +void fragment() { + float i; + float ot = outline_thickness * (1.0 - modf(TIME * .5 + offset, i)); + if (ot > 0.0 && outline_color.a > 0.0) { + vec2 uv = UV; + vec4 texture_color = texture(TEXTURE, UV); + + if (allow_out_of_bounds) { + vec2 texture_pixel_size = vec2(1.0) / (vec2(1.0) / TEXTURE_PIXEL_SIZE + vec2(ot * 2.0)); + uv = (uv - texture_pixel_size * ot) * TEXTURE_PIXEL_SIZE / texture_pixel_size; + + if (is_inside_usquare(uv)) { + texture_color = texture(TEXTURE, uv); + } else { + texture_color = vec4(0.0); + } + } + + float alpha = 0.0; + + for (float y = 1.0; y <= ot; y++) { + for (float x = 0.0; x <= y; x++) { + if (length(vec2(x, y - 0.5)) > ot) break; + + float look_at_alpha; + vec2 look_at_uv[8] = { + uv + vec2(x, y) * TEXTURE_PIXEL_SIZE, + uv + vec2(-x, y) * TEXTURE_PIXEL_SIZE, + uv + vec2(x, -y) * TEXTURE_PIXEL_SIZE, + uv + vec2(-x, -y) * TEXTURE_PIXEL_SIZE, + uv + vec2(y, x) * TEXTURE_PIXEL_SIZE, + uv + vec2(-y, x) * TEXTURE_PIXEL_SIZE, + uv + vec2(y, -x) * TEXTURE_PIXEL_SIZE, + uv + vec2(-y, -x) * TEXTURE_PIXEL_SIZE + }; + + for (int i = 0; i < 8; i++) { + if (is_inside_usquare(look_at_uv[i])) { + look_at_alpha = texture(TEXTURE, look_at_uv[i]).a; + if (look_at_alpha > alpha) alpha = look_at_alpha; + if (1.0 - alpha < 0.0001) break; + } + } + + if (1.0 - alpha < 0.0001) break; + } + + if (1.0 - alpha < 0.0001) break; + } + vec4 oc = outline_color; + float i; + float r = modf(TIME * .5 + offset, i); + oc.a = outline_color.a * (1.0-r); + COLOR = vec4(oc.rgb, (alpha * oc.a) - texture_color.a); + } +} \ No newline at end of file diff --git a/shaders/void_ripple.gdshader.uid b/shaders/void_ripple.gdshader.uid new file mode 100644 index 0000000..3a5db63 --- /dev/null +++ b/shaders/void_ripple.gdshader.uid @@ -0,0 +1 @@ +uid://2kgpm3f7ydt7 diff --git a/templates/guildhall.tscn b/templates/guildhall.tscn index 73770a8..7317245 100644 --- a/templates/guildhall.tscn +++ b/templates/guildhall.tscn @@ -1,16 +1,45 @@ -[gd_scene load_steps=15 format=4 uid="uid://cd08dp16bixfv"] +[gd_scene load_steps=33 format=4 uid="uid://cd08dp16bixfv"] [ext_resource type="Script" uid="uid://ccorfvcfa84gf" path="res://scripts/guildhall.gd" id="1_lsinl"] [ext_resource type="TileSet" uid="uid://6im0g3eg6sr4" path="res://test_tiles.tres" id="1_qel1r"] [ext_resource type="Script" uid="uid://dolqtw1ye4ras" path="res://scripts/player.gd" id="2_5n4iw"] +[ext_resource type="Shader" uid="uid://cenbje61a2wi6" path="res://shaders/void_composite.gdshader" id="2_ggqxp"] [ext_resource type="Texture2D" uid="uid://83ayd5rg7x8l" path="res://graphics/reception-table.png" id="3_13vc8"] [ext_resource type="Texture2D" uid="uid://cg6ptmynq0aq0" path="res://graphics/basic-sprite.png" id="4_l3mu1"] [ext_resource type="PackedScene" uid="uid://cf6nnjyp8kv78" path="res://templates/receptionist.tscn" id="5_l3mu1"] +[ext_resource type="Script" uid="uid://2g4ja3a7o2l" path="res://scripts/void_ripple.gd" id="5_nfvtf"] [ext_resource type="PackedScene" uid="uid://b3mksvn2jf7e0" path="res://templates/quest_board.tscn" id="7_hph4e"] [ext_resource type="Script" uid="uid://bh54wpqgau8hc" path="res://scripts/npc.gd" id="8_nhrwr"] [ext_resource type="Texture2D" uid="uid://dcrhry67g00vk" path="res://graphics/pom.png" id="9_4bidn"] [ext_resource type="PackedScene" uid="uid://jbqw0n6dlj08" path="res://templates/speech_bubble.tscn" id="10_6hdsl"] [ext_resource type="Texture2D" uid="uid://cg42wsmb3ocfq" path="res://graphics/first-guild.png" id="11_4bidn"] +[ext_resource type="Shader" uid="uid://hr8vdp56p4yo" path="res://shaders/void.tres" id="12_0ydii"] +[ext_resource type="Texture2D" uid="uid://bbh444vapab3y" path="res://graphics/voidcircle.png" id="13_0xaku"] +[ext_resource type="Shader" uid="uid://dvdm8x66gwu2v" path="res://shaders/starfield.tres" id="14_0aygh"] +[ext_resource type="Texture2D" uid="uid://bhupleoa6pkkb" path="res://external/test_star.png" id="15_b2pr6"] +[ext_resource type="Texture2D" uid="uid://ct7y401wpmcdf" path="res://external/test_star2.png" id="16_b2pr6"] + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_nfvtf"] +shader = ExtResource("2_ggqxp") +shader_parameter/ripple = false +shader_parameter/line_thickness = 3.8570001832075 +shader_parameter/line_color = Color(0.7666664, 0, 1, 1) + +[sub_resource type="ViewportTexture" id="ViewportTexture_0ydii"] +viewport_path = NodePath("SubViewport") + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_28dkg"] +resource_local_to_scene = true +shader = ExtResource("12_0ydii") +shader_parameter/void_view = SubResource("ViewportTexture_0ydii") + +[sub_resource type="Curve" id="Curve_0aygh"] +_data = [Vector2(0, 1), 0.0, 0.0, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0] +point_count = 2 + +[sub_resource type="Gradient" id="Gradient_ggqxp"] +offsets = PackedFloat32Array(0, 0.27842227, 0.7447796, 0.9976798, 1) +colors = PackedColorArray(1, 0, 1, 1, 0.6414714, 0, 1, 1, 0.3529412, 0, 1, 1, 0.13464576, 8.6924134e-05, 0.43542284, 1, 0.3529412, 0, 1, 1) [sub_resource type="NavigationPolygon" id="NavigationPolygon_w7eqs"] vertices = PackedVector2Array(335, 241, 335, 111.36719, 378.1875, 129.53125, 399, 241, 395.97656, 137, 523.21875, 137, 497, 241, 624.0469, 71.046875, 689, 30, 689, 241, 588.78125, 107.5, 497, 305, 399, 305, 630.75, 30, 582.15625, 110.47656) @@ -28,10 +57,106 @@ vertices = PackedVector2Array(112, 144, 14, 144, 14, -69, 112, -69) polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2, 3)]) outlines = Array[PackedVector2Array]([PackedVector2Array(4, -79, 122, -79, 122, 154, 4, 154)]) +[sub_resource type="Gradient" id="Gradient_28dkg"] +offsets = PackedFloat32Array(0, 0.15085158, 0.63017035, 1) +colors = PackedColorArray(0, 0, 0, 1, 0, 0.07479378, 0.21630663, 1, 0.11818864, 0.00013856843, 0.3326036, 1, 1.1310726e-06, 1.2032687e-07, 0.37330782, 1) + +[sub_resource type="FastNoiseLite" id="FastNoiseLite_ggqxp"] + +[sub_resource type="NoiseTexture2D" id="NoiseTexture2D_lsfle"] +width = 384 +height = 216 +noise = SubResource("FastNoiseLite_ggqxp") +color_ramp = SubResource("Gradient_28dkg") +seamless = true +normalize = false + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_ggqxp"] +shader = ExtResource("14_0aygh") +shader_parameter/stars_speed = Vector2(25, 0) +shader_parameter/stars_density = 0.0050000002375 + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_b2pr6"] +shader = ExtResource("14_0aygh") +shader_parameter/stars_speed = Vector2(10, 0) +shader_parameter/stars_density = 0.0030000001425 + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_o230c"] +shader = ExtResource("14_0aygh") +shader_parameter/stars_speed = Vector2(15, 0) +shader_parameter/stars_density = 0.0 + [node name="Guildhall" type="Node2D"] script = ExtResource("1_lsinl") +[node name="CanvasLayer" type="CanvasLayer" parent="."] +layer = -1 +scale = Vector2(2, 2) +transform = Transform2D(2, 0, 0, 2, 0, 0) + +[node name="ColorRect" type="ColorRect" parent="CanvasLayer"] +anchors_preset = -1 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -801.5 +offset_top = -413.5 +offset_right = -801.5 +offset_bottom = -413.5 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 +color = Color(0.018666686, 0, 0.08, 1) + +[node name="CanvasGroup" type="CanvasGroup" parent="."] +material = SubResource("ShaderMaterial_nfvtf") +position = Vector2(509, 176) +scale = Vector2(5, 5) + +[node name="CPUParticles2D" type="CPUParticles2D" parent="CanvasGroup"] +material = SubResource("ShaderMaterial_28dkg") +scale = Vector2(0.99999994, 0.99999994) +amount = 1000 +texture = ExtResource("13_0xaku") +preprocess = 5.0 +speed_scale = 0.13 +emission_shape = 2 +emission_sphere_radius = 30.0 +spread = 180.0 +gravity = Vector2(0, 0) +initial_velocity_min = 100.0 +initial_velocity_max = 120.0 +linear_accel_min = -300.0 +linear_accel_max = -150.0 +scale_amount_min = 1.1 +scale_amount_max = 4.2 +scale_amount_curve = SubResource("Curve_0aygh") + +[node name="VoidRipple" type="Node2D" parent="."] +z_index = 1 +script = ExtResource("5_nfvtf") +speed = 0.010000000009313226 +ripple_width = 4.5 +gradient = SubResource("Gradient_ggqxp") + +[node name="Center" type="Node2D" parent="VoidRipple"] +position = Vector2(486, 158) + +[node name="Line2D" type="Line2D" parent="VoidRipple"] +visible = false +points = PackedVector2Array(312, 447, 312, 484, 245, 486, 232, 422, 249, 421, 253, 17, 244, 17, 241, -51, 303, -51, 306, -21, 701, -20, 701, -47, 771, -47, 770, 16, 759, 17, 768, 425, 781, 425, 767, 485, 700, 485, 700, 449, 544, 446, 544, 462, 508, 460, 500, 431, 391, 431, 386, 460, 347, 464, 347, 447, 312, 447) +width = 5.0 + +[node name="Line2D2" type="Line2D" parent="VoidRipple"] +z_index = -1 +points = PackedVector2Array(312, 444, 312, 484, 245, 484, 241, 425, 253, 425, 253, 17, 244, 17, 241, -51, 303, -51, 306, -21, 701, -20, 701, -47, 771, -47, 767, 16, 750, 16, 758, 428, 775, 428, 767, 485, 700, 485, 700, 446, 544, 446, 545, 457, 508, 457, 500, 431, 391, 431, 386, 457, 348, 457, 348, 444, 312, 444) +width = 50.0 +default_color = Color(0, 0, 0, 0.46666667) +joint_mode = 2 +round_precision = 16 +antialiased = true + [node name="RoomRegion" type="NavigationRegion2D" parent="."] +z_index = 1 navigation_polygon = SubResource("NavigationPolygon_w7eqs") [node name="TileMapLayer" type="TileMapLayer" parent="RoomRegion"] @@ -45,15 +170,16 @@ tile_map_data = PackedByteArray("AAANAAAAAAAKABEAAAAOAAAAAAAKABEAAAAPAAAAAAAKABE tile_set = ExtResource("1_qel1r") [node name="Sprite2D" type="Sprite2D" parent="."] +z_index = 1 position = Vector2(497, 136) texture = ExtResource("11_4bidn") [node name="Sprites" type="Node2D" parent="."] -z_index = 1 +z_index = 2 y_sort_enabled = true [node name="Reception Desk" type="StaticBody2D" parent="Sprites"] -position = Vector2(457, 112) +position = Vector2(423, 103) [node name="Sprite2D" type="Sprite2D" parent="Sprites/Reception Desk"] texture = ExtResource("3_13vc8") @@ -63,7 +189,7 @@ offset = Vector2(0, -80) polygon = PackedVector2Array(-86, -160, -152, -160, -152, -107, -148, -75, -128, -35, -57, 0, 56, 0, 127, -34, 148, -75, 152, -107, 152, -160, 86, -160, 86, -115, 75, -93, 52, -81, -51, -81, -75, -92, -86, -114) [node name="Receptionist" parent="Sprites" instance=ExtResource("5_l3mu1")] -position = Vector2(457, 32) +position = Vector2(492, 24) [node name="Queue" parent="Sprites/Receptionist" index="3"] position = Vector2(0, 97) @@ -92,7 +218,7 @@ navigation_polygon = SubResource("NavigationPolygon_l3mu1") position = Vector2(654, -2) [node name="Npc" type="CharacterBody2D" parent="."] -z_index = 1 +z_index = 2 position = Vector2(347, 3) script = ExtResource("8_nhrwr") metadata/_custom_type_script = "uid://bh54wpqgau8hc" @@ -112,4 +238,65 @@ position = Vector2(44, -93) path_desired_distance = 30.0 avoidance_enabled = true +[node name="SubViewport" type="SubViewport" parent="."] +size = Vector2i(1920, 1080) + +[node name="ColorRect" type="ColorRect" parent="SubViewport"] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 +color = Color(0, 0, 0.12941177, 1) + +[node name="Parallax2D" type="Parallax2D" parent="SubViewport"] +repeat_size = Vector2(1920, 1080) +autoscroll = Vector2(-10, 0) +follow_viewport = false +ignore_camera_scroll = true + +[node name="TextureRect2" type="TextureRect" parent="SubViewport/Parallax2D"] +anchors_preset = -1 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_right = 1920.0 +offset_bottom = 1080.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 +texture = SubResource("NoiseTexture2D_lsfle") + +[node name="TextureRect" type="TextureRect" parent="SubViewport"] +modulate = Color(0.45840502, 0.45840508, 0.45840502, 1) +material = SubResource("ShaderMaterial_ggqxp") +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 +texture = ExtResource("15_b2pr6") + +[node name="TextureRect4" type="TextureRect" parent="SubViewport"] +modulate = Color(0.45840502, 0.45840508, 0.45840502, 1) +material = SubResource("ShaderMaterial_b2pr6") +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 +texture = ExtResource("15_b2pr6") + +[node name="TextureRect3" type="TextureRect" parent="SubViewport"] +material = SubResource("ShaderMaterial_o230c") +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 +texture = ExtResource("16_b2pr6") + [editable path="Sprites/Receptionist"] diff --git a/templates/levelup_banner.tscn b/templates/levelup_banner.tscn new file mode 100644 index 0000000..9f2da6e --- /dev/null +++ b/templates/levelup_banner.tscn @@ -0,0 +1,8 @@ +[gd_scene load_steps=3 format=3 uid="uid://pqaltokmp6y4"] + +[ext_resource type="Texture2D" uid="uid://p7bvumalu3cs" path="res://graphics/questview/levelup.png" id="1_8v2d1"] +[ext_resource type="Script" uid="uid://cv7wuquahc53c" path="res://scripts/quest_notice_banner.gd" id="2_0aj2h"] + +[node name="LevelupBanner" type="Sprite2D"] +texture = ExtResource("1_8v2d1") +script = ExtResource("2_0aj2h") diff --git a/templates/npc_profile_window.tscn b/templates/npc_profile_window.tscn index 6ccc265..95d3f8d 100644 --- a/templates/npc_profile_window.tscn +++ b/templates/npc_profile_window.tscn @@ -1,9 +1,8 @@ -[gd_scene load_steps=15 format=3 uid="uid://bktxswsjql86p"] +[gd_scene load_steps=14 format=3 uid="uid://bktxswsjql86p"] [ext_resource type="Script" uid="uid://ccsiubi5y75qg" path="res://scripts/npc_profile_window.gd" id="1_4xbne"] [ext_resource type="Texture2D" uid="uid://cbt6po52ad37x" path="res://external/profile-window.png" id="2_s0l16"] [ext_resource type="Texture2D" uid="uid://bldpiytpdrge6" path="res://graphics/icon.svg" id="3_wy4e0"] -[ext_resource type="Texture2D" uid="uid://bblr27slj6ap0" path="res://graphics/portraits/farmer_f.png" id="4_wafq0"] [ext_resource type="Theme" uid="uid://dlobmn4esosk3" path="res://styles/stat_font.tres" id="5_wafq0"] [ext_resource type="FontFile" uid="uid://cju0vb3cw5qoj" path="res://fonts/Bagnard.otf" id="6_ktflt"] [ext_resource type="Texture2D" uid="uid://bnyl6eaynixm5" path="res://graphics/ui/gear-heading.png" id="6_tiew1"] @@ -75,6 +74,7 @@ offset_right = 629.0 offset_bottom = 839.0 [node name="PortraitFrame" type="TextureRect" parent="."] +unique_name_in_owner = true self_modulate = Color(1, 1, 1, 0) clip_contents = true custom_minimum_size = Vector2(153, 153) @@ -86,15 +86,6 @@ offset_bottom = 256.0 texture = ExtResource("3_wy4e0") expand_mode = 1 -[node name="Portrait" type="TextureRect" parent="PortraitFrame"] -unique_name_in_owner = true -layout_mode = 0 -offset_right = 76.5 -offset_bottom = 76.5 -scale = Vector2(2, 2) -texture = ExtResource("4_wafq0") -expand_mode = 1 - [node name="NameLabel" type="Label" parent="."] unique_name_in_owner = true anchors_preset = -1 diff --git a/templates/portrait.tscn b/templates/portrait.tscn new file mode 100644 index 0000000..a12f231 --- /dev/null +++ b/templates/portrait.tscn @@ -0,0 +1,187 @@ +[gd_scene load_steps=32 format=3 uid="uid://d4f8grsq0umdo"] + +[ext_resource type="Script" uid="uid://m86jmtwv1a22" path="res://scripts/adventurer_portrait.gd" id="1_0hknt"] +[ext_resource type="Script" uid="uid://cntcpe7ofdvyx" path="res://external/test portrait/test.gd" id="1_fcl1b"] +[ext_resource type="Texture2D" uid="uid://dj6fagfp2sbrx" path="res://external/test portrait/farmer_f/hat-bg.png" id="2_pek02"] +[ext_resource type="Shader" uid="uid://cru1otvka0qn5" path="res://external/test portrait/variant_color.gdshader" id="3_b42dv"] +[ext_resource type="Texture2D" uid="uid://can8npg0ufr3f" path="res://external/test portrait/farmer_f/hair_bg.png" id="4_snu43"] +[ext_resource type="Script" uid="uid://cdi0oxcug1hup" path="res://scripts/color_variant.gd" id="5_6ofx4"] +[ext_resource type="Texture2D" uid="uid://crrd8mpcuync2" path="res://external/test portrait/farmer_f/body.png" id="6_4lhir"] +[ext_resource type="Material" uid="uid://btx1o4kx78cbx" path="res://external/test portrait/tri-skin.tres" id="7_ufq70"] +[ext_resource type="Texture2D" uid="uid://dbdjaye6srxhx" path="res://external/test portrait/farmer_f/head.png" id="8_n24t2"] +[ext_resource type="Texture2D" uid="uid://li44lgsa0ky" path="res://external/test portrait/farmer_f/eyes_shadow.png" id="9_d4dbv"] +[ext_resource type="Texture2D" uid="uid://x4e86o28672u" path="res://external/test portrait/farmer_f/brow_shadow-2.png" id="10_8lmmt"] +[ext_resource type="Texture2D" uid="uid://cru775pghpate" path="res://external/test portrait/farmer_f/hair_fg_shadow.png" id="11_mrkia"] +[ext_resource type="Texture2D" uid="uid://csp7xbtu0tpn7" path="res://external/test portrait/farmer_f/eye-white-1.png" id="12_fa2yd"] +[ext_resource type="Texture2D" uid="uid://mygmunn3voie" path="res://external/test portrait/farmer_f/eyes-iris-1.png" id="14_36lkf"] +[ext_resource type="Texture2D" uid="uid://wnkr20dtf734" path="res://external/test portrait/farmer_f/eyes-lashes-1.png" id="15_n8rvo"] +[ext_resource type="Texture2D" uid="uid://caow8dqiog7j4" path="res://external/test portrait/farmer_f/ear.png" id="16_c5fh3"] +[ext_resource type="Texture2D" uid="uid://0dwdi7m62trg" path="res://external/test portrait/gradients/hair/(c)red.tres" id="17_ds2dq"] +[ext_resource type="Texture2D" uid="uid://vt17lekvchdg" path="res://external/test portrait/farmer_f/hair_fg.png" id="17_vd0s3"] +[ext_resource type="Texture2D" uid="uid://dyeu4kwwnxjn5" path="res://external/test portrait/farmer_f/hat_fg.png" id="18_ad0yo"] +[ext_resource type="Texture2D" uid="uid://bqmnbsxgbrcpw" path="res://external/test portrait/gradients/hair/(l)red.tres" id="18_yxc1x"] +[ext_resource type="Texture2D" uid="uid://brmta1rtiau4a" path="res://external/test portrait/farmer_f/brows-2.png" id="19_oxjqg"] +[ext_resource type="Texture2D" uid="uid://c3wwe6r000gpq" path="res://external/test portrait/farmer_f/composite.png" id="25_e6f65"] + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_6ofx4"] +shader = ExtResource("3_b42dv") + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_4lhir"] +shader = ExtResource("3_b42dv") + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_ufq70"] +shader = ExtResource("3_b42dv") + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_n24t2"] +shader = ExtResource("3_b42dv") + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_d4dbv"] +shader = ExtResource("3_b42dv") + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_8lmmt"] +resource_local_to_scene = true +shader = ExtResource("3_b42dv") + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_mrkia"] +shader = ExtResource("3_b42dv") + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_fa2yd"] +shader = ExtResource("3_b42dv") +shader_parameter/color_gradient = ExtResource("17_ds2dq") +shader_parameter/luminosity_gradient = ExtResource("18_yxc1x") + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_5uixj"] +shader = ExtResource("3_b42dv") + +[node name="Control" type="Control"] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +script = ExtResource("1_fcl1b") + +[node name="Portrait" type="Control" parent="."] +anchors_preset = 0 +offset_right = 40.0 +offset_bottom = 40.0 +scale = Vector2(0.5, 0.5) +script = ExtResource("1_0hknt") + +[node name="Hat BG" type="TextureRect" parent="Portrait"] +layout_mode = 0 +offset_right = 128.0 +offset_bottom = 128.0 +texture = ExtResource("2_pek02") + +[node name="Hair BG" type="TextureRect" parent="Portrait"] +material = SubResource("ShaderMaterial_6ofx4") +layout_mode = 0 +offset_right = 256.0 +offset_bottom = 256.0 +texture = ExtResource("4_snu43") +script = ExtResource("5_6ofx4") +type = 1 + +[node name="Body" type="TextureRect" parent="Portrait"] +layout_mode = 0 +offset_right = 128.0 +offset_bottom = 128.0 +texture = ExtResource("6_4lhir") + +[node name="Head" type="TextureRect" parent="Portrait"] +material = SubResource("ShaderMaterial_4lhir") +layout_mode = 0 +offset_right = 128.0 +offset_bottom = 128.0 +texture = ExtResource("8_n24t2") +script = ExtResource("5_6ofx4") + +[node name="Eye Shadows" type="TextureRect" parent="Portrait"] +material = SubResource("ShaderMaterial_ufq70") +layout_mode = 0 +offset_right = 128.0 +offset_bottom = 128.0 +texture = ExtResource("9_d4dbv") +script = ExtResource("5_6ofx4") + +[node name="Brow Shadow" type="TextureRect" parent="Portrait"] +material = SubResource("ShaderMaterial_n24t2") +layout_mode = 0 +offset_right = 128.0 +offset_bottom = 128.0 +texture = ExtResource("10_8lmmt") +script = ExtResource("5_6ofx4") + +[node name="Hair FG Shadow" type="TextureRect" parent="Portrait"] +material = SubResource("ShaderMaterial_d4dbv") +layout_mode = 0 +offset_right = 128.0 +offset_bottom = 128.0 +texture = ExtResource("11_mrkia") +script = ExtResource("5_6ofx4") + +[node name="Eyewhites" type="TextureRect" parent="Portrait"] +layout_mode = 0 +offset_right = 128.0 +offset_bottom = 128.0 +texture = ExtResource("12_fa2yd") + +[node name="Irises" type="TextureRect" parent="Portrait"] +material = SubResource("ShaderMaterial_8lmmt") +layout_mode = 0 +offset_right = 128.0 +offset_bottom = 128.0 +texture = ExtResource("14_36lkf") +script = ExtResource("5_6ofx4") +type = 2 + +[node name="Eyelashes" type="TextureRect" parent="Portrait"] +material = SubResource("ShaderMaterial_mrkia") +layout_mode = 0 +offset_right = 128.0 +offset_bottom = 128.0 +texture = ExtResource("15_n8rvo") +script = ExtResource("5_6ofx4") +type = 1 + +[node name="Ear" type="TextureRect" parent="Portrait"] +material = ExtResource("7_ufq70") +layout_mode = 0 +offset_right = 128.0 +offset_bottom = 128.0 +texture = ExtResource("16_c5fh3") +script = ExtResource("5_6ofx4") + +[node name="Hair FG" type="TextureRect" parent="Portrait"] +material = SubResource("ShaderMaterial_fa2yd") +layout_mode = 0 +offset_right = 128.0 +offset_bottom = 128.0 +texture = ExtResource("17_vd0s3") +script = ExtResource("5_6ofx4") +type = 1 + +[node name="Hat FG" type="TextureRect" parent="Portrait"] +layout_mode = 0 +offset_right = 128.0 +offset_bottom = 128.0 +texture = ExtResource("18_ad0yo") + +[node name="Brows" type="TextureRect" parent="Portrait"] +material = SubResource("ShaderMaterial_5uixj") +layout_mode = 0 +offset_right = 128.0 +offset_bottom = 128.0 +texture = ExtResource("19_oxjqg") +script = ExtResource("5_6ofx4") +type = 1 + +[node name="Composite" type="TextureRect" parent="."] +visible = false +layout_mode = 0 +offset_left = 123.0 +offset_right = 251.0 +offset_bottom = 128.0 +texture = ExtResource("25_e6f65") diff --git a/templates/questor_sprite.tscn b/templates/questor_sprite.tscn index 26c7469..fdef2fe 100644 --- a/templates/questor_sprite.tscn +++ b/templates/questor_sprite.tscn @@ -1,6 +1,7 @@ -[gd_scene load_steps=7 format=3 uid="uid://cdtpyg5ohniax"] +[gd_scene load_steps=8 format=3 uid="uid://cdtpyg5ohniax"] [ext_resource type="Script" uid="uid://ce0vugvrwvppb" path="res://scripts/questor_sprite.gd" id="1_0ev5i"] +[ext_resource type="Texture2D" uid="uid://bu0e077vc8qo1" path="res://graphics/questview/lvlup-circle.png" id="2_nqdtq"] [ext_resource type="Texture2D" uid="uid://c5d0u7ir1y0t2" path="res://graphics/testchar.png" id="2_w1b7t"] [sub_resource type="Animation" id="Animation_7jhts"] @@ -65,6 +66,16 @@ offset_right = 89.0 offset_bottom = 274.0 script = ExtResource("1_0ev5i") +[node name="GroundFX" type="Node2D" parent="."] +position = Vector2(0, -30) + +[node name="LevelupCircle" type="Sprite2D" parent="."] +visible = false +position = Vector2(0, -30) +texture = ExtResource("2_nqdtq") +hframes = 4 +vframes = 2 + [node name="Sprite" type="Sprite2D" parent="."] position = Vector2(0, -53) texture = ExtResource("2_w1b7t") @@ -76,3 +87,6 @@ libraries = { &"": SubResource("AnimationLibrary_pylgq") } autoplay = "running" + +[node name="BannerOffset" type="Node2D" parent="."] +position = Vector2(0, -94) diff --git a/templates/top_menu.tscn b/templates/top_menu.tscn index 8efa24d..8078533 100644 --- a/templates/top_menu.tscn +++ b/templates/top_menu.tscn @@ -1,8 +1,9 @@ -[gd_scene load_steps=17 format=3 uid="uid://c7jagw4y7w42l"] +[gd_scene load_steps=16 format=3 uid="uid://c7jagw4y7w42l"] [ext_resource type="Texture2D" uid="uid://c0e0iw8osv0qh" path="res://graphics/top-icon-members.png" id="1_krxmy"] [ext_resource type="Script" uid="uid://wyv0gt0ww6fp" path="res://scripts/top_menu.gd" id="1_o3fau"] [ext_resource type="Texture2D" uid="uid://hc1lmivi4bjs" path="res://graphics/top-icon-members-hover.png" id="2_370kg"] +[ext_resource type="Texture2D" uid="uid://w8xkghjv3t6r" path="res://graphics/shelf.png" id="2_hoboc"] [ext_resource type="Texture2D" uid="uid://dkb0bhk4t15fh" path="res://graphics/guild-mopt.png" id="2_kvelj"] [ext_resource type="Texture2D" uid="uid://dlm6ei0v0tokv" path="res://graphics/guild-mopt-hover.png" id="3_jgt6v"] [ext_resource type="Texture2D" uid="uid://c2iyta0nbba4v" path="res://graphics/top-icon-quests.png" id="3_o3fau"] @@ -15,12 +16,6 @@ [ext_resource type="Texture2D" uid="uid://cnrqig3gojcls" path="res://graphics/options-mopt.png" id="10_acyux"] [ext_resource type="Texture2D" uid="uid://dupdvrthv3edd" path="res://graphics/options-mopt-hover.png" id="11_xu0sb"] -[sub_resource type="Gradient" id="Gradient_7d00h"] - -[sub_resource type="GradientTexture1D" id="GradientTexture1D_len8m"] -gradient = SubResource("Gradient_7d00h") -width = 1 - [node name="TopMenu" type="Control"] layout_mode = 3 anchors_preset = 15 @@ -33,9 +28,9 @@ script = ExtResource("1_o3fau") [node name="Menu" type="Control" parent="."] anchors_preset = 0 -offset_left = 4.0 +offset_left = 15.0 offset_top = 69.0 -offset_right = 44.0 +offset_right = 55.0 offset_bottom = 109.0 scale = Vector2(2, 2) @@ -43,54 +38,54 @@ scale = Vector2(2, 2) layout_mode = 0 offset_right = 234.5 offset_bottom = 19.0 -texture = SubResource("GradientTexture1D_len8m") +texture = ExtResource("2_hoboc") [node name="GuildButton" type="TextureButton" parent="Menu"] layout_mode = 0 -offset_left = 2.5 -offset_top = -25.5 -offset_right = 50.5 -offset_bottom = 22.5 +offset_left = 7.0 +offset_top = -28.5 +offset_right = 55.0 +offset_bottom = 19.5 texture_normal = ExtResource("2_kvelj") texture_pressed = ExtResource("3_jgt6v") texture_hover = ExtResource("3_jgt6v") [node name="MembersButton" type="TextureButton" parent="Menu"] layout_mode = 0 -offset_left = 44.0 -offset_top = -31.5 -offset_right = 92.0 -offset_bottom = 16.5 +offset_left = 55.0 +offset_top = -25.5 +offset_right = 103.0 +offset_bottom = 22.5 texture_normal = ExtResource("1_krxmy") texture_pressed = ExtResource("2_370kg") texture_hover = ExtResource("2_370kg") [node name="QuestsButton" type="TextureButton" parent="Menu"] layout_mode = 0 -offset_left = 89.0 -offset_top = -32.5 -offset_right = 137.0 -offset_bottom = 15.5 +offset_left = 102.5 +offset_top = -26.5 +offset_right = 150.5 +offset_bottom = 21.5 texture_normal = ExtResource("3_o3fau") texture_pressed = ExtResource("4_ehkcg") texture_hover = ExtResource("4_ehkcg") [node name="PoliciesButton" type="TextureButton" parent="Menu"] layout_mode = 0 -offset_left = 141.0 -offset_top = -32.0 -offset_right = 189.0 -offset_bottom = 16.0 +offset_left = 151.0 +offset_top = -26.5 +offset_right = 199.0 +offset_bottom = 21.5 texture_normal = ExtResource("5_3nqsh") texture_pressed = ExtResource("6_8h6j7") texture_hover = ExtResource("6_8h6j7") [node name="OptionsButton" type="TextureButton" parent="Menu"] layout_mode = 0 -offset_left = 186.5 -offset_top = -25.5 -offset_right = 234.5 -offset_bottom = 22.5 +offset_left = 199.5 +offset_top = -16.5 +offset_right = 247.5 +offset_bottom = 31.5 texture_normal = ExtResource("10_acyux") texture_pressed = ExtResource("11_xu0sb") texture_hover = ExtResource("11_xu0sb")