Enemy boosting, laser testing

This commit is contained in:
ToasterPanic 2025-12-02 12:57:09 -05:00
parent 6bc0e995db
commit 37bb98a436
12 changed files with 224 additions and 37 deletions

15
default_bus_layout.tres Normal file
View file

@ -0,0 +1,15 @@
[gd_resource type="AudioBusLayout" format=3 uid="uid://cbmx3klr6k4mt"]
[resource]
bus/1/name = &"Music"
bus/1/solo = false
bus/1/mute = false
bus/1/bypass_fx = false
bus/1/volume_db = 0.0
bus/1/send = &"Master"
bus/2/name = &"Sound Effects"
bus/2/solo = false
bus/2/mute = false
bus/2/bypass_fx = false
bus/2/volume_db = 0.0
bus/2/send = &"Master"

53
scenes/enemy.tscn Normal file
View file

@ -0,0 +1,53 @@
[gd_scene load_steps=9 format=3 uid="uid://dy6dv2tio433m"]
[ext_resource type="Script" uid="uid://8d4jhy3fo32b" path="res://scripts/enemy.gd" id="1_xwavj"]
[ext_resource type="AudioStream" uid="uid://brqjxveo53kco" path="res://sounds/boost.mp3" id="2_nenq2"]
[ext_resource type="AudioStream" uid="uid://b1ung55xg31l3" path="res://sounds/boost_finish.mp3" id="3_md484"]
[ext_resource type="AudioStream" uid="uid://5tr30e1tmdp6" path="res://sounds/collision.mp3" id="4_ipns3"]
[ext_resource type="AudioStream" uid="uid://y7lhonymtk3t" path="res://sounds/fire.mp3" id="5_8qclf"]
[ext_resource type="Texture2D" uid="uid://dtwo7g0ipc4k" path="res://textures/ship_1.png" id="6_w8i8w"]
[sub_resource type="CircleShape2D" id="CircleShape2D_uwrxv"]
radius = 16.0
[sub_resource type="CircleShape2D" id="CircleShape2D_lnu2h"]
radius = 20.0
[node name="Enemy" type="RigidBody2D"]
linear_damp = 6.247
script = ExtResource("1_xwavj")
[node name="Boost" type="AudioStreamPlayer" parent="."]
stream = ExtResource("2_nenq2")
pitch_scale = 0.75
bus = &"Sound Effects"
[node name="BoostFinish" type="AudioStreamPlayer" parent="."]
stream = ExtResource("3_md484")
volume_db = -80.0
bus = &"Sound Effects"
[node name="Collision" type="AudioStreamPlayer" parent="."]
stream = ExtResource("4_ipns3")
pitch_scale = 0.75
bus = &"Sound Effects"
[node name="Fire" type="AudioStreamPlayer" parent="."]
stream = ExtResource("5_8qclf")
[node name="Sprite" type="Sprite2D" parent="."]
texture = ExtResource("6_w8i8w")
[node name="CollisionShape" type="CollisionShape2D" parent="."]
shape = SubResource("CircleShape2D_uwrxv")
[node name="Hitbox" type="Area2D" parent="."]
[node name="CollisionShape" type="CollisionShape2D" parent="Hitbox"]
shape = SubResource("CircleShape2D_lnu2h")
debug_color = Color(0.9686392, 0, 0.4696517, 0.41960785)
[node name="SightCast" type="RayCast2D" parent="."]
target_position = Vector2(0, -256)
[connection signal="body_shape_entered" from="Hitbox" to="." method="_on_hitbox_body_shape_entered"]

View file

