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

feat(武器): 添加酸蚀风暴武器及五种酸液子弹

实现酸蚀风暴武器系统,包含五种不同类型的酸液子弹:
1. 硫酸:命中时溅射1~3滴酸液
2. 硝酸:造成额外伤害
3. 盐酸:降低敌人移动和攻击速度
4. 碳酸:可无限穿透并逐渐扩大
5. 磷酸:增加敌人散射角

同时调整武器数值平衡,更新VSCode配置中的Godot引擎路径
This commit is contained in:
2026-01-23 23:44:21 +08:00
parent bedf76398e
commit 3eb1f84a21
27 changed files with 236 additions and 78 deletions
+1 -1
View File
@@ -1,3 +1,3 @@
{
"godotTools.editorPath.godot4": "d:\\Program Files\\Godot\\godot43.exe"
"godotTools.editorPath.godot4": "d:\\Program Files\\godot\\godot45.exe"
}
+28
View File
@@ -0,0 +1,28 @@
[gd_scene load_steps=5 format=3 uid="uid://qx8h1dcbyy1j"]
[ext_resource type="PackedScene" uid="uid://crtdkysmnkith" path="res://components/Abstracts/BulletBase.tscn" id="1_hfsul"]
[ext_resource type="Script" uid="uid://wt1fn2vjtlen" path="res://scripts/Contents/Bullets/AcidBulletBase.gd" id="2_y4hkm"]
[ext_resource type="Texture2D" uid="uid://b47ixncbxcs4u" path="res://resources/bullets/acids/template.png" id="3_rku1t"]
[sub_resource type="SpriteFrames" id="SpriteFrames_3gf7s"]
animations = [{
"frames": [{
"duration": 1.0,
"texture": ExtResource("3_rku1t")
}],
"loop": true,
"name": &"default",
"speed": 5.0
}]
[node name="AcidBulletBase" instance=ExtResource("1_hfsul")]
script = ExtResource("2_y4hkm")
acidType = 0
displayName = "酸液"
lifeTime = 2000.0
[node name="texture" parent="." index="0"]
sprite_frames = SubResource("SpriteFrames_3gf7s")
[node name="hitbox" parent="." index="1"]
visible = false
+13
View File
@@ -0,0 +1,13 @@
[gd_scene load_steps=3 format=3 uid="uid://d1pjay8rhvwap"]
[ext_resource type="PackedScene" uid="uid://qx8h1dcbyy1j" path="res://components/Bullets/AcidBulletBase.tscn" id="1_l70ci"]
[ext_resource type="Script" uid="uid://8h8e35gwre27" path="res://scripts/Contents/Bullets/AcidC.gd" id="2_nxpf5"]
[node name="AcidC" instance=ExtResource("1_l70ci")]
script = ExtResource("2_nxpf5")
speed = 5.0
penerate = 1.0
lifeTime = 4000.0
[node name="texture" parent="." index="0"]
modulate = Color(1, 0.7075234, 0.6972954, 1)
+10
View File
@@ -0,0 +1,10 @@
[gd_scene load_steps=3 format=3 uid="uid://basg7o28xjlli"]
[ext_resource type="PackedScene" uid="uid://qx8h1dcbyy1j" path="res://components/Bullets/AcidBulletBase.tscn" id="1_cxued"]
[ext_resource type="Script" uid="uid://dp8e5samuurdn" path="res://scripts/Contents/Bullets/AcidCl.gd" id="2_2nyoy"]
[node name="AcidCl" instance=ExtResource("1_cxued")]
script = ExtResource("2_2nyoy")
[node name="texture" parent="." index="0"]
modulate = Color(0.95498145, 1, 0.5526121, 1)
+10
View File
@@ -0,0 +1,10 @@
[gd_scene load_steps=3 format=3 uid="uid://cwfguraet2bsc"]
[ext_resource type="PackedScene" uid="uid://qx8h1dcbyy1j" path="res://components/Bullets/AcidBulletBase.tscn" id="1_6376o"]
[ext_resource type="Script" uid="uid://ccjdi34ney8kl" path="res://scripts/Contents/Bullets/AcidN.gd" id="2_87vas"]
[node name="AcidN" instance=ExtResource("1_6376o")]
script = ExtResource("2_87vas")
[node name="texture" parent="." index="0"]
modulate = Color(0.56576514, 1, 0.9533231, 1)
+10
View File
@@ -0,0 +1,10 @@
[gd_scene load_steps=3 format=3 uid="uid://do52uadx856ys"]
[ext_resource type="PackedScene" uid="uid://qx8h1dcbyy1j" path="res://components/Bullets/AcidBulletBase.tscn" id="1_y3as2"]
[ext_resource type="Script" uid="uid://bef6n4hwn1niu" path="res://scripts/Contents/Bullets/AcidP.gd" id="2_yx8yh"]
[node name="AcidP" instance=ExtResource("1_y3as2")]
script = ExtResource("2_yx8yh")
[node name="texture" parent="." index="0"]
modulate = Color(1, 0.59425545, 0, 1)
+10
View File
@@ -0,0 +1,10 @@
[gd_scene load_steps=3 format=3 uid="uid://dofhep8hma20k"]
[ext_resource type="PackedScene" uid="uid://qx8h1dcbyy1j" path="res://components/Bullets/AcidBulletBase.tscn" id="1_h2wny"]
[ext_resource type="Script" uid="uid://dm4hwimsk8tx2" path="res://scripts/Contents/Bullets/AcidS.gd" id="2_m04ix"]
[node name="AcidS" instance=ExtResource("1_h2wny")]
script = ExtResource("2_m04ix")
[node name="texture" parent="." index="0"]
modulate = Color(0.31764707, 1, 0, 1)
+2 -2
View File
@@ -2,7 +2,7 @@
[ext_resource type="PackedScene" uid="uid://cvogxi7mktumf" path="res://components/Abstracts/EntityBase.tscn" id="1_e5pl8"]
[ext_resource type="Script" uid="uid://cthtupc6dtbav" path="res://scripts/Contents/Characters/Rooster.gd" id="2_oqdqd"]
[ext_resource type="PackedScene" uid="uid://dwsyn746hr25d" path="res://components/Weapons/MushroomPickaxe.tscn" id="3_da2ca"]
[ext_resource type="PackedScene" uid="uid://yq7vmijwvgx1" path="res://components/Weapons/AcidWind.tscn" id="3_da2ca"]
[ext_resource type="AudioStream" uid="uid://cdrevrq7n6yqa" path="res://resources/sounds/effect/Boing.mp3" id="4_66s6c"]
[ext_resource type="AudioStream" uid="uid://benyec5bqni0b" path="res://resources/sounds/effect/Chomp.wav" id="4_k0yme"]
[ext_resource type="AudioStream" uid="uid://dmxh3bpk8vyy5" path="res://resources/sounds/effect/Coin.mp3" id="5_xnbhq"]
@@ -58,7 +58,7 @@ metadata/_edit_vertical_guides_ = [71.0]
[node name="weaponStore" parent="." index="1"]
process_mode = 4
[node name="MushroomPickaxe" parent="weaponStore" index="0" instance=ExtResource("3_da2ca")]
[node name="AcidWind" parent="weaponStore" index="0" instance=ExtResource("3_da2ca")]
debugRebuild = false
[node name="sprint" parent="sounds" index="0"]
+18 -16
View File
@@ -1,41 +1,43 @@
[gd_scene load_steps=3 format=3 uid="uid://yq7vmijwvgx1"]
[gd_scene load_steps=4 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")]
script = ExtResource("2_1j38u")
avatarTexture = ExtResource("2_pnd3r")
displayName = "酸蚀风暴"
quality = 4
typeTopic = 3
costBeachball = 200
store = {
"atk": 5,
"atk": 0.5,
"c-atk": 1.0,
"cl-atkspeed": 0.02,
"cl-speed": 0.03,
"n-atk": 5.0,
"p-offset": 2.0,
"cl-atkspeed": 0.001,
"cl-speed": 0.001,
"n-atk": 1.0,
"p-offset": 0.1,
"s-count-max": 3.0,
"weakatk": 1.0
"weakatk": 0.25
}
storeType = {
"atk": 1,
"atk": 0,
"c-atk": 1,
"cl-atkspeed": 2,
"cl-speed": 2,
"n-atk": 1,
"p-offset": 3,
"s-count-max": 1,
"weakatk": 1
"weakatk": 0
}
descriptionTemplate = "高速随机喷射以下五种[b]酸[/b]之一,强酸可造成$atk点伤害,弱酸造成$weakatk点伤害。
[color=green][b]硫酸[/b][/color]:命中时溅射1~$s-count-max滴[b]硫酸[/b]。
[color=lightblue][b]硝酸[/b][/color]:额外造成$n-atk点伤害。
[color=lightyellow][b]盐酸[/b][/color]:使敌人 [i]移动速度[/i] 降低$cl-speed[i]攻击速度[/i] 降低$cl-atkspeed。
[color=pink][b]碳酸[/b][/color]命中时挥发为气体向前扩散,敌人接触造成$c-atk点伤害,可无限穿透。
[color=pink][b]碳酸[/b][/color]:可无限穿透,碰撞体积会越来越大,但飞行速度稍慢且有额外散射
[color=orange][b]磷酸[/b][/color]:使敌人 [i]散射角[/i] 增加$p-offset。"
cooldown = 10.0
cooldown = 0.0
debugRebuild = true
[node name="avatar" parent="container/info" index="0"]
@@ -50,9 +52,9 @@ quality = 4
typeTopic = 3
[node name="description" parent="container" index="2"]
text = "[center]高速随机喷射以下五种[b]酸[/b]之一,强酸可造成[color=cyan]5[/color]点伤害,弱酸造成[color=cyan]1[/color]点伤害。
text = "[center]高速随机喷射以下五种[b]酸[/b]之一,强酸可造成[color=cyan]0.50[/color]点伤害,弱酸造成[color=cyan]0.25[/color]点伤害。
[color=green][b]硫酸[/b][/color]:命中时溅射1~[color=cyan]3[/color]滴[b]硫酸[/b]。
[color=lightblue][b]硝酸[/b][/color]:额外造成[color=cyan]5[/color]点伤害。
[color=lightyellow][b]盐酸[/b][/color]:使敌人 [i]移动速度[/i] 降低[color=cyan]3%[/color][i]攻击速度[/i] 降低[color=cyan]2%[/color]。
[color=pink][b]碳酸[/b][/color]命中时挥发为气体向前扩散,敌人接触造成[color=cyan]1[/color]点伤害,可无限穿透。
[color=orange][b]磷酸[/b][/color]:使敌人 [i]散射角[/i] 增加[color=cyan]2.0°[/color]。[/center]"
[color=lightblue][b]硝酸[/b][/color]:额外造成[color=cyan]1[/color]点伤害。
[color=lightyellow][b]盐酸[/b][/color]:使敌人 [i]移动速度[/i] 降低[color=cyan]0.1%[/color][i]攻击速度[/i] 降低[color=cyan]0.1%[/color]。
[color=pink][b]碳酸[/b][/color]:可无限穿透,碰撞体积会越来越大,但飞行速度稍慢且有额外散射
[color=orange][b]磷酸[/b][/color]:使敌人 [i]散射角[/i] 增加[color=cyan]0.1°[/color]。[/center]"
-58
View File
@@ -1,58 +0,0 @@
[gd_scene load_steps=3 format=3 uid="uid://di00g0wvglc8f"]
[ext_resource type="PackedScene" uid="uid://ckq2cq6m23hq3" path="res://components/Abstracts/WeaponCardBase.tscn" id="1_oxen4"]
[ext_resource type="Texture2D" uid="uid://ckr8tw7fsa7qx" path="res://resources/weapons/AcidWind.png" id="2_nvjyi"]
[node name="AcidWind" instance=ExtResource("1_oxen4")]
avatarTexture = ExtResource("2_nvjyi")
displayName = "酸蚀风暴"
quality = 4
typeTopic = 3
costBeachball = 200
store = {
"atk": 5,
"c-atk": 1.0,
"cl-atkspeed": 0.02,
"cl-speed": 0.03,
"n-atk": 5.0,
"p-offset": 2.0,
"s-count-max": 3.0,
"weakatk": 1.0
}
storeType = {
"atk": 1,
"c-atk": 1,
"cl-atkspeed": 2,
"cl-speed": 2,
"n-atk": 1,
"p-offset": 3,
"s-count-max": 1,
"weakatk": 1
}
descriptionTemplate = "高速随机喷射以下五种[b]酸[/b]之一,强酸可造成$atk点伤害,弱酸造成$weakatk点伤害。
[color=green][b]硫酸[/b][/color]:命中时溅射1~$s-count-max滴[b]硫酸[/b]。
[color=lightblue][b]硝酸[/b][/color]:额外造成$n-atk点伤害。
[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。"
cooldown = 10.0
debugRebuild = true
[node name="avatar" parent="container/info" index="0"]
texture = ExtResource("2_nvjyi")
[node name="beachball" parent="container/info/infos" index="1"]
count = 200
[node name="name" parent="container/info" index="2"]
displayName = "酸蚀风暴"
quality = 4
typeTopic = 3
[node name="description" parent="container" index="2"]
text = "[center]高速随机喷射以下五种[b]酸[/b]之一,强酸可造成[color=cyan]5[/color]点伤害,弱酸造成[color=cyan]1[/color]点伤害。
[color=green][b]硫酸[/b][/color]:命中时溅射1~[color=cyan]3[/color]滴[b]硫酸[/b]。
[color=lightblue][b]硝酸[/b][/color]:额外造成[color=cyan]5[/color]点伤害。
[color=lightyellow][b]盐酸[/b][/color]:使敌人 [i]移动速度[/i] 降低[color=cyan]3%[/color][i]攻击速度[/i] 降低[color=cyan]2%[/color]。
[color=pink][b]碳酸[/b][/color]:命中时挥发为气体向前扩散,敌人接触造成[color=cyan]1[/color]点伤害,可无限穿透。
[color=orange][b]磷酸[/b][/color]:使敌人 [i]散射角[/i] 增加[color=cyan]2.0°[/color]。[/center]"
Binary file not shown.

After

Width:  |  Height:  |  Size: 409 B

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://b47ixncbxcs4u"
path="res://.godot/imported/template.png-5548fd3d6b9360eba28bb81cdcc9e388.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://resources/bullets/acids/template.png"
dest_files=["res://.godot/imported/template.png-5548fd3d6b9360eba28bb81cdcc9e388.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
@@ -0,0 +1,17 @@
extends BulletBase
class_name AcidBulletBase
enum AcidType {
STRONG,
WEAK,
}
@export var acidType: AcidType = AcidType.STRONG
var arg1: float = 0
var arg2: float = 0
var arg3: float = 0
func register():
scale.y *= MathTool.randomChoiceFrom([-1, 1])
func ai():
PresetBulletAI.forward(self, rotation)
@@ -0,0 +1 @@
uid://wt1fn2vjtlen
+7
View File
@@ -0,0 +1,7 @@
extends AcidBulletBase
class_name AcidC
func ai():
super.ai()
scale *= 1.01
modulate.a = 1 - timeLived() / lifeTime
+1
View File
@@ -0,0 +1 @@
uid://8h8e35gwre27
+6
View File
@@ -0,0 +1,6 @@
extends AcidBulletBase
class_name AcidCl
func succeedToHit(_dmg: float, entity: EntityBase):
entity.fields[FieldStore.Entity.MOVEMENT_SPEED] = clamp(entity.fields[FieldStore.Entity.MOVEMENT_SPEED] - arg1, 0.15, INF)
entity.fields[FieldStore.Entity.ATTACK_SPEED] = clamp(entity.fields[FieldStore.Entity.ATTACK_SPEED] - arg2, 0.15, INF)
+1
View File
@@ -0,0 +1 @@
uid://dp8e5samuurdn
+5
View File
@@ -0,0 +1,5 @@
extends AcidBulletBase
class_name AcidN
func succeedToHit(_dmg: float, entity: EntityBase):
entity.takeDamage(arg1)
+1
View File
@@ -0,0 +1 @@
uid://ccjdi34ney8kl
+5
View File
@@ -0,0 +1,5 @@
extends AcidBulletBase
class_name AcidP
func succeedToHit(_dmg: float, entity: EntityBase):
entity.fields[FieldStore.Entity.OFFSET_SHOOT] = clamp(entity.fields[FieldStore.Entity.OFFSET_SHOOT] + arg1, 0, INF)
+1
View File
@@ -0,0 +1 @@
uid://bef6n4hwn1niu
+8
View File
@@ -0,0 +1,8 @@
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
+1
View File
@@ -0,0 +1 @@
uid://dm4hwimsk8tx2
+38
View File
@@ -0,0 +1,38 @@
@tool
extends Weapon
var acids: Array[String] = ["AcidS", "AcidN", "AcidCl", "AcidP", "AcidC"]
func update(to: int, origin: Dictionary, _entity: EntityBase):
origin["atk"] += 0.05 * to * soulLevel
origin["c-atk"] *= soulLevel
origin["cl-atkspeed"] *= soulLevel
origin["cl-speed"] *= soulLevel
origin["n-atk"] *= soulLevel
origin["p-offset"] *= soulLevel
origin["s-count-max"] *= soulLevel
origin["weakatk"] = 0.025 * soulLevel
return origin
func attack(entity: EntityBase):
for bullet in BulletBase.generate(
ComponentManager.getBullet(MathTool.randomChoiceFrom(acids)),
entity,
entity.findWeaponAnchor("normal"),
(get_global_mouse_position() - entity.findWeaponAnchor("normal")).angle()
):
if bullet is AcidBulletBase:
if bullet.acidType == AcidBulletBase.AcidType.STRONG:
bullet.baseDamage = readStore("atk")
else:
bullet.baseDamage = readStore("weakatk")
if bullet is AcidS:
bullet.arg1 = readStore("s-count-max")
if bullet is AcidN:
bullet.arg1 = readStore("n-atk")
if bullet is AcidCl:
bullet.arg1 = readStore("cl-speed")
bullet.arg2 = readStore("cl-atkspeed")
if bullet is AcidP:
bullet.arg1 = readStore("p-offset")
if bullet is AcidC:
bullet.rotation += deg_to_rad(randf_range(-1, 1) * 15)
+1
View File
@@ -0,0 +1 @@
uid://bxa5hc7aokisg
+1 -1
View File
@@ -130,7 +130,7 @@ func formatValue(value: Variant, type: FieldStore.DataType) -> String:
elif type == FieldStore.DataType.INTEGER:
return "%d" % value
elif type == FieldStore.DataType.PERCENT:
return ("%d" % (value * 100)) + "%"
return ("%.1f" % (value * 100)) + "%"
elif type == FieldStore.DataType.ANGLE:
return "%.1f°" % value
elif type == FieldStore.DataType.FREQUENCY: