From 02f04cc38af187d244144507f3ece003daad817a Mon Sep 17 00:00:00 2001 From: Minimata Date: Sat, 2 Aug 2025 21:34:08 +0200 Subject: [PATCH] feat: shield --- damageable/damageable.gd | 9 +- player/armored_spritesheet.tres | 232 ++++++++++++++++++++++++------- player/assets/RunArme.png | 3 + player/assets/RunArme.png.import | 34 +++++ player/player.gd | 14 +- player/player.tscn | 45 +----- 6 files changed, 244 insertions(+), 93 deletions(-) create mode 100644 player/assets/RunArme.png create mode 100644 player/assets/RunArme.png.import diff --git a/damageable/damageable.gd b/damageable/damageable.gd index c206658..d34148b 100644 --- a/damageable/damageable.gd +++ b/damageable/damageable.gd @@ -1,13 +1,20 @@ extends Node class_name Damageable - @export var health = 3 @export var hitback_velocity: float = 500 +var active = true + signal got_hit +func set_active(new_active: bool): + active = new_active + func damage(value: int = 0, direction: Vector2 = Vector2.UP): + if not active: + return + health -= value get_parent().velocity = hitback_velocity * direction got_hit.emit() diff --git a/player/armored_spritesheet.tres b/player/armored_spritesheet.tres index 4aeb268..d2c6bb7 100644 --- a/player/armored_spritesheet.tres +++ b/player/armored_spritesheet.tres @@ -1,59 +1,181 @@ -[gd_resource type="SpriteFrames" load_steps=13 format=3 uid="uid://i6035vm5ited"] +[gd_resource type="SpriteFrames" load_steps=34 format=3 uid="uid://i6035vm5ited"] -[ext_resource type="Texture2D" uid="uid://dbruj2bdtjfmd" path="res://player/assets/char_blue.png" id="1_pbrcr"] -[ext_resource type="Texture2D" uid="uid://cjruk5xlt3tyn" path="res://ennemy/MechantVol.png" id="2_pxh46"] +[ext_resource type="Texture2D" uid="uid://dv7jhtoptk12r" path="res://player/assets/Danse.png" id="1_4wqev"] +[ext_resource type="Texture2D" uid="uid://dcyawv770lkhp" path="res://player/assets/Défense.png" id="2_b2lu2"] +[ext_resource type="Texture2D" uid="uid://dwn548x0n4bpd" path="res://player/assets/Outch.png" id="2_t0xqw"] +[ext_resource type="Texture2D" uid="uid://dpy6espwka35l" path="res://player/assets/RunArme.png" id="4_3w5np"] -[sub_resource type="AtlasTexture" id="AtlasTexture_pxh46"] -atlas = ExtResource("1_pbrcr") -region = Rect2(112, 280, 56, 56) +[sub_resource type="AtlasTexture" id="AtlasTexture_tqiix"] +atlas = ExtResource("1_4wqev") +region = Rect2(0, 0, 32, 32) -[sub_resource type="AtlasTexture" id="AtlasTexture_b2lu2"] -atlas = ExtResource("1_pbrcr") -region = Rect2(168, 280, 56, 56) +[sub_resource type="AtlasTexture" id="AtlasTexture_e7oew"] +atlas = ExtResource("1_4wqev") +region = Rect2(32, 0, 32, 32) -[sub_resource type="AtlasTexture" id="AtlasTexture_3w5np"] -atlas = ExtResource("1_pbrcr") -region = Rect2(224, 280, 56, 56) +[sub_resource type="AtlasTexture" id="AtlasTexture_c35mf"] +atlas = ExtResource("1_4wqev") +region = Rect2(64, 0, 32, 32) -[sub_resource type="AtlasTexture" id="AtlasTexture_4wqev"] -atlas = ExtResource("2_pxh46") +[sub_resource type="AtlasTexture" id="AtlasTexture_65viv"] +atlas = ExtResource("1_4wqev") region = Rect2(96, 0, 32, 32) -[sub_resource type="AtlasTexture" id="AtlasTexture_t0xqw"] -atlas = ExtResource("2_pxh46") +[sub_resource type="AtlasTexture" id="AtlasTexture_x7c3f"] +atlas = ExtResource("1_4wqev") region = Rect2(128, 0, 32, 32) +[sub_resource type="AtlasTexture" id="AtlasTexture_bjvpn"] +atlas = ExtResource("1_4wqev") +region = Rect2(160, 0, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_s7qer"] +atlas = ExtResource("1_4wqev") +region = Rect2(192, 0, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_ge24q"] +atlas = ExtResource("1_4wqev") +region = Rect2(224, 0, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_pnw6m"] +atlas = ExtResource("1_4wqev") +region = Rect2(256, 0, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_1so5t"] +atlas = ExtResource("1_4wqev") +region = Rect2(288, 0, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_55jnj"] +atlas = ExtResource("1_4wqev") +region = Rect2(320, 0, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_dx5ib"] +atlas = ExtResource("1_4wqev") +region = Rect2(352, 0, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_a2xo5"] +atlas = ExtResource("1_4wqev") +region = Rect2(384, 0, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_art4l"] +atlas = ExtResource("1_4wqev") +region = Rect2(416, 0, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_hg6s5"] +atlas = ExtResource("2_t0xqw") +region = Rect2(0, 0, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_8t03j"] +atlas = ExtResource("2_t0xqw") +region = Rect2(32, 0, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_3w5np"] +atlas = ExtResource("2_b2lu2") +region = Rect2(0, 0, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_4wqev"] +atlas = ExtResource("4_3w5np") +region = Rect2(0, 0, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_t0xqw"] +atlas = ExtResource("4_3w5np") +region = Rect2(32, 0, 32, 32) + [sub_resource type="AtlasTexture" id="AtlasTexture_7en50"] -atlas = ExtResource("2_pxh46") +atlas = ExtResource("4_3w5np") region = Rect2(64, 0, 32, 32) [sub_resource type="AtlasTexture" id="AtlasTexture_dcl6h"] -atlas = ExtResource("2_pxh46") +atlas = ExtResource("4_3w5np") region = Rect2(96, 0, 32, 32) -[sub_resource type="AtlasTexture" id="AtlasTexture_pbrcr"] -atlas = ExtResource("1_pbrcr") -region = Rect2(392, 168, 56, 56) - [sub_resource type="AtlasTexture" id="AtlasTexture_yp8g1"] -atlas = ExtResource("2_pxh46") -region = Rect2(64, 0, 32, 32) +atlas = ExtResource("4_3w5np") +region = Rect2(128, 0, 32, 32) [sub_resource type="AtlasTexture" id="AtlasTexture_er5ay"] -atlas = ExtResource("2_pxh46") -region = Rect2(96, 0, 32, 32) +atlas = ExtResource("4_3w5np") +region = Rect2(160, 0, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_x3djp"] +atlas = ExtResource("4_3w5np") +region = Rect2(192, 0, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_ko4fi"] +atlas = ExtResource("4_3w5np") +region = Rect2(224, 0, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_i5cp7"] +atlas = ExtResource("4_3w5np") +region = Rect2(256, 0, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_0mkg8"] +atlas = ExtResource("4_3w5np") +region = Rect2(288, 0, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_5lqr2"] +atlas = ExtResource("4_3w5np") +region = Rect2(320, 0, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_nq0ey"] +atlas = ExtResource("4_3w5np") +region = Rect2(352, 0, 32, 32) [resource] animations = [{ "frames": [{ "duration": 1.0, -"texture": SubResource("AtlasTexture_pxh46") +"texture": SubResource("AtlasTexture_tqiix") }, { "duration": 1.0, -"texture": SubResource("AtlasTexture_b2lu2") +"texture": SubResource("AtlasTexture_e7oew") }, { "duration": 1.0, -"texture": SubResource("AtlasTexture_3w5np") +"texture": SubResource("AtlasTexture_c35mf") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_65viv") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_x7c3f") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_bjvpn") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_s7qer") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_ge24q") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_pnw6m") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_1so5t") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_55jnj") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_dx5ib") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_a2xo5") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_art4l") +}], +"loop": true, +"name": &"dance", +"speed": 6.0 +}, { +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_hg6s5") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_8t03j") }], "loop": false, "name": &"got_hit", @@ -61,21 +183,7 @@ animations = [{ }, { "frames": [{ "duration": 1.0, -"texture": SubResource("AtlasTexture_4wqev") -}, { -"duration": 1.0, -"texture": SubResource("AtlasTexture_t0xqw") -}], -"loop": true, -"name": &"hit", -"speed": 12.0 -}, { -"frames": [{ -"duration": 1.0, -"texture": SubResource("AtlasTexture_7en50") -}, { -"duration": 1.0, -"texture": SubResource("AtlasTexture_dcl6h") +"texture": SubResource("AtlasTexture_3w5np") }], "loop": true, "name": &"idle", @@ -83,20 +191,42 @@ animations = [{ }, { "frames": [{ "duration": 1.0, -"texture": SubResource("AtlasTexture_pbrcr") -}], -"loop": true, -"name": &"jump", -"speed": 5.0 +"texture": SubResource("AtlasTexture_4wqev") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_t0xqw") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_7en50") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_dcl6h") }, { -"frames": [{ "duration": 1.0, "texture": SubResource("AtlasTexture_yp8g1") }, { "duration": 1.0, "texture": SubResource("AtlasTexture_er5ay") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_x3djp") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_ko4fi") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_i5cp7") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_0mkg8") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_5lqr2") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_nq0ey") }], "loop": true, "name": &"run", -"speed": 2.0 +"speed": 14.0 }] diff --git a/player/assets/RunArme.png b/player/assets/RunArme.png new file mode 100644 index 0000000..9f941ff --- /dev/null +++ b/player/assets/RunArme.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9d9c050d073905dbb203efff93c69c46c08f1a276d8f3aa7241227d2c7f80816 +size 2119 diff --git a/player/assets/RunArme.png.import b/player/assets/RunArme.png.import new file mode 100644 index 0000000..7edb021 --- /dev/null +++ b/player/assets/RunArme.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dpy6espwka35l" +path="res://.godot/imported/RunArme.png-0ddf4bccde5c36d31728f6dfcc6c39c0.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://player/assets/RunArme.png" +dest_files=["res://.godot/imported/RunArme.png-0ddf4bccde5c36d31728f6dfcc6c39c0.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/player/player.gd b/player/player.gd index 5fce980..65d4e88 100644 --- a/player/player.gd +++ b/player/player.gd @@ -11,12 +11,18 @@ var jump_velocity = 400.0 @export_range(0, 10, 0.1, "or_greater") var gravity_modifier = 1 +@onready var damageable: Damageable = $Damageable +@onready var shield: AnimatedSprite2D = $Shield @onready var base: AnimatedSprite2D = $Base var current_sprite: AnimatedSprite2D var is_in_cutscene = false # back to true on build var current_animation = "idle" +var has_shield = false +var has_sword = false +var has_armor = false + func play_anim(): current_sprite.play(current_animation) @@ -60,6 +66,8 @@ func _physics_process(delta: float) -> void: velocity += get_gravity() * delta * gravity_modifier var direction := Input.get_axis("move_left", "move_right") + + damageable.set_active(has_shield and direction != 0) if direction > 0 and is_on_floor(): look_right() if direction < 0 and is_on_floor(): @@ -94,5 +102,9 @@ func _on_start_dancing() -> void: func _on_npc_shield_dialogue_dialogue_ended() -> void: set_in_play() - print("jget shield") + current_sprite.visible = false + current_sprite = shield + shield.play("idle") + shield.visible = true + has_shield = true diff --git a/player/player.tscn b/player/player.tscn index ba8e880..6119bf3 100644 --- a/player/player.tscn +++ b/player/player.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=45 format=3 uid="uid://yvp44oauis4n"] +[gd_scene load_steps=40 format=3 uid="uid://yvp44oauis4n"] [ext_resource type="Script" uid="uid://c1fqj3lba7wik" path="res://player/player.gd" id="1_yw30f"] [ext_resource type="SpriteFrames" uid="uid://i6035vm5ited" path="res://player/armored_spritesheet.tres" id="2_qjkh3"] @@ -8,7 +8,6 @@ [ext_resource type="Texture2D" uid="uid://dsxvqsh3umw01" path="res://player/assets/RunCycle.png" id="5_boad6"] [ext_resource type="PackedScene" uid="uid://djwoetcyvvofc" path="res://damageable/damageable.tscn" id="5_g6k8r"] [ext_resource type="Shape2D" uid="uid://6rhdwj5jxbxn" path="res://player/player_collision.tres" id="5_qjkh3"] -[ext_resource type="Texture2D" uid="uid://dw6tn0grt2ajc" path="res://player/assets/WalkCycle.png" id="5_rgyib"] [sub_resource type="AtlasTexture" id="AtlasTexture_tqiix"] atlas = ExtResource("3_hg6s5") @@ -82,22 +81,6 @@ region = Rect2(0, 0, 32, 32) atlas = ExtResource("4_rgyib") region = Rect2(32, 0, 32, 32) -[sub_resource type="AtlasTexture" id="AtlasTexture_2ieo8"] -atlas = ExtResource("5_rgyib") -region = Rect2(0, 0, 32, 32) - -[sub_resource type="AtlasTexture" id="AtlasTexture_ebec5"] -atlas = ExtResource("5_rgyib") -region = Rect2(32, 0, 32, 32) - -[sub_resource type="AtlasTexture" id="AtlasTexture_yllr7"] -atlas = ExtResource("5_rgyib") -region = Rect2(64, 0, 32, 32) - -[sub_resource type="AtlasTexture" id="AtlasTexture_kb6p2"] -atlas = ExtResource("5_rgyib") -region = Rect2(96, 0, 32, 32) - [sub_resource type="AtlasTexture" id="AtlasTexture_g4c7l"] atlas = ExtResource("5_boad6") region = Rect2(0, 0, 32, 32) @@ -193,7 +176,7 @@ animations = [{ }], "loop": true, "name": &"dance", -"speed": 5.0 +"speed": 6.0 }, { "frames": [{ "duration": 1.0, @@ -219,23 +202,6 @@ animations = [{ }, { "frames": [{ "duration": 1.0, -"texture": SubResource("AtlasTexture_2ieo8") -}, { -"duration": 1.0, -"texture": SubResource("AtlasTexture_ebec5") -}, { -"duration": 1.0, -"texture": SubResource("AtlasTexture_yllr7") -}, { -"duration": 1.0, -"texture": SubResource("AtlasTexture_kb6p2") -}], -"loop": true, -"name": &"jump", -"speed": 4.0 -}, { -"frames": [{ -"duration": 1.0, "texture": SubResource("AtlasTexture_g4c7l") }, { "duration": 1.0, @@ -285,11 +251,11 @@ acceleration = 0.177 [node name="AudioListener2D" type="AudioListener2D" parent="."] current = true -[node name="Knight" type="AnimatedSprite2D" parent="."] +[node name="Shield" type="AnimatedSprite2D" parent="."] visible = false -position = Vector2(1, -28) +position = Vector2(0, -16) sprite_frames = ExtResource("2_qjkh3") -animation = &"jump" +animation = &"dance" autoplay = "idle" [node name="Base" type="AnimatedSprite2D" parent="."] @@ -297,7 +263,6 @@ position = Vector2(0, -16) sprite_frames = SubResource("SpriteFrames_mmwog") animation = &"dance" autoplay = "idle" -frame_progress = 0.0683317 [node name="CollisionShape2D" type="CollisionShape2D" parent="."] visible = false