1
1
mirror of https://github.com/Rundll86/Dog-Lynx-And-HCN.git synced 2026-05-27 22:41:56 +08:00

Compare commits

...

16 Commits

Author SHA1 Message Date
fallingshrimp 7c78deaa7b fix(Characters/Dog): 调整狗的攻击冷却时间和攻击方式
减少狗的攻击冷却时间范围并简化攻击逻辑,移除多子弹发射的等待时间,使战斗节奏更快
2026-05-08 19:02:35 +08:00
fallingshrimp 6f8b2fec90 feat(武器): 调整多个武器的数值和显示属性
更新多个武器的伤害值、能量消耗、冷却时间等数值平衡
修复武器描述文本中的错误并统一显示格式
为部分武器添加缺失的tease文本和可见性设置
优化武器配置文件的调试标记和能量显示
2026-05-08 18:54:31 +08:00
fallingshrimp 1eb05ca758 feat(武器): 将猞猁的默认武器替换为紫水晶簇
修改紫水晶簇的伤害显示为10点,并添加debugRebuild标志
调整相机震动效果,使强度叠加而非覆盖
2026-05-08 18:44:57 +08:00
fallingshrimp b9208189fe fix(EnergyBlock): 移除被注释的AI攻击逻辑
refactor(Parrier): 重构penerateEffect方法并优化位置计算

feat(MuyangDog): 添加Tree武器到武器库
2026-05-08 18:39:26 +08:00
fallingshrimp 8754b6d491 fix: 调整游戏平衡参数和物品数量
降低苹果掉落率和相关影响参数,减少玩家初始苹果数量
修改刷新计数增加数量,调整幸运值对属性的影响比例
2026-05-08 17:57:41 +08:00
fallingshrimp 972a8494b5 fix: 修复死亡原因显示和游戏结束逻辑
修正死亡原因文本格式并移除重复条目
重构游戏结束面板的消息生成逻辑
调整牧羊犬角色描述和移除调试属性
清理猞猁角色的多余武器节点
修复字段应用器的逻辑判断错误
2026-05-08 17:13:51 +08:00
fallingshrimp c1143d5f71 fix(EnergyBlock): 启用被注释的AI攻击逻辑
恢复被注释的AI攻击行为代码,使能量块能够执行完整的攻击策略
2026-05-08 16:39:20 +08:00
fallingshrimp 8c95202d72 fix(Weapons/DaoStatue): 调整基础伤害倍率从125%降至105%
修改了DaoStatue武器的rate2属性值及其相关描述,将基础伤害倍率从125%降低至105%以平衡游戏性
2026-05-08 16:34:28 +08:00
fallingshrimp 2563dc8c81 fix(武器平衡): 调整道教石像和无为之剑的数值
降低道教石像的攻击加成和rate2加成
提高道教石像的基础攻击力
为无为之剑添加rate2属性并实现伤害计算
更新相关描述文本
2026-05-08 16:31:11 +08:00
fallingshrimp 32a0f43bfa fix(武器): 调整DaoStatue的伤害计算和移除InfinitySword的伤害减免
移除InfinitySword的penerateDamageReduction属性
调整DaoStatue的rate2计算系数从0.06提升至0.15
更新DaoStatue的基础rate2值从1.05提升至1.25
同步更新相关UI文本中的数值显示
2026-05-08 16:22:46 +08:00
fallingshrimp fbcab848e2 fix: 修复子弹伤害计算并调整触发条件
调整Wuwei子弹的伤害计算方式,移除冗余计算并添加rate2变量控制伤害倍率。修改Parrier子弹的反射伤害计算,加入子弹伤害因子。优化DaoStatue武器的攻击触发条件,从检测1颗子弹改为3颗,并简化子弹生成逻辑。
2026-05-08 16:18:13 +08:00
fallingshrimp 04727c0feb feat(武器): 调整道教石像属性和机制
修改道教石像的攻击属性计算方式,移除rate3属性并调整rate2的计算公式
更新武器描述文本以匹配新的机制
将道教石像添加到猞猁角色的武器库中
2026-05-08 16:04:41 +08:00
fallingshrimp ad63aacf94 fix(CameraManager): 修复相机震动结束后状态未重置的问题
在震动结束后添加shaking状态重置,确保相机震动行为正确终止
2026-05-08 15:57:03 +08:00
fallingshrimp e8413dd01b feat(武器系统): 添加神手玉武器并完善格挡机制
添加新武器"神手玉",实现不同类型的攻击格挡效果:
- 近战挥舞:化解伤害
- 近战戳刺:反弹伤害并击退
- 远程射弹:概率弹反
- 猛冲攻击:反弹速度
- 吐息攻击:产生击退
- 魔法/召唤攻击:少量储能

调整Parry.gd的相机震动参数,增加BulletBase的MotionType枚举值STAB,完善Parrier.gd对不同攻击类型的处理逻辑。同时添加Debug测试boss选项,修复AcidS.gd的缩进问题。
2026-05-08 15:43:55 +08:00
fallingshrimp c079c20f28 1 2026-05-08 15:20:45 +08:00
fallingshrimp df8ea7c466 fix(武器): 限制追踪强度在0到1之间并调整攻击力
将LGBT武器的追踪强度限制在0到1之间,防止数值溢出。同时将基础攻击力从15提升到20,增强武器效果。
2026-05-08 15:19:48 +08:00
50 changed files with 325 additions and 182 deletions
+7 -8
View File
@@ -1,4 +1,4 @@
[gd_scene load_steps=9 format=3 uid="uid://clr5pbkifgear"]
[gd_scene format=3 uid="uid://clr5pbkifgear"]
[ext_resource type="PackedScene" uid="uid://crtdkysmnkith" path="res://components/Abstracts/BulletBase.tscn" id="1_qpsi6"]
[ext_resource type="Script" uid="uid://dl7d0v7f2uute" path="res://scripts/Contents/Bullets/AcidStorm.gd" id="2_daxsl"]
@@ -104,22 +104,21 @@ _data = {
[sub_resource type="CircleShape2D" id="CircleShape2D_daxsl"]
radius = 59.008472
[node name="AcidStorm" instance=ExtResource("1_qpsi6")]
[node name="AcidStorm" unique_id=61904763 instance=ExtResource("1_qpsi6")]
script = ExtResource("2_daxsl")
speed = 2.5
motionType = 3
penerate = 1.0
autoSpawnAnimation = true
freeAfterSpawn = true
[node name="texture" parent="." index="0"]
[node name="texture" parent="." index="0" unique_id=162977358]
scale = Vector2(0.2, 0.2)
sprite_frames = SubResource("SpriteFrames_daxsl")
[node name="animator" parent="texture" index="0"]
libraries = {
&"": SubResource("AnimationLibrary_5atmc")
}
[node name="animator" parent="texture" index="0" unique_id=1114087117]
libraries/ = SubResource("AnimationLibrary_5atmc")
[node name="hitbox" parent="." index="1"]
[node name="hitbox" parent="." index="1" unique_id=175349408]
shape = SubResource("CircleShape2D_daxsl")
disabled = true
-1
View File
@@ -145,7 +145,6 @@ height = 580.0
script = ExtResource("2_nbqhn")
speed = 25.0
penerate = 1.0
penerateDamageReduction = 0.1
autoSpawnAnimation = true
autoPlayTexture = true
freeAfterSpawn = true
+24
View File
@@ -68,6 +68,18 @@ tracks/4/keys = {
"update": 1,
"values": [true]
}
tracks/5/type = "value"
tracks/5/imported = false
tracks/5/enabled = true
tracks/5/path = NodePath("%texture/..:motionType")
tracks/5/interp = 1
tracks/5/loop_wrap = true
tracks/5/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [0]
}
[sub_resource type="Animation" id="Animation_nqryj"]
resource_name = "destroy"
@@ -203,6 +215,18 @@ tracks/7/keys = {
"update": 1,
"values": [false, true]
}
tracks/8/type = "value"
tracks/8/imported = false
tracks/8/enabled = true
tracks/8/path = NodePath("%texture/..:motionType")
tracks/8/interp = 1
tracks/8/loop_wrap = true
tracks/8/keys = {
"times": PackedFloat32Array(0, 1.7),
"transitions": PackedFloat32Array(1, 1),
"update": 1,
"values": [0, 6]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_ccsa1"]
_data = {
+26 -2
View File
@@ -55,6 +55,18 @@ tracks/3/keys = {
"update": 1,
"values": [0]
}
tracks/4/type = "value"
tracks/4/imported = false
tracks/4/enabled = true
tracks/4/path = NodePath("%texture/..:motionType")
tracks/4/interp = 1
tracks/4/loop_wrap = true
tracks/4/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [0]
}
[sub_resource type="Animation" id="Animation_oinqg"]
resource_name = "destroy"
@@ -151,6 +163,18 @@ tracks/5/keys = {
"method": &"generateShadow"
}]
}
tracks/6/type = "value"
tracks/6/imported = false
tracks/6/enabled = true
tracks/6/path = NodePath("%texture/..:motionType")
tracks/6/interp = 1
tracks/6/loop_wrap = true
tracks/6/keys = {
"times": PackedFloat32Array(0, 0.3, 1.45),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 1,
"values": [6, 0, 6]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_w1utg"]
_data = {
@@ -186,8 +210,8 @@ texture = ExtResource("2_wwxm2")
[node name="audio" type="AudioStreamPlayer2D" parent="texture/anchor/textureSword" index="0" unique_id=167399724]
[node name="hitbox" parent="." index="1" unique_id=175349408 node_paths=PackedStringArray("target")]
position = Vector2(150, 0)
rotation = 1.5707964
position = Vector2(299.99997, 0.1221919)
rotation = 0.00040731629
shape = SubResource("CircleShape2D_1sgli")
script = ExtResource("7_1sgli")
target = NodePath("../texture/anchor/textureSword")
+2 -3
View File
@@ -19,10 +19,9 @@ theme_override_styles/panel = SubResource("StyleBoxFlat_fi2nw")
displayName = "牧羊犬"
slogan = "恪守使命不离不弃"
avatar = ExtResource("2_fi2nw")
description = "每3秒发动格挡,弹反一切子弹。"
description = "每3秒发动格挡。"
fields = Array[int]([0, 8, 3])
fieldValues = Array[float]([50.0, 0.15, -0.2])
clickToRebuild = true
[node name="avatarTexture" parent="wrapper" parent_id_path=PackedInt32Array(2023039659) index="0" unique_id=1334645594]
texture = ExtResource("2_fi2nw")
@@ -34,4 +33,4 @@ text = "牧羊犬"
text = "“恪守使命不离不弃”"
[node name="descriptionLabel" parent="wrapper/infoContainer" parent_id_path=PackedInt32Array(143242635) index="1" unique_id=808054282]
text = "每3秒发动格挡,弹反一切子弹。"
text = "每3秒发动格挡。"
+2 -2
View File
@@ -2,10 +2,10 @@
[ext_resource type="PackedScene" uid="uid://bs863g2s8r770" path="res://components/Abstracts/PlayerBase.tscn" id="1_ns0m5"]
[ext_resource type="Script" uid="uid://b8g0hkqvyeptg" path="res://scripts/Contents/Characters/Lynx.gd" id="2_d6nve"]
[ext_resource type="PackedScene" uid="uid://frwt0fgrpskb" path="res://components/Weapons/Meowmere.tscn" id="3_nitbu"]
[ext_resource type="PackedScene" uid="uid://c0n3igy4hucrg" path="res://components/Weapons/PurpleCrystal.tscn" id="3_nitbu"]
[node name="Lynx" unique_id=1711205167 instance=ExtResource("1_ns0m5")]
script = ExtResource("2_d6nve")
displayName = "猞猁"
[node name="Meowmere" parent="weaponStore" index="0" unique_id=1965287972 instance=ExtResource("3_nitbu")]
[node name="PurpleCrystal" parent="weaponStore" index="0" unique_id=1991730660 instance=ExtResource("3_nitbu")]
+4
View File
@@ -3,9 +3,13 @@
[ext_resource type="PackedScene" uid="uid://bs863g2s8r770" path="res://components/Abstracts/PlayerBase.tscn" id="1_y3l4w"]
[ext_resource type="Script" uid="uid://bbmb572iba42l" path="res://scripts/Contents/Characters/MuyangDog.gd" id="2_mr6nm"]
[ext_resource type="PackedScene" uid="uid://u0djqwuuysp8" path="res://components/Weapons/Volcano.tscn" id="3_e236u"]
[ext_resource type="PackedScene" uid="uid://cx7nogfnv7s8t" path="res://components/Weapons/Tree.tscn" id="4_im5m5"]
[node name="MuyangDog" unique_id=1711205167 instance=ExtResource("1_y3l4w")]
script = ExtResource("2_mr6nm")
displayName = "牧羊犬"
[node name="Volcano" parent="weaponStore" index="0" unique_id=204992396 instance=ExtResource("3_e236u")]
[node name="Tree" parent="weaponStore" index="1" unique_id=185228402 instance=ExtResource("4_im5m5")]
debugRebuild = false
@@ -298,13 +298,15 @@ size_flags_horizontal = 3
theme = ExtResource("4_lfxcn")
selected = 0
allow_reselect = true
item_count = 3
item_count = 4
popup/item_0/text = "无尽波次·标准游戏体验"
popup/item_0/id = 0
popup/item_1/text = "Boss Rush"
popup/item_1/id = 1
popup/item_2/text = "割草·高难度⚠️"
popup/item_2/id = 2
popup/item_3/text = "[Debug] Testboss"
popup/item_3/id = 3
[node name="useTutorial" type="HBoxContainer" parent="content/wrapper/layout/startGameWrapper/start/starter/singleplayer/playConfig" index="2" unique_id=2079979053]
layout_mode = 2
+8 -9
View File
@@ -1,10 +1,10 @@
[gd_scene load_steps=4 format=3 uid="uid://yq7vmijwvgx1"]
[gd_scene format=3 uid="uid://yq7vmijwvgx1"]
[ext_resource type="PackedScene" uid="uid://ckq2cq6m23hq3" path="res://components/Abstracts/WeaponCardBase.tscn" id="1_pyyxv"]
[ext_resource type="Script" uid="uid://bxa5hc7aokisg" path="res://scripts/Contents/Weapons/AcidWind.gd" id="2_1j38u"]
[ext_resource type="Texture2D" uid="uid://ckr8tw7fsa7qx" path="res://resources/weapons/AcidWind.png" id="2_pnd3r"]
[node name="AcidWind" instance=ExtResource("1_pyyxv")]
[node name="AcidWind" unique_id=1599717188 instance=ExtResource("1_pyyxv")]
script = ExtResource("2_1j38u")
avatarTexture = ExtResource("2_pnd3r")
displayName = "酸蚀风暴"
@@ -39,25 +39,24 @@ descriptionTemplate = "发射一个[b]酸蚀风暴[/b],以$f的频率吸引一
[color=lightyellow][b]盐酸[/b][/color]:使敌人 [i]移动速度[/i] 降低$cl-speed[i]攻击速度[/i] 降低$cl-atkspeed。
[color=pink][b]碳酸[/b][/color]:降低敌人$c-atk伤害。
[color=orange][b]磷酸[/b][/color]:使敌人 [i]散射角[/i] 增加$p-offset。"
needEnergy = 10.0
needEnergy = 25.0
cooldown = 2000.0
debugRebuild = true
[node name="avatar" parent="container/info" index="0"]
[node name="avatar" parent="container/info" parent_id_path=PackedInt32Array(1625294072) index="0" unique_id=1021985889]
texture = ExtResource("2_pnd3r")
[node name="energy" parent="container/info/infos/energyInfo" index="1"]
[node name="energy" parent="container/info/infos/energyInfo" parent_id_path=PackedInt32Array(644675021) index="1" unique_id=1664028115]
text = "10.0"
[node name="beachball" parent="container/info/infos" index="1"]
[node name="beachball" parent="container/info/infos" parent_id_path=PackedInt32Array(492799150) index="1" unique_id=653442983]
count = 200
[node name="name" parent="container/info/displays" index="0"]
[node name="name" parent="container/info/displays" parent_id_path=PackedInt32Array(784441328) index="0" unique_id=1576068972]
displayName = "酸蚀风暴"
quality = 4
typeTopic = 3
[node name="description" parent="container" index="2"]
[node name="description" parent="container" parent_id_path=PackedInt32Array(575698869) index="2" unique_id=566230682]
text = "[center]发射一个[b]酸蚀风暴[/b],以[color=cyan]30.0Hz[/color]的频率吸引一下五种[b]酸[/b]到风暴中心,强酸可造成[color=cyan]1.00[/color]点伤害,弱酸造成[color=cyan]0.50[/color]点伤害。
[color=green][b]硫酸[/b][/color]:命中时溅射1~[color=cyan]4[/color]滴[b]硫酸[/b]。
[color=lightblue][b]硝酸[/b][/color]:额外造成[color=cyan]500.0%[/color]伤害。
+1
View File
@@ -53,4 +53,5 @@ text = "[center]召唤[b]湮灭射线[/b]
每[color=cyan]0.10[/color]秒造成[color=cyan]40[/color]点伤害。[/center]"
[node name="tease" parent="container" parent_id_path=PackedInt32Array(575698869) index="3" unique_id=689277044]
visible = true
text = "“秒天秒地秒空气”"
+8 -7
View File
@@ -1,11 +1,11 @@
[gd_scene load_steps=5 format=3 uid="uid://c3crr8r7y3oho"]
[gd_scene format=3 uid="uid://c3crr8r7y3oho"]
[ext_resource type="PackedScene" uid="uid://ckq2cq6m23hq3" path="res://components/Abstracts/WeaponCardBase.tscn" id="1_rlc3s"]
[ext_resource type="Script" uid="uid://8xlc5upq36n7" path="res://scripts/Contents/Weapons/BlueCrystal.gd" id="2_jbcf8"]
[ext_resource type="Texture2D" uid="uid://dl1tawdvnlsux" path="res://resources/weapons/blue-crystal.png" id="3_fewtg"]
[ext_resource type="AudioStream" uid="uid://dclinyhu256xi" path="res://resources/sounds/effect/Low Whoosh.mp3" id="4_fewtg"]
[node name="BlueCrystal" instance=ExtResource("1_rlc3s")]
[node name="BlueCrystal" unique_id=1636642891 instance=ExtResource("1_rlc3s")]
script = ExtResource("2_jbcf8")
avatarTexture = ExtResource("3_fewtg")
displayName = "蓝水晶簇"
@@ -21,16 +21,17 @@ storeType = {
}
descriptionTemplate = "发射[b]蓝水晶[/b],可无限追踪,命中造成$atk点伤害,飞行过程中有$count颗[b]钻石[/b]环绕。"
cooldown = 250.0
debugRebuild = true
[node name="attack" parent="sounds" index="0"]
[node name="attack" parent="sounds" parent_id_path=PackedInt32Array(1775425991) index="0" unique_id=853583292]
stream = ExtResource("4_fewtg")
[node name="avatar" parent="container/info" index="0"]
[node name="avatar" parent="container/info" parent_id_path=PackedInt32Array(1625294072) index="0" unique_id=1021985889]
texture = ExtResource("3_fewtg")
[node name="name" parent="container/info/displays" index="0"]
[node name="name" parent="container/info/displays" parent_id_path=PackedInt32Array(784441328) index="0" unique_id=1576068972]
displayName = "蓝水晶簇"
typeTopic = 3
[node name="description" parent="container" index="2"]
text = "[center]发射[b]蓝水晶[/b],可无限追踪,命中造成[color=cyan]5[/color]点伤害,飞行过程中有[color=cyan]2[/color]颗[b]钻石[/b]环绕。[/center]"
[node name="description" parent="container" parent_id_path=PackedInt32Array(575698869) index="2" unique_id=566230682]
text = "[center]发射[b]蓝水晶[/b],可无限追踪,命中造成[color=cyan]3[/color]点伤害,飞行过程中有[color=cyan]2[/color]颗[b]钻石[/b]环绕。[/center]"
+3 -2
View File
@@ -13,7 +13,7 @@ costBeachball = 50
store = {
"atk": 5,
"count": 1,
"self": 2.0
"self": 5.0
}
storeType = {
"atk": 2,
@@ -36,7 +36,8 @@ displayName = "鸡毛弓"
quality = 2
[node name="description" parent="container" parent_id_path=PackedInt32Array(575698869) index="2" unique_id=566230682]
text = "[center]消耗[color=cyan]2[/color]点生命值,发射[color=cyan]1[/color]支[b]鸡毛箭[/b],每支造成当前飞行速度的[color=cyan]500.0%[/color]伤害。[/center]"
text = "[center]消耗[color=cyan]5[/color]点生命值,发射[color=cyan]1[/color]支[b]鸡毛箭[/b],每支造成当前飞行速度的[color=cyan]500.0%[/color]伤害。[/center]"
[node name="tease" parent="container" parent_id_path=PackedInt32Array(575698869) index="3" unique_id=689277044]
visible = true
text = "“损人又害己”"
+7 -2
View File
@@ -21,13 +21,17 @@ descriptionTemplate = "发射[b]齿轮[/b],在飞行一定距离后回旋。
齿轮的伤害频率与转速成正比。
锋利度:$atk,初始转速:$rotate
齿轮的转速随时间逐渐降低。"
tease = "马后炮令人措手不及"
tease = "马后炮令人措手不及"
needEnergy = 4.0
cooldown = 1000.0
debugRebuild = true
[node name="avatar" parent="container/info" parent_id_path=PackedInt32Array(1625294072) index="0" unique_id=1021985889]
texture = ExtResource("2_qs30c")
[node name="energy" parent="container/info/infos/energyInfo" parent_id_path=PackedInt32Array(644675021) index="1" unique_id=1664028115]
text = "4.0"
[node name="name" parent="container/info/displays" parent_id_path=PackedInt32Array(784441328) index="0" unique_id=1576068972]
displayName = "齿轮回旋镖"
quality = 3
@@ -39,4 +43,5 @@ text = "[center]发射[b]齿轮[/b],在飞行一定距离后回旋。
齿轮的转速随时间逐渐降低。[/center]"
[node name="tease" parent="container" parent_id_path=PackedInt32Array(575698869) index="3" unique_id=689277044]
text = "“马后炮最令人措手不及”"
visible = true
text = "“马后炮令人措手不及”"
+15 -15
View File
@@ -12,10 +12,9 @@ displayName = "道教石像"
typeTopic = 1
costBeachball = 499
store = {
"atk": 50,
"atk": 20,
"rate1": 0.05,
"rate2": 0.025,
"rate3": 0.01
"rate2": 1.05
}
storeType = {
"atk": 1,
@@ -23,16 +22,16 @@ storeType = {
"rate2": 2,
"rate3": 2
}
descriptionTemplate = "挥出[b]天地之剑[/b]蓄力一段时间后,
发射一道[b]无量[/b]造成$atk点伤害。
descriptionTemplate = "消耗[color=yellow]3[/color]层气力,挥出[b]无为之剑[/b]
蓄力一段时间后,发动[b]无量反击[/b]
造成$atk点基础伤害。
攻击速度每降低[color=yellow]1%[/color],伤害+$rate2
每失去[color=yellow]1[/color]点生命值,伤害+$rate1
拥有的所有[b]气力[/b]层数之和,每化解[color=yellow]1[/color]点伤害,[b]无量斩[/b]的伤害+$rate3
次攻击需要消耗至少[color=yellow]1[/color]层气力。"
无量反击可化解路径上的一切伤害,
化解[color=yellow]1[/color]点伤害,基础伤害*$rate2。"
sources = Array[String](["Nine Sols"])
tease = "天机不可泄露"
needEnergy = 25.0
needEnergy = 40.0
cooldown = 4000.0
debugRebuild = true
@@ -43,7 +42,7 @@ stream = ExtResource("4_y3oaj")
texture = ExtResource("2_gx1sf")
[node name="energy" parent="container/info/infos/energyInfo" parent_id_path=PackedInt32Array(644675021) index="1" unique_id=1664028115]
text = "25.0"
text = "40.0"
[node name="beachball" parent="container/info/infos" parent_id_path=PackedInt32Array(492799150) index="1" unique_id=653442983]
count = 499
@@ -56,13 +55,14 @@ typeTopic = 1
text = "Nine Sols"
[node name="description" parent="container" parent_id_path=PackedInt32Array(575698869) index="2" unique_id=566230682]
text = "[center]挥出[b]天地之剑[/b]蓄力一段时间后,
发射一道[b]无量[/b]造成[color=cyan]50[/color]点伤害。
text = "[center]消耗[color=yellow]3[/color]层气力,挥出[b]无为之剑[/b]
蓄力一段时间后,发动[b]无量反击[/b]
造成[color=cyan]20[/color]点基础伤害。
攻击速度每降低[color=yellow]1%[/color],伤害+[color=cyan]2.5%[/color]
每失去[color=yellow]1[/color]点生命值,伤害+[color=cyan]5.0%[/color]
拥有的所有[b]气力[/b]层数之和,每化解[color=yellow]1[/color]点伤害,[b]无量斩[/b]的伤害+[color=cyan]1.0%[/color]
次攻击需要消耗至少[color=yellow]1[/color]层气力。[/center]"
无量反击可化解路径上的一切伤害,
化解[color=yellow]1[/color]点伤害,基础伤害*[color=cyan]105.0%[/color]。[/center]"
[node name="tease" parent="container" parent_id_path=PackedInt32Array(575698869) index="3" unique_id=689277044]
visible = true
text = "“天机不可泄露”"
+8 -2
View File
@@ -8,7 +8,6 @@
script = ExtResource("2_7yxbe")
avatarTexture = ExtResource("2_tw58e")
displayName = "Gobo"
quality = 4
typeTopic = 4
store = {
"atk": 100,
@@ -24,15 +23,22 @@ storeType = {
}
descriptionTemplate = "召唤[b]Gobo[/b]Gobo会自主行动,每受到$atk点伤害后会生产$count颗[b]苹果[/b]。Gobo初始拥有$health点生命值。"
sources = Array[String](["Scratch"])
needEnergy = 75.0
cooldown = 1000.0
debugRebuild = true
[node name="avatar" parent="container/info" parent_id_path=PackedInt32Array(1625294072) index="0" unique_id=1021985889]
texture = ExtResource("2_tw58e")
[node name="energy" parent="container/info/infos/energyInfo" parent_id_path=PackedInt32Array(644675021) index="1" unique_id=1664028115]
text = "75.0"
[node name="name" parent="container/info/displays" parent_id_path=PackedInt32Array(784441328) index="0" unique_id=1576068972]
displayName = "Gobo"
quality = 4
typeTopic = 4
[node name="source" parent="container/info/displays" parent_id_path=PackedInt32Array(784441328) index="1" unique_id=365191794]
text = "Scratch"
[node name="description" parent="container" parent_id_path=PackedInt32Array(575698869) index="2" unique_id=566230682]
text = "[center]召唤[b]Gobo[/b]Gobo会自主行动,每受到[color=cyan]100[/color]点伤害后会生产[color=cyan]1[/color]颗[b]苹果[/b]。Gobo初始拥有[color=cyan]200[/color]点生命值。[/center]"
+5 -5
View File
@@ -11,20 +11,19 @@ displayName = "草方块菌落"
typeTopic = 4
costBeachball = 10
store = {
"atk": 100
"atk": 50
}
descriptionTemplate = "分泌一堵[b]肽聚墙[/b],可抵挡$atk点伤害,敌人更有可能瞄准你。"
sources = Array[String](["UDA"])
tease = "也许弹反会更合适?"
needEnergy = 35.0
needEnergy = 15.0
cooldown = 1000.0
debugRebuild = true
[node name="avatar" parent="container/info" parent_id_path=PackedInt32Array(1625294072) index="0" unique_id=1021985889]
texture = ExtResource("2_kh4xg")
[node name="energy" parent="container/info/infos/energyInfo" parent_id_path=PackedInt32Array(644675021) index="1" unique_id=1664028115]
text = "35.0"
text = "100.0"
[node name="beachball" parent="container/info/infos" parent_id_path=PackedInt32Array(492799150) index="1" unique_id=653442983]
count = 10
@@ -37,7 +36,8 @@ typeTopic = 4
text = "UDA"
[node name="description" parent="container" parent_id_path=PackedInt32Array(575698869) index="2" unique_id=566230682]
text = "[center]分泌一堵[b]肽聚墙[/b],可抵挡[color=cyan]100[/color]点伤害,敌人更有可能瞄准你。[/center]"
text = "[center]分泌一堵[b]肽聚墙[/b],可抵挡[color=cyan]200[/color]点伤害,敌人更有可能瞄准你。[/center]"
[node name="tease" parent="container" parent_id_path=PackedInt32Array(575698869) index="3" unique_id=689277044]
visible = true
text = "“也许弹反会更合适?”"
+2 -4
View File
@@ -23,12 +23,13 @@ descriptionTemplate = "召唤[b]抓狂的哈基米[/b],跟踪敌人,每$time
sources = Array[String](["Internet"])
needEnergy = 50.0
cooldown = 1000.0
debugRebuild = true
[node name="avatar" parent="container/info" parent_id_path=PackedInt32Array(1625294072) index="0" unique_id=1021985889]
texture = ExtResource("2_74sfb")
[node name="energy" parent="container/info/infos/energyInfo" parent_id_path=PackedInt32Array(644675021) index="1" unique_id=1664028115]
text = "75.0"
text = "50.0"
[node name="beachball" parent="container/info/infos" parent_id_path=PackedInt32Array(492799150) index="1" unique_id=653442983]
count = 600
@@ -43,6 +44,3 @@ text = "Internet"
[node name="description" parent="container" parent_id_path=PackedInt32Array(575698869) index="2" unique_id=566230682]
text = "[center]召唤[b]抓狂的哈基米[/b],跟踪敌人,每[color=cyan]0.25[/color]秒造成[color=cyan]7[/color]点伤害。[/center]"
[node name="tease" parent="container" parent_id_path=PackedInt32Array(575698869) index="3" unique_id=689277044]
visible = false
+7 -1
View File
@@ -22,11 +22,16 @@ storeType = {
descriptionTemplate = "散射5~$count针[b]河豚刺针[/b],每根针造成$atk点伤害,撞上敌人后有$penerate概率反弹。"
sources = Array[String](["Minecraft", "Pathogenic"])
tease = "看我扎不扎你就完了"
needEnergy = 2.0
cooldown = 2000.0
debugRebuild = true
[node name="avatar" parent="container/info" parent_id_path=PackedInt32Array(1625294072) index="0" unique_id=1021985889]
texture = ExtResource("2_y0xe1")
[node name="energy" parent="container/info/infos/energyInfo" parent_id_path=PackedInt32Array(644675021) index="1" unique_id=1664028115]
text = "2.0"
[node name="name" parent="container/info/displays" parent_id_path=PackedInt32Array(784441328) index="0" unique_id=1576068972]
displayName = "河豚"
quality = 0
@@ -35,7 +40,8 @@ quality = 0
text = "Minecraft × Pathogenic"
[node name="description" parent="container" parent_id_path=PackedInt32Array(575698869) index="2" unique_id=566230682]
text = "[center]散射5~[color=cyan]10[/color]针[b]河豚刺针[/b],每根针造成[color=cyan]15[/color]点伤害,撞上敌人后有[color=cyan]20.0%[/color]概率反弹。[/center]"
text = "[center]散射5~[color=cyan]10[/color]针[b]河豚刺针[/b],每根针造成[color=cyan]30[/color]点伤害,撞上敌人后有[color=cyan]25.0%[/color]概率反弹。[/center]"
[node name="tease" parent="container" parent_id_path=PackedInt32Array(575698869) index="3" unique_id=689277044]
visible = true
text = "“看我扎不扎你就完了”"
+1 -4
View File
@@ -14,7 +14,7 @@ typeTopic = 4
costBeachball = 200
store = {
"angle": 35.0,
"atk": 15.0,
"atk": 20.0,
"count": 1.0,
"power": 0.02,
"trace": 1.0
@@ -50,6 +50,3 @@ typeTopic = 4
size_flags_vertical = 3
text = "[center]召唤[b]彩虹旗[/b],每[color=cyan]35.0°[/color]发射1/[color=cyan]1[/color]条以[color=cyan]2.0%[/color]效率追踪[color=cyan]1.00[/color]秒的[b]七彩光标[/b],每条造成[color=cyan]15[/color]点伤害。[/center]"
autowrap_mode = 2
[node name="tease" parent="container" parent_id_path=PackedInt32Array(575698869) index="3" unique_id=689277044]
visible = false
+8 -3
View File
@@ -36,12 +36,17 @@ descriptionTemplate = "召唤[color=yellow]1[/color]枚[b]魔法导弹[/b],围
分裂出$count枚[b]次级导弹[/b]
可继承分裂最多$count次。"
sources = Array[String](["万有引力", "宇宙航行"])
cooldown = 1000.0
tease = "物理学还在追我"
needEnergy = 25.0
cooldown = 3000.0
debugRebuild = true
[node name="avatar" parent="container/info" parent_id_path=PackedInt32Array(1625294072) index="0" unique_id=1021985889]
texture = ExtResource("2_3sdrm")
[node name="energy" parent="container/info/infos/energyInfo" parent_id_path=PackedInt32Array(644675021) index="1" unique_id=1664028115]
text = "25.0"
[node name="name" parent="container/info/displays" parent_id_path=PackedInt32Array(784441328) index="0" unique_id=1576068972]
displayName = "导弹法杖"
quality = 2
@@ -61,5 +66,5 @@ text = "[center]召唤[color=yellow]1[/color]枚[b]魔法导弹[/b],围绕鼠
可继承分裂最多[color=cyan]3[/color]次。[/center]"
[node name="tease" parent="container" parent_id_path=PackedInt32Array(575698869) index="3" unique_id=689277044]
visible = false
text = "“ ”"
visible = true
text = "“物理学还在追我”"
+8
View File
@@ -26,7 +26,9 @@ storeType = {
}
descriptionTemplate = "发射$count只伤害以$reduce衰减的造成$childatk点伤害的[b]彩虹猫[/b]的同时挥舞造成$atk点伤害。"
sources = Array[String](["Terraria"])
needEnergy = 2.0
cooldown = 230.0
debugRebuild = true
[node name="attack" parent="sounds" parent_id_path=PackedInt32Array(1775425991) index="0" unique_id=853583292]
stream = ExtResource("4_hvtvi")
@@ -35,6 +37,9 @@ volume_db = 10.0
[node name="avatar" parent="container/info" parent_id_path=PackedInt32Array(1625294072) index="0" unique_id=1021985889]
texture = ExtResource("2_kiocs")
[node name="energy" parent="container/info/infos/energyInfo" parent_id_path=PackedInt32Array(644675021) index="1" unique_id=1664028115]
text = "2.0"
[node name="beachball" parent="container/info/infos" parent_id_path=PackedInt32Array(492799150) index="1" unique_id=653442983]
count = 600
@@ -43,5 +48,8 @@ displayName = "彩虹猫之刃"
quality = 2
typeTopic = 3
[node name="source" parent="container/info/displays" parent_id_path=PackedInt32Array(784441328) index="1" unique_id=365191794]
text = "Terraria"
[node name="description" parent="container" parent_id_path=PackedInt32Array(575698869) index="2" unique_id=566230682]
text = "[center]发射[color=cyan]1[/color]只伤害以[color=cyan]25.0%[/color]衰减的造成[color=cyan]6[/color]点伤害的[b]彩虹猫[/b]的同时挥舞造成[color=cyan]5[/color]点伤害。[/center]"
+1
View File
@@ -21,6 +21,7 @@ storeType = {
}
descriptionTemplate = "命中时造成$atk点伤害,有$rate概率挖出1~$count个随机物品。"
sources = Array[String](["Terraria"])
cooldown = 0.0
[node name="avatar" parent="container/info" parent_id_path=PackedInt32Array(1625294072) index="0" unique_id=1021985889]
texture = ExtResource("2_u2d30")
+6 -3
View File
@@ -15,14 +15,16 @@ store = {
}
descriptionTemplate = "按住蓄力扔出钢管,蓄力越久伤害越高,至少造成$atk点伤害,发射钢管后继续按住鼠标可进行连续发射。"
sources = Array[String](["MEME"])
needEnergy = 2.0
tease = "保护耳朵"
needEnergy = 40.0
cooldown = 3000.0
debugRebuild = true
[node name="avatar" parent="container/info" parent_id_path=PackedInt32Array(1625294072) index="0" unique_id=1021985889]
texture = ExtResource("2_mmtf8")
[node name="energy" parent="container/info/infos/energyInfo" parent_id_path=PackedInt32Array(644675021) index="1" unique_id=1664028115]
text = "2.0"
text = "40.0"
[node name="beachball" parent="container/info/infos" parent_id_path=PackedInt32Array(492799150) index="1" unique_id=653442983]
count = 350
@@ -37,4 +39,5 @@ text = "MEME"
text = "[center]按住蓄力扔出钢管,蓄力越久伤害越高,至少造成[color=cyan]5[/color]点伤害,发射钢管后继续按住鼠标可进行连续发射。[/center]"
[node name="tease" parent="container" parent_id_path=PackedInt32Array(575698869) index="3" unique_id=689277044]
visible = false
visible = true
text = "“保护耳朵”"
+2 -4
View File
@@ -13,6 +13,7 @@ displayName = "紫水晶簇"
costBeachball = 200
descriptionTemplate = "发射[b]紫水晶[/b],撞击时造成$atk点伤害。"
cooldown = 200.0
debugRebuild = true
[node name="attack" parent="sounds" parent_id_path=PackedInt32Array(1775425991) index="0" unique_id=853583292]
stream = ExtResource("4_16daa")
@@ -27,7 +28,4 @@ count = 200
displayName = "紫水晶簇"
[node name="description" parent="container" parent_id_path=PackedInt32Array(575698869) index="2" unique_id=566230682]
text = "[center]发射[b]紫水晶[/b],撞击时造成[color=cyan]0[/color]点伤害。[/center]"
[node name="tease" parent="container" parent_id_path=PackedInt32Array(575698869) index="3" unique_id=689277044]
visible = false
text = "[center]发射[b]紫水晶[/b],撞击时造成[color=cyan]10[/color]点伤害。[/center]"
+8 -8
View File
@@ -1,11 +1,11 @@
[gd_scene load_steps=5 format=3 uid="uid://dt8w2w816tsj0"]
[gd_scene format=3 uid="uid://dt8w2w816tsj0"]
[ext_resource type="PackedScene" uid="uid://ckq2cq6m23hq3" path="res://components/Abstracts/WeaponCardBase.tscn" id="1_88g2h"]
[ext_resource type="Texture2D" uid="uid://s8r37cmth6o8" path="res://resources/weapons/red-crystal.png" id="2_3e8g7"]
[ext_resource type="Script" uid="uid://dmsjasfucknxq" path="res://scripts/Contents/Weapons/RedCrystal.gd" id="2_wfewu"]
[ext_resource type="AudioStream" uid="uid://dclinyhu256xi" path="res://resources/sounds/effect/Low Whoosh.mp3" id="4_qt0vq"]
[node name="RedCrystal" instance=ExtResource("1_88g2h")]
[node name="RedCrystal" unique_id=1209955095 instance=ExtResource("1_88g2h")]
script = ExtResource("2_wfewu")
avatarTexture = ExtResource("2_3e8g7")
displayName = "红水晶簇"
@@ -24,20 +24,20 @@ storeType = {
"radius": 1
}
descriptionTemplate = "发射[b]红水晶[/b],在3秒后以$radius的半径爆炸,造成$atk点伤害并向随机方向发射1~$count个[b]水晶碎片[/b],造成$percent基础伤害。"
cooldown = 1000.0
cooldown = 1500.0
[node name="attack" parent="sounds" index="0"]
[node name="attack" parent="sounds" parent_id_path=PackedInt32Array(1775425991) index="0" unique_id=853583292]
stream = ExtResource("4_qt0vq")
[node name="avatar" parent="container/info" index="0"]
[node name="avatar" parent="container/info" parent_id_path=PackedInt32Array(1625294072) index="0" unique_id=1021985889]
texture = ExtResource("2_3e8g7")
[node name="beachball" parent="container/info/infos" index="1"]
[node name="beachball" parent="container/info/infos" parent_id_path=PackedInt32Array(492799150) index="1" unique_id=653442983]
count = 400
[node name="name" parent="container/info/displays" index="0"]
[node name="name" parent="container/info/displays" parent_id_path=PackedInt32Array(784441328) index="0" unique_id=1576068972]
displayName = "红水晶簇"
typeTopic = 1
[node name="description" parent="container" index="2"]
[node name="description" parent="container" parent_id_path=PackedInt32Array(575698869) index="2" unique_id=566230682]
text = "[center]发射[b]红水晶[/b],在3秒后以[color=cyan]150[/color]的半径爆炸,造成[color=cyan]45[/color]点伤害并向随机方向发射1~[color=cyan]3[/color]个[b]水晶碎片[/b],造成[color=cyan]50%[/color]基础伤害。[/center]"
+6 -2
View File
@@ -21,10 +21,11 @@ storeType = {
"dmg": 2,
"heal": 1
}
descriptionTemplate = "召唤7条灵魂,每条造成$atk点伤害,命中敌人时将伤害的$dmg转换为能量并提供$heal点治疗。"
descriptionTemplate = "召唤[color=yellow]6[/color]条灵魂,每条造成$atk点伤害,命中敌人时将伤害的$dmg转换为能量并提供$heal点治疗。"
sources = Array[String](["Undertale"])
needEnergy = 150.0
cooldown = 180000.0
debugRebuild = true
[node name="attack" parent="sounds" parent_id_path=PackedInt32Array(1775425991) index="0" unique_id=853583292]
stream = ExtResource("4_tmgox")
@@ -41,5 +42,8 @@ displayName = "bilioicik"
quality = 2
typeTopic = 3
[node name="source" parent="container/info/displays" parent_id_path=PackedInt32Array(784441328) index="1" unique_id=365191794]
text = "Undertale"
[node name="description" parent="container" parent_id_path=PackedInt32Array(575698869) index="2" unique_id=566230682]
text = "[center]召唤7条灵魂,每条造成[color=cyan]2[/color]点伤害,命中敌人时将伤害的[color=cyan]10.0%[/color]转换为能量并提供[color=cyan]1[/color]点治疗。[/center]"
text = "[center]召唤[color=yellow]6[/color]条灵魂,每条造成[color=cyan]2[/color]点伤害,命中敌人时将伤害的[color=cyan]10.0%[/color]转换为能量并提供[color=cyan]1[/color]点治疗。[/center]"
+9 -9
View File
@@ -1,10 +1,10 @@
[gd_scene load_steps=4 format=3 uid="uid://sp8f50c5mxyc"]
[gd_scene format=3 uid="uid://sp8f50c5mxyc"]
[ext_resource type="PackedScene" uid="uid://ckq2cq6m23hq3" path="res://components/Abstracts/WeaponCardBase.tscn" id="1_rax6s"]
[ext_resource type="Texture2D" uid="uid://b6tr2k13qog0j" path="res://resources/weapons/shield.png" id="2_gcjwh"]
[ext_resource type="Script" uid="uid://dcacy48pcfci3" path="res://scripts/Contents/Weapons/Shield.gd" id="2_s74sn"]
[node name="Shield" instance=ExtResource("1_rax6s")]
[node name="Shield" unique_id=1677111509 instance=ExtResource("1_rax6s")]
script = ExtResource("2_s74sn")
avatarTexture = ExtResource("2_gcjwh")
displayName = "回响水晶"
@@ -12,25 +12,25 @@ quality = 3
typeTopic = 4
costBeachball = 1000
store = {
"atk": 70
"atk": 200
}
descriptionTemplate = "召唤一个可抵挡$atk点伤害的[b]音元盾[/b]。"
needEnergy = 50.0
needEnergy = 70.0
cooldown = 30000.0
[node name="avatar" parent="container/info" index="0"]
[node name="avatar" parent="container/info" parent_id_path=PackedInt32Array(1625294072) index="0" unique_id=1021985889]
texture = ExtResource("2_gcjwh")
[node name="energy" parent="container/info/infos/energyInfo" index="1"]
[node name="energy" parent="container/info/infos/energyInfo" parent_id_path=PackedInt32Array(644675021) index="1" unique_id=1664028115]
text = "50.0"
[node name="beachball" parent="container/info/infos" index="1"]
[node name="beachball" parent="container/info/infos" parent_id_path=PackedInt32Array(492799150) index="1" unique_id=653442983]
count = 1000
[node name="name" parent="container/info/displays" index="0"]
[node name="name" parent="container/info/displays" parent_id_path=PackedInt32Array(784441328) index="0" unique_id=1576068972]
displayName = "回响水晶"
quality = 3
typeTopic = 4
[node name="description" parent="container" index="2"]
[node name="description" parent="container" parent_id_path=PackedInt32Array(575698869) index="2" unique_id=566230682]
text = "[center]召唤一个可抵挡[color=cyan]70[/color]点伤害的[b]音元盾[/b]。[/center]"
+22 -20
View File
@@ -2,12 +2,12 @@
[ext_resource type="PackedScene" uid="uid://ckq2cq6m23hq3" path="res://components/Abstracts/WeaponCardBase.tscn" id="1_0lbwr"]
[ext_resource type="Script" uid="uid://bqdyhwcd4jwmj" path="res://scripts/Contents/Weapons/Tree.gd" id="2_jsuc8"]
[ext_resource type="Texture2D" uid="uid://74n7umby4d4w" path="res://resources/weapons/ParryCounter.png" id="3_nwamk"]
[ext_resource type="Texture2D" uid="uid://w5yqnejlmfou" path="res://resources/weapons/Jade_神手玉.png" id="3_nwamk"]
[node name="Tree" unique_id=185228402 instance=ExtResource("1_0lbwr")]
script = ExtResource("2_jsuc8")
avatarTexture = ExtResource("3_nwamk")
displayName = "扶桑元神"
displayName = "神手玉"
quality = 4
typeTopic = 3
costBeachball = 900
@@ -24,26 +24,27 @@ storeType = {
"max": 1,
"rate": 2
}
descriptionTemplate = "进行[b]格挡[/b],化解飞来的子弹
descriptionTemplate = "进行[b]格挡[/b],化解敌人的攻击
每成功格挡一次,获得一点[b]气力[/b]。
每拥有一点气力,增加[color=yellow]1[/color]点冲刺速度,闪避穿过敌人时对其贴上一层[b]符咒[/b],符咒会自动引爆,召唤[b]乾坤剑[/b]穿透敌人。
每拥有一点气力,增加[color=yellow]1[/color]点冲刺速度,闪避穿过敌人时对其贴上一层[b]符咒[/b],符咒会自动引爆,召唤[b]乾坤剑[/b]穿透敌人。
近战攻击造成乾坤剑的$rate点伤害。
每次格挡有$rate的概率弹反,子弹弹反后造成乾坤剑的$rate伤害。
每次格挡最多化解$count个子弹,
体内最多储存$max点气力。
每化解[color=yellow]1[/color]点伤害,
乾坤剑造成的伤害+$atk点。
格挡时机越精确,成功率越高。
格挡成功后继续按住攻击可进行[b]蓄力[/b],
其后松开格挡键进行[b]无量反击[/b],
可弹反一切子弹,
但需消耗[color=yellow]1[/color]层气力,
可将弹反的伤害转换为能量。"
对于[b]近战挥舞[/b]攻击,化解本次伤害;
对于[b]近战戳刺[/b]攻击,将本次伤害反弹,造成乾坤剑的$rate伤害并产生大量击退;
对于[b]远程射弹[/b]攻击,化解本次伤害,有$rate的概率发生[b]弹反[/b],子弹弹反后造成乾坤剑的$rate伤害;
对于[b]猛冲[/b]攻击,化解本次伤害,并反弹敌人的速度;
对于[b]吐息[/b]攻击,[color=red]无法化解伤害[/color]但可以对敌人产生少量击退;
对于[b]魔法或召唤[/b]攻击,[color=red]无法化解伤害[/color]但可以少量储能;"
sources = Array[String](["Nine Sols", "Terraria"])
tease = "卸劲反伤"
cooldown = 250.0
debugRebuild = true
[node name="avatar" parent="container/info" parent_id_path=PackedInt32Array(1625294072) index="0" unique_id=1021985889]
texture = ExtResource("3_nwamk")
@@ -52,7 +53,7 @@ texture = ExtResource("3_nwamk")
count = 900
[node name="name" parent="container/info/displays" parent_id_path=PackedInt32Array(784441328) index="0" unique_id=1576068972]
displayName = "扶桑元神"
displayName = "神手玉"
quality = 4
typeTopic = 3
@@ -60,23 +61,24 @@ typeTopic = 3
text = "Nine Sols × Terraria"
[node name="description" parent="container" parent_id_path=PackedInt32Array(575698869) index="2" unique_id=566230682]
text = "[center]进行[b]格挡[/b],化解飞来的子弹
text = "[center]进行[b]格挡[/b],化解敌人的攻击
每成功格挡一次,获得一点[b]气力[/b]。
每拥有一点气力,增加[color=yellow]1[/color]点冲刺速度,闪避穿过敌人时对其贴上一层[b]符咒[/b],符咒会自动引爆,召唤[b]乾坤剑[/b]穿透敌人。
近战攻击造成乾坤剑的[color=cyan]100.0%[/color]点伤害。
每拥有一点气力,增加[color=yellow]1[/color]点冲刺速度,闪避穿过敌人时对其贴上一层[b]符咒[/b],符咒会自动引爆,召唤[b]乾坤剑[/b]穿透敌人。
近战攻击造成乾坤剑的[color=cyan]25.0%[/color]点伤害。
每次格挡有[color=cyan]100.0%[/color]的概率弹反,子弹弹反后造成乾坤剑的[color=cyan]100.0%[/color]伤害。
每次格挡最多化解[color=cyan]1[/color]个子弹,
体内最多储存[color=cyan]3[/color]点气力。
每化解[color=yellow]1[/color]点伤害,
乾坤剑造成的伤害+[color=cyan]10[/color]点。
格挡时机越精确,成功率越高。
格挡成功后继续按住攻击可进行[b]蓄力[/b],
其后松开格挡键进行[b]无量反击[/b],
可弹反一切子弹,
但需消耗[color=yellow]1[/color]层气力,
可将弹反的伤害转换为能量。[/center]"
对于[b]近战挥舞[/b]攻击,化解本次伤害;
对于[b]近战戳刺[/b]攻击,将本次伤害反弹,造成乾坤剑的[color=cyan]25.0%[/color]伤害并产生大量击退;
对于[b]远程射弹[/b]攻击,化解本次伤害,有[color=cyan]25.0%[/color]的概率发生[b]弹反[/b],子弹弹反后造成乾坤剑的[color=cyan]25.0%[/color]伤害;
对于[b]猛冲[/b]攻击,化解本次伤害,并反弹敌人的速度;
对于[b]吐息[/b]攻击,[color=red]无法化解伤害[/color]但可以对敌人产生少量击退;
对于[b]魔法或召唤[/b]攻击,[color=red]无法化解伤害[/color]但可以少量储能;[/center]"
[node name="tease" parent="container" parent_id_path=PackedInt32Array(575698869) index="3" unique_id=689277044]
visible = true
text = "“卸劲反伤”"
+11 -11
View File
@@ -1,17 +1,17 @@
[gd_scene load_steps=4 format=3 uid="uid://bb1uh8k7gkhr7"]
[gd_scene format=3 uid="uid://bb1uh8k7gkhr7"]
[ext_resource type="PackedScene" uid="uid://ckq2cq6m23hq3" path="res://components/Abstracts/WeaponCardBase.tscn" id="1_tmgup"]
[ext_resource type="Script" uid="uid://bqalhq6akgpoc" path="res://scripts/Contents/Weapons/VectorStarWeapon.gd" id="2_1dfg4"]
[ext_resource type="Texture2D" uid="uid://d2pndtow16635" path="res://resources/bullets/lgbt-bullet/造型2.svg" id="3_wfty8"]
[node name="VectorStar" instance=ExtResource("1_tmgup")]
[node name="VectorStar" unique_id=947309755 instance=ExtResource("1_tmgup")]
script = ExtResource("2_1dfg4")
avatarTexture = ExtResource("3_wfty8")
displayName = "矢量核心"
quality = 2
costBeachball = 400
store = {
"atk": 10,
"atk": 15,
"forwardtime": 1.0,
"maxcount": 10,
"mincount": 5
@@ -23,22 +23,22 @@ storeType = {
"mincount": 1.0
}
descriptionTemplate = "发射$mincount~$maxcount个[b]无主的飞星[/b],在$forwardtime秒后向目标冲刺并造成$atk点伤害。"
needEnergy = 5.0
needEnergy = 12.0
cooldown = 750.0
debugRebuild = true
[node name="avatar" parent="container/info" index="0"]
[node name="avatar" parent="container/info" parent_id_path=PackedInt32Array(1625294072) index="0" unique_id=1021985889]
texture = ExtResource("3_wfty8")
[node name="energy" parent="container/info/infos/energyInfo" index="1"]
text = "5.0"
[node name="energy" parent="container/info/infos/energyInfo" parent_id_path=PackedInt32Array(644675021) index="1" unique_id=1664028115]
text = "12.0"
[node name="beachball" parent="container/info/infos" index="1"]
[node name="beachball" parent="container/info/infos" parent_id_path=PackedInt32Array(492799150) index="1" unique_id=653442983]
count = 400
[node name="name" parent="container/info/displays" index="0"]
[node name="name" parent="container/info/displays" parent_id_path=PackedInt32Array(784441328) index="0" unique_id=1576068972]
displayName = "矢量核心"
quality = 2
[node name="description" parent="container" index="2"]
text = "[center]发射[color=cyan]5[/color]~[color=cyan]10[/color]个[b]无主的飞星[/b],在[color=cyan]1.00[/color]秒后向目标冲刺并造成[color=cyan]10[/color]点伤害。[/center]"
[node name="description" parent="container" parent_id_path=PackedInt32Array(575698869) index="2" unique_id=566230682]
text = "[center]发射[color=cyan]5[/color]~[color=cyan]10[/color]个[b]无主的飞星[/b],在[color=cyan]1.00[/color]秒后向目标冲刺并造成[color=cyan]15[/color]点伤害。[/center]"
+1 -2
View File
@@ -126,10 +126,9 @@
"[b]%s[/b]成了宇航员,",
"[b]%s[/b]现在是太空垃圾,",
"[b]%s[/b]脱离了轨道,",
"[b]%s[/b]已飞升",
"[b]%s[/b]已飞升",
"[b]%s[/b]已离开游戏,",
"[b]%s[/b]跳起了舞,",
"[b]%s[/b]被开发者玩死了,",
"[b]%s[/b]被*刻意的游戏设计*杀死了!",
"[b]%s[/b]菜死了,"
]
Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://w5yqnejlmfou"
path="res://.godot/imported/Jade_神手玉.png-1967ba97c31e1d92072a4a98707c87b2.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://resources/weapons/Jade_神手玉.png"
dest_files=["res://.godot/imported/Jade_神手玉.png-1967ba97c31e1d92072a4a98707c87b2.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
+4 -4
View File
@@ -2,7 +2,7 @@ extends AcidBulletBase
class_name AcidS
func succeedToHit(_dmg: float, _entity: EntityBase):
for i in randi_range(0, int(arg1)):
for bullet in BulletBase.generate(ComponentManager.getBullet("AcidS"), launcher, position, rotation + deg_to_rad(180 + 90 * randf_range(-1, 1)), true, true):
if bullet is AcidS:
bullet.baseDamage = baseDamage
for i in randi_range(0, int(arg1)):
for bullet in BulletBase.generate(ComponentManager.getBullet("AcidS"), launcher, position, rotation + deg_to_rad(180 + 90 * randf_range(-1, 1)), true, true):
if bullet is AcidS:
bullet.baseDamage = baseDamage
@@ -2,6 +2,7 @@ extends BulletBase
class_name InfinitySwordBullet
var implused: Array[EntityBase] = []
var rate2: float = 0
func spawn():
CameraManager.shake(2000, 100)
@@ -15,3 +16,7 @@ func succeedToHit(_dmg: float, entity: EntityBase):
var eff = EffectController.create(ComponentManager.getEffect("ShootBlood"), entity.position)
eff.particles.hide()
eff.shot()
func hitBullet(bullet: BulletBase):
if !is_instance_valid(launcher): return
if BulletTool.canDamage(bullet, launcher):
baseDamage *= rate2 ** bullet.getDamage()
+2 -2
View File
@@ -9,7 +9,7 @@ func ai():
speed *= 1.05
speed = clamp(speed, 0, 20)
if is_instance_valid(tracer) and timeLived() < maxTraceTime:
PresetBulletAI.trace(self, tracer.getTrackingAnchor(), tracePower)
PresetBulletAI.forward(self, rotation)
PresetBulletAI.trace(self , tracer.getTrackingAnchor(), tracePower)
PresetBulletAI.forward(self , rotation)
func destroy(_b):
EffectController.create(ComponentManager.getEffect("LGBTBoom"), position).shot()
+14 -8
View File
@@ -10,19 +10,18 @@ var atk: float = 1
var reflectRate: float = 1
func parryEffect(bullet: BulletBase):
# 生成格挡特效
parryiedTimes += 1
var eff = EffectController.create(ComponentManager.getEffect("Parry"), position + (bullet.position - position).normalized() * 200) # 从子弹位置,面向其他子弹的方向前进150
eff.modulate = bullet.modulate.blend(bullet.texture.modulate)
eff.rotation = position.angle_to_point(bullet.position)
eff.shot()
launcher.impluse((position - bullet.position).normalized() * sqrt(abs(bullet.speed)) * 250)
func penerateEffect(entity: EntityBase):
func penerateEffect(entity: EntityBase, effPos: Vector2):
parryiedTimes += 1
var eff = EffectController.create(ComponentManager.getEffect("ParryEntity"), position)
eff.rotation = position.angle_to_point(position)
var eff = EffectController.create(ComponentManager.getEffect("ParryEntity"), effPos)
eff.rotation = entity.position.angle_to_point(effPos)
eff.shot()
entity.impluse((entity.position - position).normalized() * 450)
entity.impluse((entity.position - effPos).normalized() * 450)
func generateParryBall(bDamage: float):
var cycler = launcher.getOrCreateCycleTimer("parry", 2000, 100)
if len(cycler.bullets) < maxBallCount: # 玩家最多只能拥有多少气
@@ -48,7 +47,7 @@ func spawn():
eff.shot()
func succeedToHit(_dmg: float, entity: EntityBase):
if parryiedTimes < maxParryTimes && MathTool.rate(parryRate):
penerateEffect(entity)
penerateEffect(entity, entity.position * 1.01)
func hitBullet(bullet: BulletBase): # 当前子弹与其他子弹相撞
if !is_instance_valid(launcher): return
if BulletTool.canDamage(bullet, launcher): # 其他子弹可以使当前子弹的发射者受伤吗?
@@ -73,16 +72,23 @@ func hitBullet(bullet: BulletBase): # 当前子弹与其他子弹相撞
parryEffect(bullet)
bullet.hitbox.set_deferred("disabled", true)
generateParryBall(bullet.baseDamage)
elif bullet.motionType == BulletBase.MotionType.STAB:
parryEffect(bullet)
penerateEffect(bullet.launcher, bullet.launcher.position * 1.01)
bullet.hitbox.set_deferred("disabled", true)
bullet.launcher.takeDamage(atk * reflectRate * bullet.getDamage())
bullet.launcher.impluse(Vector2.from_angle(bullet.rotation) * -2000)
generateParryBall(bullet.baseDamage)
elif bullet.motionType == BulletBase.MotionType.SPRINT:
parryEffect(bullet)
bullet.tryDestroy()
bullet.launcher.velocity *= -0.1
generateParryBall(bullet.baseDamage)
elif bullet.motionType == BulletBase.MotionType.BREATH:
penerateEffect(bullet.launcher)
penerateEffect(bullet.launcher, launcher.position)
bullet.launcher.impluse(Vector2.from_angle(bullet.rotation) * -500)
elif bullet.motionType == BulletBase.MotionType.SUMMON || bullet.motionType == BulletBase.MotionType.MAGIC:
penerateEffect(bullet.launcher)
penerateEffect(bullet.launcher, launcher.position)
launcher.storeEnergy(sqrt(bullet.baseDamage))
func refract(_newBullet: BulletBase, _entity: EntityBase, _index: int, _total: int, _lastBullet: float):
+7
View File
@@ -3,10 +3,16 @@ class_name WuweiBullet
@export var canMove: bool = true
var rate2: float = 0
func ai():
if canMove:
PresetBulletAI.lockLauncher(self , launcher, true)
PresetBulletAI.trace(self , launcher.currentFocusedPosition, 0.1)
func hitBullet(bullet: BulletBase):
if !is_instance_valid(launcher): return
if BulletTool.canDamage(bullet, launcher):
baseDamage *= rate2 ** bullet.getDamage()
func shoot():
for bullet in BulletBase.generate(
@@ -17,6 +23,7 @@ func shoot():
):
if bullet is InfinitySwordBullet:
bullet.baseDamage = baseDamage
bullet.rate2 = rate2
func beReady():
canMove = false
EffectController.create(ComponentManager.getEffect("Danger"), findAnchor("Spawn")).shot()
+3 -5
View File
@@ -4,17 +4,15 @@ func register():
fields[FieldStore.Entity.MAX_HEALTH] = 120
fields[FieldStore.Entity.MOVEMENT_SPEED] = 0.2
fields[FieldStore.Entity.OFFSET_SHOOT] = 0
attackCooldownMap[0] = randi_range(3000, 5000)
attackCooldownMap[0] = randi_range(100, 500)
func spawn():
texture.play("walk")
func ai():
PresetEntityAI.follow(self, currentFocusedBoss, 300)
PresetEntityAI.follow(self , currentFocusedBoss, 300)
tryAttack(0)
func attack(type):
if type == 0:
var weaponPos = findWeaponAnchor("normal")
var angle = weaponPos.angle_to_point(currentFocusedBoss.position)
for i in 3:
BulletBase.generate(ComponentManager.getBullet("DogCircle"), self, weaponPos, angle)
await TickTool.millseconds(100)
BulletBase.generate(ComponentManager.getBullet("DogCircle"), self , weaponPos, angle)
return true
+5 -5
View File
@@ -17,11 +17,11 @@ func register():
sprintMultiplier = 30
func ai():
PresetEntityAI.distanceAttack(self , currentFocusedBoss, 0, 300, 0)
PresetEntityAI.distanceAttack(self , currentFocusedBoss, 500, 1000, 1)
for i in 5:
tryAttack(i + 2, [3, 4])
if 1 not in attackingStates:
PresetEntityAI.follow(self , currentFocusedBoss, 200)
# PresetEntityAI.distanceAttack(self , currentFocusedBoss, 500, 1000, 1)
# for i in 5:
# tryAttack(i + 2, [3, 4])
# if 1 not in attackingStates:
# PresetEntityAI.follow(self , currentFocusedBoss, 200)
func attack(type: int):
if type == 0:
for bullet in BulletBase.generate(ComponentManager.getBullet("SwingSword"), self , getTrackingAnchor(), getTrackingAnchor().angle_to_point(currentFocusedPosition)):
+1 -1
View File
@@ -2,4 +2,4 @@ extends EffectController
class_name ParryEffect
func beforeShot():
CameraManager.shake(200, 300)
CameraManager.shake(300, 500)
+1 -2
View File
@@ -7,7 +7,6 @@ extends FullscreenPanelBase
func beforeOpen(args: Array = []):
audio.play()
var reasonTemplate = MathTool.randomChoiceFrom(GameRule.deadReasons)
deadreason.text = ("[color=gray]" + reasonTemplate + "凶手是[b]%s[/b]的[b]%s[/b]。[/color]") % args
deadreason.text = ("[color=gray]%s[/color]") % args[0]
func afterOpen(_args: Array = []):
gameControl.enable()
+3 -1
View File
@@ -29,7 +29,7 @@ class_name StarterPanel
var historyStack
static var GAMEMODE_MAP_WAVE = [Wave.WAVE_NORMAL, Wave.WAVE_BOSSRUSH, Wave.WAVE_MOWING]
static var GAMEMODE_MAP_WAVE = [Wave.WAVE_NORMAL, Wave.WAVE_BOSSRUSH, Wave.WAVE_MOWING, Wave.WAVE_TESTBOSS]
static var START_CHARACTERS = ["MuyangDog", "Lynx", "HCN"]
static var buildingShader: bool = true
static var selectingFeed: bool = true
@@ -146,6 +146,8 @@ func _ready():
setPlayerName(getLast.call(1), newText)
mutexPlayer.rpc(newText)
)
if WorldManager.isRelease():
gamemodeOption.remove_item(3)
func _physics_process(_delta):
levelShow.text = "%d ∈ [%d, %d]" % [diffEdit.value, diffEdit.min_value, diffEdit.max_value]
GameRule.difficulty = diffEdit.value
+1 -1
View File
@@ -4,7 +4,7 @@ extends Weapon
func update(to: int, origin: Dictionary, _entity: EntityBase):
origin["atk"] += 0.1 * to * soulLevel
origin["count"] = 1 * soulLevel
origin["self"] *= soulLevel
origin["self"] += (soulLevel - 1)
return origin
func attack(entity: EntityBase):
entity.takeDamage(readStore("self"))
+5 -11
View File
@@ -2,13 +2,12 @@
extends Weapon
func update(to: int, origin: Dictionary, _entity: EntityBase):
origin["atk"] += 4 * to * soulLevel
origin["atk"] += 3 * to * soulLevel
origin["rate1"] *= soulLevel
origin["rate2"] *= soulLevel
origin["rate3"] *= soulLevel
origin["rate2"] += 0.1 * (soulLevel - 1)
return origin
func checkAttack(entity: EntityBase) -> bool:
return len(entity.getOrCreateCycleTimer("parry", 2000, 100).bullets) > 0
return len(entity.getOrCreateCycleTimer("parry", 2000, 100).bullets) > 2
func attack(entity: EntityBase):
var parryCounter = entity.getOrCreateCycleTimer("parry", 2000, 100)
for bullet in BulletBase.generate(
@@ -19,14 +18,9 @@ func attack(entity: EntityBase):
):
if bullet is WuweiBullet:
bullet.baseDamage = readStore("atk")
bullet.baseDamage *= max(-0.99, readStore("rate2") * ((1.0 - entity.fields[FieldStore.Entity.ATTACK_SPEED]) * 100)) + 1
bullet.baseDamage *= max(-0.99, readStore("rate1") * (entity.fields[FieldStore.Entity.MAX_HEALTH] - entity.health)) + 1
var atkAll = 0
for bulle in parryCounter.bullets:
if bulle is ParryBallBullet:
atkAll += bulle.atk
bullet.baseDamage *= max(-0.99, readStore("rate3") * atkAll) + 1
for bulle in parryCounter.bullets:
bullet.rate2 = readStore("rate2")
for bulle in parryCounter.bullets.slice(0, 3):
if bulle is ParryBallBullet:
bulle.tryDestroy()
parryCounter.forceFilter()
+1 -1
View File
@@ -14,7 +14,7 @@ func attack(entity: EntityBase):
if !summon: return true
summon.atk = readStore("atk")
summon.maxTraceTime = readStore("trace") * 1000
summon.tracePower = readStore("power")
summon.tracePower = clamp(readStore("power"), 0, 1)
summon.count = readStore("count")
summon.angle = readStore("angle")
return true
+2 -1
View File
@@ -2,12 +2,13 @@ extends Area2D
class_name BulletBase
enum MotionType {
SWING, # 挥舞(近战攻击)
SWING, # 近战挥舞
PROJECTILE, # 射弹
MAGIC, # 魔法
SUMMON, # 召唤
SPRINT, # 冲撞
BREATH, # 吐息
STAB, # 近战戳刺
}
signal destroied(becauseMap: bool)
+7 -3
View File
@@ -64,7 +64,7 @@ var attackingStates: Array[int] = []
var inventory = {
ItemStore.ItemType.BASEBALL: 200,
ItemStore.ItemType.BASKETBALL: 200,
ItemStore.ItemType.APPLE: 5,
ItemStore.ItemType.APPLE: 3,
ItemStore.ItemType.BEACHBALL: 0,
ItemStore.ItemType.SOUL: 0,
ItemStore.ItemType.CRYSTAL: 0,
@@ -73,7 +73,7 @@ var inventory = {
var inventoryMax = {
ItemStore.ItemType.BASEBALL: INF, # 无限
ItemStore.ItemType.BASKETBALL: INF,
ItemStore.ItemType.APPLE: 5,
ItemStore.ItemType.APPLE: 3,
ItemStore.ItemType.BEACHBALL: INF,
ItemStore.ItemType.SOUL: INF,
ItemStore.ItemType.CRYSTAL: INF,
@@ -436,7 +436,11 @@ func tryDie(by: BulletBase = null):
)
if isPlayer():
if UIState.player == self:
UIState.setPanel("GameOver", [displayName, by.launcher.displayName, by.displayName])
var reasonTemplate = MathTool.randomChoiceFrom(GameRule.deadReasons)
if is_instance_valid(by):
UIState.setPanel("GameOver", ["%s凶手是[b]%s[/b]的[b]%s[/b]。" % [reasonTemplate, by.launcher.displayName, by.displayName] % displayName])
else:
UIState.setPanel("GameOver", ["%s凶手是[b]%s[/b]。" % [reasonTemplate, "*刻意的游戏设计*"] % displayName])
EffectController.create(ComponentManager.getEffect("DeadBlood"), texture.global_position).shot()
await die()
died.emit()
+1 -1
View File
@@ -51,7 +51,7 @@ func apply(entity: EntityBase):
var value = fieldValues[i]
entity.fields[field] += value
var applier = FieldStore.entityApplier.get(field)
if applier and applier.call(entity, value):
if applier and !applier.call(entity, value):
entity.fields[field] -= value
entity.fields[field] = clamp(entity.fields[field], FieldStore.entityMinValueMap.get(field, 0), FieldStore.entityMaxValueMap.get(field, INF))
for i in weapons:
+5 -5
View File
@@ -10,17 +10,17 @@ static var damageOffset: float = MathTool.percent(20) # 伤害随机浮动比例
static var beachballOffset: float = MathTool.percent(30) # 棒球掉落数随机浮动比例
static var damageLabelSpawnOffset: float = 30 # 伤害标签生成位置的随机偏移
static var itemDroppedSpawnOffset: float = 30 # 掉落物生成位置的随机偏移
static var appleDropRate: float = MathTool.percent(2) # 苹果掉落概率
static var refreshCountIncreaseCount: Vector2i = Vector2i(0, 3) # 刷新所需的棒球数量的增加的数量
static var appleDropRate: float = MathTool.percent(1) # 苹果掉落概率
static var refreshCountIncreaseCount: Vector2i = Vector2i(1, 3) # 刷新所需的棒球数量的增加的数量
static var entityCountBoostPerWave: float = MathTool.percent(2) # 每波敌人数量增加的百分比,倍数级
static var itemShowLifetime: int = 1500 # 物品展示组件如果设置了自动隐藏,那么隐藏前可以存活的时间
static var tipSpawnRateWhenGetDroppedItem: float = MathTool.percent(25) # 当玩家获取到掉落物时,提示的概率
static var entityHealthIncreasePerWave: float = MathTool.percent(1) # 每波敌人生命值增加的百分比,指数级
static var entityDamageIncreasePerWave: float = MathTool.percent(1) # 每波敌人伤害增加的百分比,指数级
static var entityLevelOffsetByWave: float = MathTool.percent(30) # 每波敌人等级根据当前波数随机浮动的比例
static var appleDropRateInfluenceByLuckValue: float = MathTool.percent(2) # 幸运值对苹果掉率的影响
static var critRateInfluenceByLuckValue: float = MathTool.percent(2.5) # 幸运值对暴击率的影响
static var penerateRateInfluenceByLuckValue: float = MathTool.percent(3) # 幸运值对穿透率的影响
static var appleDropRateInfluenceByLuckValue: float = MathTool.percent(0.07) # 幸运值对苹果掉率的影响
static var critRateInfluenceByLuckValue: float = MathTool.percent(0.15) # 幸运值对暴击率的影响
static var penerateRateInfluenceByLuckValue: float = MathTool.percent(0.2) # 幸运值对穿透率的影响
static var detainTime: float = 250 # 血量如果在这个时间内没有改变才会开始播放降低动画
static var weaponUpdateCost: float = 1.1 # 武器升级后消耗的棒球数量倍数
static var canSpawnMobWhenBossWave: bool = true # Boss波次是否可生成小怪
+3 -1
View File
@@ -22,12 +22,14 @@ func _physics_process(_delta):
static func shake(millseconds: float, intensity: float = 10, steper: Callable = func(currentValue, _totalValue, _restPercent): return currentValue):
if StarterPanel.buildingShader: return
var startTime = WorldManager.getTime()
instance.shakeIntensity = intensity
instance.shakeIntensity += intensity
instance.shaking = true
await TickTool.until(
func():
instance.shakeIntensity = steper.call(instance.shakeIntensity, intensity, 1 - (WorldManager.getTime() - startTime) / millseconds)
return WorldManager.getTime() - startTime >= millseconds || !instance.shaking
)
instance.shaking = false
instance.shakeIntensity = 0
static func shakeStop():
instance.shaking = false