From 143932e15705e9918caeb9612de51f27bb1d47a5 Mon Sep 17 00:00:00 2001 From: chendian <-> Date: Tue, 1 Oct 2024 10:35:22 +0800 Subject: [PATCH] =?UTF-8?q?fist=E6=8A=80=E8=83=BD=E8=A1=A5=E5=85=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/attack/blunt_mid_hit_up_back.tres | 21 +++ config/attack/blunt_tackle.tres | 21 +++ .../hero01_fist_air_skill01.tres | 9 +- .../hero01_fist_air_skill02.tres | 29 +++++ .../hero01_fist_air_skill03.tres | 33 +++++ .../hero01_fist_skill03.tres | 29 +++++ .../character/hero01_fist_skill01.aseprite | Bin 16070 -> 40404 bytes .../character/hero01_fist_skill01.png | Bin 7886 -> 16830 bytes .../hero01_fist_air_skill01.tres | 20 ++- .../hero01_fist_air_skill02.tres | 120 ++++++++++++++++++ .../hero01_fist_air_skill03.tres | 43 +++++++ .../skill_animation/hero01_fist_skill01.tres | 2 +- .../skill_animation/hero01_fist_skill02.tres | 2 +- .../skill_animation/hero01_fist_skill03.tres | 111 ++++++++++++++++ .../hero01_fist_skill_charging.tres | 2 +- .../animation_library.tres | 16 ++- scene/launcher.tscn | 35 ++++- script/_global/enum.gd | 2 +- script/character/battle.gd | 4 +- script/character/skill.gd | 6 + script/character/status.gd | 14 +- script/ui/hud/player_status_item.gd | 2 +- 22 files changed, 490 insertions(+), 31 deletions(-) create mode 100644 config/attack/blunt_mid_hit_up_back.tres create mode 100644 config/attack/blunt_tackle.tres create mode 100644 config/skill_player_weapon/hero01_fist_air_skill02.tres create mode 100644 config/skill_player_weapon/hero01_fist_air_skill03.tres create mode 100644 config/skill_player_weapon/hero01_fist_skill03.tres create mode 100644 resource/skill_animation/hero01_fist_air_skill02.tres create mode 100644 resource/skill_animation/hero01_fist_air_skill03.tres create mode 100644 resource/skill_animation/hero01_fist_skill03.tres diff --git a/config/attack/blunt_mid_hit_up_back.tres b/config/attack/blunt_mid_hit_up_back.tres new file mode 100644 index 0000000..b292cc0 --- /dev/null +++ b/config/attack/blunt_mid_hit_up_back.tres @@ -0,0 +1,21 @@ +[gd_resource type="Resource" script_class="AttackCfg" load_steps=2 format=3 uid="uid://dfjtcdh13vohe"] + +[ext_resource type="Script" path="res://script/config/attack_cfg.gd" id="1_wxmda"] + +[resource] +script = ExtResource("1_wxmda") +damage_rate = 1.0 +break_level = 2 +stun_attack = 10.0 +damage_type = 1 +is_floating = false +is_rebound = false +is_stop_self = false +is_throw_check = false +is_throw_end = false +hit_back_speed = -4.0 +hit_up_speed = 4.0 +hit_back_duration = 0.05 +hit_up_duration = 0.05 +pause_time = 0.05 +is_force_pause = true diff --git a/config/attack/blunt_tackle.tres b/config/attack/blunt_tackle.tres new file mode 100644 index 0000000..af17a10 --- /dev/null +++ b/config/attack/blunt_tackle.tres @@ -0,0 +1,21 @@ +[gd_resource type="Resource" script_class="AttackCfg" load_steps=2 format=3 uid="uid://b5sendxmglojg"] + +[ext_resource type="Script" path="res://script/config/attack_cfg.gd" id="1_fmfoo"] + +[resource] +script = ExtResource("1_fmfoo") +damage_rate = 1.0 +break_level = 1 +stun_attack = 10.0 +damage_type = 1 +is_floating = true +is_rebound = false +is_stop_self = false +is_throw_check = false +is_throw_end = false +hit_back_speed = 0.0 +hit_up_speed = 4.0 +hit_back_duration = 0.05 +hit_up_duration = 0.05 +pause_time = 0.1 +is_force_pause = true diff --git a/config/skill_player_weapon/hero01_fist_air_skill01.tres b/config/skill_player_weapon/hero01_fist_air_skill01.tres index 4f7a477..cdd9b5e 100644 --- a/config/skill_player_weapon/hero01_fist_air_skill01.tres +++ b/config/skill_player_weapon/hero01_fist_air_skill01.tres @@ -1,4 +1,4 @@ -[gd_resource type="Resource" script_class="SkillWeaponCfg" load_steps=8 format=3 uid="uid://dkxgra6y2u30l"] +[gd_resource type="Resource" script_class="SkillWeaponCfg" load_steps=9 format=3 uid="uid://dj7b6f02488hm"] [ext_resource type="Resource" uid="uid://by6jd5xqjml2m" path="res://config/attack/blunt_starfall_1.tres" id="1_dfu42"] [ext_resource type="Resource" uid="uid://dq3pnbyfx4irr" path="res://config/attack_box/circle_foot.tres" id="2_doldq"] @@ -7,6 +7,7 @@ [ext_resource type="Animation" uid="uid://dxgqn5fa7aokj" path="res://resource/skill_animation/hero01_fist_air_skill01.tres" id="3_q461t"] [ext_resource type="Resource" uid="uid://decgfcx2xsj8i" path="res://config/attack_box/circle_mid.tres" id="4_lpsn0"] [ext_resource type="Resource" uid="uid://c6alg8pmqfdxm" path="res://config/weapon/fist.tres" id="5_70pp4"] +[ext_resource type="SpriteFrames" uid="uid://cajgs8smbkjan" path="res://resource/animation/character/hero01_fist_skill01.aseprite" id="7_gkp4g"] [resource] script = ExtResource("2_mje6b") @@ -22,9 +23,11 @@ attack1_box = ExtResource("2_doldq") attack2 = ExtResource("3_m2yio") attack2_box = ExtResource("4_lpsn0") stance_from = 10 -stance_to = 0 +stance_to = 14 break_level = 3 is_charging = false mp_cost = 0 +warn_type = 0 refresh_animation = false -animation_name = "" +sprite_frames = ExtResource("7_gkp4g") +animation_name = "fist_skill01" diff --git a/config/skill_player_weapon/hero01_fist_air_skill02.tres b/config/skill_player_weapon/hero01_fist_air_skill02.tres new file mode 100644 index 0000000..3e4c3d9 --- /dev/null +++ b/config/skill_player_weapon/hero01_fist_air_skill02.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="SkillWeaponCfg" load_steps=7 format=3 uid="uid://cu73c3osx40k2"] + +[ext_resource type="Resource" uid="uid://dfjtcdh13vohe" path="res://config/attack/blunt_mid_hit_up_back.tres" id="1_dw1kj"] +[ext_resource type="Resource" uid="uid://dq3pnbyfx4irr" path="res://config/attack_box/circle_foot.tres" id="2_bmi1a"] +[ext_resource type="Script" path="res://script/config/skill_weapon_cfg.gd" id="5_j7ual"] +[ext_resource type="Animation" uid="uid://b73xq7qwltbo2" path="res://resource/skill_animation/hero01_fist_air_skill02.tres" id="6_le53b"] +[ext_resource type="Resource" uid="uid://c6alg8pmqfdxm" path="res://config/weapon/fist.tres" id="7_cmht3"] +[ext_resource type="SpriteFrames" uid="uid://cajgs8smbkjan" path="res://resource/animation/character/hero01_fist_skill01.aseprite" id="7_kay3f"] + +[resource] +script = ExtResource("5_j7ual") +weapon = ExtResource("7_cmht3") +action = "attack_light" +name = "" +skill_animation = ExtResource("6_le53b") +range = 0.0 +free_lock = false +ignore_push = true +attack1 = ExtResource("1_dw1kj") +attack1_box = ExtResource("2_bmi1a") +stance_from = 14 +stance_to = 10 +break_level = 3 +is_charging = false +mp_cost = 0 +warn_type = 0 +refresh_animation = false +sprite_frames = ExtResource("7_kay3f") +animation_name = "fist_air_skill02" diff --git a/config/skill_player_weapon/hero01_fist_air_skill03.tres b/config/skill_player_weapon/hero01_fist_air_skill03.tres new file mode 100644 index 0000000..69bf2e2 --- /dev/null +++ b/config/skill_player_weapon/hero01_fist_air_skill03.tres @@ -0,0 +1,33 @@ +[gd_resource type="Resource" script_class="SkillWeaponCfg" load_steps=9 format=3 uid="uid://pkbnyqbnygw5"] + +[ext_resource type="Resource" uid="uid://by6jd5xqjml2m" path="res://config/attack/blunt_starfall_1.tres" id="1_rd5q6"] +[ext_resource type="Resource" uid="uid://dq3pnbyfx4irr" path="res://config/attack_box/circle_foot.tres" id="2_e5i11"] +[ext_resource type="Resource" uid="uid://d26ok8as50xe5" path="res://config/attack/blunt_starfall_2.tres" id="3_m856r"] +[ext_resource type="Resource" uid="uid://decgfcx2xsj8i" path="res://config/attack_box/circle_mid.tres" id="4_73m7b"] +[ext_resource type="Script" path="res://script/config/skill_weapon_cfg.gd" id="5_l5ryy"] +[ext_resource type="Animation" uid="uid://dd1d51x51so2p" path="res://resource/skill_animation/hero01_fist_air_skill03.tres" id="6_e6804"] +[ext_resource type="SpriteFrames" uid="uid://cajgs8smbkjan" path="res://resource/animation/character/hero01_fist_skill01.aseprite" id="7_baqkp"] +[ext_resource type="Resource" uid="uid://c6alg8pmqfdxm" path="res://config/weapon/fist.tres" id="8_yjfdq"] + +[resource] +script = ExtResource("5_l5ryy") +weapon = ExtResource("8_yjfdq") +action = "attack_heavy" +name = "" +skill_animation = ExtResource("6_e6804") +range = 0.0 +free_lock = false +ignore_push = true +attack1 = ExtResource("1_rd5q6") +attack1_box = ExtResource("2_e5i11") +attack2 = ExtResource("3_m856r") +attack2_box = ExtResource("4_73m7b") +stance_from = 14 +stance_to = 10 +break_level = 3 +is_charging = false +mp_cost = 0 +warn_type = 0 +refresh_animation = false +sprite_frames = ExtResource("7_baqkp") +animation_name = "fist_air_skill03" diff --git a/config/skill_player_weapon/hero01_fist_skill03.tres b/config/skill_player_weapon/hero01_fist_skill03.tres new file mode 100644 index 0000000..44f231b --- /dev/null +++ b/config/skill_player_weapon/hero01_fist_skill03.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="SkillWeaponCfg" load_steps=7 format=3 uid="uid://dbviuasvknl8q"] + +[ext_resource type="Resource" uid="uid://b5sendxmglojg" path="res://config/attack/blunt_tackle.tres" id="1_aubbe"] +[ext_resource type="Resource" uid="uid://dja8jwx16njmf" path="res://config/attack_box/box_small.tres" id="2_xjtqg"] +[ext_resource type="Script" path="res://script/config/skill_weapon_cfg.gd" id="3_6wryu"] +[ext_resource type="Animation" uid="uid://mnmlwnqk4aqq" path="res://resource/skill_animation/hero01_fist_skill03.tres" id="4_c7ye6"] +[ext_resource type="SpriteFrames" uid="uid://cajgs8smbkjan" path="res://resource/animation/character/hero01_fist_skill01.aseprite" id="5_sjxkh"] +[ext_resource type="Resource" uid="uid://c6alg8pmqfdxm" path="res://config/weapon/fist.tres" id="6_aemq5"] + +[resource] +script = ExtResource("3_6wryu") +weapon = ExtResource("6_aemq5") +action = "attack_heavy" +name = "" +skill_animation = ExtResource("4_c7ye6") +range = 0.0 +free_lock = false +ignore_push = false +attack1 = ExtResource("1_aubbe") +attack1_box = ExtResource("2_xjtqg") +stance_from = 2 +stance_to = 3 +break_level = 3 +is_charging = false +mp_cost = 0 +warn_type = 0 +refresh_animation = false +sprite_frames = ExtResource("5_sjxkh") +animation_name = "fist_skill03" diff --git a/resource/animation/character/hero01_fist_skill01.aseprite b/resource/animation/character/hero01_fist_skill01.aseprite index b757e72cbda98091a84e9f4a235f8e6742f64245..6c1a71dc8b4dbfe7467fa07ff514552fdcdcee1f 100644 GIT binary patch literal 40404 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 V{m;iy;0+ldBt&F|%LVoP{uc%dK(YV; literal 7886 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 diff --git a/resource/skill_animation/hero01_fist_air_skill01.tres b/resource/skill_animation/hero01_fist_air_skill01.tres index 212e0c5..13182c7 100644 --- a/resource/skill_animation/hero01_fist_air_skill01.tres +++ b/resource/skill_animation/hero01_fist_air_skill01.tres @@ -37,10 +37,10 @@ tracks/2/path = NodePath("Status:break_level") tracks/2/interp = 1 tracks/2/loop_wrap = true tracks/2/keys = { -"times": PackedFloat32Array(0, 0.4, 0.5, 0.8), -"transitions": PackedFloat32Array(1, 1, 1, 1), -"update": 1, -"values": [0, 0, 3, 4] +"times": PackedFloat32Array(0, 0.1, 0.2, 0.5, 0.6), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0, 0, 3, 3, 4] } tracks/3/type = "value" tracks/3/imported = false @@ -155,3 +155,15 @@ tracks/10/keys = { "update": 1, "values": [0, 1, 2, 3, 4, 5, 6, 7, 8] } +tracks/11/type = "value" +tracks/11/imported = false +tracks/11/enabled = true +tracks/11/path = NodePath("%Status:stance") +tracks/11/interp = 1 +tracks/11/loop_wrap = true +tracks/11/keys = { +"times": PackedFloat32Array(0.4), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [0] +} diff --git a/resource/skill_animation/hero01_fist_air_skill02.tres b/resource/skill_animation/hero01_fist_air_skill02.tres new file mode 100644 index 0000000..9a00293 --- /dev/null +++ b/resource/skill_animation/hero01_fist_air_skill02.tres @@ -0,0 +1,120 @@ +[gd_resource type="Animation" load_steps=2 format=3 uid="uid://b73xq7qwltbo2"] + +[ext_resource type="SpriteFrames" uid="uid://cajgs8smbkjan" path="res://resource/animation/character/hero01_fist_skill01.aseprite" id="1_1ik3n"] + +[resource] +resource_name = "hero01_fist_air_skill02" +length = 1.1 +step = 0.1 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("View:sprite_frames") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [ExtResource("1_1ik3n")] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("View:animation") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": ["fist_air_skill02"] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("View:frame") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), +"update": 1, +"values": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("Status:break_level") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0, 0.5, 0.6), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 1, +"values": [0, 3, 4] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("Status:speed_up_rate") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(), +"transitions": PackedFloat32Array(), +"update": 1, +"values": [] +} +tracks/5/type = "value" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("Status:skill_move_speed") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(0, 0.1), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [-4.0, 0.0] +} +tracks/6/type = "value" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("Status:skill_float_speed") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(0, 0.1), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [4.0, 0.0] +} +tracks/7/type = "method" +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/path = NodePath("Battle") +tracks/7/interp = 1 +tracks/7/loop_wrap = true +tracks/7/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"values": [{ +"args": [], +"method": &"attack1" +}] +} +tracks/8/type = "method" +tracks/8/imported = false +tracks/8/enabled = true +tracks/8/path = NodePath("Effect") +tracks/8/interp = 1 +tracks/8/loop_wrap = true +tracks/8/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"values": [{ +"args": [], +"method": &"cast_attack_particle1" +}] +} diff --git a/resource/skill_animation/hero01_fist_air_skill03.tres b/resource/skill_animation/hero01_fist_air_skill03.tres new file mode 100644 index 0000000..562d9ee --- /dev/null +++ b/resource/skill_animation/hero01_fist_air_skill03.tres @@ -0,0 +1,43 @@ +[gd_resource type="Animation" load_steps=2 format=3 uid="uid://dd1d51x51so2p"] + +[ext_resource type="SpriteFrames" uid="uid://cajgs8smbkjan" path="res://resource/animation/character/hero01_fist_skill01.aseprite" id="1_3gkl8"] + +[resource] +resource_name = "hero01_fist_air_skill03" +length = 2.7 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("View:sprite_frames") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [ExtResource("1_3gkl8")] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("View:animation") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": ["fist_skill03"] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("View:frame") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), +"update": 1, +"values": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26] +} diff --git a/resource/skill_animation/hero01_fist_skill01.tres b/resource/skill_animation/hero01_fist_skill01.tres index c5a9565..49e87b6 100644 --- a/resource/skill_animation/hero01_fist_skill01.tres +++ b/resource/skill_animation/hero01_fist_skill01.tres @@ -1,4 +1,4 @@ -[gd_resource type="Animation" load_steps=2 format=3 uid="uid://cj0lnanjp7xfo"] +[gd_resource type="Animation" load_steps=2 format=3 uid="uid://by0w3sn21f1v0"] [ext_resource type="SpriteFrames" uid="uid://cajgs8smbkjan" path="res://resource/animation/character/hero01_fist_skill01.aseprite" id="1_uj5xl"] diff --git a/resource/skill_animation/hero01_fist_skill02.tres b/resource/skill_animation/hero01_fist_skill02.tres index bbabe8c..cd854d8 100644 --- a/resource/skill_animation/hero01_fist_skill02.tres +++ b/resource/skill_animation/hero01_fist_skill02.tres @@ -1,4 +1,4 @@ -[gd_resource type="Animation" load_steps=2 format=3 uid="uid://batvpnk7jfc2a"] +[gd_resource type="Animation" load_steps=2 format=3 uid="uid://bnqll5kf8t8qs"] [ext_resource type="SpriteFrames" uid="uid://cajgs8smbkjan" path="res://resource/animation/character/hero01_fist_skill01.aseprite" id="1_mf7r8"] diff --git a/resource/skill_animation/hero01_fist_skill03.tres b/resource/skill_animation/hero01_fist_skill03.tres new file mode 100644 index 0000000..d769289 --- /dev/null +++ b/resource/skill_animation/hero01_fist_skill03.tres @@ -0,0 +1,111 @@ +[gd_resource type="Animation" load_steps=2 format=3 uid="uid://mnmlwnqk4aqq"] + +[ext_resource type="SpriteFrames" uid="uid://cajgs8smbkjan" path="res://resource/animation/character/hero01_fist_skill01.aseprite" id="1_o5821"] + +[resource] +resource_name = "hero01_fist_skill03" +length = 0.7 +step = 0.1 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("View:sprite_frames") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [ExtResource("1_o5821")] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("View:animation") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": ["fist_skill03"] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Status:break_level") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0, 0.3, 0.5), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 1, +"values": [0, 3, 4] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("Status:speed_up_rate") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0.1, 0.3), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [-0.5, -1.0] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("Status:skill_move_speed") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0.1, 0.3), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [8.0, 0.0] +} +tracks/5/type = "method" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("Battle") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(0.1, 0.2), +"transitions": PackedFloat32Array(1, 1), +"values": [{ +"args": [], +"method": &"attack1" +}, { +"args": [], +"method": &"attack1" +}] +} +tracks/6/type = "method" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("Effect") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(0.1), +"transitions": PackedFloat32Array(1), +"values": [{ +"args": [], +"method": &"cast_attack_particle1" +}] +} +tracks/7/type = "value" +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/path = NodePath("View:frame") +tracks/7/interp = 1 +tracks/7/loop_wrap = true +tracks/7/keys = { +"times": PackedFloat32Array(0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1), +"update": 1, +"values": [0, 1, 2, 3, 4, 5, 6] +} diff --git a/resource/skill_animation/hero01_fist_skill_charging.tres b/resource/skill_animation/hero01_fist_skill_charging.tres index 0d41b8e..a21510b 100644 --- a/resource/skill_animation/hero01_fist_skill_charging.tres +++ b/resource/skill_animation/hero01_fist_skill_charging.tres @@ -85,6 +85,6 @@ tracks/5/loop_wrap = true tracks/5/keys = { "times": PackedFloat32Array(0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9), "transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1), -"update": 0, +"update": 1, "values": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] } diff --git a/resource/skill_animation_library/animation_library.tres b/resource/skill_animation_library/animation_library.tres index 9152689..8b99ccb 100644 --- a/resource/skill_animation_library/animation_library.tres +++ b/resource/skill_animation_library/animation_library.tres @@ -1,4 +1,4 @@ -[gd_resource type="AnimationLibrary" load_steps=45 format=3 uid="uid://croik07a1qko5"] +[gd_resource type="AnimationLibrary" load_steps=48 format=3 uid="uid://croik07a1qko5"] [ext_resource type="Animation" uid="uid://t01a4jvp8srr" path="res://resource/skill_animation/hero01_fist_attack01.tres" id="1_4bwwm"] [ext_resource type="Animation" uid="uid://cfapnjkj5dkws" path="res://resource/skill_animation/hero01_basic_flash.tres" id="1_46f01"] @@ -33,12 +33,15 @@ [ext_resource type="Animation" uid="uid://xfuwfwtw4cna" path="res://resource/skill_animation/hero01_short_attack02.tres" id="11_h2vlt"] [ext_resource type="Animation" uid="uid://bdyjvq185tdk6" path="res://resource/skill_animation/hero01_short_attack03.tres" id="11_kejyu"] [ext_resource type="Animation" uid="uid://bkre61dn64j2f" path="res://resource/skill_animation/hero01_short_attack01.tres" id="11_n0dhn"] +[ext_resource type="Animation" uid="uid://b73xq7qwltbo2" path="res://resource/skill_animation/hero01_fist_air_skill02.tres" id="16_ssfs1"] +[ext_resource type="Animation" uid="uid://dd1d51x51so2p" path="res://resource/skill_animation/hero01_fist_air_skill03.tres" id="16_tsiw4"] [ext_resource type="Animation" uid="uid://uxuayi0qf3b7" path="res://resource/skill_animation/hero01_long_air_skill01.tres" id="20_0ey8y"] -[ext_resource type="Animation" uid="uid://batvpnk7jfc2a" path="res://resource/skill_animation/hero01_fist_skill02.tres" id="20_dv6vj"] -[ext_resource type="Animation" uid="uid://cj0lnanjp7xfo" path="res://resource/skill_animation/hero01_fist_skill01.tres" id="20_xaont"] [ext_resource type="Animation" uid="uid://cjc6sis2xn1yy" path="res://resource/skill_animation/hero01_long_air_skill02.tres" id="21_ks43l"] [ext_resource type="Animation" uid="uid://b0a1nnw2e13sg" path="res://resource/skill_animation/hero01_fist_skill_charging01.tres" id="23_12bpf"] +[ext_resource type="Animation" uid="uid://mnmlwnqk4aqq" path="res://resource/skill_animation/hero01_fist_skill03.tres" id="23_541fl"] [ext_resource type="Animation" uid="uid://bbq4e0a0eyrke" path="res://resource/skill_animation/hero01_fist_skill_charging02.tres" id="24_j0oqq"] +[ext_resource type="Animation" uid="uid://by0w3sn21f1v0" path="res://resource/skill_animation/hero01_fist_skill01.tres" id="24_qdhvi"] +[ext_resource type="Animation" uid="uid://bnqll5kf8t8qs" path="res://resource/skill_animation/hero01_fist_skill02.tres" id="25_j3bpt"] [ext_resource type="Animation" uid="uid://h8hm3kbecdx8" path="res://resource/skill_animation/hero01_remote01.tres" id="33_7i37k"] [ext_resource type="Animation" uid="uid://q7qlw0a7hfjt" path="res://resource/skill_animation/hero01_slash01.tres" id="38_lyels"] [ext_resource type="Animation" uid="uid://2oxeq83bpofb" path="res://resource/skill_animation/monster03_slash02.tres" id="45_1vnur"] @@ -61,14 +64,17 @@ _data = { "hero01_fist_air_attack02": ExtResource("9_0fycy"), "hero01_fist_air_attack03": ExtResource("10_te03d"), "hero01_fist_air_skill01": ExtResource("5_df32u"), +"hero01_fist_air_skill02": ExtResource("16_ssfs1"), +"hero01_fist_air_skill03": ExtResource("16_tsiw4"), "hero01_fist_attack01": ExtResource("1_4bwwm"), "hero01_fist_attack02": ExtResource("2_vx7p1"), "hero01_fist_attack03": ExtResource("3_lo6yb"), "hero01_fist_attack04": ExtResource("4_087em"), "hero01_fist_attack05": ExtResource("2_y7w3h"), "hero01_fist_charging": ExtResource("1_nd54y"), -"hero01_fist_skill01": ExtResource("20_xaont"), -"hero01_fist_skill02": ExtResource("20_dv6vj"), +"hero01_fist_skill01": ExtResource("24_qdhvi"), +"hero01_fist_skill02": ExtResource("25_j3bpt"), +"hero01_fist_skill03": ExtResource("23_541fl"), "hero01_fist_skill_charging": ExtResource("1_nd54y"), "hero01_fist_skill_charging01": ExtResource("23_12bpf"), "hero01_fist_skill_charging02": ExtResource("24_j0oqq"), diff --git a/scene/launcher.tscn b/scene/launcher.tscn index 9ce4fc5..b8aa102 100644 --- a/scene/launcher.tscn +++ b/scene/launcher.tscn @@ -21,7 +21,7 @@ [ext_resource type="Script" path="res://script/manager/item_manager.gd" id="12_xwufn"] [ext_resource type="Script" path="res://script/character/status.gd" id="18_nr8sb"] [ext_resource type="SpriteFrames" uid="uid://2cb8lknel0ih" path="res://resource/animation/character/basic_move.aseprite" id="20_4ni1a"] -[ext_resource type="SpriteFrames" uid="uid://bvnjq6vtioip" path="res://resource/animation/character/hero01_fist_skill02.aseprite" id="21_ngr2y"] +[ext_resource type="SpriteFrames" uid="uid://cajgs8smbkjan" path="res://resource/animation/character/hero01_fist_skill01.aseprite" id="21_wpe47"] [ext_resource type="AnimationLibrary" uid="uid://croik07a1qko5" path="res://resource/skill_animation_library/animation_library.tres" id="22_qyapv"] [ext_resource type="Script" path="res://script/character/skill.gd" id="23_783eu"] [ext_resource type="Script" path="res://script/character/move.gd" id="25_d520l"] @@ -127,6 +127,30 @@ tracks/6/keys = { "update": 1, "values": [false] } +tracks/7/type = "value" +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/path = NodePath("Status:skill_move_speed") +tracks/7/interp = 1 +tracks/7/loop_wrap = true +tracks/7/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [0.0] +} +tracks/8/type = "value" +tracks/8/imported = false +tracks/8/enabled = true +tracks/8/path = NodePath("%Status:stance") +tracks/8/interp = 1 +tracks/8/loop_wrap = true +tracks/8/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [0] +} [sub_resource type="AnimationLibrary" id="AnimationLibrary_avnjy"] _data = { @@ -212,6 +236,7 @@ script = ExtResource("5_n3qhi") [node name="Status" type="Node3D" parent="EditorTool/Character"] unique_name_in_owner = true script = ExtResource("18_nr8sb") +speed_up_rate = -1.0 [node name="View" type="AnimatedSprite3D" parent="EditorTool/Character"] unique_name_in_owner = true @@ -223,13 +248,13 @@ pixel_size = 0.02 double_sided = false alpha_cut = 2 texture_filter = 0 -sprite_frames = ExtResource("21_ngr2y") -animation = &"fist_skill_charging" -frame = 9 +sprite_frames = ExtResource("21_wpe47") +animation = &"fist_air_skill01" +frame = 8 [node name="Throw" type="AnimatedSprite3D" parent="EditorTool/Character"] unique_name_in_owner = true -transform = Transform3D(1, 0, 0, 0, 1, -1.50996e-07, 0, 1.50996e-07, 1, 0, 0, 0) +transform = Transform3D(-1, 0, 0, 0, -1, 1.50996e-07, 0, -1.50996e-07, -1, 0, 0, 0) pixel_size = 0.02 sprite_frames = ExtResource("20_4ni1a") animation = &"idle_loop" diff --git a/script/_global/enum.gd b/script/_global/enum.gd index 83cc94e..4a4ebee 100644 --- a/script/_global/enum.gd +++ b/script/_global/enum.gd @@ -7,7 +7,7 @@ enum ECharacterType {Player, Monster, Bullet, Soul} enum ETeam {Player, Monster} enum EStance { GroundIdle, Ground1, Ground2, Ground3, Ground4, Ground5, Ground6, Ground7, - AirIdle = 10, Air1, Air2, Air3, + AirIdle = 10, Air1, Air2, Air3, Air4, Charging = 20, None = 99, GroundAny = 100, diff --git a/script/character/battle.gd b/script/character/battle.gd index dae0ba6..9c256f9 100644 --- a/script/character/battle.gd +++ b/script/character/battle.gd @@ -385,8 +385,8 @@ func cast_sub_character(): skill.on_cast_sub_character() func hold(): skill.on_hold() - -func stop(): move.stop() +func stop(): + move.stop() func change_dir() -> void: diff --git a/script/character/skill.gd b/script/character/skill.gd index a74cc49..db1e6b6 100644 --- a/script/character/skill.gd +++ b/script/character/skill.gd @@ -45,6 +45,11 @@ func cast_skill_check(cfg: SkillCfg, break_level: Enum.EBreakLevel = Enum.EBreak print("技能animation不存在", animation_name) return false + if current_animation: + var pos_offset = fmod(current_animation_position,0.1) + if pos_offset < 0.02 or pos_offset > 0.08: + return false + #检查打断级别 if cfg.break_level > break_level: return false @@ -114,6 +119,7 @@ func cast_skill(cfg: SkillCfg, cast_dir: Vector2, action_key: String = ""): var animation_name: String = "animation_library/%s" % cfg.get_res_name() play(animation_name, -1, Setting.animation_speed_scale) seek(0, true, true) + print("cast_skill",cfg.get_res_name()) func break_skill(): diff --git a/script/character/status.gd b/script/character/status.gd index eff2223..197c008 100644 --- a/script/character/status.gd +++ b/script/character/status.gd @@ -45,7 +45,7 @@ var move_dir: Vector2 #移动方向 var speed_dir: Vector2 #速度方向 var velocity_change: Vector3 #一帧内速度变化值 var speed_down_push_rate: float #来自软阻挡的速度减少比率 -var speed_up_rate: float #移动速度比率 +@export var speed_up_rate: float #移动速度比率 var speed_xz: float #水平移动速度 var speed_y: float #竖直移动速度 var is_free_control: bool = true #是否可以自由控制 @@ -69,18 +69,18 @@ var pause_time: float #卡帧时间 var skill_cfg: SkillCfg #当前技能 var is_skill_running: bool #技能是否正在释放 var skill_dir: Vector2 #技能释放方向 -var skill_move_speed: float #技能位移速度 -var skill_move_stop: bool #技能位移速度是否停止生效 -var skill_float_speed: float #技能y位移速度 +@export var skill_move_speed: float #技能位移速度 +@export var skill_float_speed: float #技能y位移速度 +@export var skill_move_stop: bool #技能位移速度是否停止生效 var skill_action_key: String #技能输入指令 -var skill_break_level_add: int #技能额外打断等级 +@export var skill_break_level_add: int #技能额外打断等级 #核心状态 var core_active_list: Array[CoreCfg] = [] #主动核心列表 8个 var core_passive_list: Array[CoreCfg] = [] #被动核心列表 #玩家技能状态 var input_dir: Vector2 #指令方向 -var stance: Enum.EStance #技能姿态 -var break_level: Enum.EBreakLevel #打断等级 +@export var stance: Enum.EStance #技能姿态 +@export var break_level: Enum.EBreakLevel #打断等级 var weapon_list: Array[WeaponCfg] = [] #武器列表 var weapon_index: int #当前武器下标 var weapon_index_change_dir: int #武器下标操作变化方向 diff --git a/script/ui/hud/player_status_item.gd b/script/ui/hud/player_status_item.gd index ad137e3..489c99a 100644 --- a/script/ui/hud/player_status_item.gd +++ b/script/ui/hud/player_status_item.gd @@ -41,4 +41,4 @@ func on_mp_max_changed(value: int): func on_mp_changed(value: int): for i in range(mp_list.get_child_count()): var mp_item: MpItemSub = mp_list.get_child(i) as MpItemSub - mp_item.set_active(i