From f07b28d2dc87505cb817cd461325276d20a89fe1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gerard=20Gasc=C3=B3n?= <52170489+GerardGascon@users.noreply.github.com> Date: Tue, 8 Apr 2025 23:02:17 +0200 Subject: [PATCH] feat: choose outfit from library when creating a dragon --- assets/outfits/hats.tres | 9 ++ assets/outfits/shirts.tres | 9 ++ assets/outfits/shoes.tres | 9 ++ assets/sprites/hat.png | Bin 0 -> 5137 bytes assets/sprites/hat.png.import | 34 +++++++ assets/sprites/shirt.png | Bin 0 -> 6024 bytes assets/sprites/shirt.png.import | 34 +++++++ assets/sprites/shoes.png | Bin 0 -> 5043 bytes assets/sprites/shoes.png.import | 34 +++++++ scenes/create_button.gd | 5 +- scenes/dragon_editor/dragon_editor.gd | 35 ++++++++ scenes/dragon_editor/dragon_editor.tscn | 113 +++++++++++++++++++++++- scenes/dragons/dragon.tscn | 3 +- scenes/dragons/dragon_entity_dragger.gd | 10 ++- scenes/dragons/dragon_sprite.gd | 13 +++ scenes/dragons/dragon_sprite.gd.uid | 1 + scenes/dragons/dragon_sprite.tscn | 30 ++++++- scenes/main.gd | 15 ++-- scenes/window/dragon.gd | 6 +- src/dragon_instantiator.gd | 7 +- src/dragon_outfit.gd | 19 ++++ src/dragon_outfit.gd.uid | 1 + 22 files changed, 370 insertions(+), 17 deletions(-) create mode 100644 assets/outfits/hats.tres create mode 100644 assets/outfits/shirts.tres create mode 100644 assets/outfits/shoes.tres create mode 100644 assets/sprites/hat.png create mode 100644 assets/sprites/hat.png.import create mode 100644 assets/sprites/shirt.png create mode 100644 assets/sprites/shirt.png.import create mode 100644 assets/sprites/shoes.png create mode 100644 assets/sprites/shoes.png.import create mode 100644 scenes/dragons/dragon_sprite.gd create mode 100644 scenes/dragons/dragon_sprite.gd.uid create mode 100644 src/dragon_outfit.gd create mode 100644 src/dragon_outfit.gd.uid diff --git a/assets/outfits/hats.tres b/assets/outfits/hats.tres new file mode 100644 index 0000000..a749773 --- /dev/null +++ b/assets/outfits/hats.tres @@ -0,0 +1,9 @@ +[gd_resource type="Resource" script_class="DragonOutfit" load_steps=3 format=3 uid="uid://cnhwn6kfcbjl5"] + +[ext_resource type="Texture2D" uid="uid://s1gx0l4qciqn" path="res://assets/sprites/hat.png" id="1_ahj5i"] +[ext_resource type="Script" uid="uid://rw26nny160xh" path="res://src/dragon_outfit.gd" id="1_e7uo0"] + +[resource] +script = ExtResource("1_e7uo0") +outfits = Array[Texture2D]([ExtResource("1_ahj5i")]) +metadata/_custom_type_script = "uid://rw26nny160xh" diff --git a/assets/outfits/shirts.tres b/assets/outfits/shirts.tres new file mode 100644 index 0000000..cd8948c --- /dev/null +++ b/assets/outfits/shirts.tres @@ -0,0 +1,9 @@ +[gd_resource type="Resource" script_class="DragonOutfit" load_steps=3 format=3 uid="uid://etegcak2sphs"] + +[ext_resource type="Texture2D" uid="uid://dc2uk6tqtwl4n" path="res://assets/sprites/shirt.png" id="1_136ph"] +[ext_resource type="Script" uid="uid://rw26nny160xh" path="res://src/dragon_outfit.gd" id="1_yaxr2"] + +[resource] +script = ExtResource("1_yaxr2") +outfits = Array[Texture2D]([ExtResource("1_136ph")]) +metadata/_custom_type_script = "uid://rw26nny160xh" diff --git a/assets/outfits/shoes.tres b/assets/outfits/shoes.tres new file mode 100644 index 0000000..0bee600 --- /dev/null +++ b/assets/outfits/shoes.tres @@ -0,0 +1,9 @@ +[gd_resource type="Resource" script_class="DragonOutfit" load_steps=3 format=3 uid="uid://ba5684xylts3f"] + +[ext_resource type="Texture2D" uid="uid://8srlwinjr3tt" path="res://assets/sprites/shoes.png" id="1_2hegr"] +[ext_resource type="Script" uid="uid://rw26nny160xh" path="res://src/dragon_outfit.gd" id="1_lu1y3"] + +[resource] +script = ExtResource("1_lu1y3") +outfits = Array[Texture2D]([ExtResource("1_2hegr")]) +metadata/_custom_type_script = "uid://rw26nny160xh" diff --git a/assets/sprites/hat.png b/assets/sprites/hat.png new file mode 100644 index 0000000000000000000000000000000000000000..4179ea772e2c4a936ea208f620468a25e12dd4b1 GIT binary patch literal 5137 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 literal 0 HcmV?d00001 diff --git a/assets/sprites/shirt.png.import b/assets/sprites/shirt.png.import new file mode 100644 index 0000000..9449f3e --- /dev/null +++ b/assets/sprites/shirt.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dc2uk6tqtwl4n" +path="res://.godot/imported/shirt.png-e59b3d32b60ac1a259719e0f7d9fdc17.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/sprites/shirt.png" +dest_files=["res://.godot/imported/shirt.png-e59b3d32b60ac1a259719e0f7d9fdc17.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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/assets/sprites/shoes.png b/assets/sprites/shoes.png new file mode 100644 index 0000000000000000000000000000000000000000..5c8c653041a4182c11291369b9ac2ccd1723de72 GIT binary patch literal 5043 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 literal 0 HcmV?d00001 diff --git a/assets/sprites/shoes.png.import b/assets/sprites/shoes.png.import new file mode 100644 index 0000000..814b173 --- /dev/null +++ b/assets/sprites/shoes.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://8srlwinjr3tt" +path="res://.godot/imported/shoes.png-47dd2ca75c2aff89c900c933c1df27c2.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/sprites/shoes.png" +dest_files=["res://.godot/imported/shoes.png-47dd2ca75c2aff89c900c933c1df27c2.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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/create_button.gd b/scenes/create_button.gd index 3eeefb3..d8c14f4 100644 --- a/scenes/create_button.gd +++ b/scenes/create_button.gd @@ -3,9 +3,12 @@ extends Button @export var dragon_editor: PackedScene +@onready var base: GameManager = $"../.." + func _on_button_up() -> void: - var editor: Window = dragon_editor.instantiate() + var editor: DragonEditor = dragon_editor.instantiate() + editor.on_create_dragon.connect(base.add_dragon) var window_position: Vector2i = DisplayServer.window_get_position() var window_size: Vector2i = DisplayServer.window_get_size() diff --git a/scenes/dragon_editor/dragon_editor.gd b/scenes/dragon_editor/dragon_editor.gd index 496ac81..e4c3a4f 100644 --- a/scenes/dragon_editor/dragon_editor.gd +++ b/scenes/dragon_editor/dragon_editor.gd @@ -2,5 +2,40 @@ extends Window class_name DragonEditor +@onready var hat: TextureRect = $CanvasLayer/Dragon/Hat +@onready var shirt: TextureRect = $CanvasLayer/Dragon/Shirt +@onready var shoes: TextureRect = $CanvasLayer/Dragon/Shoes + +@export var hat_outfits: DragonOutfit +@export var shirt_outfits: DragonOutfit +@export var shoes_outfits: DragonOutfit + + +signal on_create_dragon(hat: Texture2D, shirt: Texture2D, shoes: Texture2D) + + +func _ready() -> void: + hat.texture = null + shirt.texture = null + shoes.texture = null + + func _on_close_requested() -> void: queue_free() + + +func _on_change_hat_pressed() -> void: + hat.texture = hat_outfits.pick_next() + + +func _on_change_shirt_pressed() -> void: + shirt.texture = shirt_outfits.pick_next() + + +func _on_change_shoes_pressed() -> void: + shoes.texture = shoes_outfits.pick_next() + + +func _on_create_pressed() -> void: + on_create_dragon.emit(hat.texture, shirt.texture, shoes.texture) + queue_free() diff --git a/scenes/dragon_editor/dragon_editor.tscn b/scenes/dragon_editor/dragon_editor.tscn index f851ad3..7538f5e 100644 --- a/scenes/dragon_editor/dragon_editor.tscn +++ b/scenes/dragon_editor/dragon_editor.tscn @@ -1,12 +1,123 @@ -[gd_scene load_steps=2 format=3 uid="uid://fut42ruut302"] +[gd_scene load_steps=9 format=3 uid="uid://fut42ruut302"] [ext_resource type="Script" uid="uid://bfuos2kgfgber" path="res://scenes/dragon_editor/dragon_editor.gd" id="1_8vkll"] +[ext_resource type="Texture2D" uid="uid://fdqnc2qrrvn1" path="res://assets/sprites/icon.svg" id="2_un5ur"] +[ext_resource type="Resource" uid="uid://cnhwn6kfcbjl5" path="res://assets/outfits/hats.tres" id="2_vvtct"] +[ext_resource type="Texture2D" uid="uid://s1gx0l4qciqn" path="res://assets/sprites/hat.png" id="3_4q6gv"] +[ext_resource type="Resource" uid="uid://etegcak2sphs" path="res://assets/outfits/shirts.tres" id="3_xhgxf"] +[ext_resource type="Resource" uid="uid://ba5684xylts3f" path="res://assets/outfits/shoes.tres" id="4_1ivi1"] +[ext_resource type="Texture2D" uid="uid://dc2uk6tqtwl4n" path="res://assets/sprites/shirt.png" id="4_6sr44"] +[ext_resource type="Texture2D" uid="uid://8srlwinjr3tt" path="res://assets/sprites/shoes.png" id="5_wby0j"] [node name="DragonEditor" type="Window"] title = "Dragon Editor" +position = Vector2i(0, 36) size = Vector2i(300, 500) min_size = Vector2i(300, 500) max_size = Vector2i(1000, 1000) script = ExtResource("1_8vkll") +hat_outfits = ExtResource("2_vvtct") +shirt_outfits = ExtResource("3_xhgxf") +shoes_outfits = ExtResource("4_1ivi1") + +[node name="CanvasLayer" type="CanvasLayer" parent="."] + +[node name="VBoxContainer" type="VBoxContainer" parent="CanvasLayer"] +anchors_preset = 1 +anchor_left = 1.0 +anchor_right = 1.0 +offset_left = -89.0 +offset_bottom = 101.0 +grow_horizontal = 0 + +[node name="change_hat" type="Button" parent="CanvasLayer/VBoxContainer"] +layout_mode = 2 +text = "barret" + +[node name="change_shirt" type="Button" parent="CanvasLayer/VBoxContainer"] +layout_mode = 2 +text = "samarreta" + +[node name="change_shoes" type="Button" parent="CanvasLayer/VBoxContainer"] +layout_mode = 2 +text = "sabata" + +[node name="create" type="Button" parent="CanvasLayer"] +anchors_preset = 3 +anchor_left = 1.0 +anchor_top = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -42.0 +offset_top = -31.0 +grow_horizontal = 0 +grow_vertical = 0 +text = "crea" + +[node name="Dragon" type="TextureRect" parent="CanvasLayer"] +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -64.0 +offset_top = -64.0 +offset_right = 64.0 +offset_bottom = 64.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = ExtResource("2_un5ur") + +[node name="Hat" type="TextureRect" parent="CanvasLayer/Dragon"] +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -90.0 +offset_top = -109.0 +offset_right = 93.0 +offset_bottom = 74.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = ExtResource("3_4q6gv") +expand_mode = 1 + +[node name="Shirt" type="TextureRect" parent="CanvasLayer/Dragon"] +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -113.0 +offset_top = -59.0 +offset_right = 124.0 +offset_bottom = 79.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = ExtResource("4_6sr44") +expand_mode = 1 + +[node name="Shoes" type="TextureRect" parent="CanvasLayer/Dragon"] +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -96.0 +offset_top = -119.0 +offset_right = 113.0 +offset_bottom = 90.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = ExtResource("5_wby0j") +expand_mode = 1 [connection signal="close_requested" from="." to="." method="_on_close_requested"] +[connection signal="pressed" from="CanvasLayer/VBoxContainer/change_hat" to="." method="_on_change_hat_pressed"] +[connection signal="pressed" from="CanvasLayer/VBoxContainer/change_shirt" to="." method="_on_change_shirt_pressed"] +[connection signal="pressed" from="CanvasLayer/VBoxContainer/change_shoes" to="." method="_on_change_shoes_pressed"] +[connection signal="pressed" from="CanvasLayer/create" to="." method="_on_create_pressed"] diff --git a/scenes/dragons/dragon.tscn b/scenes/dragons/dragon.tscn index 6b3630b..9c115da 100644 --- a/scenes/dragons/dragon.tscn +++ b/scenes/dragons/dragon.tscn @@ -6,8 +6,9 @@ [sub_resource type="RectangleShape2D" id="RectangleShape2D_6eaxg"] size = Vector2(128, 128) -[node name="Dragon" type="Area2D"] +[node name="Dragon" type="Area2D" node_paths=PackedStringArray("dragon")] script = ExtResource("1_jccds") +dragon = NodePath("Dragon") [node name="Dragon" parent="." instance=ExtResource("2_l1h0r")] position = Vector2(-64, -64) diff --git a/scenes/dragons/dragon_entity_dragger.gd b/scenes/dragons/dragon_entity_dragger.gd index 8a258f1..3a614d7 100644 --- a/scenes/dragons/dragon_entity_dragger.gd +++ b/scenes/dragons/dragon_entity_dragger.gd @@ -2,7 +2,9 @@ extends Area2D class_name DragonEntity -signal on_pick(position) +@export var dragon: DragonSprite + +signal on_pick(position: Vector2, hat: Texture2D, shirt: Texture2D, shoes: Texture2D) func _ready() -> void: @@ -13,5 +15,9 @@ func _input_event(viewport, event, shape_idx) -> void: if event is InputEventMouseButton \ and event.button_index == MOUSE_BUTTON_LEFT \ and event.is_pressed(): - on_pick.emit(position) + on_pick.emit(position, dragon.hat.texture, dragon.shirt.texture, dragon.shoes.texture) queue_free() + + +func dress(hat: Texture2D, shirt: Texture2D, shoes: Texture2D): + dragon.dress(hat, shirt, shoes) diff --git a/scenes/dragons/dragon_sprite.gd b/scenes/dragons/dragon_sprite.gd new file mode 100644 index 0000000..238e714 --- /dev/null +++ b/scenes/dragons/dragon_sprite.gd @@ -0,0 +1,13 @@ +extends Node2D +class_name DragonSprite + + +@export var hat: Sprite2D +@export var shirt: Sprite2D +@export var shoes: Sprite2D + + +func dress(hat: Texture2D, shirt: Texture2D, shoes: Texture2D): + self.hat.texture = hat + self.shirt.texture = shirt + self.shoes.texture = shoes diff --git a/scenes/dragons/dragon_sprite.gd.uid b/scenes/dragons/dragon_sprite.gd.uid new file mode 100644 index 0000000..e035fdd --- /dev/null +++ b/scenes/dragons/dragon_sprite.gd.uid @@ -0,0 +1 @@ +uid://bjiap06gs02j diff --git a/scenes/dragons/dragon_sprite.tscn b/scenes/dragons/dragon_sprite.tscn index 6bdfeaa..49889d2 100644 --- a/scenes/dragons/dragon_sprite.tscn +++ b/scenes/dragons/dragon_sprite.tscn @@ -1,10 +1,36 @@ -[gd_scene load_steps=2 format=3 uid="uid://baa8gpicw2yg0"] +[gd_scene load_steps=6 format=3 uid="uid://baa8gpicw2yg0"] [ext_resource type="Texture2D" uid="uid://fdqnc2qrrvn1" path="res://assets/sprites/icon.svg" id="1_ixu8j"] +[ext_resource type="Script" uid="uid://bjiap06gs02j" path="res://scenes/dragons/dragon_sprite.gd" id="1_oaoux"] +[ext_resource type="Texture2D" uid="uid://s1gx0l4qciqn" path="res://assets/sprites/hat.png" id="2_hdh4v"] +[ext_resource type="Texture2D" uid="uid://dc2uk6tqtwl4n" path="res://assets/sprites/shirt.png" id="3_oaoux"] +[ext_resource type="Texture2D" uid="uid://8srlwinjr3tt" path="res://assets/sprites/shoes.png" id="4_yf7bj"] -[node name="Dragon" type="Node2D"] +[node name="Dragon" type="Node2D" node_paths=PackedStringArray("hat", "shirt", "shoes")] +script = ExtResource("1_oaoux") +hat = NodePath("Sprite/Hat") +shirt = NodePath("Sprite/Shirt") +shoes = NodePath("Sprite/Shoes") [node name="Sprite" type="Sprite2D" parent="."] position = Vector2(0, 1) texture = ExtResource("1_ixu8j") offset = Vector2(64, 64) + +[node name="Hat" type="Sprite2D" parent="Sprite"] +position = Vector2(39, 22) +scale = Vector2(0.503906, 0.503906) +texture = ExtResource("2_hdh4v") +offset = Vector2(64, 64) + +[node name="Shirt" type="Sprite2D" parent="Sprite"] +position = Vector2(40, 56) +scale = Vector2(0.477783, 0.288361) +texture = ExtResource("3_oaoux") +offset = Vector2(64, 64) + +[node name="Shoes" type="Sprite2D" parent="Sprite"] +position = Vector2(48, 39) +scale = Vector2(0.353516, 0.353516) +texture = ExtResource("4_yf7bj") +offset = Vector2(64, 64) diff --git a/scenes/main.gd b/scenes/main.gd index 6643d2f..78c2337 100644 --- a/scenes/main.gd +++ b/scenes/main.gd @@ -1,4 +1,5 @@ extends Node +class_name GameManager @export var dragon_template: PackedScene @@ -29,20 +30,22 @@ func move_window_to_bottom_right(): DisplayServer.window_set_position(new_position) -func _input(event: InputEvent) -> void: - if event.is_pressed() and event.is_action("ui_accept"): - _instantiate_dragon_ingame(dragon_spots[0].position) +func add_dragon(hat: Texture2D, shirt: Texture2D, shoes: Texture2D): + # TODO: Check for free positon + _instantiate_dragon_ingame(dragon_spots[0].position, hat, shirt, shoes) + # TODO: Add to dragon library -func _instantiate_dragon_ingame(position: Vector2): +func _instantiate_dragon_ingame(position: Vector2, hat: Texture2D, shirt: Texture2D, shoes: Texture2D): var dragon: DragonEntity = dragon_ingame.instantiate() + dragon.dress(hat, shirt, shoes) add_child(dragon) dragon.position = position dragon.on_pick.connect(_pick_dragon) -func _pick_dragon(position: Vector2): - var dragon: Dragon = _instantiator.instantiate(position) +func _pick_dragon(position: Vector2, hat: Texture2D, shirt: Texture2D, shoes: Texture2D): + var dragon: Dragon = _instantiator.instantiate(position, hat, shirt, shoes) dragon.place_back.connect(_dragon_place_back) add_child(dragon) diff --git a/scenes/window/dragon.gd b/scenes/window/dragon.gd index 8c9d61c..38261d4 100644 --- a/scenes/window/dragon.gd +++ b/scenes/window/dragon.gd @@ -2,7 +2,7 @@ extends Window class_name Dragon @export var dragon_speed: float = 20.0 -@export var dragon: Node2D +@export var dragon: DragonSprite @onready var _actual_position: Vector2 = position var main_window_rect: Rect2i @@ -40,6 +40,10 @@ func _process(delta: float) -> void: _move_to_target(delta) +func dress(hat: Texture2D, shirt: Texture2D, shoes: Texture2D): + dragon.dress(hat, shirt, shoes) + + func _move_to_target(delta: float): if _actual_position.distance_to(_target_pos) > 10.0: var direction: Vector2 = (_target_pos - _actual_position).normalized() diff --git a/src/dragon_instantiator.gd b/src/dragon_instantiator.gd index ef7b458..1336999 100644 --- a/src/dragon_instantiator.gd +++ b/src/dragon_instantiator.gd @@ -10,9 +10,9 @@ func _init(dragon: PackedScene, viewport: Viewport, window: Window) -> void: _dragon_template = dragon -func instantiate(position: Vector2) -> Node: +func instantiate(position: Vector2, hat: Texture2D, shirt: Texture2D, shoes: Texture2D) -> Node: var relative_position: Vector2i = _calculate_relative_position(position) - return _instantiate_dragon(relative_position) + return _instantiate_dragon(relative_position, hat, shirt, shoes) func _calculate_window_scale() -> Vector2: @@ -27,13 +27,14 @@ func _calculate_relative_position(position: Vector2) -> Vector2i: return Vector2i(Vector2(position) * scale) -func _instantiate_dragon(relative_position: Vector2i) -> Node: +func _instantiate_dragon(relative_position: Vector2i, hat: Texture2D, shirt: Texture2D, shoes: Texture2D) -> Node: var dragon: Dragon = _dragon_template.instantiate() var window_position: Vector2i = DisplayServer.window_get_position() var window_size: Vector2i = DisplayServer.window_get_size() dragon.position = window_position + relative_position - dragon.size / 2 + dragon.dress(hat, shirt, shoes) var size: float = _calculate_window_scale().y dragon.set_scale(size) diff --git a/src/dragon_outfit.gd b/src/dragon_outfit.gd new file mode 100644 index 0000000..ed5eb0e --- /dev/null +++ b/src/dragon_outfit.gd @@ -0,0 +1,19 @@ +extends Resource +class_name DragonOutfit + + +@export var outfits: Array[Texture2D] +var index: int = 0 + + +func _init(outfits: Array[Texture2D] = []): + self.outfits = outfits + + +func pick_next() -> Texture2D: + index += 1 + index %= (len(outfits) + 1) + if index == 0: + return null + + return outfits[index - 1] diff --git a/src/dragon_outfit.gd.uid b/src/dragon_outfit.gd.uid new file mode 100644 index 0000000..37ba495 --- /dev/null +++ b/src/dragon_outfit.gd.uid @@ -0,0 +1 @@ +uid://rw26nny160xh