@ -1,4 +1,4 @@
[gd_scene load_steps=12 format=3 uid="uid://bauklhpieuivd"]
[gd_scene load_steps=19 format=3 uid="uid://bauklhpieuivd"]
[ext_resource type="Script" uid="uid://d0qswyhwbhdua" path="res://scripts/game.gd" id="1_u5sy4"]
[ext_resource type="Texture2D" uid="uid://dtwo7g0ipc4k" path="res://textures/ship_1.png" id="1_uwrxv"]
@ -8,7 +8,10 @@
[ext_resource type="AudioStream" uid="uid://5tr30e1tmdp6" path="res://sounds/collision.mp3" id="2_lbhrr"]
[ext_resource type="AudioStream" uid="uid://b6tyof2j3ytbv" path="res://sounds/concrete_halls.mp3" id="3_0tnpc"]
[ext_resource type="AudioStream" uid="uid://b1ung55xg31l3" path="res://sounds/boost_finish.mp3" id="3_p57ef"]
[ext_resource type="Script" uid="uid://8d4jhy3fo32b" path="res://scripts/enemy.gd" id="9_0tnpc"]
[ext_resource type="AudioStream" uid="uid://y7lhonymtk3t" path="res://sounds/fire.mp3" id="8_vtaks"]
[ext_resource type="Script" uid="uid://b7te10evkqwhy" path="res://scripts/laser.gd" id="10_kvpfn"]
[ext_resource type="PackedScene" uid="uid://dy6dv2tio433m" path="res://scenes/enemy.tscn" id="11_dinhu"]
[ext_resource type="Texture2D" uid="uid://bb0v0jtreyba3" path="res://textures/laser.png" id="11_kvuet"]
[sub_resource type="CircleShape2D" id="CircleShape2D_uwrxv"]
radius = 16.0
@ -16,16 +19,32 @@ radius = 16.0
[sub_resource type="CircleShape2D" id="CircleShape2D_lnu2h"]
radius = 20.0
[sub_resource type="CircleShape2D" id="CircleShape2D_trtic"]
radius = 12.0
[sub_resource type="Curve" id="Curve_ir15t"]
_data = [Vector2(0, 0.5393259), 0.0, 0.0, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0]
point_count = 2
[sub_resource type="CurveTexture" id="CurveTexture_ca42v"]
curve = SubResource("Curve_ir15t")
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_rysoc"]
gravity = Vector3(0, 98, 0)
alpha_curve = SubResource("CurveTexture_ca42v")
[node name="Game" type="Node2D"]
script = ExtResource("1_u5sy4")
[node name="BalladOfTheCats" type="AudioStreamPlayer" parent="."]
stream = ExtResource("2_gee14")
volume_db = -10.0
bus = &"Music"
[node name="ConcreteHalls" type="AudioStreamPlayer" parent="."]
stream = ExtResource("3_0tnpc")
volume_db = -10.0
bus = &"Music"
[node name="Player" type="RigidBody2D" parent="."]
linear_damp = 6.247
@ -33,13 +52,19 @@ script = ExtResource("1_yqjtg")
[node name="Boost" type="AudioStreamPlayer" parent="Player"]
stream = ExtResource("2_iywne")
bus = &"Sound Effects"
[node name="BoostFinish" type="AudioStreamPlayer" parent="Player"]
stream = ExtResource("3_p57ef")
volume_db = -8.0
bus = &"Sound Effects"
[node name="Collision" type="AudioStreamPlayer" parent="Player"]
stream = ExtResource("2_lbhrr")
bus = &"Sound Effects"
[node name="Fire" type="AudioStreamPlayer" parent="Player"]
stream = ExtResource("8_vtaks")
[node name="Sprite" type="Sprite2D" parent="Player"]
texture = ExtResource("1_uwrxv")
@ -60,35 +85,28 @@ rotation_smoothing_speed = 15.0
shape = SubResource("CircleShape2D_lnu2h")
debug_color = Color(0.9686392, 0, 0.4696517, 0.41960785)
[node name="Enemy" type="RigidBody2D" parent="."]
position = Vector2(0, -418)
[node name="Laser" type="RigidBody2D" parent="."]
position = Vector2(77, -428)
linear_damp = 6.247
script = ExtResource("9_0tnpc")
script = ExtResource("10_kvpfn")
[node name="Boost" type="AudioStreamPlayer" parent="Enemy"]
stream = ExtResource("2_iywne")
[node name="Sprite" type="Sprite2D" parent="Laser"]
texture = ExtResource("11_kvuet")
[node name="BoostFinish" type="AudioStreamPlayer" parent="Enemy"]
stream = ExtResource("3_p57ef")
volume_db = -8.0
[node name="Hitbox" type="Area2D" parent="Laser"]
[node name="Collision" type="AudioStreamPlayer" parent="Enemy"]
stream = ExtResource("2_lbhrr")
[node name="CollisionShape" type="CollisionShape2D" parent="Laser/Hitbox"]
shape = SubResource("CircleShape2D_trtic")
debug_color = Color(1, 0, 0, 0.41960785)
[node name="Sprite" type="Sprite2D" parent="Enemy"]
texture = ExtResource("1_uwrxv")
[node name="Trail" type="GPUParticles2D" parent="Laser"]
amount = 24
texture = ExtResource("11_kvuet")
lifetime = 0.05
process_material = SubResource("ParticleProcessMaterial_rysoc")
[node name="CollisionShape" type="CollisionShape2D" parent="Enemy"]
shape = SubResource("CircleShape2D_uwrxv")
[node name="Hitbox" type="Area2D" parent="Enemy"]
[node name="CollisionShape" type="CollisionShape2D" parent="Enemy/Hitbox"]
shape = SubResource("CircleShape2D_lnu2h")
debug_color = Color(0.9686392, 0, 0.4696517, 0.41960785)
[node name="SightCast" type="RayCast2D" parent="Enemy"]
target_position = Vector2(0, -256)
[node name="Enemy" parent="." instance=ExtResource("11_dinhu")]
position = Vector2(0, -418)
[node name="Unloadables" type="Node2D" parent="."]
@ -120,4 +138,4 @@ grow_vertical = 2
text = "DIST: 2048"
[connection signal="body_shape_entered" from="Player/Hitbox" to="Player" method="_on_hitbox_body_shape_entered"]
[connection signal="body_shape_entered" from="Enemy/Hitbox" to="Enemy" method="_on_hitbox_body_shape_entered"]
[connection signal="body_shape_entered" from="Laser/Hitbox" to="Laser" method="_on_hitbox_body_shape_entered"]

View file

@ -24,6 +24,8 @@ var ai_state = AI_STATE_TRACK_ENEMY
var target_rotation = 0
var target_rotation_speed = 1
var boost_pressed = false
var ai_tick = 0.1
@onready var player = get_parent().get_node("Player")
@ -65,7 +67,7 @@ func _process(delta: float) -> void:
ai_tick -= delta
if boosting:
if Input.is_action_pressed("boost"):
if boost_pressed:
boost -= delta * 40
if boost <= 0:
@ -77,10 +79,10 @@ func _process(delta: float) -> void:
$BoostFinish.play()
else:
boost += delta * 25
if boost > 100: boost = 100
if boost > 75: boost = 75
$Boost.stop()
if Input.is_action_just_pressed("boost") and (boost > 33):
if boost_pressed and (boost > 33):
boosting = true
$Boost.play()
@ -92,13 +94,8 @@ func _process(delta: float) -> void:
movement_axis = -1
if ai_state == AI_STATE_TRACK_ENEMY:
target_rotation = global_position.direction_to(player.position).angle() + deg_to_rad(270)
if ai_state == AI_STATE_STATIONARY_ENEMY:
target_rotation = global_position.direction_to(player.position).angle() + deg_to_rad(270)
movement_axis = 0
var player_distance = (player.position - position).length()
var front_cast = cast(0)
if !front_cast:
$SightCast.position.x = -20
@ -109,11 +106,26 @@ func _process(delta: float) -> void:
front_cast = cast(0)
$SightCast.position.x = 0
if ai_mode == AI_MODE_ATTACK:
if !front_cast and (player_distance > 480):
boost_pressed = true
elif front_cast == player:
if player_distance > 480: boost_pressed = true
else:
boost_pressed = false
if ai_state == AI_STATE_TRACK_ENEMY:
target_rotation = global_position.direction_to(player.position).angle() + deg_to_rad(270)
if ai_state == AI_STATE_STATIONARY_ENEMY:
target_rotation = global_position.direction_to(player.position).angle() + deg_to_rad(270)
movement_axis = 0
if front_cast:
var front_cast_distance = ($SightCast.get_collision_point() - position).length()
if (front_cast_distance < 160 * (speed / 300)) and (front_cast_distance < (player.position - position).length()):
if (front_cast_distance < 160 * (speed / 300.0)) and (front_cast_distance < player_distance):
if ai_state != AI_STATE_EVADE_OBJECT: last_ai_state_before_evasion = ai_state
ai_state = AI_STATE_EVADE_OBJECT

27
scripts/laser.gd Normal file
View file

@ -0,0 +1,27 @@
extends RigidBody2D
var shooter = null
var lifetime = 0
var has_collided = false
func _process(delta: float) -> void:
if has_collided: return
linear_velocity = transform.y * -1 * 256
func _on_hitbox_body_shape_entered(body_rid: RID, body: Node2D, body_shape_index: int, local_shape_index: int) -> void:
if body != shooter:
has_collided = true
linear_velocity = Vector2()
$Sprite.visible = false
$Trail.visible = false
if "health" in body:
body.health -= 100
await get_tree().create_timer(1.0).timeout
queue_free()

1
scripts/laser.gd.uid Normal file
View file

@ -0,0 +1 @@
uid://b7te10evkqwhy

View file

@ -7,6 +7,8 @@ var camera_shake_power = 0
var boosting = false
func _process(delta: float) -> void:
modulate.g = health / 1000.0
modulate.b = health / 1000.0
$Camera.offset.x = randi_range(-camera_shake_power, camera_shake_power)
$Camera.offset.y = randi_range(-camera_shake_power, camera_shake_power)

Binary file not shown.

BIN
sounds/fire_assets.mp3 Normal file

Binary file not shown.

View file

@ -0,0 +1,19 @@
[remap]
importer="mp3"
type="AudioStreamMP3"
uid="uid://7lx0ep8c801h"
path="res://.godot/imported/fire_assets.mp3-0e6bf1f951ac9f8605933ee56dd4c2f5.mp3str"
[deps]
source_file="res://sounds/fire_assets.mp3"
dest_files=["res://.godot/imported/fire_assets.mp3-0e6bf1f951ac9f8605933ee56dd4c2f5.mp3str"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4

BIN
textures/laser.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 B

40
textures/laser.png.import Normal file
View file

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bb0v0jtreyba3"
path="res://.godot/imported/laser.png-78c1e43d923d0dc894a1a1e095c0e0c3.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://textures/laser.png"
dest_files=["res://.godot/imported/laser.png-78c1e43d923d0dc894a1a1e095c0e0c3.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