1
1
mirror of https://github.com/Rundll86/Dog-Lynx-And-HCN.git synced 2026-06-03 18:27:13 +08:00

feat(子弹系统): 重构伤害计算并添加音效

将子弹的伤害属性从`damage`重命名为`baseDamage`,并引入`damageMultipliers`数组支持多段伤害
为火山武器添加三段攻击音效并调整伤害倍率
更新相关武器和子弹脚本以适配新的伤害系统
This commit is contained in:
2025-11-22 08:42:51 +08:00
parent b263122a52
commit 46ea2fc775
28 changed files with 145 additions and 31 deletions
+1 -1
View File
@@ -18,7 +18,7 @@ func ai():
trail.emitting = true
hitbox.disabled = false
speed = (1 - lifeDistancePercent()) * initialSpeed
damage = speed * atk
baseDamage = speed * atk
PresetBulletAI.forward(self, rotation)
if speed < 1:
tryDestroy()
+1 -1
View File
@@ -9,7 +9,7 @@ func register():
func spawn():
CameraManager.shake(5000, 100) # 激光会运行5秒(5000毫秒),期间震屏超高强度
CameraManager.playAnimation("bigLaser")
damage *= launcher.fields[FieldStore.Entity.ATTACK_SPEED]
baseDamage *= launcher.fields[FieldStore.Entity.ATTACK_SPEED]
func ai():
rotation = lerp_angle(rotation, ((get_global_mouse_position() - position).angle()), 0.1)
position = launcher.texture.global_position
@@ -13,7 +13,7 @@ var forwarded: bool = false
func register():
speed = 1
damage = 1
baseDamage = 1
func spawn():
myColor = allColor.gradient.sample(randf())
superlight.material = superlight.material.duplicate()
@@ -5,7 +5,7 @@ extends BulletBase
var myColor: Color
func register():
damage = 1
baseDamage = 1
penerate = 1
func spawn():
myColor = allColor.gradient.sample(randf())
@@ -10,7 +10,7 @@ extends BulletBase
var myColor: Color
func register():
speed = 1
damage = 1
baseDamage = 1
penerate = 1
func spawn():
myColor = allColor.gradient.sample(randf())
@@ -11,7 +11,7 @@ var myColor: Color
func register():
speed = 0
damage = 1
baseDamage = 1
penerate = 1
func spawn():
myColor = allColor.gradient.sample(randf())
@@ -15,5 +15,5 @@ func ai():
track.visible = false
hitbox.disabled = false
PresetBulletAI.forward(self, rotation)
damage = speed / 5
baseDamage = speed / 5
speed *= 1.15
+1 -1
View File
@@ -8,7 +8,7 @@ var splits: float = 10.0
func spawn():
for j in count:
for i in BulletBase.generate(ComponentManager.getBullet("PurpleCrystalSmall"), launcher, anchor.global_position, rotation):
i.damage = damage
i.damage = baseDamage
var dir = Vector2.from_angle(i.rotation).rotated(deg_to_rad(-90))
i.global_position += dir * (count - j * 2) * splits / 2
func ai():
+1 -1
View File
@@ -7,7 +7,7 @@ func register():
speed = 0
penerate = 1
func ai():
damage = launcher.velocity.length() / 500 * atk
baseDamage = launcher.velocity.length() / 500 * atk
PresetBulletAI.lockLauncher(self, launcher, true)
if !launcher.sprinting:
tryDestroy()
+1 -1
View File
@@ -4,7 +4,7 @@ class_name Diamond
const traceTime = 1500
func register():
damage = 2
baseDamage = 2
func ai():
PresetBulletAI.forward(self, rotation)
if timeLived() < traceTime:
+1 -1
View File
@@ -2,7 +2,7 @@ extends BulletBase
class_name Pencil
func register():
damage = 20
baseDamage = 20
func spawn():
await TickTool.millseconds(1000)
hitbox.disabled = false
+1 -1
View File
@@ -20,7 +20,7 @@ func register():
func(area):
var bullet = BulletTool.fromArea(area)
if bullet and BulletTool.canDamage(bullet, launcher):
launcher.storeEnergy(damage * 2)
launcher.storeEnergy(baseDamage * 2)
)
func spawn():
modulate = Color(colors[index % colors.size()])
+1 -1
View File
@@ -2,6 +2,6 @@ extends BulletBase
class_name Star
func register():
damage = 1
baseDamage = 1
func ai():
PresetBulletAI.forward(self, rotation)
+1 -1
View File
@@ -25,4 +25,4 @@ func generateShadow():
false, false, true, true
):
if i is VolcanoShadow:
i.damage = damage
i.baseDamage = baseDamage
+1 -1
View File
@@ -11,5 +11,5 @@ func attack(entity: EntityBase):
for bullet in BulletBase.generate(ComponentManager.getBullet("BigLaser"), entity, weaponPos, (get_global_mouse_position() - weaponPos).angle()):
var bigLaser: BigLaser = bullet
bigLaser.dotTime = readStore("time") * 1000
bigLaser.damage = readStore("atk")
bigLaser.baseDamage = readStore("atk")
return true
+1 -1
View File
@@ -10,7 +10,7 @@ func attack(entity: EntityBase):
var weaponPos = entity.findWeaponAnchor("normal")
for j in BulletBase.generate(ComponentManager.getBullet("MushroomPickaxe"), entity, entity.texture.global_position, weaponPos.angle_to_point(get_global_mouse_position())):
var bullet: MushroomPickaxe = j
bullet.damage = readStore("atk")
bullet.baseDamage = readStore("atk")
bullet.rate = readStore("rate")
bullet.count = readStore("count")
return true
+1 -1
View File
@@ -9,6 +9,6 @@ func attack(entity: EntityBase):
var weaponPos = entity.findWeaponAnchor("normal")
for j in BulletBase.generate(ComponentManager.getBullet("NuclearBomb"), entity, weaponPos, weaponPos.angle_to_point(get_global_mouse_position())):
var bullet: NuclearBomb = j
bullet.damage = readStore("atk")
bullet.baseDamage = readStore("atk")
bullet.radius = readStore("radius")
return true
+1 -1
View File
@@ -13,7 +13,7 @@ func attack(entity: EntityBase):
for i in range(int(randi_range(readStore("mincount"), readStore("maxcount")))):
for j in BulletBase.generate(ComponentManager.getBullet("VectorStar"), entity, weaponPos, deg_to_rad(randf_range(0, 360))):
var bullet: VectorStar = j
bullet.damage = readStore("atk")
bullet.baseDamage = readStore("atk")
bullet.tracer = EntityTool.findClosetEntity(get_global_mouse_position(), get_tree(), !entity.isPlayer(), entity.isPlayer())
bullet.forwardTime = readStore("forwardtime") * 1000
return true
+7 -2
View File
@@ -2,7 +2,11 @@
extends Weapon
func update(to: int, origin: Dictionary, _entity: EntityBase):
origin["rotate"] += 0.015 * to * soulLevel
origin["rotate"] += 0.005 * to * soulLevel
origin["dmg1"] += 0.03 * to * soulLevel
origin["dmg2"] += 0.03 * to * soulLevel
origin["dmg3"] += 0.03 * to * soulLevel
origin["atk"] += 1 * to * soulLevel
return origin
func attack(entity: EntityBase):
for j in BulletBase.generate(
@@ -12,5 +16,6 @@ func attack(entity: EntityBase):
entity.position.angle_to_point(entity.get_global_mouse_position()), false, false, true, true
):
var bullet: Volcano = j
bullet.damage = readStore("atk")
bullet.baseDamage = readStore("atk")
bullet.rotates = readStore("rotate")
bullet.damageMultipliers = [readStore("dmg1"), readStore("dmg2"), readStore("dmg3")]