1
1
mirror of https://github.com/Rundll86/Dog-Lynx-And-HCN.git synced 2026-06-25 13:02:29 +08:00

Compare commits

...

10 Commits

Author SHA1 Message Date
fallingshrimp 62d7ecf93a fix(Starter): 保存教程观看状态时调用保存引擎
在开始单人游戏时,如果用户选择观看教程,现在会立即调用SaveEngine.save()来保存tutorialWatched状态,确保状态持久化。
2026-05-09 21:41:14 +08:00
fallingshrimp c31b3bdc4f feat: 增强游戏保存系统并添加调试输出
扩展保存系统以包含更多游戏状态数据,包括库存和角色选择
添加调试打印语句以帮助排查保存问题
新增字典映射工具方法用于数据转换
修复新召唤实体未正确分组的问题
2026-05-09 21:41:00 +08:00
fallingshrimp b1cb089705 feat(保存系统): 实现游戏存档功能
添加SaveEngine类用于处理游戏存档的序列化、加载和应用
修改GameBusManager在游戏重启时自动保存和加载存档
扩展JsonTool功能以支持文件解析和字符串序列化
更新StarterPanel添加教程观看状态保存
2026-05-09 21:25:27 +08:00
fallingshrimp d739771c1a feat(掉落系统): 根据敌人等级调整boss掉落物品数量
将boss掉落的晶体数量上限从固定20改为15+等级,钻石数量上限从固定3改为等于等级
2026-05-09 21:06:51 +08:00
fallingshrimp c7b1660311 refactor(Characters): 调整角色场景配置并移除多余武器节点
移除牧羊犬角色中多余的武器节点,仅保留火山武器
调整狗和母鸡角色的碰撞体和武器位置
2026-05-09 20:47:25 +08:00
fallingshrimp a3c03fc73a refactor(武器卡片): 统一描述文本的父节点路径并移除调试标记
将武器卡片描述文本的父节点路径统一调整为container/back/scroller,提升UI结构一致性
移除所有武器卡片中的debugRebuild标记,清理调试代码
优化NuclearBomb.tscn文件格式,修复节点引用路径
2026-05-09 20:14:23 +08:00
fallingshrimp 9c1c739deb feat(战斗系统): 为爆炸攻击添加内伤效果并重构内伤生成逻辑
- 在InfinitySword.gd中添加爆炸攻击时生成内伤球的功能
- 将内伤生成逻辑提取到InternalDamage.gd中的静态方法generateBall
- 移除Parrier.gd中重复的内伤生成代码,改用新的generateBall方法
- 更新Tree.tscn中的描述文本,添加对爆炸攻击产生内伤的说明
- 调整WeaponCardBase.tscn的UI布局,为描述文本添加滚动容器
2026-05-09 20:09:58 +08:00
fallingshrimp cf9568bcac feat(子弹效果): 添加内部伤害子弹的动画和粒子效果
- 新增destroy、loop和spawn三种动画
- 添加粒子轨迹效果
- 调整子弹纹理的旋转和缩放比例
- 启用自动循环动画功能
2026-05-09 19:53:28 +08:00
fallingshrimp 8b14e36031 feat(战斗系统): 添加内伤机制和爆炸类型子弹
为子弹系统添加新的爆炸类型(MotionType.EXPLOSION)
实现内伤机制,包括内伤子弹和相关逻辑
修改多个子弹场景以使用爆炸类型
调整格挡系统,增加内伤效果
更新武器描述和角色配置
2026-05-09 19:43:44 +08:00
fallingshrimp a6448813b8 refactor(Weapon): 优化武器描述格式并添加内伤机制
调整武器描述文本格式以提高可读性,并新增内伤机制:
- 为不同攻击类型添加内伤效果
- 完善爆炸伤害触发内伤的规则
- 优化文本排版和分段
- 移除描述文本的居中显示
2026-05-09 18:35:15 +08:00
55 changed files with 418 additions and 170 deletions
+27 -1
View File
@@ -34,6 +34,21 @@ corner_detail = 1
font_size = 12
font_color = Color(0.55, 0.55, 0.55, 1)
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_jv1l6"]
content_margin_left = 10.0
content_margin_top = 10.0
content_margin_right = 10.0
content_margin_bottom = 10.0
bg_color = Color(0, 0, 0, 0.4)
border_width_left = 2
border_width_top = 2
border_width_right = 2
border_width_bottom = 2
border_color = Color(1, 1, 1, 1)
corner_radius_top_left = 15
corner_radius_bottom_right = 15
corner_detail = 1
[node name="WeaponCard" type="PanelContainer" unique_id=2085048785]
offset_right = 350.0
offset_bottom = 304.0
@@ -183,9 +198,20 @@ text = "无灵"
label_settings = SubResource("LabelSettings_b3nsw")
horizontal_alignment = 1
[node name="description" type="RichTextLabel" parent="container" unique_id=566230682]
[node name="back" type="PanelContainer" parent="container" unique_id=517412512]
layout_mode = 2
theme_override_styles/panel = SubResource("StyleBoxFlat_jv1l6")
[node name="scroller" type="ScrollContainer" parent="container/back" unique_id=543588938]
custom_minimum_size = Vector2(0, 200)
layout_mode = 2
size_flags_vertical = 3
horizontal_scroll_mode = 0
[node name="description" type="RichTextLabel" parent="container/back/scroller" unique_id=566230682]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 3
bbcode_enabled = true
text = "[center]造成[color=cyan]10[/color]点伤害。[/center]"
fit_content = true
+1 -1
View File
@@ -84,7 +84,7 @@ script = ExtResource("2_165xl")
displayName = "蹦蹦炸弹"
speed = 4.0
baseDamage = 30.0
motionType = 3
motionType = 7
lifeTime = 10000.0
autoLoopAnimation = true
+99
View File
@@ -0,0 +1,99 @@
[gd_scene format=3 uid="uid://dnjct3fifocnb"]
[ext_resource type="PackedScene" uid="uid://crtdkysmnkith" path="res://components/Abstracts/BulletBase.tscn" id="1_xwju0"]
[ext_resource type="Texture2D" uid="uid://mo0gjwh5amev" path="res://resources/effects/danger/Effect_Boss_YiGung_Upper1206.png" id="2_0na4i"]
[ext_resource type="Script" uid="uid://d3m2bjkxg82a2" path="res://scripts/Contents/Bullets/InternalDamage.gd" id="2_nsbh7"]
[sub_resource type="SpriteFrames" id="SpriteFrames_nsbh7"]
animations = [{
"frames": [{
"duration": 1.0,
"texture": ExtResource("2_0na4i")
}],
"loop": true,
"name": &"default",
"speed": 5.0
}]
[sub_resource type="Animation" id="Animation_nsbh7"]
resource_name = "destroy"
length = 0.5
step = 0.1
[sub_resource type="Animation" id="Animation_6y1wt"]
resource_name = "loop"
loop_mode = 1
step = 0.1
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath(".:rotation")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 1),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [6.283185307179586, 0.0]
}
[sub_resource type="Animation" id="Animation_8ryqb"]
resource_name = "spawn"
[sub_resource type="AnimationLibrary" id="AnimationLibrary_3d1xe"]
_data = {
&"destroy": SubResource("Animation_nsbh7"),
&"loop": SubResource("Animation_6y1wt"),
&"spawn": SubResource("Animation_8ryqb")
}
[sub_resource type="Curve" id="Curve_nsbh7"]
_data = [Vector2(0, 0.5), 0.0, 0.0, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0]
point_count = 2
[sub_resource type="CurveTexture" id="CurveTexture_6y1wt"]
curve = SubResource("Curve_nsbh7")
[sub_resource type="Curve" id="Curve_8ryqb"]
_data = [Vector2(0.5, 0.7), 0.0, 0.0, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0]
point_count = 2
[sub_resource type="CurveTexture" id="CurveTexture_3d1xe"]
curve = SubResource("Curve_8ryqb")
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_fkmpk"]
particle_flag_disable_z = true
spread = 0.0
angular_velocity_min = -200.00002
angular_velocity_max = 199.99998
gravity = Vector3(0, 0, 0)
scale_min = 0.29999998
scale_max = 0.29999998
scale_curve = SubResource("CurveTexture_3d1xe")
alpha_curve = SubResource("CurveTexture_6y1wt")
[sub_resource type="CircleShape2D" id="CircleShape2D_0na4i"]
radius = 150.0
[node name="InternalDamage" unique_id=5571707 instance=ExtResource("1_xwju0")]
script = ExtResource("2_nsbh7")
autoLoopAnimation = true
[node name="texture" parent="." index="0" unique_id=162977358]
rotation = 3.7873645
scale = Vector2(0.3, 0.3)
sprite_frames = SubResource("SpriteFrames_nsbh7")
[node name="animator" parent="texture" index="0" unique_id=1114087117]
libraries/ = SubResource("AnimationLibrary_3d1xe")
[node name="trail" type="GPUParticles2D" parent="texture" index="2" unique_id=1763528617]
z_index = -1
amount = 10
texture = ExtResource("2_0na4i")
lifetime = 0.5
process_material = SubResource("ParticleProcessMaterial_fkmpk")
[node name="hitbox" parent="." index="1" unique_id=175349408]
shape = SubResource("CircleShape2D_0na4i")
disabled = true
+1
View File
@@ -97,6 +97,7 @@ alpha_curve = SubResource("CurveTexture_3jny5")
[node name="MagicMissle" unique_id=5571707 instance=ExtResource("1_4sjx4")]
script = ExtResource("2_lrw10")
motionType = 7
penerate = 1.0
penerateDamageReduction = 0.1
+1 -1
View File
@@ -41,7 +41,7 @@ radius = 1000.0
[node name="NuclearBomb" unique_id=432957691 instance=ExtResource("1_dpea6")]
script = ExtResource("2_f85ek")
displayName = "核弹"
motionType = 3
motionType = 7
canDamageSelf = true
autoDestroyOnHitMap = false
+1
View File
@@ -124,6 +124,7 @@ script = ExtResource("2_x26jp")
displayName = "乾坤剑"
speed = 20.0
baseDamage = 25.0
motionType = 7
penerate = 1.0
penerateDamageReduction = 0.2
lifeTime = 3000.0
+4 -3
View File
@@ -1,4 +1,4 @@
[gd_scene load_steps=5 format=3 uid="uid://c0oc8aqfef0tt"]
[gd_scene format=3 uid="uid://c0oc8aqfef0tt"]
[ext_resource type="PackedScene" uid="uid://crtdkysmnkith" path="res://components/Abstracts/BulletBase.tscn" id="1_k4d80"]
[ext_resource type="Script" uid="uid://bv848wj2ko0y0" path="res://scripts/Contents/Bullets/RedCrystal.gd" id="2_llvlo"]
@@ -15,13 +15,14 @@ animations = [{
"speed": 5.0
}]
[node name="RedCrystal" instance=ExtResource("1_k4d80")]
[node name="RedCrystal" unique_id=1424825822 instance=ExtResource("1_k4d80")]
script = ExtResource("2_llvlo")
displayName = "红水晶"
speed = 8.0
motionType = 7
lifeTime = 3000.0
metadata/_edit_vertical_guides_ = [150.0]
[node name="texture" parent="." index="0"]
[node name="texture" parent="." index="0" unique_id=162977358]
modulate = Color(1.2892731, 0.44830602, 0.44830602, 1)
sprite_frames = SubResource("SpriteFrames_ns31y")
+4 -4
View File
@@ -1,4 +1,4 @@
[gd_scene load_steps=9 format=3 uid="uid://bb363wvwvs7m4"]
[gd_scene format=3 uid="uid://bb363wvwvs7m4"]
[ext_resource type="PackedScene" uid="uid://cvogxi7mktumf" path="res://components/Abstracts/EntityBase.tscn" id="1_cbgnh"]
[ext_resource type="Script" uid="uid://soehdxfbpmc0" path="res://scripts/Contents/Characters/Dog.gd" id="2_pb36u"]
@@ -47,7 +47,7 @@ animations = [{
[sub_resource type="RectangleShape2D" id="RectangleShape2D_e644g"]
size = Vector2(140, 91)
[node name="Dog" instance=ExtResource("1_cbgnh")]
[node name="Dog" unique_id=391590609 instance=ExtResource("1_cbgnh")]
script = ExtResource("2_pb36u")
displayName = "哈士奇"
drops = Array[int]([3])
@@ -75,8 +75,8 @@ frame_progress = 0.6540908
position = Vector2(1, 12.5)
shape = SubResource("RectangleShape2D_e644g")
[node name="normal" type="Node2D" parent="texture/weapons" index="0"]
position = Vector2(53, -35)
[node name="normal" type="Node2D" parent="texture/weapons" index="0" unique_id=1000814647]
position = Vector2(61, 13)
[node name="statebar" parent="." index="4"]
position = Vector2(11, -122)
+5 -4
View File
@@ -1,4 +1,4 @@
[gd_scene load_steps=9 format=3 uid="uid://c8h1abpbe6cww"]
[gd_scene format=3 uid="uid://c8h1abpbe6cww"]
[ext_resource type="PackedScene" uid="uid://cvogxi7mktumf" path="res://components/Abstracts/EntityBase.tscn" id="1_twxai"]
[ext_resource type="Script" uid="uid://dsfht8qodraln" path="res://scripts/Contents/Characters/Hen.gd" id="2_8u5a0"]
@@ -34,7 +34,7 @@ size = Vector2(101, 49.5)
[sub_resource type="CircleShape2D" id="CircleShape2D_rwj47"]
radius = 19.026299
[node name="Hen" instance=ExtResource("1_twxai")]
[node name="Hen" unique_id=1625119529 instance=ExtResource("1_twxai")]
script = ExtResource("2_8u5a0")
displayName = "母鸡"
drops = Array[int]([1])
@@ -58,11 +58,12 @@ scale = Vector2(0.29643428, 0.29643428)
position = Vector2(-13.5, 0.75)
shape = SubResource("RectangleShape2D_1stll")
[node name="hitbox2" type="CollisionShape2D" parent="texture/hurtbox" index="1"]
[node name="hitbox2" type="CollisionShape2D" parent="texture/hurtbox" index="1" unique_id=5127309]
position = Vector2(49, -28)
shape = SubResource("CircleShape2D_rwj47")
[node name="normal" type="Node2D" parent="texture/weapons" index="0"]
[node name="normal" type="Node2D" parent="texture/weapons" index="0" unique_id=676880742]
position = Vector2(66, -25)
[node name="statebar" parent="." index="4" node_paths=PackedStringArray("entity")]
position = Vector2(0, -118)
-4
View File
@@ -3,13 +3,9 @@
[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
+1 -1
View File
@@ -56,7 +56,7 @@ displayName = "酸蚀风暴"
quality = 4
typeTopic = 3
[node name="description" parent="container" parent_id_path=PackedInt32Array(575698869) index="2" unique_id=566230682]
[node name="description" parent="container/back/scroller" parent_id_path=PackedInt32Array(543588938) index="0" 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 -2
View File
@@ -26,7 +26,6 @@ sources = Array[String](["Magic Craft", "Harry Potter"])
tease = "秒天秒地秒空气"
needEnergy = 200.0
cooldown = 6000.0
debugRebuild = true
[node name="attack" parent="sounds" parent_id_path=PackedInt32Array(1775425991) index="0" unique_id=853583292]
stream = ExtResource("4_cb5nh")
@@ -48,7 +47,7 @@ typeTopic = 1
[node name="source" parent="container/info/displays" parent_id_path=PackedInt32Array(784441328) index="1" unique_id=365191794]
text = "Magic Craft × Harry Potter"
[node name="description" parent="container" parent_id_path=PackedInt32Array(575698869) index="2" unique_id=566230682]
[node name="description" parent="container/back/scroller" parent_id_path=PackedInt32Array(543588938) index="0" unique_id=566230682]
text = "[center]召唤[b]湮灭射线[/b]
每[color=cyan]0.10[/color]秒造成[color=cyan]40[/color]点伤害。[/center]"
+1 -2
View File
@@ -21,7 +21,6 @@ storeType = {
}
descriptionTemplate = "发射[b]蓝水晶[/b],可无限追踪,命中造成$atk点伤害,飞行过程中有$count颗[b]钻石[/b]环绕。"
cooldown = 250.0
debugRebuild = true
[node name="attack" parent="sounds" parent_id_path=PackedInt32Array(1775425991) index="0" unique_id=853583292]
stream = ExtResource("4_fewtg")
@@ -33,5 +32,5 @@ texture = ExtResource("3_fewtg")
displayName = "蓝水晶簇"
typeTopic = 3
[node name="description" parent="container" parent_id_path=PackedInt32Array(575698869) index="2" unique_id=566230682]
[node name="description" parent="container/back/scroller" parent_id_path=PackedInt32Array(543588938) index="0" unique_id=566230682]
text = "[center]发射[b]蓝水晶[/b],可无限追踪,命中造成[color=cyan]3[/color]点伤害,飞行过程中有[color=cyan]2[/color]颗[b]钻石[/b]环绕。[/center]"
+1 -2
View File
@@ -23,7 +23,6 @@ storeType = {
descriptionTemplate = "消耗$self点生命值,发射$count支[b]鸡毛箭[/b],每支造成当前飞行速度的$atk伤害。"
tease = "损人又害己"
cooldown = 2000.0
debugRebuild = true
[node name="avatar" parent="container/info" parent_id_path=PackedInt32Array(1625294072) index="0" unique_id=1021985889]
texture = ExtResource("2_ex3jl")
@@ -35,7 +34,7 @@ count = 50
displayName = "鸡毛弓"
quality = 2
[node name="description" parent="container" parent_id_path=PackedInt32Array(575698869) index="2" unique_id=566230682]
[node name="description" parent="container/back/scroller" parent_id_path=PackedInt32Array(543588938) index="0" unique_id=566230682]
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]
+1 -5
View File
@@ -24,7 +24,6 @@ descriptionTemplate = "超高速发射$count个[b]微型水晶[/b],可造成$a
sources = Array[String](["Terraria"])
needEnergy = 0.75
cooldown = 66.0
debugRebuild = true
[node name="attack" parent="sounds" parent_id_path=PackedInt32Array(1775425991) index="0" unique_id=853583292]
stream = ExtResource("4_g38si")
@@ -44,8 +43,5 @@ displayName = "链式机枪"
[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]
[node name="description" parent="container/back/scroller" parent_id_path=PackedInt32Array(543588938) index="0" unique_id=566230682]
text = "[center]超高速发射[color=cyan]1[/color]个[b]微型水晶[/b],可造成[color=cyan]5[/color]点伤害,散射+[color=cyan]15.0°[/color],穿透+[color=yellow]25%[/color]。[/center]"
[node name="tease" parent="container" parent_id_path=PackedInt32Array(575698869) index="3" unique_id=689277044]
visible = false
+1 -2
View File
@@ -24,7 +24,6 @@ descriptionTemplate = "发射[b]齿轮[/b],在飞行一定距离后回旋。
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")
@@ -36,7 +35,7 @@ text = "4.0"
displayName = "齿轮回旋镖"
quality = 3
[node name="description" parent="container" parent_id_path=PackedInt32Array(575698869) index="2" unique_id=566230682]
[node name="description" parent="container/back/scroller" parent_id_path=PackedInt32Array(543588938) index="0" unique_id=566230682]
text = "[center]发射[b]齿轮[/b],在飞行一定距离后回旋。
齿轮的伤害频率与转速成正比。
锋利度:[color=cyan]2[/color],初始转速:[color=cyan]15.0°[/color]
+1 -4
View File
@@ -35,8 +35,5 @@ count = 350
displayName = "光标刃轮"
typeTopic = 1
[node name="description" parent="container" parent_id_path=PackedInt32Array(575698869) index="2" unique_id=566230682]
[node name="description" parent="container/back/scroller" parent_id_path=PackedInt32Array(543588938) index="0" unique_id=566230682]
text = "[center]造成[color=cyan]10[/color]点伤害,攻击速度+[color=cyan]0.4%[/color]。[/center]"
[node name="tease" parent="container" parent_id_path=PackedInt32Array(575698869) index="3" unique_id=689277044]
visible = false
+8 -5
View File
@@ -28,12 +28,13 @@ descriptionTemplate = "消耗[color=yellow]3[/color]层气力,挥出[b]无为
每失去[color=yellow]1[/color]点生命值,伤害+$rate1
无量反击可化解路径上的一切伤害,
每化解[color=yellow]1[/color]点伤害,基础伤害*$rate2。"
每化解[color=yellow]1[/color]点伤害
斩击的伤害*$rate2
敌人产生[color=yellow]1[/color]点内伤。"
sources = Array[String](["Nine Sols"])
tease = "天机不可泄露"
needEnergy = 40.0
cooldown = 4000.0
debugRebuild = true
[node name="attack" parent="sounds" parent_id_path=PackedInt32Array(1775425991) index="0" unique_id=853583292]
stream = ExtResource("4_y3oaj")
@@ -54,14 +55,16 @@ typeTopic = 1
[node name="source" parent="container/info/displays" parent_id_path=PackedInt32Array(784441328) index="1" unique_id=365191794]
text = "Nine Sols"
[node name="description" parent="container" parent_id_path=PackedInt32Array(575698869) index="2" unique_id=566230682]
text = "[center]消耗[color=yellow]3[/color]层气力,挥出[b]无为之剑[/b],
[node name="description" parent="container/back/scroller" parent_id_path=PackedInt32Array(543588938) index="0" unique_id=566230682]
text = "消耗[color=yellow]3[/color]层气力,挥出[b]无为之剑[/b],
蓄力一段时间后,发动[b]无量反击[/b],
造成[color=cyan]20[/color]点基础伤害。
每失去[color=yellow]1[/color]点生命值,伤害+[color=cyan]5.0%[/color]
无量反击可化解路径上的一切伤害,
每化解[color=yellow]1[/color]点伤害,基础伤害*[color=cyan]105.0%[/color]。[/center]"
每化解[color=yellow]1[/color]点伤害
斩击的伤害*[color=cyan]105.0%[/color]
敌人产生[color=yellow]1[/color]点内伤。"
[node name="tease" parent="container" parent_id_path=PackedInt32Array(575698869) index="3" unique_id=689277044]
visible = true
+1 -2
View File
@@ -25,7 +25,6 @@ descriptionTemplate = "召唤[b]Gobo[/b]Gobo会自主行动,每受到$atk
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")
@@ -40,5 +39,5 @@ 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]
[node name="description" parent="container/back/scroller" parent_id_path=PackedInt32Array(543588938) index="0" 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]"
+1 -1
View File
@@ -35,7 +35,7 @@ typeTopic = 4
[node name="source" parent="container/info/displays" parent_id_path=PackedInt32Array(784441328) index="1" unique_id=365191794]
text = "UDA"
[node name="description" parent="container" parent_id_path=PackedInt32Array(575698869) index="2" unique_id=566230682]
[node name="description" parent="container/back/scroller" parent_id_path=PackedInt32Array(543588938) index="0" unique_id=566230682]
text = "[center]分泌一堵[b]肽聚墙[/b],可抵挡[color=cyan]200[/color]点伤害,敌人更有可能瞄准你。[/center]"
[node name="tease" parent="container" parent_id_path=PackedInt32Array(575698869) index="3" unique_id=689277044]
+1 -2
View File
@@ -23,7 +23,6 @@ descriptionTemplate = "使光标化身为[b]恒星[/b]产生强大引力,并
万有引力常数:$atk。"
sources = Array[String](["万有引力", "宇宙航行"])
tease = "告诉我,逃逸速度是多少?!"
debugRebuild = true
[node name="avatar" parent="container/info" parent_id_path=PackedInt32Array(1625294072) index="0" unique_id=1021985889]
texture = ExtResource("2_r5y0x")
@@ -34,7 +33,7 @@ displayName = "引力源"
[node name="source" parent="container/info/displays" parent_id_path=PackedInt32Array(784441328) index="1" unique_id=365191794]
text = "万有引力 × 宇宙航行"
[node name="description" parent="container" parent_id_path=PackedInt32Array(575698869) index="2" unique_id=566230682]
[node name="description" parent="container/back/scroller" parent_id_path=PackedInt32Array(543588938) index="0" unique_id=566230682]
text = "[center]使光标化身为[b]恒星[/b]产生强大引力,并吸引[color=yellow]1[/color]颗行星围绕其。移动恒星来使行星产生加速度,[color=yellow]行星速度越快撞击伤害越高[/color]。
行星的速度太快会发生[color=red]逃逸[/color]
撞上恒星后会[color=red]坠毁[/color]。
+1 -2
View File
@@ -23,7 +23,6 @@ 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")
@@ -42,5 +41,5 @@ typeTopic = 4
[node name="source" parent="container/info/displays" parent_id_path=PackedInt32Array(784441328) index="1" unique_id=365191794]
text = "Internet"
[node name="description" parent="container" parent_id_path=PackedInt32Array(575698869) index="2" unique_id=566230682]
[node name="description" parent="container/back/scroller" parent_id_path=PackedInt32Array(543588938) index="0" unique_id=566230682]
text = "[center]召唤[b]抓狂的哈基米[/b],跟踪敌人,每[color=cyan]0.25[/color]秒造成[color=cyan]7[/color]点伤害。[/center]"
+1 -2
View File
@@ -23,7 +23,6 @@ descriptionTemplate = "发射$count颗[b]茴香豆[/b],在敌人间反弹,
sources = Array[String](["Zenless Zone Zero", "孔乙己"])
tease = "不多了,我剩得不多了!"
cooldown = 1000.0
debugRebuild = true
[node name="avatar" parent="container/info" parent_id_path=PackedInt32Array(1625294072) index="0" unique_id=1021985889]
texture = ExtResource("2_d5bd0")
@@ -39,7 +38,7 @@ typeTopic = 3
[node name="source" parent="container/info/displays" parent_id_path=PackedInt32Array(784441328) index="1" unique_id=365191794]
text = "Zenless Zone Zero × 孔乙己"
[node name="description" parent="container" parent_id_path=PackedInt32Array(575698869) index="2" unique_id=566230682]
[node name="description" parent="container/back/scroller" parent_id_path=PackedInt32Array(543588938) index="0" unique_id=566230682]
text = "[center]发射[color=cyan]4[/color]颗[b]茴香豆[/b],在敌人间反弹,每颗茴香豆最多可以反弹[color=cyan]4[/color]次,每次反弹对敌人造成[color=cyan]4[/color]点伤害,有[color=yellow]1/4[/color]的概率反弹次数[color=yellow]+1[/color]。散射[color=red]+4°[/color],反弹时伤害[color=red]-4%[/color],命中同类敌人时额外造成一次[color=yellow]必定暴击[/color]的伤害,命中Boss时,伤害倍率[b]永久[/b][color=orange]+1%[/color]。[/center]"
[node name="tease" parent="container" parent_id_path=PackedInt32Array(575698869) index="3" unique_id=689277044]
+1 -2
View File
@@ -24,7 +24,6 @@ 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")
@@ -39,7 +38,7 @@ quality = 0
[node name="source" parent="container/info/displays" parent_id_path=PackedInt32Array(784441328) index="1" unique_id=365191794]
text = "Minecraft × Pathogenic"
[node name="description" parent="container" parent_id_path=PackedInt32Array(575698869) index="2" unique_id=566230682]
[node name="description" parent="container/back/scroller" parent_id_path=PackedInt32Array(543588938) index="0" unique_id=566230682]
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]
+1 -1
View File
@@ -46,7 +46,7 @@ count = 200
displayName = "彩虹旗"
typeTopic = 4
[node name="description" parent="container" parent_id_path=PackedInt32Array(575698869) index="2" unique_id=566230682]
[node name="description" parent="container/back/scroller" parent_id_path=PackedInt32Array(543588938) index="0" unique_id=566230682]
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
+1 -2
View File
@@ -39,7 +39,6 @@ sources = Array[String](["万有引力", "宇宙航行"])
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")
@@ -55,7 +54,7 @@ typeTopic = 3
[node name="source" parent="container/info/displays" parent_id_path=PackedInt32Array(784441328) index="1" unique_id=365191794]
text = "万有引力 × 宇宙航行"
[node name="description" parent="container" parent_id_path=PackedInt32Array(575698869) index="2" unique_id=566230682]
[node name="description" parent="container/back/scroller" parent_id_path=PackedInt32Array(543588938) index="0" unique_id=566230682]
text = "[center]召唤[color=yellow]1[/color]枚[b]魔法导弹[/b],围绕鼠标指针做由鼠标指针提供向心力的圆周运动。
鼠标指针质量:[color=cyan]100.00[/color]kg
魔法导弹质量:[color=cyan]10.00[/color]kg
+1 -2
View File
@@ -28,7 +28,6 @@ descriptionTemplate = "发射$count只伤害以$reduce衰减的造成$childatk
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")
@@ -51,5 +50,5 @@ 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]
[node name="description" parent="container/back/scroller" parent_id_path=PackedInt32Array(543588938) index="0" 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 -1
View File
@@ -32,5 +32,5 @@ count = 750
[node name="name" parent="container/info/displays" parent_id_path=PackedInt32Array(784441328) index="0" unique_id=1576068972]
displayName = "蘑菇矿挖爪"
[node name="description" parent="container" parent_id_path=PackedInt32Array(575698869) index="2" unique_id=566230682]
[node name="description" parent="container/back/scroller" parent_id_path=PackedInt32Array(543588938) index="0" unique_id=566230682]
text = "[center]命中时造成[color=cyan]1[/color]点伤害,有[color=cyan]10.0%[/color]概率挖出1~[color=cyan]3[/color]个随机物品。[/center]"
+5 -11
View File
@@ -1,10 +1,10 @@
[gd_scene load_steps=4 format=3 uid="uid://b2qhes4apaxsj"]
[gd_scene format=3 uid="uid://b2qhes4apaxsj"]
[ext_resource type="PackedScene" uid="uid://ckq2cq6m23hq3" path="res://components/Abstracts/WeaponCardBase.tscn" id="1_k4t0h"]
[ext_resource type="Texture2D" uid="uid://cp57lmeohvo3o" path="res://resources/weapons/nuclear-bomb.png" id="2_5nh8i"]
[ext_resource type="Script" path="res://scripts/Contents/Weapons/NuclearBomb.gd" id="2_hscw2"]
[ext_resource type="Script" uid="uid://ctjdfkr4sef7y" path="res://scripts/Contents/Weapons/NuclearBomb.gd" id="2_hscw2"]
[node name="NuclearBomb" instance=ExtResource("1_k4t0h")]
[node name="NuclearBomb" unique_id=1502548572 instance=ExtResource("1_k4t0h")]
script = ExtResource("2_hscw2")
avatarTexture = ExtResource("2_5nh8i")
displayName = "核弹控制器"
@@ -22,14 +22,11 @@ storeType = {
descriptionTemplate = "倒计时10秒后对半径$radius范围的实体造成$atk点[b]无差别伤害[/b]。"
needEnergy = 120.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_5nh8i")
[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 = 2
@@ -39,6 +36,3 @@ typeTopicColorMap = {
2: Color(1, 0.274813, 0, 1),
3: Color(0.707984, 0, 1, 1)
}
[node name="description" parent="container" index="2"]
text = "[center]倒计时10秒后对半径[color=cyan]750[/color]→[color=yellow]765[/color]范围的实体造成[color=cyan]2000[/color]→[color=yellow]2050[/color]点[b]无差别伤害[/b]。[/center]"
+1 -5
View File
@@ -27,7 +27,6 @@ storeType = {
descriptionTemplate = "高速喷出[b]火焰[/b],造成$fireatk点伤害。小概率喷出[b]硝化火[/b],召唤$min-n~$max-n滴[b]浓硝酸[/b]围绕在火焰旁,每滴造成$atk点伤害。[b]火焰[/b]具有高额击退效果,[b]浓硝酸[/b]液滴的射程较短,每发射$count次火焰会消耗[color=yellow]1[/color]个[b]篮球[/b]
如果没有则消耗[color=yellow]5[/color]点[b]能量[/b]。"
cooldown = 50.0
debugRebuild = true
[node name="avatar" parent="container/info" parent_id_path=PackedInt32Array(1625294072) index="0" unique_id=1021985889]
texture = ExtResource("2_xmkcx")
@@ -37,9 +36,6 @@ displayName = "氧化加农炮"
quality = 0
typeTopic = 2
[node name="description" parent="container" parent_id_path=PackedInt32Array(575698869) index="2" unique_id=566230682]
[node name="description" parent="container/back/scroller" parent_id_path=PackedInt32Array(543588938) index="0" unique_id=566230682]
text = "[center]高速喷出[b]火焰[/b],造成[color=cyan]5.00[/color]点伤害。小概率喷出[b]硝化火[/b],召唤[color=cyan]2[/color]~[color=cyan]7[/color]滴[b]浓硝酸[/b]围绕在火焰旁,每滴造成[color=cyan]10.00[/color]点伤害。[b]火焰[/b]具有高额击退效果,[b]浓硝酸[/b]液滴的射程较短,每发射[color=cyan]1[/color]次火焰会消耗[color=yellow]1[/color]个[b]篮球[/b]
如果没有则消耗[color=yellow]5[/color]点[b]能量[/b]。[/center]"
[node name="tease" parent="container" parent_id_path=PackedInt32Array(575698869) index="3" unique_id=689277044]
visible = false
+1 -2
View File
@@ -18,7 +18,6 @@ sources = Array[String](["MEME"])
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")
@@ -35,7 +34,7 @@ displayName = "钢管"
[node name="source" parent="container/info/displays" parent_id_path=PackedInt32Array(784441328) index="1" unique_id=365191794]
text = "MEME"
[node name="description" parent="container" parent_id_path=PackedInt32Array(575698869) index="2" unique_id=566230682]
[node name="description" parent="container/back/scroller" parent_id_path=PackedInt32Array(543588938) index="0" unique_id=566230682]
text = "[center]按住蓄力扔出钢管,蓄力越久伤害越高,至少造成[color=cyan]5[/color]点伤害,发射钢管后继续按住鼠标可进行连续发射。[/center]"
[node name="tease" parent="container" parent_id_path=PackedInt32Array(575698869) index="3" unique_id=689277044]
+1 -2
View File
@@ -13,7 +13,6 @@ 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,5 +26,5 @@ count = 200
[node name="name" parent="container/info/displays" parent_id_path=PackedInt32Array(784441328) index="0" unique_id=1576068972]
displayName = "紫水晶簇"
[node name="description" parent="container" parent_id_path=PackedInt32Array(575698869) index="2" unique_id=566230682]
[node name="description" parent="container/back/scroller" parent_id_path=PackedInt32Array(543588938) index="0" unique_id=566230682]
text = "[center]发射[b]紫水晶[/b],撞击时造成[color=cyan]10[/color]点伤害。[/center]"
+1 -1
View File
@@ -39,5 +39,5 @@ count = 400
displayName = "红水晶簇"
typeTopic = 1
[node name="description" parent="container" parent_id_path=PackedInt32Array(575698869) index="2" unique_id=566230682]
[node name="description" parent="container/back/scroller" parent_id_path=PackedInt32Array(543588938) index="0" 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]"
+1 -2
View File
@@ -25,7 +25,6 @@ descriptionTemplate = "召唤[color=yellow]6[/color]条灵魂,每条造成$atk
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")
@@ -45,5 +44,5 @@ 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]
[node name="description" parent="container/back/scroller" parent_id_path=PackedInt32Array(543588938) index="0" unique_id=566230682]
text = "[center]召唤[color=yellow]6[/color]条灵魂,每条造成[color=cyan]2[/color]点伤害,命中敌人时将伤害的[color=cyan]10.0%[/color]转换为能量并提供[color=cyan]1[/color]点治疗。[/center]"
+1 -1
View File
@@ -32,5 +32,5 @@ displayName = "回响水晶"
quality = 3
typeTopic = 4
[node name="description" parent="container" parent_id_path=PackedInt32Array(575698869) index="2" unique_id=566230682]
[node name="description" parent="container/back/scroller" parent_id_path=PackedInt32Array(543588938) index="0" unique_id=566230682]
text = "[center]召唤一个可抵挡[color=cyan]70[/color]点伤害的[b]音元盾[/b]。[/center]"
+78 -27
View File
@@ -26,25 +26,50 @@ storeType = {
}
descriptionTemplate = "进行[b]格挡[/b],化解敌人的攻击。
每成功格挡一次,获得一点[b]气力[/b]。
每拥有一点气力,增加[color=yellow]1[/color]点冲刺速度,闪避穿过敌人时对其贴上一层[b]符咒[/b],符咒会自动引爆,召唤[b]乾坤剑[/b]穿透敌人。
近战攻击造成乾坤剑的$rate点伤害。
每拥有一点气力:
增加[color=yellow]1[/color]点冲刺速度。
闪避穿过敌人时对其贴上一层[b]符咒[/b],
符咒会自动引爆,
召唤[b]乾坤剑[/b]穿透敌人。
自身最多储存$max点气力。
近战攻击造成乾坤剑的$rate伤害。
每次格挡最多化解$count个子弹,
体内最多储存$max点气力。
每化解[color=yellow]1[/color]点伤害,
乾坤剑造成的伤害+$atk点。
格挡时机越精确,成功率越高。
每化解[color=yellow]1[/color]点伤害,
乾坤剑造成的伤害+$atk点。
对于[b]近战挥舞[/b]攻击,化解本次伤害;
对于[b]近战戳刺[/b]攻击,将本次伤害反弹,造成乾坤剑的$rate伤害并产生大量击退;
对于[b]远程射弹[/b]攻击,化解本次伤害,有$rate的概率发生[b]弹反[/b],子弹弹反后造成乾坤剑的$rate伤害
对于[b]猛冲[/b]攻击,化解本次伤害,并反弹敌人的速度;
对于[b]吐息[/b]攻击,[color=red]无法化解伤害[/color]但可以对敌人产生少量击退;
对于[b]魔法或召唤[/b]攻击,[color=red]无法化解伤害[/color]但可以少量储能;"
对于[b]近战挥舞[/b]攻击,
化解本次伤害,
敌人产生[color=yellow]1[/color]枚[b]内伤[/b]
对于[b]近战戳刺[/b]攻击,
将本次伤害反弹,
造成乾坤剑的$rate伤害,
产生大量击退,
敌人产生[color=yellow]1[/color]枚[b]内伤[/b]
对于[b]远程射弹[/b]攻击,
化解本次伤害,
有$rate的概率发生[b]弹反[/b]
子弹弹反后造成乾坤剑的$rate伤害;
对于[b]猛冲[/b]攻击,
化解本次伤害,
反弹敌人的速度,
敌人产生[color=yellow]1[/color]枚[b]内伤[/b]
对于[b]吐息[/b]攻击,
[color=red]无法化解伤害[/color]但产生少量击退;
对于[b]魔法或召唤[/b]攻击,
[color=red]无法化解伤害[/color]但可以少量储能;
对于[b]爆炸[/b]攻击,
[color=red]无法化解伤害[/color]且[color=red]自身产生[color=yellow]2[/color]枚内伤[/color]
敌人或自身受到的任意[color=yellow]爆炸类伤害[/color]都会引爆其所有内伤,每枚内伤造成$atk点伤害。
格挡时机越精确,成功率越高。
触发[b]不精准格挡[/b]时,自身产生[color=yellow]1[/color]枚内伤。
每次格挡最多产生[color=yellow]1[/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")
@@ -60,24 +85,50 @@ typeTopic = 3
[node name="source" parent="container/info/displays" parent_id_path=PackedInt32Array(784441328) index="1" unique_id=365191794]
text = "Nine Sols × Terraria"
[node name="description" parent="container" parent_id_path=PackedInt32Array(575698869) index="2" unique_id=566230682]
text = "[center]进行[b]格挡[/b],化解敌人的攻击。
[node name="description" parent="container/back/scroller" parent_id_path=PackedInt32Array(543588938) index="0" unique_id=566230682]
text = "进行[b]格挡[/b],化解敌人的攻击。
每成功格挡一次,获得一点[b]气力[/b]。
每拥有一点气力,增加[color=yellow]1[/color]点冲刺速度,闪避穿过敌人时对其贴上一层[b]符咒[/b],符咒会自动引爆,召唤[b]乾坤剑[/b]穿透敌人。
近战攻击造成乾坤剑的[color=cyan]25.0%[/color]点伤害。
每拥有一点气力:
增加[color=yellow]1[/color]点冲刺速度。
闪避穿过敌人时对其贴上一层[b]符咒[/b],
符咒会自动引爆,
召唤[b]乾坤剑[/b]穿透敌人。
自身最多储存[color=cyan]3[/color]点气力。
近战攻击造成乾坤剑的[color=cyan]25.0%[/color]伤害。
每次格挡最多化解[color=cyan]1[/color]个子弹,
体内最多储存[color=cyan]3[/color]点气力。
每化解[color=yellow]1[/color]点伤害,
乾坤剑造成的伤害+[color=cyan]10[/color]点。
格挡时机越精确,成功率越高。
每化解[color=yellow]1[/color]点伤害,
乾坤剑造成的伤害+[color=cyan]10[/color]点
对于[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]"
对于[b]近战挥舞[/b]攻击,
化解本次伤害,
敌人产生[color=yellow]1[/color][b]内伤[/b]
对于[b]近战戳刺[/b]攻击,
将本次伤害反弹,
造成乾坤剑的[color=cyan]25.0%[/color]伤害,
产生大量击退,
敌人产生[color=yellow]1[/color]枚[b]内伤[/b]
对于[b]远程射弹[/b]攻击,
化解本次伤害,
有[color=cyan]25.0%[/color]的概率发生[b]弹反[/b]
子弹弹反后造成乾坤剑的[color=cyan]25.0%[/color]伤害;
对于[b]猛冲[/b]攻击,
化解本次伤害,
反弹敌人的速度,
敌人产生[color=yellow]1[/color]枚[b]内伤[/b]
对于[b]吐息[/b]攻击,
[color=red]无法化解伤害[/color]但产生少量击退;
对于[b]魔法或召唤[/b]攻击,
[color=red]无法化解伤害[/color]但可以少量储能;
对于[b]爆炸[/b]攻击,
[color=red]无法化解伤害[/color]且[color=red]自身产生[color=yellow]2[/color]枚内伤[/color]
敌人或自身受到的任意[color=yellow]爆炸类伤害[/color]都会引爆其所有内伤,每枚内伤造成[color=cyan]10[/color]点伤害。
格挡时机越精确,成功率越高。
触发[b]不精准格挡[/b]时,自身产生[color=yellow]1[/color]枚内伤。
每次格挡最多产生[color=yellow]1[/color]枚内伤。"
[node name="tease" parent="container" parent_id_path=PackedInt32Array(575698869) index="3" unique_id=689277044]
visible = true
+1 -2
View File
@@ -25,7 +25,6 @@ storeType = {
descriptionTemplate = "发射$mincount~$maxcount个[b]无主的飞星[/b],在$forwardtime秒后向目标冲刺并造成$atk点伤害。"
needEnergy = 12.0
cooldown = 750.0
debugRebuild = true
[node name="avatar" parent="container/info" parent_id_path=PackedInt32Array(1625294072) index="0" unique_id=1021985889]
texture = ExtResource("3_wfty8")
@@ -40,5 +39,5 @@ count = 400
displayName = "矢量核心"
quality = 2
[node name="description" parent="container" parent_id_path=PackedInt32Array(575698869) index="2" unique_id=566230682]
[node name="description" parent="container/back/scroller" parent_id_path=PackedInt32Array(543588938) index="0" 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 -1
View File
@@ -47,5 +47,5 @@ displayName = "火山"
quality = 4
typeTopic = 2
[node name="description" parent="container" parent_id_path=PackedInt32Array(575698869) index="2" unique_id=566230682]
[node name="description" parent="container/back/scroller" parent_id_path=PackedInt32Array(543588938) index="0" unique_id=566230682]
text = "[center]召唤1支[b]火山[/b],以[color=cyan]5.0%[/color]的效率跟随鼠标指向,进行基础伤害为[color=cyan]20[/color]的4段挥舞攻击。造成的伤害分别为[color=cyan]100.0%[/color][color=cyan]50.0%[/color][color=cyan]115.0%[/color][color=cyan]123.0%[/color],第4段攻击的同时发射[color=cyan]1[/color]支[b]火山幻影[/b],造成[color=cyan]40.0%[/color]伤害。[/center]"
+1 -4
View File
@@ -36,8 +36,5 @@ quality = 3
[node name="source" parent="container/info/displays" parent_id_path=PackedInt32Array(784441328) index="1" unique_id=365191794]
text = "Terraria × Undertale"
[node name="description" parent="container" parent_id_path=PackedInt32Array(575698869) index="2" unique_id=566230682]
[node name="description" parent="container/back/scroller" parent_id_path=PackedInt32Array(543588938) index="0" unique_id=566230682]
text = "[center]从天而降[color=cyan]1[/color]支目标位于半径[color=cyan]100.00[/color]内的[b]怪物灵魂[/b],造成[color=cyan]10[/color]点伤害,穿透+[color=yellow]50%[/color]。[/center]"
[node name="tease" parent="container" parent_id_path=PackedInt32Array(575698869) index="3" unique_id=689277044]
visible = false
@@ -20,3 +20,4 @@ func hitBullet(bullet: BulletBase):
if !is_instance_valid(launcher): return
if BulletTool.canDamage(bullet, launcher):
baseDamage *= rate2 ** bullet.getDamage()
InternalDamageBullet.generateBall(launcher, bullet.launcher, sqrt(baseDamage))
@@ -0,0 +1,26 @@
extends BulletBase
class_name InternalDamageBullet
var hoster: EntityBase
func spawn():
if is_instance_valid(hoster):
hoster.died.connect(tryDestroy)
hoster.hit.connect(
func(_damage, bullet: BulletBase, _crit):
if bullet.motionType == BulletBase.MotionType.EXPLOSION:
hitbox.set_deferred("disabled", false)
)
static func generateBall(by: EntityBase, who: EntityBase, atk: float):
var internalDamages = who.getOrCreateCycleTimer("internalDamages", 3000, 150)
for bullet in BulletBase.generate(
ComponentManager.getBullet("InternalDamage"),
by,
Vector2.ZERO,
0
):
if bullet is InternalDamageBullet:
bullet.baseDamage = atk
bullet.hoster = who
internalDamages.host(bullet)
@@ -0,0 +1 @@
uid://d3m2bjkxg82a2
+48 -38
View File
@@ -51,45 +51,55 @@ func succeedToHit(_dmg: float, entity: EntityBase):
func hitBullet(bullet: BulletBase): # 当前子弹与其他子弹相撞
if !is_instance_valid(launcher): return
if BulletTool.canDamage(bullet, launcher): # 其他子弹可以使当前子弹的发射者受伤吗?
if parryiedTimes < maxParryTimes && MathTool.rate(parryRate): # 一个刀光最多格挡多少个敌方子弹?
# 可以格挡 挥舞运动(近战攻击)、射弹运动(远程攻击)和猛冲运动 的子弹,射弹如果被弹反则不会产生气力
# 魔法运动和召唤运动的子弹虽不能格挡,但是可以储能,吐息运动的子弹会对发射者产生击退
if bullet.motionType == BulletBase.MotionType.PROJECTILE:
# 无论如何都要生成格挡特效
parryEffect(bullet)
# 弹反 还是 格挡?
if MathTool.rate(reflectRate):
bullet.look_at(bullet.launcher.getTrackingAnchor())
bullet.launcher = launcher
bullet.baseDamage = reflectRate * atk
bullet.lifeTime *= 2
if bullet.freeAfterSpawn && bullet.autoSpawnAnimation:
bullet.animator.speed_scale *= 0.5
else:
bullet.tryDestroy()
if parryiedTimes < maxParryTimes:
if MathTool.rate(parryRate): # 一个刀光最多格挡多少个敌方子弹?
# 可以格挡 挥舞运动(近战攻击)、射弹运动(远程攻击)和猛冲运动 的子弹,射弹如果被弹反则不会产生气力
# 魔法运动和召唤运动的子弹虽不能格挡,但是可以储能,吐息运动的子弹会对发射者产生击退
if bullet.motionType == BulletBase.MotionType.PROJECTILE:
# 无论如何都要生成格挡特效
parryEffect(bullet)
# 弹反 还是 格挡?
if MathTool.rate(reflectRate):
bullet.look_at(bullet.launcher.getTrackingAnchor())
bullet.launcher = launcher
bullet.baseDamage = reflectRate * atk
bullet.lifeTime *= 2
if bullet.freeAfterSpawn && bullet.autoSpawnAnimation:
bullet.animator.speed_scale *= 0.5
else:
bullet.tryDestroy()
generateParryBall(bullet.baseDamage)
elif bullet.motionType == BulletBase.MotionType.SWING:
parryEffect(bullet)
bullet.hitbox.set_deferred("disabled", true)
generateParryBall(bullet.baseDamage)
elif bullet.motionType == BulletBase.MotionType.SWING:
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, 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, launcher.position)
launcher.storeEnergy(sqrt(bullet.baseDamage))
InternalDamageBullet.generateBall(launcher, bullet.launcher, atk)
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)
InternalDamageBullet.generateBall(launcher, bullet.launcher, atk)
elif bullet.motionType == BulletBase.MotionType.SPRINT:
parryEffect(bullet)
bullet.tryDestroy()
bullet.launcher.velocity *= 0
generateParryBall(bullet.baseDamage)
InternalDamageBullet.generateBall(launcher, bullet.launcher, atk)
elif bullet.motionType == BulletBase.MotionType.BREATH:
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, launcher.position)
launcher.storeEnergy(sqrt(bullet.baseDamage))
elif bullet.motionType == BulletBase.MotionType.EXPLOSION:
penerateEffect(bullet.launcher, launcher.position)
for i in 2:
InternalDamageBullet.generateBall(bullet.launcher, launcher, sqrt(bullet.getDamage()))
else:
InternalDamageBullet.generateBall(bullet.launcher, launcher, atk)
func refract(_newBullet: BulletBase, _entity: EntityBase, _index: int, _total: int, _lastBullet: float):
return null
+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)):
+7
View File
@@ -32,6 +32,7 @@ var historyStack
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 tutorialWatched: bool = false
static var selectingFeed: bool = true
static var selectedCharacter: String = MathTool.randomChoiceFrom(START_CHARACTERS)
@@ -93,6 +94,9 @@ func startSingleplayerGame():
UIState.setPanel("CompilingTip")
else:
UIState.setPanel("SelectInitialFeed")
if useTutorialBtn.button_pressed:
tutorialWatched = true
SaveEngine.save()
func _ready():
historyStack = Composables.useHistoryStack(playerNameInput)
@@ -100,6 +104,7 @@ func _ready():
func(on: bool):
useTutorialBtn.text = "观看" if on else "跳过"
)
useTutorialBtn.button_pressed = tutorialWatched
multiplayer.connection_failed.connect(
func():
setState(MultiplayerState.ConnectionState.DISCONNECTED)
@@ -204,6 +209,7 @@ func rebuildInfo():
func(newValue: float):
OutGameStorage.upgradableFieldsValue[fieldShow.field] = newValue
OutGameStorage.upgradableFieldsLevel[fieldShow.field] += 1
SaveEngine.save()
rebuildInfo()
)
upgradeFieldsBox.add_child(fieldShow)
@@ -217,6 +223,7 @@ func rebuildInfo():
getCurrentSelectedCharacter().animator.play("hide")
selectedCharacter = card.name
getCurrentSelectedCharacter().animator.play("show")
SaveEngine.save()
)
charactersBox.add_child(card)
if selectedCharacter == card.name:
+1
View File
@@ -9,6 +9,7 @@ enum MotionType {
SPRINT, # 冲撞
BREATH, # 吐息
STAB, # 近战戳刺
EXPLOSION, # 爆炸
}
signal destroied(becauseMap: bool)
+2 -2
View File
@@ -16,7 +16,7 @@ func getStateAngle(index: int):
return lifetime() / period * deg_to_rad(360) - deg_to_rad(360.0 * index / len(bullets))
func forceFilter():
bullets = bullets.filter(is_instance_valid)
func apply():
func apply(where: Vector2):
forceFilter()
for index in len(bullets):
var bullet = bullets[index]
@@ -24,7 +24,7 @@ func apply():
var offset = Vector2.from_angle(newStateAngle)
bullet.cycleStateAngle = newStateAngle
offset.y *= 0.25
bullet.position = bullet.launcher.position + offset * distance
bullet.position = where + offset * distance
bullet.scale = Vector2.ONE * (1 + offset.y)
func host(bullet: BulletBase):
bullets.append(bullet)
+4 -3
View File
@@ -214,7 +214,7 @@ func _physics_process(_delta: float) -> void:
trailParticle.emitting = trailing
for cycler in cycleTimers.values():
if cycler is CycleTimer:
cycler.apply()
cycler.apply(position)
# 通用方法
func impluse(force: Vector2):
@@ -416,7 +416,7 @@ func tryDie(by: BulletBase = null):
fields[FieldStore.Entity.MAX_HEALTH] * randf_range(1 - GameRule.beachballOffset, 1 + GameRule.beachballOffset),
position + MathTool.sampleInCircle(GameRule.itemDroppedSpawnOffset)
)
for i in randi_range(0, 20 if isBoss else 5):
for i in randi_range(0, (15 + level) if isBoss else 5):
ItemDropped.generate(
ItemStore.ItemType.CRYSTAL,
5 if isBoss else 1,
@@ -425,7 +425,7 @@ func tryDie(by: BulletBase = null):
if isBoss:
ItemDropped.generate(
ItemStore.ItemType.DIAMOND,
randi_range(1, 3),
randi_range(1, level),
position + MathTool.sampleInCircle(GameRule.itemDroppedSpawnOffset)
)
if isBoss:
@@ -508,6 +508,7 @@ func summon(who: PackedScene, syncFields: bool = true, lockValue: bool = true) -
instance.position = get_global_mouse_position()
instance.myMaster = self
summoned(instance)
instance.add_to_group("entities")
if isPlayer(): instance.add_to_group("players")
if syncFields:
if lockValue:
+1 -1
View File
@@ -200,7 +200,7 @@ func buildDescription(showNext: bool = false) -> String:
else:
text = "[color=cyan]%s[/color]" % data
result = result.replace("$" + key, text)
return "[center]%s[/center]" % result
return result
func readStore(key: String, default: Variant = null):
return store.get(key, default)
func playSound(sound: String):
+8
View File
@@ -31,6 +31,14 @@ static func fill(origin: Dictionary, filler: Callable) -> Dictionary:
return accum,
{}
)
static func mapEntries(origin: Dictionary, mapper: Callable) -> Dictionary:
return origin.keys().reduce(
func(accum, key):
var entry = mapper.call(key, origin[key])
accum[entry[0]] = entry[1]
return accum,
{}
)
static func dictionaryFromEntries(keys: Array, values: Array) -> Dictionary:
var result = {}
for index in len(keys):
+34
View File
@@ -0,0 +1,34 @@
class_name SaveEngine
const SAVE_FILE = "user://save.json"
static func serialize():
return {
"out-game": {
"value": OutGameStorage.upgradableFieldsValue,
"level": OutGameStorage.upgradableFieldsLevel,
"inventory": OutGameStorage.inventory,
},
"ui-state": {
"tutorial-watched": StarterPanel.tutorialWatched,
"selected-character": StarterPanel.selectedCharacter
}
}
static func apply(saveData: Dictionary):
OutGameStorage.upgradableFieldsValue = saveData["out-game"]["value"]
OutGameStorage.upgradableFieldsLevel = saveData["out-game"]["level"]
OutGameStorage.inventory = saveData["out-game"]["inventory"]
StarterPanel.tutorialWatched = saveData["ui-state"]["tutorial-watched"]
StarterPanel.selectedCharacter = saveData["ui-state"]["selected-character"]
static func load():
var origin = JsonTool.parseFromFile(SAVE_FILE)
if origin is Dictionary:
origin["out-game"]["value"] = ArrayTool.mapEntries(origin["out-game"]["value"], func(key, value): return [int(key), value])
origin["out-game"]["level"] = ArrayTool.mapEntries(origin["out-game"]["level"], func(key, value): return [int(key), value])
origin["out-game"]["inventory"] = ArrayTool.mapEntries(origin["out-game"]["inventory"], func(key, value): return [int(key), value])
return origin
static func save():
var file = FileAccess.open(SAVE_FILE, FileAccess.ModeFlags.WRITE)
if file is FileAccess:
file.store_string(JsonTool.stringify(serialize()))
file.close()
+1
View File
@@ -0,0 +1 @@
uid://dae5c5gtbf3uo
+1 -1
View File
@@ -1,6 +1,6 @@
class_name GameRule
static var deadReasons: Array = JsonTool.parseJson("res://resources/constants/deadReasons.json")
static var deadReasons: Array = JsonTool.parseFromFile("res://resources/constants/deadReasons.json")
static var helpText: String
static var difficultyRange: Vector2 = Vector2(-20, 50) # 难度倍数范围,包括最小值和最大值,负数则降低难度
static var difficulty: float = 1 # 难度倍数,可以写小数
+9 -4
View File
@@ -1,9 +1,14 @@
class_name JsonTool
static func parseJson(filePath: String):
static func parseFromFile(filePath: String):
var file = FileAccess.open(filePath, FileAccess.READ)
var json = file.get_as_text()
file.close()
if file is FileAccess:
var json = file.get_as_text()
file.close()
return parseFromText(json)
static func parseFromText(text: String):
var jsonObj = JSON.new()
jsonObj.parse(json)
jsonObj.parse(text)
return jsonObj.data
static func stringify(data: Variant):
return JSON.stringify(data, " ")
+9
View File
@@ -1,5 +1,13 @@
class_name GameBusManager
static func _static_init():
init()
static func init():
var save = SaveEngine.load()
if save:
print(save)
SaveEngine.apply(save)
static func restart(tree: SceneTree):
for bullet in tree.get_nodes_in_group("bullets"):
bullet.queue_free()
@@ -14,6 +22,7 @@ static func restart(tree: SceneTree):
OutGameStorage.saveInventory()
CameraManager.shakeStop()
WorldManager.timeRestart()
SaveEngine.save()
StarterPanel.selectingFeed = true
UIState.setPanel("Starter")