1
1
mirror of https://github.com/Rundll86/Dog-Lynx-And-HCN.git synced 2026-05-30 07:51:54 +08:00

feat(子弹系统): 新增道里和母体子弹资源及音效

添加新的子弹资源包括道里(daoli)和母体(mother)的图片,以及相关音效文件(sddl.wav和xiangkan.wav)
为Deepsea角色调整攻击冷却时间并添加攻击音效
优化Wood子弹的行为逻辑,增加子弹发射效果
新增BlockWall子弹类型及其资源文件
This commit is contained in:
2026-04-05 19:42:05 +08:00
parent d46162e754
commit 1a78d5b82b
17 changed files with 387 additions and 5 deletions
+20
View File
@@ -0,0 +1,20 @@
[gd_scene format=3 uid="uid://cch4xtc70ad5c"]
[ext_resource type="PackedScene" uid="uid://crtdkysmnkith" path="res://components/Abstracts/BulletBase.tscn" id="1_3kq6o"]
[ext_resource type="Texture2D" uid="uid://cqcakyrw4vbfn" path="res://resources/bullets/blockwall/blockwall.svg" id="2_k65pw"]
[sub_resource type="SpriteFrames" id="SpriteFrames_3x2nv"]
animations = [{
"frames": [{
"duration": 1.0,
"texture": ExtResource("2_k65pw")
}],
"loop": true,
"name": &"default",
"speed": 5.0
}]
[node name="BulletBase" unique_id=5571707 instance=ExtResource("1_3kq6o")]
[node name="texture" parent="." index="0" unique_id=162977358]
sprite_frames = SubResource("SpriteFrames_3x2nv")
+28
View File
@@ -0,0 +1,28 @@
[gd_scene format=3 uid="uid://b6ysa5wejv2hd"]
[ext_resource type="PackedScene" uid="uid://crtdkysmnkith" path="res://components/Abstracts/BulletBase.tscn" id="1_tgmam"]
[ext_resource type="Texture2D" uid="uid://dp6memu16bc7b" path="res://resources/bullets/wood/daoli.png" id="2_cl8cv"]
[sub_resource type="SpriteFrames" id="SpriteFrames_odnqa"]
animations = [{
"frames": [{
"duration": 1.0,
"texture": ExtResource("2_cl8cv")
}],
"loop": true,
"name": &"default",
"speed": 5.0
}]
[sub_resource type="CircleShape2D" id="CircleShape2D_21d8r"]
radius = 18.0
[node name="Daoli" unique_id=5571707 instance=ExtResource("1_tgmam")]
[node name="texture" parent="." index="0" unique_id=162977358]
scale = Vector2(0.07520806, 0.07520806)
sprite_frames = SubResource("SpriteFrames_odnqa")
[node name="hitbox" parent="." index="1" unique_id=175349408]
position = Vector2(4, 4)
shape = SubResource("CircleShape2D_21d8r")
+136
View File
@@ -3,6 +3,9 @@
[ext_resource type="PackedScene" uid="uid://crtdkysmnkith" path="res://components/Abstracts/BulletBase.tscn" id="1_yfmqu"]
[ext_resource type="Script" uid="uid://bkopn3gee3qp1" path="res://scripts/Contents/Bullets/Wood.gd" id="2_f5eiv"]
[ext_resource type="Texture2D" uid="uid://bols4gt28y3a" path="res://resources/bullets/wood/wood.png" id="3_dol0b"]
[ext_resource type="AudioStream" uid="uid://lwsltsv0tk0t" path="res://resources/sounds/effect/xiangkan.wav" id="4_7fjhq"]
[ext_resource type="Texture2D" uid="uid://chn486hoa86bs" path="res://resources/bullets/wood/mother.png" id="4_dth5r"]
[ext_resource type="Texture2D" uid="uid://dp6memu16bc7b" path="res://resources/bullets/wood/daoli.png" id="5_8j03k"]
[sub_resource type="SpriteFrames" id="SpriteFrames_dth5r"]
animations = [{
@@ -15,6 +18,106 @@ animations = [{
"speed": 5.0
}]
[sub_resource type="Animation" id="Animation_7i45i"]
resource_name = "destroy"
length = 0.5
step = 0.1
[sub_resource type="Animation" id="Animation_vvrml"]
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": [0.0, 6.28319]
}
[sub_resource type="Animation" id="Animation_7cf0r"]
resource_name = "spawn"
[sub_resource type="Animation" id="Animation_0q72p"]
resource_name = "xiangkan"
length = 2.0
step = 0.1
tracks/0/type = "audio"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("audio")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"clips": [{
"end_offset": 0.0,
"start_offset": 0.0,
"stream": ExtResource("4_7fjhq")
}],
"times": PackedFloat32Array(0)
}
tracks/0/use_blend = true
[sub_resource type="AnimationLibrary" id="AnimationLibrary_vaf4v"]
_data = {
&"destroy": SubResource("Animation_7i45i"),
&"loop": SubResource("Animation_vvrml"),
&"spawn": SubResource("Animation_7cf0r"),
&"xiangkan": SubResource("Animation_0q72p")
}
[sub_resource type="Curve" id="Curve_dol0b"]
_data = [Vector2(0, 0), 0.0, 0.0, 0, 0, Vector2(0.1, 1), 0.0, 0.0, 0, 0, Vector2(0.5, 1), 0.0, 0.0, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0]
point_count = 4
[sub_resource type="CurveTexture" id="CurveTexture_dth5r"]
curve = SubResource("Curve_dol0b")
[sub_resource type="Curve" id="Curve_8j03k"]
_data = [Vector2(0, 1), 0.0, 0.0, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0]
point_count = 2
[sub_resource type="CurveTexture" id="CurveTexture_7fjhq"]
curve = SubResource("Curve_8j03k")
[sub_resource type="Gradient" id="Gradient_7i45i"]
colors = PackedColorArray(1, 0, 0, 1, 1, 0.8451766, 0, 1)
[sub_resource type="GradientTexture1D" id="GradientTexture1D_vvrml"]
gradient = SubResource("Gradient_7i45i")
[sub_resource type="Curve" id="Curve_7cf0r"]
_data = [Vector2(0.5, 1), 0.0, 0.0, 0, 0, Vector2(1, 0.1), 0.0, 0.0, 0, 0]
point_count = 2
[sub_resource type="CurveTexture" id="CurveTexture_0q72p"]
curve = SubResource("Curve_7cf0r")
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_vaf4v"]
particle_flag_disable_z = true
emission_shape = 1
emission_sphere_radius = 50.0
angle_min = 1.0728835e-05
angle_max = 360.00003
angle_curve = SubResource("CurveTexture_7fjhq")
direction = Vector3(-1, 0, 0)
spread = 0.0
initial_velocity_min = 200.0
initial_velocity_max = 500.0
gravity = Vector3(0, 0, 0)
radial_accel_min = -100.0
radial_accel_max = -100.0
scale_min = 10.0
scale_max = 20.0
scale_curve = SubResource("CurveTexture_0q72p")
color_initial_ramp = SubResource("GradientTexture1D_vvrml")
alpha_curve = SubResource("CurveTexture_dth5r")
[sub_resource type="RectangleShape2D" id="RectangleShape2D_8j03k"]
size = Vector2(244, 32)
@@ -23,10 +126,43 @@ script = ExtResource("2_f5eiv")
displayName = "浮木"
penerate = 1.0
lifeTime = 5000.0
metadata/_edit_vertical_guides_ = [200.0, -260.0]
[node name="texture" parent="." index="0" unique_id=162977358]
scale = Vector2(0.4, 0.4)
sprite_frames = SubResource("SpriteFrames_dth5r")
[node name="animator" parent="texture" index="0" unique_id=1114087117]
libraries/ = SubResource("AnimationLibrary_vaf4v")
[node name="audio" parent="texture" index="1" unique_id=1167114186]
max_distance = 10000.0
[node name="trail" type="GPUParticles2D" parent="texture" index="2" unique_id=1380786582]
z_index = 1
position = Vector2(-322.50006, -10.000002)
amount = 150
local_coords = true
process_material = SubResource("ParticleProcessMaterial_vaf4v")
[node name="mother" type="Node2D" parent="texture" index="3" unique_id=673246472]
unique_name_in_owner = true
scale = Vector2(0.99999994, 0.99999994)
[node name="motherStatic" type="Sprite2D" parent="texture/mother" index="0" unique_id=1786534151]
position = Vector2(0, -170.00002)
scale = Vector2(0.24794728, 0.24794728)
texture = ExtResource("4_dth5r")
[node name="daoli" type="Node2D" parent="texture" index="4" unique_id=1077452115]
unique_name_in_owner = true
position = Vector2(222.5, 0)
scale = Vector2(0.99999994, 0.99999994)
[node name="daoliStatic" type="Sprite2D" parent="texture/daoli" index="0" unique_id=1212418046]
position = Vector2(0, -92.5)
scale = Vector2(0.18411627, 0.18411627)
texture = ExtResource("5_8j03k")
[node name="hitbox" parent="." index="1" unique_id=175349408]
shape = SubResource("RectangleShape2D_8j03k")
+5
View File
@@ -3,6 +3,7 @@
[ext_resource type="PackedScene" uid="uid://cvogxi7mktumf" path="res://components/Abstracts/EntityBase.tscn" id="1_g8my0"]
[ext_resource type="Script" uid="uid://be0o0iwf26hvx" path="res://scripts/Contents/Characters/Deepsea.gd" id="2_1qdp4"]
[ext_resource type="Texture2D" uid="uid://c6kpcsu1yohak" path="res://resources/characters/deepsea/0.png" id="2_5y3f7"]
[ext_resource type="AudioStream" uid="uid://b5tswrcvrd3js" path="res://resources/sounds/effect/sddl.wav" id="3_hk3hc"]
[sub_resource type="SpriteFrames" id="SpriteFrames_5y3f7"]
animations = [{
@@ -24,6 +25,10 @@ size = Vector2(165, 349)
script = ExtResource("2_1qdp4")
displayName = "深海"
[node name="attack1" type="AudioStreamPlayer2D" parent="sounds" index="7" unique_id=1216852444]
stream = ExtResource("3_hk3hc")
volume_db = 5.0
[node name="texture" parent="." index="3"]
sprite_frames = SubResource("SpriteFrames_5y3f7")
@@ -0,0 +1 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="135.65107" height="135.65107" viewBox="0,0,135.65107,135.65107"><g transform="translate(-215.66196,-141.65862)"><g fill-opacity="0.50196" fill="#ff9b87" stroke="#ff9b86" stroke-width="3" stroke-miterlimit="10"><path d="M217.16197,275.80969v-132.65107h132.65107v132.65107z"/></g></g></svg><!--rotationCenter:24.33803499999999:38.34137999999999-->

After

Width:  |  Height:  |  Size: 449 B

@@ -0,0 +1,43 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cqcakyrw4vbfn"
path="res://.godot/imported/blockwall.svg-184482e9533ab61f4cc5d6105129e900.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://resources/bullets/blockwall/blockwall.svg"
dest_files=["res://.godot/imported/blockwall.svg-184482e9533ab61f4cc5d6105129e900.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
svg/scale=1.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false
Binary file not shown.

After

Width:  |  Height:  |  Size: 187 KiB

+40
View File
@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dp6memu16bc7b"
path="res://.godot/imported/daoli.png-f771eac8a350ac407156a2c50b8e0c26.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://resources/bullets/wood/daoli.png"
dest_files=["res://.godot/imported/daoli.png-f771eac8a350ac407156a2c50b8e0c26.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
Binary file not shown.

After

Width:  |  Height:  |  Size: 610 KiB

+40
View File
@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://chn486hoa86bs"
path="res://.godot/imported/mother.png-0c772c2962e357099e72b539c446a5e7.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://resources/bullets/wood/mother.png"
dest_files=["res://.godot/imported/mother.png-0c772c2962e357099e72b539c446a5e7.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
Binary file not shown.
+24
View File
@@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://b5tswrcvrd3js"
path="res://.godot/imported/sddl.wav-8fa1e14d07753ba380d691c1f3ea590c.sample"
[deps]
source_file="res://resources/sounds/effect/sddl.wav"
dest_files=["res://.godot/imported/sddl.wav-8fa1e14d07753ba380d691c1f3ea590c.sample"]
[params]
force/8_bit=false
force/mono=false
force/max_rate=false
force/max_rate_hz=44100
edit/trim=false
edit/normalize=false
edit/loop_mode=0
edit/loop_begin=0
edit/loop_end=-1
compress/mode=2
Binary file not shown.
@@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://lwsltsv0tk0t"
path="res://.godot/imported/xiangkan.wav-5f54c2287f9a2499d18a3312aa54b2b8.sample"
[deps]
source_file="res://resources/sounds/effect/xiangkan.wav"
dest_files=["res://.godot/imported/xiangkan.wav-5f54c2287f9a2499d18a3312aa54b2b8.sample"]
[params]
force/8_bit=false
force/mono=false
force/max_rate=false
force/max_rate_hz=44100
edit/trim=false
edit/normalize=false
edit/loop_mode=0
edit/loop_begin=0
edit/loop_end=-1
compress/mode=2
+21 -1
View File
@@ -2,12 +2,32 @@ extends BulletBase
class_name WoodBullet
var speedV2: Vector2 = Vector2.ZERO
var shooted: bool = false
@onready var mother: Node2D = $%mother
@onready var daoli: Node2D = $%daoli
func spawn():
speedV2 = Vector2.from_angle(rotation) * 10
func ai():
mother.global_rotation = 0
daoli.global_rotation = 0
if is_instance_valid(launcher.currentFocusedBoss):
speedV2 += (launcher.currentFocusedBoss.position - launcher.position).normalized() * 1
speedV2 += (launcher.currentFocusedBoss.position - launcher.position).normalized() * 1.0
speed = speedV2.length() / 2.0
rotation = speedV2.angle()
PresetBulletAI.forward(self , rotation)
if !shooted && launcher.currentFocusedBoss.position.distance_to(daoli.global_position) < 300:
animator.play("xiangkan")
for i in randf_range(2, 6):
for bullet in BulletBase.generate(
ComponentManager.getBullet("Diamond"),
launcher,
daoli.global_position + MathTool.sampleInCircle(20),
0
):
if bullet is Diamond:
bullet.look_at(launcher.currentFocusedBoss.position)
bullet.rotation += deg_to_rad(180)
bullet.rotation += deg_to_rad(randf_range(-1, 1) * 45)
shooted = true
+3 -2
View File
@@ -5,8 +5,8 @@ func register():
fields[FieldStore.Entity.MAX_HEALTH] = 2000
fields[FieldStore.Entity.MOVEMENT_SPEED] = 0.9
fields[FieldStore.Entity.OFFSET_SHOOT] = 2
attackCooldownMap[0] = 1000
attackCooldownMap[1] = 2000
attackCooldownMap[0] = 2000
attackCooldownMap[1] = 5000
func ai():
PresetEntityAI.follow(self , currentFocusedBoss)
for i in 2:
@@ -17,3 +17,4 @@ func attack(type: int):
elif type == 1:
for i in 3:
BulletBase.generate(ComponentManager.getBullet("Wood"), self , position, position.angle_to_point(currentFocusedBoss.position) + i * deg_to_rad(20))
return true
+2 -2
View File
@@ -49,8 +49,8 @@ static var WAVE_TESTBOSS_CHICK = [
Wave.create("Chick", 0, 0, true, 0, INF, 1),
]
static var WAVE_JUSTJOKE = [
Wave.create("Kernyr", 0, 0, true, 0, INF, 1),
Wave.create("CyberCat", 0, 0, true, 0, INF, 1),
# Wave.create("Kernyr", 0, 0, true, 0, INF, 1),
# Wave.create("CyberCat", 0, 0, true, 0, INF, 1),
Wave.create("Deepsea", 0, 0, true, 0, INF, 1)
]
static var WAVE_MOWING = [