diff --git a/addons/sprite_frames_exported_textures/sprite_frames_helper.gd b/addons/sprite_frames_exported_textures/sprite_frames_helper.gd index e96dd94c3a..dffd4083e3 100644 --- a/addons/sprite_frames_exported_textures/sprite_frames_helper.gd +++ b/addons/sprite_frames_exported_textures/sprite_frames_helper.gd @@ -12,7 +12,7 @@ static func base_textures_used(sprite_frames: SpriteFrames) -> Array: var texture: Texture2D = sprite_frames.get_frame_texture( animation_name, sprite_frame_idx ) - var base_texture: Texture2D = _get_base_texture(sprite_frames, texture) + var base_texture: Texture2D = _get_base_texture(texture) if base_texture and not base_texture in textures: textures.push_back(base_texture) @@ -20,14 +20,12 @@ static func base_textures_used(sprite_frames: SpriteFrames) -> Array: return textures -static func _get_base_texture(frames: SpriteFrames, texture: Texture2D) -> Texture2D: - var is_included_in_other_resource: bool = not FileAccess.file_exists(texture.resource_path) - - if not is_included_in_other_resource: +static func _get_base_texture(texture: Texture2D) -> Texture2D: + if FileAccess.file_exists(texture.resource_path): return texture if texture is AtlasTexture: - return _get_base_texture(frames, texture.atlas) + return _get_base_texture(texture.atlas) return null @@ -42,10 +40,11 @@ static func replace_texture( var texture: Texture2D = sprite_frames.get_frame_texture( animation_name, sprite_frame_idx ) - if old_base_texture == _get_base_texture(sprite_frames, texture): - _replace_base_texture( - sprite_frames, animation_name, sprite_frame_idx, texture, new_texture - ) + if old_base_texture and old_base_texture != _get_base_texture(texture): + continue + _replace_base_texture( + sprite_frames, animation_name, sprite_frame_idx, texture, new_texture + ) static func _replace_base_texture( @@ -56,7 +55,7 @@ static func _replace_base_texture( new_texture: Texture2D ) -> void: var is_included_in_other_resource: bool = not FileAccess.file_exists(old_texture.resource_path) - var old_base_texture = _get_base_texture(frames, old_texture) + var old_base_texture = _get_base_texture(old_texture) if not is_included_in_other_resource: var frame_duration = frames.get_frame_duration(anim_name, sprite_frame_idx) diff --git a/scenes/game_elements/characters/components/character_randomizer.gd b/scenes/game_elements/characters/components/character_randomizer.gd new file mode 100644 index 0000000000..8a8eca8d1d --- /dev/null +++ b/scenes/game_elements/characters/components/character_randomizer.gd @@ -0,0 +1,152 @@ +# SPDX-FileCopyrightText: The Threadbare Authors +# SPDX-License-Identifier: MPL-2.0 +@tool +extends Node2D +## @experimental +## +## Provide a single button to randomize various aspects of a character. +## +## Using a seed to consistently apply the randomizations in game, to persist them without +## the use of Editable Children, and to allow undo/redo. +## [br][br] +## [b]Note:[/b] Editable Children can still be used to customize a single aspect +## of the randomization. For example if you are happy with the results of the "Randomize" +## button, except for the skin color. +## [br][br] +## There is also logic to set the same random progress to all SpriteFrames animations. +## Basically what [[RandomFrameSpriteBehavior]] does, but to an array. +## [br][br] +## Also can look at sides. Defaults to look at left, and scales everything by -1 to look +## at right. + +## The random seed of this character. Setting another character to the same seed +## will make them identical. Setting it to zero will reset the skin color. +@export var character_seed: int + +## Where is the character facing. Relative to the character. +@export var look_at_side: Enums.LookAtSide = Enums.LookAtSide.LEFT: + set = _set_look_at_side + +## Click this button to create a random character. +@export_tool_button("Randomize") var randomize_character_button: Callable = randomize_character + +## The inner AnimatedSprite2D nodes. +var animated_sprites: Array[AnimatedSprite2D] = [] + +## The inner nodes that recolor the character skin. +var skin_recolor_nodes: Array[CelShadingRecolor] = [] + +## The inner nodes that randomize sprites textures. +var random_texture_nodes: Array[RandomTextureSpriteBehavior] = [] + +var _undoredo: Object # EditorUndoRedoManager + +var _previous_look_at_side: Enums.LookAtSide = Enums.LookAtSide.UNSPECIFIED + + +## Randomize the skin color and textures of the character. +## [br][br] +## Do it in a consistent way by first seeding the default random number generator +## with the [member character_seed]. +func apply_character_randomizations() -> void: + seed(character_seed) + + if skin_recolor_nodes: + var new_skin_medium_color: Color + skin_recolor_nodes[-1].set_random_skin_color() + new_skin_medium_color = skin_recolor_nodes[-1].medium_color + for n in skin_recolor_nodes: + n.automatic_shades = true + n.medium_color = new_skin_medium_color + + for n in random_texture_nodes: + n.randomize_texture() + + +## Set a random seed and randomize the character. +## [br][br] +## With undo/redo when running in the editor. +func randomize_character() -> void: + var new_character_seed := randi() + if _undoredo: + _undoredo.create_action("Randomize character") + _undoredo.add_undo_property(self, "character_seed", character_seed) + _undoredo.add_do_property(self, "character_seed", new_character_seed) + _undoredo.add_undo_method(self, "apply_character_randomizations") + _undoredo.add_do_method(self, "apply_character_randomizations") + _undoredo.commit_action() + else: + character_seed = new_character_seed + apply_character_randomizations() + + +func _ready() -> void: + _setup_nodes() + + if character_seed: + apply_character_randomizations() + + if Engine.is_editor_hint(): + var plugin: Node = ClassDB.instantiate("EditorPlugin") + _undoredo = plugin.get_undo_redo() + plugin.queue_free() + else: + _randomize_all_sprites_progress() + + +func _notification(what: int) -> void: + match what: + NOTIFICATION_EDITOR_PRE_SAVE: + for node in animated_sprites: + node.frame = 0 + + +func _traverse(node: Node) -> void: + if node is AnimatedSprite2D: + animated_sprites.append(node) + for child in node.get_children(): + _traverse(child) + elif node is CelShadingRecolor: + skin_recolor_nodes.append(node) + elif node is RandomTextureSpriteBehavior: + random_texture_nodes.append(node) + + +func _setup_nodes() -> void: + animated_sprites = [] + skin_recolor_nodes = [] + random_texture_nodes = [] + for child in get_children(): + _traverse(child) + + +func _randomize_all_sprites_progress() -> void: + if not animated_sprites: + return + var default_animation := animated_sprites[-1].animation + var frames_length := animated_sprites[-1].sprite_frames.get_frame_count(default_animation) + var random_frame := randi_range(0, frames_length) + var random_progress := randf() + for sprite in animated_sprites: + sprite.set_frame_and_progress(random_frame, random_progress) + + +func _reset_sprite_frames_progress() -> void: + for node in get_children(): + if node is AnimatedSprite2D: + (node as AnimatedSprite2D).frame = 0 + + +func _set_look_at_side(new_look_at_side: Enums.LookAtSide) -> void: + look_at_side = new_look_at_side + scale.x = -1 if look_at_side == Enums.LookAtSide.RIGHT else 1 + + +func _on_interact_area_interaction_started(_player: Player, from_right: bool) -> void: + _previous_look_at_side = look_at_side + if look_at_side != Enums.LookAtSide.UNSPECIFIED: + look_at_side = Enums.LookAtSide.LEFT if from_right else Enums.LookAtSide.RIGHT + + +func _on_interact_area_interaction_ended() -> void: + look_at_side = _previous_look_at_side diff --git a/scenes/game_elements/characters/components/character_randomizer.gd.uid b/scenes/game_elements/characters/components/character_randomizer.gd.uid new file mode 100644 index 0000000000..0b71607bfc --- /dev/null +++ b/scenes/game_elements/characters/components/character_randomizer.gd.uid @@ -0,0 +1 @@ +uid://dl6rgfwdn3qp4 diff --git a/scenes/game_elements/characters/components/character_randomizer_test.dialogue b/scenes/game_elements/characters/components/character_randomizer_test.dialogue new file mode 100644 index 0000000000..51071e8e0f --- /dev/null +++ b/scenes/game_elements/characters/components/character_randomizer_test.dialogue @@ -0,0 +1,14 @@ +# SPDX-FileCopyrightText: The Threadbare Authors +# SPDX-License-Identifier: MPL-2.0 +~ townie_1 +Hey, I'm not just a random guy. I have a very unique seed number. +=> salute +~ townie_2 +I'm blue! If you are happy with the random results, except for a thing... +...you can activate Editable Children and then reset the character seed to zero. Then apply any changes to the inner nodes. +=> salute +~ townie_3 +~ townie_4 +~ salute +[[See you around.|Welcome to the town!]] +=> END diff --git a/scenes/game_elements/characters/components/character_randomizer_test.dialogue.import b/scenes/game_elements/characters/components/character_randomizer_test.dialogue.import new file mode 100644 index 0000000000..34b7570d89 --- /dev/null +++ b/scenes/game_elements/characters/components/character_randomizer_test.dialogue.import @@ -0,0 +1,16 @@ +[remap] + +importer="dialogue_manager" +importer_version=15 +type="Resource" +uid="uid://n5gf3o4mmxlu" +path="res://.godot/imported/character_randomizer_test.dialogue-40cb32867b5a5020b3c0cb6723f4f46d.tres" + +[deps] + +source_file="res://scenes/game_elements/characters/components/character_randomizer_test.dialogue" +dest_files=["res://.godot/imported/character_randomizer_test.dialogue-40cb32867b5a5020b3c0cb6723f4f46d.tres"] + +[params] + +defaults=true diff --git a/scenes/game_elements/characters/components/character_randomizer_test.tscn b/scenes/game_elements/characters/components/character_randomizer_test.tscn new file mode 100644 index 0000000000..c522ce188a --- /dev/null +++ b/scenes/game_elements/characters/components/character_randomizer_test.tscn @@ -0,0 +1,307 @@ +[gd_scene load_steps=31 format=4 uid="uid://4yh765kft25"] + +[ext_resource type="TileSet" uid="uid://b8qnr0owsbhhn" path="res://tiles/exterior_floors.tres" id="1_ea78s"] +[ext_resource type="PackedScene" uid="uid://dgrrudegturnw" path="res://scenes/game_elements/characters/npcs/townie.tscn" id="2_2g5xe"] +[ext_resource type="Script" uid="uid://du8wfijr35r35" path="res://scenes/game_elements/props/interact_area/components/interact_area.gd" id="3_p47ir"] +[ext_resource type="Script" uid="uid://edcifob4jc4s" path="res://scenes/game_logic/talk_behavior.gd" id="4_qr3fq"] +[ext_resource type="PackedScene" uid="uid://iu2q66clupc6" path="res://scenes/game_elements/characters/player/player.tscn" id="5_jsubs"] +[ext_resource type="Texture2D" uid="uid://daymgmvarx2ew" path="res://scenes/game_elements/characters/npcs/components/townie-legs_003.dy_-12.png" id="6_bonk8"] +[ext_resource type="SpriteFrames" uid="uid://07di3updrwh0" path="res://scenes/game_elements/characters/components/sprite_frames/storyweaver_purple.tres" id="6_hfrhi"] +[ext_resource type="Texture2D" uid="uid://0t1eptqlcb8t" path="res://scenes/game_elements/characters/npcs/components/townie-body_001.png" id="6_p47ir"] +[ext_resource type="Texture2D" uid="uid://csxn66qqmfcqu" path="res://scenes/game_elements/characters/npcs/components/townie-head_004.png" id="8_22pcm"] +[ext_resource type="Resource" uid="uid://n5gf3o4mmxlu" path="res://scenes/game_elements/characters/components/character_randomizer_test.dialogue" id="8_qr3fq"] +[ext_resource type="Texture2D" uid="uid://bjmcvluico8dg" path="res://scenes/game_elements/characters/npcs/components/townie-hair_005.png" id="9_bonk8"] + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_22pcm"] +size = Vector2(52, 50) + +[sub_resource type="AtlasTexture" id="AtlasTexture_bonk8"] +atlas = ExtResource("6_bonk8") +region = Rect2(0, 0, 96, 96) + +[sub_resource type="AtlasTexture" id="AtlasTexture_22pcm"] +atlas = ExtResource("6_bonk8") +region = Rect2(96, 0, 96, 96) + +[sub_resource type="AtlasTexture" id="AtlasTexture_tokus"] +atlas = ExtResource("6_bonk8") +region = Rect2(192, 0, 96, 96) + +[sub_resource type="SpriteFrames" id="SpriteFrames_kpq1x"] +resource_local_to_scene = true +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_bonk8") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_22pcm") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_tokus") +}], +"loop": true, +"name": &"idle", +"speed": 10.0 +}] + +[sub_resource type="AtlasTexture" id="AtlasTexture_htwo5"] +atlas = ExtResource("6_p47ir") +region = Rect2(0, 0, 96, 96) + +[sub_resource type="AtlasTexture" id="AtlasTexture_jsa2b"] +atlas = ExtResource("6_p47ir") +region = Rect2(96, 0, 96, 96) + +[sub_resource type="AtlasTexture" id="AtlasTexture_kpq1x"] +atlas = ExtResource("6_p47ir") +region = Rect2(192, 0, 96, 96) + +[sub_resource type="AtlasTexture" id="AtlasTexture_y666u"] +atlas = ExtResource("6_p47ir") +region = Rect2(96, 0, 96, 96) + +[sub_resource type="SpriteFrames" id="SpriteFrames_htwo5"] +resource_local_to_scene = true +animations = [{ +"frames": [{ +"duration": 10.0, +"texture": SubResource("AtlasTexture_htwo5") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_jsa2b") +}, { +"duration": 8.0, +"texture": SubResource("AtlasTexture_kpq1x") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_y666u") +}], +"loop": true, +"name": &"idle", +"speed": 10.0 +}] + +[sub_resource type="AtlasTexture" id="AtlasTexture_l7t43"] +atlas = ExtResource("8_22pcm") +region = Rect2(0, 0, 96, 96) + +[sub_resource type="AtlasTexture" id="AtlasTexture_n7dtb"] +atlas = ExtResource("8_22pcm") +region = Rect2(96, 0, 96, 96) + +[sub_resource type="AtlasTexture" id="AtlasTexture_ny4dp"] +atlas = ExtResource("8_22pcm") +region = Rect2(192, 0, 96, 96) + +[sub_resource type="AtlasTexture" id="AtlasTexture_e0ffc"] +atlas = ExtResource("8_22pcm") +region = Rect2(96, 0, 96, 96) + +[sub_resource type="SpriteFrames" id="SpriteFrames_n7dtb"] +resource_local_to_scene = true +animations = [{ +"frames": [{ +"duration": 10.0, +"texture": SubResource("AtlasTexture_l7t43") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_n7dtb") +}, { +"duration": 8.0, +"texture": SubResource("AtlasTexture_ny4dp") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_e0ffc") +}], +"loop": true, +"name": &"idle", +"speed": 10.0 +}] + +[sub_resource type="AtlasTexture" id="AtlasTexture_04pia"] +atlas = ExtResource("9_bonk8") +region = Rect2(0, 0, 96, 96) + +[sub_resource type="AtlasTexture" id="AtlasTexture_1uba5"] +atlas = ExtResource("9_bonk8") +region = Rect2(96, 0, 96, 96) + +[sub_resource type="AtlasTexture" id="AtlasTexture_n5uef"] +atlas = ExtResource("9_bonk8") +region = Rect2(192, 0, 96, 96) + +[sub_resource type="SpriteFrames" id="SpriteFrames_ahibj"] +resource_local_to_scene = true +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_04pia") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_1uba5") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_n5uef") +}], +"loop": true, +"name": &"idle", +"speed": 10.0 +}] + +[node name="CharacterRandomizerTest" type="Node2D"] + +[node name="TileMapLayers" type="Node2D" parent="."] + +[node name="TileMapLayerGrass" type="TileMapLayer" parent="TileMapLayers"] +tile_map_data = PackedByteArray("AAAAAP7/AQABAAEAAAAAAP//AQABAAEAAAAAAAAAAQABAAEAAAAAAAEAAQABAAEAAAAAAAIAAQABAAEAAAAAAAMAAQABAAEAAAAAAAQAAQABAAEAAAAAAAUAAQABAAEAAAAAAAYAAQABAAEAAAAAAAcAAQABAAEAAAAAAAgAAQABAAEAAAAAAAkAAQABAAIAAAABAP7/AQABAAEAAAABAP//AQABAAEAAAABAAAAAQABAAEAAAABAAEAAQABAAEAAAABAAIAAQABAAEAAAABAAMAAQABAAEAAAABAAQAAQABAAEAAAABAAUAAQABAAEAAAABAAYAAQABAAEAAAABAAcAAQABAAEAAAABAAgAAQABAAEAAAABAAkAAQABAAIAAAACAP7/AQABAAEAAAACAP//AQABAAEAAAACAAAAAQABAAEAAAACAAEAAQABAAEAAAACAAIAAQABAAEAAAACAAMAAQABAAEAAAACAAQAAQABAAEAAAACAAUAAQABAAEAAAACAAYAAQABAAEAAAACAAcAAQABAAEAAAACAAgAAQABAAEAAAACAAkAAQABAAIAAAADAP7/AQABAAEAAAADAP//AQABAAEAAAADAAAAAQABAAEAAAADAAEAAQABAAEAAAADAAIAAQABAAEAAAADAAMAAQABAAEAAAADAAQAAQABAAEAAAADAAUAAQABAAEAAAADAAYAAQABAAEAAAADAAcAAQABAAEAAAADAAgAAQABAAEAAAADAAkAAQABAAIAAAAEAP7/AQABAAEAAAAEAP//AQABAAEAAAAEAAAAAQABAAEAAAAEAAEAAQABAAEAAAAEAAIAAQABAAEAAAAEAAMAAQABAAEAAAAEAAQAAQABAAEAAAAEAAUAAQABAAEAAAAEAAYAAQABAAEAAAAEAAcAAQABAAEAAAAEAAgAAQABAAEAAAAEAAkAAQABAAIAAAAFAP7/AQABAAEAAAAFAP//AQABAAEAAAAFAAAAAQABAAEAAAAFAAEAAQABAAEAAAAFAAIAAQABAAEAAAAFAAMAAQABAAEAAAAFAAQAAQABAAEAAAAFAAUAAQABAAEAAAAFAAYAAQABAAEAAAAFAAcAAQABAAEAAAAFAAgAAQABAAEAAAAFAAkAAQABAAIAAAAGAP7/AQABAAEAAAAGAP//AQABAAEAAAAGAAAAAQABAAEAAAAGAAEAAQABAAEAAAAGAAIAAQABAAEAAAAGAAMAAQABAAEAAAAGAAQAAQABAAEAAAAGAAUAAQABAAEAAAAGAAYAAQABAAEAAAAGAAcAAQABAAEAAAAGAAgAAQABAAEAAAAGAAkAAQABAAIAAAAHAP7/AQABAAEAAAAHAP//AQABAAEAAAAHAAAAAQABAAEAAAAHAAEAAQABAAEAAAAHAAIAAQABAAEAAAAHAAMAAQABAAEAAAAHAAQAAQABAAEAAAAHAAUAAQABAAEAAAAHAAYAAQABAAEAAAAHAAcAAQABAAEAAAAHAAgAAQABAAEAAAAHAAkAAQABAAIAAAAIAP7/AQABAAEAAAAIAP//AQABAAEAAAAIAAAAAQABAAEAAAAIAAEAAQABAAEAAAAIAAIAAQABAAEAAAAIAAMAAQABAAEAAAAIAAQAAQABAAEAAAAIAAUAAQABAAEAAAAIAAYAAQABAAEAAAAIAAcAAQABAAEAAAAIAAgAAQABAAEAAAAIAAkAAQABAAIAAAAJAP7/AQABAAEAAAAJAP//AQABAAEAAAAJAAAAAQABAAEAAAAJAAEAAQABAAEAAAAJAAIAAQABAAEAAAAJAAMAAQABAAEAAAAJAAQAAQABAAEAAAAJAAUAAQABAAEAAAAJAAYAAQABAAEAAAAJAAcAAQABAAEAAAAJAAgAAQABAAEAAAAJAAkAAQABAAIAAAAKAP7/AQABAAEAAAAKAP//AQABAAEAAAAKAAAAAQABAAEAAAAKAAEAAQABAAEAAAAKAAIAAQABAAEAAAAKAAMAAQABAAEAAAAKAAQAAQABAAEAAAAKAAUAAQABAAEAAAAKAAYAAQABAAEAAAAKAAcAAQABAAEAAAAKAAgAAQABAAEAAAAKAAkAAQABAAIAAAALAP7/AQABAAEAAAALAP//AQABAAEAAAALAAAAAQABAAEAAAALAAEAAQABAAEAAAALAAIAAQABAAEAAAALAAMAAQABAAEAAAALAAQAAQABAAEAAAALAAUAAQABAAEAAAALAAYAAQABAAEAAAALAAcAAQABAAEAAAALAAgAAQABAAEAAAALAAkAAQABAAIAAAAMAP7/AQABAAEAAAAMAP//AQABAAEAAAAMAAAAAQABAAEAAAAMAAEAAQABAAEAAAAMAAIAAQABAAEAAAAMAAMAAQABAAEAAAAMAAQAAQABAAEAAAAMAAUAAQABAAEAAAAMAAYAAQABAAEAAAAMAAcAAQABAAEAAAAMAAgAAQABAAEAAAAMAAkAAQABAAIAAAANAP7/AQABAAEAAAANAP//AQABAAEAAAANAAAAAQABAAEAAAANAAEAAQABAAEAAAANAAIAAQABAAEAAAANAAMAAQABAAEAAAANAAQAAQABAAEAAAANAAUAAQABAAEAAAANAAYAAQABAAEAAAANAAcAAQABAAEAAAANAAgAAQABAAEAAAANAAkAAQABAAIAAAAOAP7/AQABAAEAAAAOAP//AQABAAEAAAAOAAAAAQABAAEAAAAOAAEAAQABAAEAAAAOAAIAAQABAAEAAAAOAAMAAQABAAEAAAAOAAQAAQABAAEAAAAOAAUAAQABAAEAAAAOAAYAAQABAAEAAAAOAAcAAQABAAEAAAAOAAgAAQABAAEAAAAOAAkAAQABAAIAAAAPAP7/AQABAAEAAAAPAP//AQABAAEAAAAPAAAAAQABAAEAAAAPAAEAAQABAAEAAAAPAAIAAQABAAEAAAAPAAMAAQABAAEAAAAPAAQAAQABAAEAAAAPAAUAAQABAAEAAAAPAAYAAQABAAEAAAAPAAcAAQABAAEAAAAPAAgAAQABAAEAAAAPAAkAAQABAAIAAAAQAP7/AQACAAEAAAAQAP//AQACAAEAAAAQAAAAAQACAAEAAAAQAAEAAQACAAEAAAAQAAIAAQACAAEAAAAQAAMAAQACAAEAAAAQAAQAAQACAAEAAAAQAAUAAQACAAEAAAAQAAYAAQACAAEAAAAQAAcAAQACAAEAAAAQAAgAAQACAAEAAAAQAAkAAQACAAIAAAD5//r/AQAAAAAAAAD5//v/AQAAAAEAAAD5//z/AQAAAAEAAAD5//3/AQAAAAEAAAD5//7/AQAAAAEAAAD5////AQAAAAEAAAD5/wAAAQAAAAEAAAD5/wEAAQAAAAEAAAD5/wIAAQAAAAEAAAD5/wMAAQAAAAEAAAD5/wQAAQAAAAEAAAD5/wUAAQAAAAEAAAD5/wYAAQAAAAEAAAD5/wcAAQAAAAEAAAD5/wgAAQAAAAEAAAD5/wkAAQAAAAIAAAD6//r/AQABAAAAAAD6//v/AQABAAEAAAD6//z/AQABAAEAAAD6//3/AQABAAEAAAD6//7/AQABAAEAAAD6////AQABAAEAAAD6/wAAAQABAAEAAAD6/wEAAQABAAEAAAD6/wIAAQABAAEAAAD6/wMAAQABAAEAAAD6/wQAAQABAAEAAAD6/wUAAQABAAEAAAD6/wYAAQABAAEAAAD6/wcAAQABAAEAAAD6/wgAAQABAAEAAAD6/wkAAQABAAIAAAD7//r/AQABAAAAAAD7//v/AQABAAEAAAD7//z/AQABAAEAAAD7//3/AQABAAEAAAD7//7/AQABAAEAAAD7////AQABAAEAAAD7/wAAAQABAAEAAAD7/wEAAQABAAEAAAD7/wIAAQABAAEAAAD7/wMAAQABAAEAAAD7/wQAAQABAAEAAAD7/wUAAQABAAEAAAD7/wYAAQABAAEAAAD7/wcAAQABAAEAAAD7/wgAAQABAAEAAAD7/wkAAQABAAIAAAD8//r/AQABAAAAAAD8//v/AQABAAEAAAD8//z/AQABAAEAAAD8//3/AQABAAEAAAD8//7/AQABAAEAAAD8////AQABAAEAAAD8/wAAAQABAAEAAAD8/wEAAQABAAEAAAD8/wIAAQABAAEAAAD8/wMAAQABAAEAAAD8/wQAAQABAAEAAAD8/wUAAQABAAEAAAD8/wYAAQABAAEAAAD8/wcAAQABAAEAAAD8/wgAAQABAAEAAAD8/wkAAQABAAIAAAD9//r/AQABAAAAAAD9//v/AQABAAEAAAD9//z/AQABAAEAAAD9//3/AQABAAEAAAD9//7/AQABAAEAAAD9////AQABAAEAAAD9/wAAAQABAAEAAAD9/wEAAQABAAEAAAD9/wIAAQABAAEAAAD9/wMAAQABAAEAAAD9/wQAAQABAAEAAAD9/wUAAQABAAEAAAD9/wYAAQABAAEAAAD9/wcAAQABAAEAAAD9/wgAAQABAAEAAAD9/wkAAQABAAIAAAD+//r/AQABAAAAAAD+//v/AQABAAEAAAD+//z/AQABAAEAAAD+//3/AQABAAEAAAD+//7/AQABAAEAAAD+////AQABAAEAAAD+/wAAAQABAAEAAAD+/wEAAQABAAEAAAD+/wIAAQABAAEAAAD+/wMAAQABAAEAAAD+/wQAAQABAAEAAAD+/wUAAQABAAEAAAD+/wYAAQABAAEAAAD+/wcAAQABAAEAAAD+/wgAAQABAAEAAAD+/wkAAQABAAIAAAD///r/AQABAAAAAAD///v/AQABAAEAAAD///z/AQABAAEAAAD///3/AQABAAEAAAD///7/AQABAAEAAAD/////AQABAAEAAAD//wAAAQABAAEAAAD//wEAAQABAAEAAAD//wIAAQABAAEAAAD//wMAAQABAAEAAAD//wQAAQABAAEAAAD//wUAAQABAAEAAAD//wYAAQABAAEAAAD//wcAAQABAAEAAAD//wgAAQABAAEAAAD//wkAAQABAAIAAAAAAPr/AQABAAAAAAAAAPv/AQABAAEAAAAAAPz/AQABAAEAAAAAAP3/AQABAAEAAAABAPr/AQABAAAAAAABAPv/AQABAAEAAAABAPz/AQABAAEAAAABAP3/AQABAAEAAAACAPr/AQABAAAAAAACAPv/AQABAAEAAAACAPz/AQABAAEAAAACAP3/AQABAAEAAAADAPr/AQABAAAAAAADAPv/AQABAAEAAAADAPz/AQABAAEAAAADAP3/AQABAAEAAAAEAPr/AQABAAAAAAAEAPv/AQABAAEAAAAEAPz/AQABAAEAAAAEAP3/AQABAAEAAAAFAPr/AQABAAAAAAAFAPv/AQABAAEAAAAFAPz/AQABAAEAAAAFAP3/AQABAAEAAAAGAPr/AQABAAAAAAAGAPv/AQABAAEAAAAGAPz/AQABAAEAAAAGAP3/AQABAAEAAAAHAPr/AQABAAAAAAAHAPv/AQABAAEAAAAHAPz/AQABAAEAAAAHAP3/AQABAAEAAAAIAPr/AQABAAAAAAAIAPv/AQABAAEAAAAIAPz/AQABAAEAAAAIAP3/AQABAAEAAAAJAPr/AQABAAAAAAAJAPv/AQABAAEAAAAJAPz/AQABAAEAAAAJAP3/AQABAAEAAAAKAPr/AQABAAAAAAAKAPv/AQABAAEAAAAKAPz/AQABAAEAAAAKAP3/AQABAAEAAAALAPr/AQABAAAAAAALAPv/AQABAAEAAAALAPz/AQABAAEAAAALAP3/AQABAAEAAAAMAPr/AQABAAAAAAAMAPv/AQABAAEAAAAMAPz/AQABAAEAAAAMAP3/AQABAAEAAAANAPr/AQABAAAAAAANAPv/AQABAAEAAAANAPz/AQABAAEAAAANAP3/AQABAAEAAAAOAPr/AQABAAAAAAAOAPv/AQABAAEAAAAOAPz/AQABAAEAAAAOAP3/AQABAAEAAAAPAPr/AQABAAAAAAAPAPv/AQABAAEAAAAPAPz/AQABAAEAAAAPAP3/AQABAAEAAAAQAPr/AQACAAAAAAAQAPv/AQACAAEAAAAQAPz/AQACAAEAAAAQAP3/AQACAAEAAAA=") +tile_set = ExtResource("1_ea78s") + +[node name="TileMapLayerSand" type="TileMapLayer" parent="TileMapLayers"] +tile_map_data = PackedByteArray("AAADAAIAAQAFAAAAAAADAAMAAQAFAAIAAAAEAAIAAQAGAAAAAAAEAAMAAQAGAAIAAAAFAAIAAQAGAAAAAAAFAAMAAQAGAAIAAAAGAAIAAQAHAAAAAAAGAAMAAQAHAAIAAAA=") +tile_set = ExtResource("1_ea78s") + +[node name="OnTheGround" type="Node2D" parent="."] +y_sort_enabled = true + +[node name="Townie" parent="OnTheGround" instance=ExtResource("2_2g5xe")] +position = Vector2(225, 152) +character_seed = 138976455 + +[node name="InteractArea" type="Area2D" parent="OnTheGround/Townie"] +visible = false +collision_layer = 32 +collision_mask = 0 +script = ExtResource("3_p47ir") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="OnTheGround/Townie/InteractArea"] +position = Vector2(0, -29) +shape = SubResource("RectangleShape2D_22pcm") +debug_color = Color(0.600391, 0.54335, 0, 0.42) + +[node name="TalkBehavior" type="Node" parent="OnTheGround/Townie" node_paths=PackedStringArray("interact_area")] +script = ExtResource("4_qr3fq") +dialogue = ExtResource("8_qr3fq") +title = "townie_1" +interact_area = NodePath("../InteractArea") + +[node name="Timer" type="Timer" parent="OnTheGround/Townie"] +autostart = true + +[node name="Townie2" parent="OnTheGround" instance=ExtResource("2_2g5xe")] +position = Vector2(415, 233) + +[node name="AnimatedSprite2DLegs" parent="OnTheGround/Townie2" index="1"] +sprite_frames = SubResource("SpriteFrames_kpq1x") + +[node name="AnimatedSprite2DBody" parent="OnTheGround/Townie2/AnimatedSprite2DLegs" index="1"] +instance_shader_parameters/shade_high_new = Color(0.58930516, 0.8525734, 0.9860394, 1) +instance_shader_parameters/shade_low_new = Color(0.38930517, 0.6525734, 0.7860394, 1) +instance_shader_parameters/shade_medium_new = Color(0.48663145, 0.81571674, 0.98254925, 1) +position = Vector2(0, -12) +sprite_frames = SubResource("SpriteFrames_htwo5") + +[node name="CelShadingRecolor" parent="OnTheGround/Townie2/AnimatedSprite2DLegs/AnimatedSprite2DBody" index="0"] +medium_color = Color(0.48663145, 0.81571674, 0.98254925, 1) +high_color = Color(0.58930516, 0.8525734, 0.9860394, 1) +low_color = Color(0.38930517, 0.6525734, 0.7860394, 1) + +[node name="AnimatedSprite2DHead" parent="OnTheGround/Townie2/AnimatedSprite2DLegs/AnimatedSprite2DBody" index="2"] +instance_shader_parameters/shade_high_new = Color(0.58930516, 0.8525734, 0.9860394, 1) +instance_shader_parameters/shade_low_new = Color(0.38930517, 0.6525734, 0.7860394, 1) +instance_shader_parameters/shade_medium_new = Color(0.48663145, 0.81571674, 0.98254925, 1) +sprite_frames = SubResource("SpriteFrames_n7dtb") + +[node name="CelShadingRecolor" parent="OnTheGround/Townie2/AnimatedSprite2DLegs/AnimatedSprite2DBody/AnimatedSprite2DHead" index="0"] +medium_color = Color(0.48663145, 0.81571674, 0.98254925, 1) +high_color = Color(0.58930516, 0.8525734, 0.9860394, 1) +low_color = Color(0.38930517, 0.6525734, 0.7860394, 1) + +[node name="AnimatedSprite2DHair" parent="OnTheGround/Townie2/AnimatedSprite2DLegs/AnimatedSprite2DBody/AnimatedSprite2DHead" index="2"] +sprite_frames = SubResource("SpriteFrames_ahibj") + +[node name="InteractArea" type="Area2D" parent="OnTheGround/Townie2"] +visible = false +collision_layer = 32 +collision_mask = 0 +script = ExtResource("3_p47ir") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="OnTheGround/Townie2/InteractArea"] +position = Vector2(0, -29) +shape = SubResource("RectangleShape2D_22pcm") +debug_color = Color(0.600391, 0.54335, 0, 0.42) + +[node name="TalkBehavior" type="Node" parent="OnTheGround/Townie2" node_paths=PackedStringArray("interact_area")] +script = ExtResource("4_qr3fq") +dialogue = ExtResource("8_qr3fq") +title = "townie_2" +interact_area = NodePath("../InteractArea") + +[node name="Townie3" parent="OnTheGround" instance=ExtResource("2_2g5xe")] +position = Vector2(481, 101) +scale = Vector2(-1, 1) +character_seed = 132923783 +look_at_side = 1 + +[node name="InteractArea" type="Area2D" parent="OnTheGround/Townie3"] +visible = false +collision_layer = 32 +collision_mask = 0 +script = ExtResource("3_p47ir") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="OnTheGround/Townie3/InteractArea"] +position = Vector2(0, -29) +shape = SubResource("RectangleShape2D_22pcm") +debug_color = Color(0.600391, 0.54335, 0, 0.42) + +[node name="TalkBehavior" type="Node" parent="OnTheGround/Townie3" node_paths=PackedStringArray("interact_area")] +script = ExtResource("4_qr3fq") +dialogue = ExtResource("8_qr3fq") +title = "townie_3" +interact_area = NodePath("../InteractArea") + +[node name="Townie4" parent="OnTheGround" instance=ExtResource("2_2g5xe")] +position = Vector2(523, 130) +scale = Vector2(-1, 1) +character_seed = 1738644387 +look_at_side = 1 + +[node name="InteractArea" type="Area2D" parent="OnTheGround/Townie4"] +visible = false +collision_layer = 32 +collision_mask = 0 +script = ExtResource("3_p47ir") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="OnTheGround/Townie4/InteractArea"] +position = Vector2(0, -29) +shape = SubResource("RectangleShape2D_22pcm") +debug_color = Color(0.600391, 0.54335, 0, 0.42) + +[node name="TalkBehavior" type="Node" parent="OnTheGround/Townie4" node_paths=PackedStringArray("interact_area")] +script = ExtResource("4_qr3fq") +dialogue = ExtResource("8_qr3fq") +title = "townie_4" +interact_area = NodePath("../InteractArea") + +[node name="Player" parent="OnTheGround" instance=ExtResource("5_jsubs")] +position = Vector2(337, 161) +player_name = "StoryWeaver" +sprite_frames = ExtResource("6_hfrhi") + +[node name="Camera2D" type="Camera2D" parent="OnTheGround/Player"] +zoom = Vector2(2, 2) +position_smoothing_enabled = true + +[node name="ScreenOverlay" type="CanvasLayer" parent="."] + +[connection signal="interaction_ended" from="OnTheGround/Townie/InteractArea" to="OnTheGround/Townie" method="_on_interact_area_interaction_ended"] +[connection signal="interaction_started" from="OnTheGround/Townie/InteractArea" to="OnTheGround/Townie" method="_on_interact_area_interaction_started"] +[connection signal="timeout" from="OnTheGround/Townie/Timer" to="OnTheGround/Townie" method="randomize_character"] +[connection signal="interaction_ended" from="OnTheGround/Townie2/InteractArea" to="OnTheGround/Townie2" method="_on_interact_area_interaction_ended"] +[connection signal="interaction_started" from="OnTheGround/Townie2/InteractArea" to="OnTheGround/Townie2" method="_on_interact_area_interaction_started"] +[connection signal="interaction_ended" from="OnTheGround/Townie3/InteractArea" to="OnTheGround/Townie3" method="_on_interact_area_interaction_ended"] +[connection signal="interaction_started" from="OnTheGround/Townie3/InteractArea" to="OnTheGround/Townie3" method="_on_interact_area_interaction_started"] +[connection signal="interaction_ended" from="OnTheGround/Townie4/InteractArea" to="OnTheGround/Townie4" method="_on_interact_area_interaction_ended"] +[connection signal="interaction_started" from="OnTheGround/Townie4/InteractArea" to="OnTheGround/Townie4" method="_on_interact_area_interaction_started"] + +[editable path="OnTheGround/Townie2"] diff --git a/scenes/game_elements/characters/npcs/components/townie-body_001.png b/scenes/game_elements/characters/npcs/components/townie-body_001.png new file mode 100644 index 0000000000..62182ce2cf --- /dev/null +++ b/scenes/game_elements/characters/npcs/components/townie-body_001.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e5bfa550bcd54bc25c8e318e3cfe77ba846eda6c37d0f07a59c33b83270ab1b6 +size 975 diff --git a/scenes/game_elements/characters/npcs/components/townie-body_001.png.import b/scenes/game_elements/characters/npcs/components/townie-body_001.png.import new file mode 100644 index 0000000000..350a9b5c12 --- /dev/null +++ b/scenes/game_elements/characters/npcs/components/townie-body_001.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://0t1eptqlcb8t" +path="res://.godot/imported/townie-body_001.png-6d35c19fc3c13c2ee878a575e835679f.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://scenes/game_elements/characters/npcs/components/townie-body_001.png" +dest_files=["res://.godot/imported/townie-body_001.png-6d35c19fc3c13c2ee878a575e835679f.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/scenes/game_elements/characters/npcs/components/townie-body_002.dy_-12.png b/scenes/game_elements/characters/npcs/components/townie-body_002.dy_-12.png new file mode 100644 index 0000000000..ecd3632471 --- /dev/null +++ b/scenes/game_elements/characters/npcs/components/townie-body_002.dy_-12.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9f1c9de6c4b56dab94624afe46aa07889db4b0c3a538c8aee98cb12fd9e6043d +size 1387 diff --git a/scenes/game_elements/characters/npcs/components/townie-body_002.dy_-12.png.import b/scenes/game_elements/characters/npcs/components/townie-body_002.dy_-12.png.import new file mode 100644 index 0000000000..d7e2989d63 --- /dev/null +++ b/scenes/game_elements/characters/npcs/components/townie-body_002.dy_-12.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://ccmsckg3l3iay" +path="res://.godot/imported/townie-body_002.dy_-12.png-d34bc9c1d9cf388e514fefe0c1536492.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://scenes/game_elements/characters/npcs/components/townie-body_002.dy_-12.png" +dest_files=["res://.godot/imported/townie-body_002.dy_-12.png-d34bc9c1d9cf388e514fefe0c1536492.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/scenes/game_elements/characters/npcs/components/townie-body_002.png b/scenes/game_elements/characters/npcs/components/townie-body_002.png new file mode 100644 index 0000000000..56b6372e8e --- /dev/null +++ b/scenes/game_elements/characters/npcs/components/townie-body_002.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:89da243c90c2c0e935649688689f9cd42afedff0cb84be204c6ad6599d0122d3 +size 1082 diff --git a/scenes/game_elements/characters/npcs/components/townie-body_002.png.import b/scenes/game_elements/characters/npcs/components/townie-body_002.png.import new file mode 100644 index 0000000000..9664543a66 --- /dev/null +++ b/scenes/game_elements/characters/npcs/components/townie-body_002.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dlvcbntsncg18" +path="res://.godot/imported/townie-body_002.png-5e739254d6cd3574ade20782a3bac17c.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://scenes/game_elements/characters/npcs/components/townie-body_002.png" +dest_files=["res://.godot/imported/townie-body_002.png-5e739254d6cd3574ade20782a3bac17c.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/scenes/game_elements/characters/npcs/components/townie-body_003.dx_-4.dy_-16.png b/scenes/game_elements/characters/npcs/components/townie-body_003.dx_-4.dy_-16.png new file mode 100644 index 0000000000..e018a25ab7 --- /dev/null +++ b/scenes/game_elements/characters/npcs/components/townie-body_003.dx_-4.dy_-16.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:770e0e474dd6704ea66a20d1d35414e3dda79aba3d4cb4a0034ae32e84015efa +size 1189 diff --git a/scenes/game_elements/characters/npcs/components/townie-body_003.dx_-4.dy_-16.png.import b/scenes/game_elements/characters/npcs/components/townie-body_003.dx_-4.dy_-16.png.import new file mode 100644 index 0000000000..8412f6f2b1 --- /dev/null +++ b/scenes/game_elements/characters/npcs/components/townie-body_003.dx_-4.dy_-16.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://iq21xkckyvi1" +path="res://.godot/imported/townie-body_003.dx_-4.dy_-16.png-acc5ab9f6e74edf02d163ad885387f15.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://scenes/game_elements/characters/npcs/components/townie-body_003.dx_-4.dy_-16.png" +dest_files=["res://.godot/imported/townie-body_003.dx_-4.dy_-16.png-acc5ab9f6e74edf02d163ad885387f15.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/scenes/game_elements/characters/npcs/components/townie-hair_001.png b/scenes/game_elements/characters/npcs/components/townie-hair_001.png new file mode 100644 index 0000000000..2a54379d47 --- /dev/null +++ b/scenes/game_elements/characters/npcs/components/townie-hair_001.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0620dd5980590a5601060cc0fa98732b9d54e0e6250b9a4cd0d83eaae05a6559 +size 931 diff --git a/scenes/game_elements/characters/npcs/components/townie-hair_001.png.import b/scenes/game_elements/characters/npcs/components/townie-hair_001.png.import new file mode 100644 index 0000000000..1171bd10f8 --- /dev/null +++ b/scenes/game_elements/characters/npcs/components/townie-hair_001.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bucvumn3fkygf" +path="res://.godot/imported/townie-hair_001.png-e9e991e2f5bd00771621e8e9d2be37c1.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://scenes/game_elements/characters/npcs/components/townie-hair_001.png" +dest_files=["res://.godot/imported/townie-hair_001.png-e9e991e2f5bd00771621e8e9d2be37c1.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/scenes/game_elements/characters/npcs/components/townie-hair_002.png b/scenes/game_elements/characters/npcs/components/townie-hair_002.png new file mode 100644 index 0000000000..e55261e908 --- /dev/null +++ b/scenes/game_elements/characters/npcs/components/townie-hair_002.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c2fd5758b7f002f57f67b9d1202691f07d4a28306b21ca10947f8fba0957ead0 +size 984 diff --git a/scenes/game_elements/characters/npcs/components/townie-hair_002.png.import b/scenes/game_elements/characters/npcs/components/townie-hair_002.png.import new file mode 100644 index 0000000000..0573cdd4ab --- /dev/null +++ b/scenes/game_elements/characters/npcs/components/townie-hair_002.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b4y4gg7xukeeg" +path="res://.godot/imported/townie-hair_002.png-178b37e736111255cbe707422d00feb7.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://scenes/game_elements/characters/npcs/components/townie-hair_002.png" +dest_files=["res://.godot/imported/townie-hair_002.png-178b37e736111255cbe707422d00feb7.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/scenes/game_elements/characters/npcs/components/townie-hair_003.png b/scenes/game_elements/characters/npcs/components/townie-hair_003.png new file mode 100644 index 0000000000..11cee062e0 --- /dev/null +++ b/scenes/game_elements/characters/npcs/components/townie-hair_003.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:02b06e9aa2e6be943c677bb16a1309038dea1cc91565505b83b9e0570dc1f5e9 +size 640 diff --git a/scenes/game_elements/characters/npcs/components/townie-hair_003.png.import b/scenes/game_elements/characters/npcs/components/townie-hair_003.png.import new file mode 100644 index 0000000000..edbc74add0 --- /dev/null +++ b/scenes/game_elements/characters/npcs/components/townie-hair_003.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://iqvjulny3uri" +path="res://.godot/imported/townie-hair_003.png-09fd0fff0b0c09620f05251c6e8239b0.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://scenes/game_elements/characters/npcs/components/townie-hair_003.png" +dest_files=["res://.godot/imported/townie-hair_003.png-09fd0fff0b0c09620f05251c6e8239b0.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/scenes/game_elements/characters/npcs/components/townie-hair_004.png b/scenes/game_elements/characters/npcs/components/townie-hair_004.png new file mode 100644 index 0000000000..bfe043d94b --- /dev/null +++ b/scenes/game_elements/characters/npcs/components/townie-hair_004.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:713b12ba4e9448f0e2783b44da94f86c377b5325e512823da505daa89f6816fd +size 1227 diff --git a/scenes/game_elements/characters/npcs/components/townie-hair_004.png.import b/scenes/game_elements/characters/npcs/components/townie-hair_004.png.import new file mode 100644 index 0000000000..b995b623e8 --- /dev/null +++ b/scenes/game_elements/characters/npcs/components/townie-hair_004.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b4nx388ax1jxg" +path="res://.godot/imported/townie-hair_004.png-65adc4c01af81a7ee9abf085fd4b9ff2.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://scenes/game_elements/characters/npcs/components/townie-hair_004.png" +dest_files=["res://.godot/imported/townie-hair_004.png-65adc4c01af81a7ee9abf085fd4b9ff2.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/scenes/game_elements/characters/npcs/components/townie-hair_005.png b/scenes/game_elements/characters/npcs/components/townie-hair_005.png new file mode 100644 index 0000000000..3b08d941b9 --- /dev/null +++ b/scenes/game_elements/characters/npcs/components/townie-hair_005.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:39931c903bf6ee7f503aac14670a20027535ccd8d7701f05c462af15c79813a5 +size 1240 diff --git a/scenes/game_elements/characters/npcs/components/townie-hair_005.png.import b/scenes/game_elements/characters/npcs/components/townie-hair_005.png.import new file mode 100644 index 0000000000..09ca48bb88 --- /dev/null +++ b/scenes/game_elements/characters/npcs/components/townie-hair_005.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bjmcvluico8dg" +path="res://.godot/imported/townie-hair_005.png-472afb49e5488f88e32ef9aeb002b259.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://scenes/game_elements/characters/npcs/components/townie-hair_005.png" +dest_files=["res://.godot/imported/townie-hair_005.png-472afb49e5488f88e32ef9aeb002b259.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/scenes/game_elements/characters/npcs/components/townie-head_001.png b/scenes/game_elements/characters/npcs/components/townie-head_001.png new file mode 100644 index 0000000000..3fd69856e6 --- /dev/null +++ b/scenes/game_elements/characters/npcs/components/townie-head_001.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b07340aa680566736b95666d8ec16d23514736508cdbd930b18771907caad5db +size 888 diff --git a/scenes/game_elements/characters/npcs/components/townie-head_001.png.import b/scenes/game_elements/characters/npcs/components/townie-head_001.png.import new file mode 100644 index 0000000000..69c2dbbdc8 --- /dev/null +++ b/scenes/game_elements/characters/npcs/components/townie-head_001.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dktchu38pxnxl" +path="res://.godot/imported/townie-head_001.png-d8d99f7cae2bc705fce4ec08a37b209c.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://scenes/game_elements/characters/npcs/components/townie-head_001.png" +dest_files=["res://.godot/imported/townie-head_001.png-d8d99f7cae2bc705fce4ec08a37b209c.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/scenes/game_elements/characters/npcs/components/townie-head_002.png b/scenes/game_elements/characters/npcs/components/townie-head_002.png new file mode 100644 index 0000000000..44b09618dc --- /dev/null +++ b/scenes/game_elements/characters/npcs/components/townie-head_002.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5e51a6a0627ac05987689c4bfd172f8a0d7acca4a8cc3d0b70509366608f8845 +size 985 diff --git a/scenes/game_elements/characters/npcs/components/townie-head_002.png.import b/scenes/game_elements/characters/npcs/components/townie-head_002.png.import new file mode 100644 index 0000000000..3f4d5ca7e4 --- /dev/null +++ b/scenes/game_elements/characters/npcs/components/townie-head_002.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b5o2dw3xj2uus" +path="res://.godot/imported/townie-head_002.png-43909111d6ccd7c81abb70bb5c986064.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://scenes/game_elements/characters/npcs/components/townie-head_002.png" +dest_files=["res://.godot/imported/townie-head_002.png-43909111d6ccd7c81abb70bb5c986064.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/scenes/game_elements/characters/npcs/components/townie-head_003.png b/scenes/game_elements/characters/npcs/components/townie-head_003.png new file mode 100644 index 0000000000..841c958c42 --- /dev/null +++ b/scenes/game_elements/characters/npcs/components/townie-head_003.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4f3a7e1b8ba712c591a05b6210fffe1b74225ff1439c125eb5b7644e57b63e0c +size 987 diff --git a/scenes/game_elements/characters/npcs/components/townie-head_003.png.import b/scenes/game_elements/characters/npcs/components/townie-head_003.png.import new file mode 100644 index 0000000000..05a9e3f980 --- /dev/null +++ b/scenes/game_elements/characters/npcs/components/townie-head_003.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bfothmxms5oo7" +path="res://.godot/imported/townie-head_003.png-d21a8a6a047047161933c5f3ef9d299d.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://scenes/game_elements/characters/npcs/components/townie-head_003.png" +dest_files=["res://.godot/imported/townie-head_003.png-d21a8a6a047047161933c5f3ef9d299d.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/scenes/game_elements/characters/npcs/components/townie-head_004.png b/scenes/game_elements/characters/npcs/components/townie-head_004.png new file mode 100644 index 0000000000..2a04109dd6 --- /dev/null +++ b/scenes/game_elements/characters/npcs/components/townie-head_004.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3ff659a4eedef45aa08c2551e9fb09d65f38e6e7a4c4df5a3b2bf9cc399756d9 +size 1045 diff --git a/scenes/game_elements/characters/npcs/components/townie-head_004.png.import b/scenes/game_elements/characters/npcs/components/townie-head_004.png.import new file mode 100644 index 0000000000..43e81f3b31 --- /dev/null +++ b/scenes/game_elements/characters/npcs/components/townie-head_004.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://csxn66qqmfcqu" +path="res://.godot/imported/townie-head_004.png-5e9cf968420c154df245d9613b9d52fa.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://scenes/game_elements/characters/npcs/components/townie-head_004.png" +dest_files=["res://.godot/imported/townie-head_004.png-5e9cf968420c154df245d9613b9d52fa.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/scenes/game_elements/characters/npcs/components/townie-head_005.png b/scenes/game_elements/characters/npcs/components/townie-head_005.png new file mode 100644 index 0000000000..8932964f5a --- /dev/null +++ b/scenes/game_elements/characters/npcs/components/townie-head_005.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a95c386eb85de6f3a6437b74595830a5e9728dc989e7d3c172ad2593d440ca51 +size 1063 diff --git a/scenes/game_elements/characters/npcs/components/townie-head_005.png.import b/scenes/game_elements/characters/npcs/components/townie-head_005.png.import new file mode 100644 index 0000000000..4788d9fd64 --- /dev/null +++ b/scenes/game_elements/characters/npcs/components/townie-head_005.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c4va1e7cdnos2" +path="res://.godot/imported/townie-head_005.png-0463d9615e50a9e56539d86de6a5006a.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://scenes/game_elements/characters/npcs/components/townie-head_005.png" +dest_files=["res://.godot/imported/townie-head_005.png-0463d9615e50a9e56539d86de6a5006a.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/scenes/game_elements/characters/npcs/components/townie-legs_001.png b/scenes/game_elements/characters/npcs/components/townie-legs_001.png new file mode 100644 index 0000000000..baacd772d0 --- /dev/null +++ b/scenes/game_elements/characters/npcs/components/townie-legs_001.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:13ecfe2445d568c5d826aba89410b601db22e8f0ad19f908eb8e1529d63a869d +size 621 diff --git a/scenes/game_elements/characters/npcs/components/townie-legs_001.png.import b/scenes/game_elements/characters/npcs/components/townie-legs_001.png.import new file mode 100644 index 0000000000..74c8d0e17b --- /dev/null +++ b/scenes/game_elements/characters/npcs/components/townie-legs_001.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://w2tqld60v18p" +path="res://.godot/imported/townie-legs_001.png-ac7e63eecf061b711802d201062034ac.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://scenes/game_elements/characters/npcs/components/townie-legs_001.png" +dest_files=["res://.godot/imported/townie-legs_001.png-ac7e63eecf061b711802d201062034ac.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/scenes/game_elements/characters/npcs/components/townie-legs_002.dy_-6.png b/scenes/game_elements/characters/npcs/components/townie-legs_002.dy_-6.png new file mode 100644 index 0000000000..4641ceb2ae --- /dev/null +++ b/scenes/game_elements/characters/npcs/components/townie-legs_002.dy_-6.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:257b1f3f5dad402f67811a2e26660d1c69ca0b5899115fd53dea125546024638 +size 776 diff --git a/scenes/game_elements/characters/npcs/components/townie-legs_002.dy_-6.png.import b/scenes/game_elements/characters/npcs/components/townie-legs_002.dy_-6.png.import new file mode 100644 index 0000000000..05f50a6e27 --- /dev/null +++ b/scenes/game_elements/characters/npcs/components/townie-legs_002.dy_-6.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://y3xp5d8timm0" +path="res://.godot/imported/townie-legs_002.dy_-6.png-8b20f0fce47cb082bb6e54e9e5b79f31.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://scenes/game_elements/characters/npcs/components/townie-legs_002.dy_-6.png" +dest_files=["res://.godot/imported/townie-legs_002.dy_-6.png-8b20f0fce47cb082bb6e54e9e5b79f31.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/scenes/game_elements/characters/npcs/components/townie-legs_003.dy_-12.png b/scenes/game_elements/characters/npcs/components/townie-legs_003.dy_-12.png new file mode 100644 index 0000000000..3834cddb3d --- /dev/null +++ b/scenes/game_elements/characters/npcs/components/townie-legs_003.dy_-12.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8006fcd79badd92951f5d492f6127051edf6cb1294e07cc6961b31aceb623a09 +size 794 diff --git a/scenes/game_elements/characters/npcs/components/townie-legs_003.dy_-12.png.import b/scenes/game_elements/characters/npcs/components/townie-legs_003.dy_-12.png.import new file mode 100644 index 0000000000..601349d9d8 --- /dev/null +++ b/scenes/game_elements/characters/npcs/components/townie-legs_003.dy_-12.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://daymgmvarx2ew" +path="res://.godot/imported/townie-legs_003.dy_-12.png-081d0d4d5b8df15efee66c99bc990722.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://scenes/game_elements/characters/npcs/components/townie-legs_003.dy_-12.png" +dest_files=["res://.godot/imported/townie-legs_003.dy_-12.png-081d0d4d5b8df15efee66c99bc990722.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/scenes/game_elements/characters/npcs/components/townie.aseprite b/scenes/game_elements/characters/npcs/components/townie.aseprite new file mode 100644 index 0000000000..ee738263d1 --- /dev/null +++ b/scenes/game_elements/characters/npcs/components/townie.aseprite @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fced342b6f6a5c90dea81c9b51ad42f8d3fa8246d54c8abff6e0247d37a71b79 +size 9140 diff --git a/scenes/game_elements/characters/npcs/townie.tscn b/scenes/game_elements/characters/npcs/townie.tscn new file mode 100644 index 0000000000..a8e24bea37 --- /dev/null +++ b/scenes/game_elements/characters/npcs/townie.tscn @@ -0,0 +1,236 @@ +[gd_scene load_steps=40 format=3 uid="uid://dgrrudegturnw"] + +[ext_resource type="Material" uid="uid://b7kf0suo0sc7k" path="res://scenes/game_elements/components/cel_shading_recolor_material.tres" id="1_nj51j"] +[ext_resource type="Script" uid="uid://c0a7xf5qx8p4y" path="res://scenes/game_elements/components/cel_shading_recolor.gd" id="2_nj51j"] +[ext_resource type="Script" uid="uid://dl6rgfwdn3qp4" path="res://scenes/game_elements/characters/components/character_randomizer.gd" id="2_xf1o5"] +[ext_resource type="Texture2D" uid="uid://w2tqld60v18p" path="res://scenes/game_elements/characters/npcs/components/townie-legs_001.png" id="4_4gc0b"] +[ext_resource type="Script" uid="uid://boyesrjdix688" path="res://scenes/game_logic/sprite_behaviors/random_texture_sprite_behavior.gd" id="5_8nfuc"] +[ext_resource type="Texture2D" uid="uid://y3xp5d8timm0" path="res://scenes/game_elements/characters/npcs/components/townie-legs_002.dy_-6.png" id="5_yd672"] +[ext_resource type="Texture2D" uid="uid://daymgmvarx2ew" path="res://scenes/game_elements/characters/npcs/components/townie-legs_003.dy_-12.png" id="6_dstmm"] +[ext_resource type="Texture2D" uid="uid://0t1eptqlcb8t" path="res://scenes/game_elements/characters/npcs/components/townie-body_001.png" id="6_u5ew7"] +[ext_resource type="Texture2D" uid="uid://dlvcbntsncg18" path="res://scenes/game_elements/characters/npcs/components/townie-body_002.png" id="6_vqjnd"] +[ext_resource type="Texture2D" uid="uid://dktchu38pxnxl" path="res://scenes/game_elements/characters/npcs/components/townie-head_001.png" id="9_82egq"] +[ext_resource type="Texture2D" uid="uid://bucvumn3fkygf" path="res://scenes/game_elements/characters/npcs/components/townie-hair_001.png" id="9_vqjnd"] +[ext_resource type="Texture2D" uid="uid://bfothmxms5oo7" path="res://scenes/game_elements/characters/npcs/components/townie-head_003.png" id="9_ynrks"] +[ext_resource type="Texture2D" uid="uid://iq21xkckyvi1" path="res://scenes/game_elements/characters/npcs/components/townie-body_003.dx_-4.dy_-16.png" id="10_tidpj"] +[ext_resource type="Texture2D" uid="uid://b5o2dw3xj2uus" path="res://scenes/game_elements/characters/npcs/components/townie-head_002.png" id="10_vqjnd"] +[ext_resource type="Texture2D" uid="uid://b4y4gg7xukeeg" path="res://scenes/game_elements/characters/npcs/components/townie-hair_002.png" id="10_ynrks"] +[ext_resource type="Texture2D" uid="uid://iqvjulny3uri" path="res://scenes/game_elements/characters/npcs/components/townie-hair_003.png" id="11_iqfub"] +[ext_resource type="Texture2D" uid="uid://b4nx388ax1jxg" path="res://scenes/game_elements/characters/npcs/components/townie-hair_004.png" id="12_4gc0b"] +[ext_resource type="Texture2D" uid="uid://csxn66qqmfcqu" path="res://scenes/game_elements/characters/npcs/components/townie-head_004.png" id="13_yd672"] +[ext_resource type="Texture2D" uid="uid://c4va1e7cdnos2" path="res://scenes/game_elements/characters/npcs/components/townie-head_005.png" id="14_rh0s3"] +[ext_resource type="Texture2D" uid="uid://bjmcvluico8dg" path="res://scenes/game_elements/characters/npcs/components/townie-hair_005.png" id="18_dstmm"] + +[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_qs15o"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_4gc0b"] +atlas = ExtResource("6_dstmm") +region = Rect2(0, 0, 96, 96) + +[sub_resource type="AtlasTexture" id="AtlasTexture_yd672"] +atlas = ExtResource("6_dstmm") +region = Rect2(96, 0, 96, 96) + +[sub_resource type="AtlasTexture" id="AtlasTexture_dstmm"] +atlas = ExtResource("6_dstmm") +region = Rect2(192, 0, 96, 96) + +[sub_resource type="SpriteFrames" id="SpriteFrames_beu7u"] +resource_local_to_scene = true +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_4gc0b") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_yd672") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_dstmm") +}], +"loop": true, +"name": &"idle", +"speed": 10.0 +}] + +[sub_resource type="AtlasTexture" id="AtlasTexture_beu7u"] +atlas = ExtResource("6_u5ew7") +region = Rect2(0, 0, 96, 96) + +[sub_resource type="AtlasTexture" id="AtlasTexture_m2wva"] +atlas = ExtResource("6_u5ew7") +region = Rect2(96, 0, 96, 96) + +[sub_resource type="AtlasTexture" id="AtlasTexture_u5ew7"] +atlas = ExtResource("6_u5ew7") +region = Rect2(192, 0, 96, 96) + +[sub_resource type="AtlasTexture" id="AtlasTexture_1in01"] +atlas = ExtResource("6_u5ew7") +region = Rect2(96, 0, 96, 96) + +[sub_resource type="SpriteFrames" id="SpriteFrames_6q5fn"] +resource_local_to_scene = true +animations = [{ +"frames": [{ +"duration": 10.0, +"texture": SubResource("AtlasTexture_beu7u") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_m2wva") +}, { +"duration": 8.0, +"texture": SubResource("AtlasTexture_u5ew7") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_1in01") +}], +"loop": true, +"name": &"idle", +"speed": 10.0 +}] + +[sub_resource type="AtlasTexture" id="AtlasTexture_82egq"] +atlas = ExtResource("9_82egq") +region = Rect2(0, 0, 96, 96) + +[sub_resource type="AtlasTexture" id="AtlasTexture_vqjnd"] +atlas = ExtResource("9_82egq") +region = Rect2(96, 0, 96, 96) + +[sub_resource type="AtlasTexture" id="AtlasTexture_ynrks"] +atlas = ExtResource("9_82egq") +region = Rect2(192, 0, 96, 96) + +[sub_resource type="AtlasTexture" id="AtlasTexture_iqfub"] +atlas = ExtResource("9_82egq") +region = Rect2(96, 0, 96, 96) + +[sub_resource type="SpriteFrames" id="SpriteFrames_vq5og"] +resource_local_to_scene = true +animations = [{ +"frames": [{ +"duration": 10.0, +"texture": SubResource("AtlasTexture_82egq") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_vqjnd") +}, { +"duration": 8.0, +"texture": SubResource("AtlasTexture_ynrks") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_iqfub") +}], +"loop": true, +"name": &"idle", +"speed": 10.0 +}] + +[sub_resource type="AtlasTexture" id="AtlasTexture_rh0s3"] +atlas = ExtResource("12_4gc0b") +region = Rect2(0, 0, 96, 96) + +[sub_resource type="AtlasTexture" id="AtlasTexture_tidpj"] +atlas = ExtResource("12_4gc0b") +region = Rect2(96, 0, 96, 96) + +[sub_resource type="AtlasTexture" id="AtlasTexture_hurny"] +atlas = ExtResource("12_4gc0b") +region = Rect2(192, 0, 96, 96) + +[sub_resource type="SpriteFrames" id="SpriteFrames_m2wva"] +resource_local_to_scene = true +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_rh0s3") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_tidpj") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_hurny") +}], +"loop": true, +"name": &"idle", +"speed": 10.0 +}] + +[node name="Townie" type="CharacterBody2D"] +material = ExtResource("1_nj51j") +instance_shader_parameters/shade_high_new = Color(0.9056, 0.7616, 0.7928, 1) +instance_shader_parameters/shade_low_new = Color(0.7056, 0.5616, 0.5928, 1) +instance_shader_parameters/shade_medium_new = Color(0.882, 0.702, 0.741, 1) +collision_layer = 2 +collision_mask = 0 +script = ExtResource("2_xf1o5") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +rotation = -1.5707964 +shape = SubResource("CapsuleShape2D_qs15o") + +[node name="AnimatedSprite2DLegs" type="AnimatedSprite2D" parent="."] +position = Vector2(-3, -31) +sprite_frames = SubResource("SpriteFrames_beu7u") +animation = &"idle" + +[node name="RandomTextureSpriteBehavior" type="Node2D" parent="AnimatedSprite2DLegs" node_paths=PackedStringArray("sprite")] +script = ExtResource("5_8nfuc") +textures = Array[Texture2D]([ExtResource("4_4gc0b"), ExtResource("5_yd672"), ExtResource("6_dstmm")]) +sprite = NodePath("..") +metadata/_custom_type_script = "uid://boyesrjdix688" + +[node name="AnimatedSprite2DBody" type="AnimatedSprite2D" parent="AnimatedSprite2DLegs"] +material = ExtResource("1_nj51j") +instance_shader_parameters/shade_high_new = Color(0.91999996, 0.91999996, 0.2, 1) +instance_shader_parameters/shade_low_new = Color(0.71999997, 0.71999997, 0, 1) +instance_shader_parameters/shade_medium_new = Color(0.9, 0.9, 0, 1) +sprite_frames = SubResource("SpriteFrames_6q5fn") +animation = &"idle" +autoplay = "idle" + +[node name="CelShadingRecolor" type="Node" parent="AnimatedSprite2DLegs/AnimatedSprite2DBody" node_paths=PackedStringArray("node_to_recolor")] +script = ExtResource("2_nj51j") +node_to_recolor = NodePath("..") +high_color = Color(0.91999996, 0.91999996, 0.2, 1) +low_color = Color(0.71999997, 0.71999997, 0, 1) +metadata/_custom_type_script = "uid://c0a7xf5qx8p4y" + +[node name="RandomTextureSpriteBehavior" type="Node2D" parent="AnimatedSprite2DLegs/AnimatedSprite2DBody" node_paths=PackedStringArray("sprite")] +script = ExtResource("5_8nfuc") +textures = Array[Texture2D]([ExtResource("6_u5ew7"), ExtResource("6_vqjnd"), ExtResource("10_tidpj")]) +sprite = NodePath("..") + +[node name="AnimatedSprite2DHead" type="AnimatedSprite2D" parent="AnimatedSprite2DLegs/AnimatedSprite2DBody"] +material = ExtResource("1_nj51j") +instance_shader_parameters/shade_high_new = Color(0.91999996, 0.91999996, 0.2, 1) +instance_shader_parameters/shade_low_new = Color(0.71999997, 0.71999997, 0, 1) +instance_shader_parameters/shade_medium_new = Color(0.9, 0.9, 0, 1) +sprite_frames = SubResource("SpriteFrames_vq5og") +animation = &"idle" +autoplay = "idle" + +[node name="CelShadingRecolor" type="Node" parent="AnimatedSprite2DLegs/AnimatedSprite2DBody/AnimatedSprite2DHead" node_paths=PackedStringArray("node_to_recolor")] +script = ExtResource("2_nj51j") +node_to_recolor = NodePath("..") +high_color = Color(0.91999996, 0.91999996, 0.2, 1) +low_color = Color(0.71999997, 0.71999997, 0, 1) +metadata/_custom_type_script = "uid://c0a7xf5qx8p4y" + +[node name="RandomTextureSpriteBehavior" type="Node2D" parent="AnimatedSprite2DLegs/AnimatedSprite2DBody/AnimatedSprite2DHead" node_paths=PackedStringArray("sprite")] +script = ExtResource("5_8nfuc") +textures = Array[Texture2D]([ExtResource("9_82egq"), ExtResource("10_vqjnd"), ExtResource("9_ynrks"), ExtResource("13_yd672"), ExtResource("14_rh0s3")]) +sprite = NodePath("..") +metadata/_custom_type_script = "uid://boyesrjdix688" + +[node name="AnimatedSprite2DHair" type="AnimatedSprite2D" parent="AnimatedSprite2DLegs/AnimatedSprite2DBody/AnimatedSprite2DHead"] +sprite_frames = SubResource("SpriteFrames_m2wva") +animation = &"idle" +metadata/_edit_lock_ = true + +[node name="RandomTextureSpriteBehavior" type="Node2D" parent="AnimatedSprite2DLegs/AnimatedSprite2DBody/AnimatedSprite2DHead/AnimatedSprite2DHair" node_paths=PackedStringArray("sprite")] +script = ExtResource("5_8nfuc") +textures = Array[Texture2D]([ExtResource("9_vqjnd"), ExtResource("10_ynrks"), ExtResource("11_iqfub"), ExtResource("12_4gc0b"), ExtResource("18_dstmm")]) +sprite = NodePath("..") +metadata/_custom_type_script = "uid://boyesrjdix688" diff --git a/scenes/game_elements/components/cel_shading_recolor.gd b/scenes/game_elements/components/cel_shading_recolor.gd index 9c26fe6de5..0de77f578b 100644 --- a/scenes/game_elements/components/cel_shading_recolor.gd +++ b/scenes/game_elements/components/cel_shading_recolor.gd @@ -98,7 +98,7 @@ const SKIN_COLORS: Dictionary[String, Color] = { ## Click this button to pick a random color from a list of known skin colors @export_tool_button("Random Skin Color") -var random_skin_color_button: Callable = _set_random_skin_color +var random_skin_color_button: Callable = set_random_skin_color func _enter_tree() -> void: @@ -158,7 +158,8 @@ func colorize() -> void: node_to_recolor.set_instance_shader_parameter("shade_low_new", low_color) -func _set_random_skin_color() -> void: +## Pick a random color from [constant SKIN_COLORS] and automatically set all shades from it. +func set_random_skin_color() -> void: automatic_shades = true medium_color = SKIN_COLORS.values().pick_random() diff --git a/scenes/game_logic/sprite_behaviors/random_texture_sprite_behavior.gd b/scenes/game_logic/sprite_behaviors/random_texture_sprite_behavior.gd new file mode 100644 index 0000000000..2fb6d23749 --- /dev/null +++ b/scenes/game_logic/sprite_behaviors/random_texture_sprite_behavior.gd @@ -0,0 +1,52 @@ +# SPDX-FileCopyrightText: The Threadbare Authors +# SPDX-License-Identifier: MPL-2.0 +@tool +class_name RandomTextureSpriteBehavior +extends BaseSpriteBehavior +## @experimental +## +## Can set a random texture to a sprite. +## +## The picked texture may have offset information. In that case, +## also set the position of each sub-sprite in the controlled sprite children. + +const SpriteFramesHelper = preload( + "res://addons/sprite_frames_exported_textures/sprite_frames_helper.gd" +) + +## The array of textures, from which to pick a random one. +@export var textures: Array[Texture2D] + +## Click this button to set a random texture to the sprite. +@export_tool_button("Randomize") var randomize_texture_button: Callable = randomize_texture + + +func _get_offset_from_texture_filename(new_texture: Texture2D) -> Vector2: + var filename: String = new_texture.resource_path.get_file() + var offset := Vector2.ZERO + # TODO: Use regular expressions. + for part: String in filename.split("."): + var data := part.split("_") + if data.size() != 2: + continue + var k := data[0] + var v := data[1] + if k == "dx" and v.is_valid_int(): + offset.x += v.to_int() + elif k == "dy" and v.is_valid_int(): + offset.y += v.to_int() + return offset + + +func _offset_child_sprites(offset: Vector2) -> void: + for child in sprite.get_children(): + if child is AnimatedSprite2D: + (child as AnimatedSprite2D).position = offset + + +## Pick a random texture from [member textures] and set it to the sprite. +func randomize_texture() -> void: + var new_texture: Texture2D = textures.pick_random() + var offset := _get_offset_from_texture_filename(new_texture) + _offset_child_sprites(offset) + SpriteFramesHelper.replace_texture(null, new_texture, sprite.sprite_frames) diff --git a/scenes/game_logic/sprite_behaviors/random_texture_sprite_behavior.gd.uid b/scenes/game_logic/sprite_behaviors/random_texture_sprite_behavior.gd.uid new file mode 100644 index 0000000000..42ef0e0b53 --- /dev/null +++ b/scenes/game_logic/sprite_behaviors/random_texture_sprite_behavior.gd.uid @@ -0,0 +1 @@ +uid://boyesrjdix688