diff --git a/components/Bullets/OxygenFire.tscn b/components/Bullets/OxygenFire.tscn new file mode 100644 index 0000000..a6ec9f1 --- /dev/null +++ b/components/Bullets/OxygenFire.tscn @@ -0,0 +1,169 @@ +[gd_scene load_steps=24 format=3 uid="uid://c54fnnvip38px"] + +[ext_resource type="PackedScene" uid="uid://crtdkysmnkith" path="res://components/Abstracts/BulletBase.tscn" id="1_0xy1l"] +[ext_resource type="Script" uid="uid://dpxfoyb33fo6t" path="res://scripts/Contents/Bullets/OxygenFire.gd" id="2_rnqn2"] +[ext_resource type="Texture2D" uid="uid://hk7rufcc8vb5" path="res://resources/bullets/oxygen-fire/full-circle.svg" id="3_aagwn"] + +[sub_resource type="Animation" id="Animation_e772m"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("particle:emitting") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} +tracks/1/type = "bezier" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("%texture/..:speed") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"handle_modes": PackedInt32Array(0), +"points": PackedFloat32Array(10, -0.25, 0, 0.25, 0), +"times": PackedFloat32Array(0) +} + +[sub_resource type="Animation" id="Animation_aagwn"] +resource_name = "spawn" +length = 2.0 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("particle:emitting") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/1/type = "bezier" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("%texture/..:speed") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"handle_modes": PackedInt32Array(0, 2), +"points": PackedFloat32Array(10, 0, 0, 2, 0, 0, 0, 0, 0, 0), +"times": PackedFloat32Array(0, 2) +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_qhva2"] +_data = { +&"RESET": SubResource("Animation_e772m"), +&"spawn": SubResource("Animation_aagwn") +} + +[sub_resource type="Curve" id="Curve_aagwn"] +_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_e772m"] +curve = SubResource("Curve_aagwn") + +[sub_resource type="Gradient" id="Gradient_qhva2"] +colors = PackedColorArray(1, 0.88550174, 0, 1, 1, 0, 0, 1) + +[sub_resource type="GradientTexture1D" id="GradientTexture1D_7krda"] +gradient = SubResource("Gradient_qhva2") + +[sub_resource type="Curve" id="Curve_qhva2"] +_limits = [0.0, 2.0, 0.0, 1.0] +_data = [Vector2(0, 1), 0.0, 0.0, 0, 0, Vector2(1, 2), 0.0, 0.0, 0, 0] +point_count = 2 + +[sub_resource type="CurveTexture" id="CurveTexture_7krda"] +curve = SubResource("Curve_qhva2") + +[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_e772m"] +particle_flag_disable_z = true +emission_shape = 1 +emission_sphere_radius = 28.0 +gravity = Vector3(0, 0, 0) +scale_min = 0.79999995 +scale_max = 1.1999999 +scale_curve = SubResource("CurveTexture_7krda") +color_ramp = SubResource("GradientTexture1D_7krda") +alpha_curve = SubResource("CurveTexture_e772m") + +[sub_resource type="Curve" id="Curve_e772m"] +_data = [Vector2(0.7, 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_qhva2"] +curve = SubResource("Curve_e772m") + +[sub_resource type="Curve" id="Curve_7krda"] +_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_yj8uh"] +curve = SubResource("Curve_7krda") + +[sub_resource type="Gradient" id="Gradient_aagwn"] +offsets = PackedFloat32Array(0.0047393367, 1) +colors = PackedColorArray(1, 0.7665578, 0, 1, 1, 0, 0, 1) + +[sub_resource type="GradientTexture1D" id="GradientTexture1D_e772m"] +gradient = SubResource("Gradient_aagwn") + +[sub_resource type="Curve" id="Curve_yj8uh"] +_data = [Vector2(0.5, 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_87sv1"] +curve = SubResource("Curve_yj8uh") + +[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_87sv1"] +particle_flag_disable_z = true +angle_min = 1.0728835e-05 +angle_max = 360.00003 +angle_curve = SubResource("CurveTexture_yj8uh") +spread = 180.0 +initial_velocity_max = 200.0 +gravity = Vector3(0, 0, 0) +scale_min = 4.0 +scale_max = 7.0 +scale_curve = SubResource("CurveTexture_87sv1") +color_initial_ramp = SubResource("GradientTexture1D_e772m") +alpha_curve = SubResource("CurveTexture_qhva2") + +[sub_resource type="CircleShape2D" id="CircleShape2D_aagwn"] +radius = 27.166155 + +[node name="OxygenFire" instance=ExtResource("1_0xy1l")] +script = ExtResource("2_rnqn2") +penerate = 1.0 +lifeTime = 1000.0 +autoSpawnAnimation = true +freeAfterSpawn = true + +[node name="animator" parent="texture" index="0"] +libraries = { +&"": SubResource("AnimationLibrary_qhva2") +} + +[node name="particle" type="GPUParticles2D" parent="texture" index="1"] +emitting = false +amount = 1 +texture = ExtResource("3_aagwn") +one_shot = true +local_coords = true +process_material = SubResource("ParticleProcessMaterial_e772m") + +[node name="sender" type="GPUParticles2D" parent="texture" index="2"] +amount = 50 +local_coords = true +process_material = SubResource("ParticleProcessMaterial_87sv1") + +[node name="hitbox" parent="." index="1"] +shape = SubResource("CircleShape2D_aagwn") diff --git a/components/Characters/Rooster.tscn b/components/Characters/Rooster.tscn index 630a0c0..1cdf7a4 100644 --- a/components/Characters/Rooster.tscn +++ b/components/Characters/Rooster.tscn @@ -1,8 +1,8 @@ -[gd_scene load_steps=13 format=3 uid="uid://bm7ymrri6pykb"] +[gd_scene load_steps=13 format=3 uid="uid://dky8574uqc18r"] [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://yq7vmijwvgx1" path="res://components/Weapons/AcidWind.tscn" id="3_da2ca"] +[ext_resource type="PackedScene" uid="uid://b5ebx8duvgtt5" path="res://components/Weapons/Oxygener.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="AcidWind" parent="weaponStore" index="0" instance=ExtResource("3_da2ca")] +[node name="Oxygener" parent="weaponStore" index="0" instance=ExtResource("3_da2ca")] debugRebuild = false [node name="sprint" parent="sounds" index="0"] diff --git a/components/UI/TipBox.tscn b/components/UI/TipBox.tscn index b11ccea..542cc0e 100644 --- a/components/UI/TipBox.tscn +++ b/components/UI/TipBox.tscn @@ -50,7 +50,7 @@ tracks/0/interp = 1 tracks/0/loop_wrap = true tracks/0/keys = { "handle_modes": PackedInt32Array(0, 0), -"points": PackedFloat32Array(1.0039918, 0, 0, 0.3, 1, 0, 0, 0.205, 0, 0), +"points": PackedFloat32Array(1.0039918, 0, 0, 0.3, 1.5, 0, 0, 0.205, 0, 0), "times": PackedFloat32Array(0, 0.3) } tracks/1/type = "value" @@ -60,7 +60,7 @@ tracks/1/path = NodePath(".:modulate") tracks/1/interp = 1 tracks/1/loop_wrap = true tracks/1/keys = { -"times": PackedFloat32Array(0.14, 0.3), +"times": PackedFloat32Array(0.21, 0.3), "transitions": PackedFloat32Array(1, 1), "update": 0, "values": [Color(1, 1, 1, 1), Color(1, 1, 1, 0)] @@ -78,7 +78,7 @@ tracks/0/interp = 1 tracks/0/loop_wrap = true tracks/0/keys = { "handle_modes": PackedInt32Array(0, 0), -"points": PackedFloat32Array(0, 0, 0, 0.2, 0, 1, -0.25, 0.5, 0, 0), +"points": PackedFloat32Array(0, 0, 0, 0, 0, 1, -0.2, 1, 0, 0), "times": PackedFloat32Array(0, 0.3) } tracks/1/type = "value" @@ -104,7 +104,6 @@ _data = { [node name="TipBox" type="PanelContainer"] offset_right = 79.0 offset_bottom = 34.0 -scale = Vector2(1, 2) theme_override_styles/panel = SubResource("StyleBoxFlat_nooq4") script = ExtResource("1_7vuk3") diff --git a/components/Weapons/Oxygener.tscn b/components/Weapons/Oxygener.tscn new file mode 100644 index 0000000..2044d1f --- /dev/null +++ b/components/Weapons/Oxygener.tscn @@ -0,0 +1,37 @@ +[gd_scene load_steps=4 format=3 uid="uid://b5ebx8duvgtt5"] + +[ext_resource type="PackedScene" uid="uid://ckq2cq6m23hq3" path="res://components/Abstracts/WeaponCardBase.tscn" id="1_8jd12"] +[ext_resource type="Script" uid="uid://bjraoa0lwchon" path="res://scripts/Contents/Weapons/Oxygener.gd" id="2_thqd2"] +[ext_resource type="Texture2D" uid="uid://gpwxs56alc7m" path="res://resources/weapons/oxygener.png" id="2_xmkcx"] + +[node name="Oxygener" instance=ExtResource("1_8jd12")] +script = ExtResource("2_thqd2") +avatarTexture = ExtResource("2_xmkcx") +displayName = "氧化加农炮" +quality = 0 +typeTopic = 2 +store = { +"atk": 10, +"fireatk": 2.0, +"max-n": 7.0, +"min-n": 3.0 +} +storeType = { +"atk": 1, +"fireatk": 1, +"max-n": 1, +"min-n": 1 +} +descriptionTemplate = "大概率高速喷出火焰,造成$fireatk点伤害。小概率喷出$min-n~$max-n滴[b]浓硝酸[/b],每滴造成$atk点伤害。" +cooldown = 50.0 + +[node name="avatar" parent="container/info" index="0"] +texture = ExtResource("2_xmkcx") + +[node name="name" parent="container/info" index="2"] +displayName = "氧化加农炮" +quality = 0 +typeTopic = 2 + +[node name="description" parent="container" index="2"] +text = "[center]大概率高速喷出火焰,造成[color=cyan]2[/color]点伤害。小概率喷出[color=cyan]3[/color]~[color=cyan]7[/color]滴[b]浓硝酸[/b],每滴造成[color=cyan]10[/color]点伤害。[/center]" diff --git a/resources/bullets/oxygen-fire/full-circle.svg b/resources/bullets/oxygen-fire/full-circle.svg new file mode 100644 index 0000000..476ca6e --- /dev/null +++ b/resources/bullets/oxygen-fire/full-circle.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/bullets/oxygen-fire/full-circle.svg.import b/resources/bullets/oxygen-fire/full-circle.svg.import new file mode 100644 index 0000000..ef15e85 --- /dev/null +++ b/resources/bullets/oxygen-fire/full-circle.svg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://hk7rufcc8vb5" +path="res://.godot/imported/full-circle.svg-27d949e74daf680a66365c8d402bedb2.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://resources/bullets/oxygen-fire/full-circle.svg" +dest_files=["res://.godot/imported/full-circle.svg-27d949e74daf680a66365c8d402bedb2.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 diff --git a/resources/weapons/oxygener.png b/resources/weapons/oxygener.png new file mode 100644 index 0000000..be111e0 Binary files /dev/null and b/resources/weapons/oxygener.png differ diff --git a/resources/weapons/oxygener.png.import b/resources/weapons/oxygener.png.import new file mode 100644 index 0000000..03f03f5 --- /dev/null +++ b/resources/weapons/oxygener.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://gpwxs56alc7m" +path="res://.godot/imported/oxygener.png-9562807acaf7863f7d9eadae19d1bc70.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://resources/weapons/oxygener.png" +dest_files=["res://.godot/imported/oxygener.png-9562807acaf7863f7d9eadae19d1bc70.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 diff --git a/scripts/Contents/Bullets/OxygenFire.gd b/scripts/Contents/Bullets/OxygenFire.gd new file mode 100644 index 0000000..1f4dffb --- /dev/null +++ b/scripts/Contents/Bullets/OxygenFire.gd @@ -0,0 +1,5 @@ +extends BulletBase +class_name OxygenFire + +func ai(): + PresetBulletAI.forward(self, rotation) diff --git a/scripts/Contents/Bullets/OxygenFire.gd.uid b/scripts/Contents/Bullets/OxygenFire.gd.uid new file mode 100644 index 0000000..c593a4a --- /dev/null +++ b/scripts/Contents/Bullets/OxygenFire.gd.uid @@ -0,0 +1 @@ +uid://dpxfoyb33fo6t diff --git a/scripts/Contents/Wave.gd b/scripts/Contents/Wave.gd index c545771..a9b0ef0 100644 --- a/scripts/Contents/Wave.gd +++ b/scripts/Contents/Wave.gd @@ -22,7 +22,7 @@ func duplicate() -> Wave: wave.per = per return wave -static var current: int = startWith(1) if WorldManager.isRelease() else startWith(10) +static var current: int = startWith(1) if WorldManager.isRelease() else startWith(1) static var WAVE_NORMAL = [ Wave.create("Hen", 1, 3, false, 0, INF, 1), Wave.create("Cat", 1, 5, false, 0, INF, 1), diff --git a/scripts/Contents/Weapons/Oxygener.gd b/scripts/Contents/Weapons/Oxygener.gd new file mode 100644 index 0000000..f3abbd1 --- /dev/null +++ b/scripts/Contents/Weapons/Oxygener.gd @@ -0,0 +1,21 @@ +@tool +extends Weapon + +func update(to: int, origin: Dictionary, _entity: EntityBase): + origin["atk"] += 1 * to * soulLevel + origin["fireatk"] += 0.5 * to * soulLevel + origin["max-n"] *= soulLevel + return origin +func attack(entity: EntityBase): + var bulletName = MathTool.randomChoiceFromWeights(["OxygenFire", "AcidN"], [100, 1]) + for i in randi_range(readStore("min-n"), readStore("max-n")) if bulletName == "AcidN" else 1: + for bullet in BulletBase.generate( + ComponentManager.getBullet(bulletName), + entity, + entity.findWeaponAnchor("normal"), + entity.position.angle_to_point(get_global_mouse_position()), + ): + if bullet is OxygenFire: + bullet.baseDamage = readStore("fireatk") + elif bullet is AcidN: + bullet.baseDamage = readStore("atk") diff --git a/scripts/Contents/Weapons/Oxygener.gd.uid b/scripts/Contents/Weapons/Oxygener.gd.uid new file mode 100644 index 0000000..75f6c9f --- /dev/null +++ b/scripts/Contents/Weapons/Oxygener.gd.uid @@ -0,0 +1 @@ +uid://bjraoa0lwchon