feat: reducing ms gain from shotguns. Adjusting swarm launcher

This commit is contained in:
DottsGit
2026-06-05 01:19:51 -04:00
parent 00f190d423
commit ca2a80e38b
3 changed files with 62 additions and 28 deletions
+30 -8
View File
@@ -109,19 +109,34 @@ func _fire() -> void:
var tween = create_tween()
tween.tween_property(muzzle_flash, "light_energy", 0.0, 0.1)
var origin = camera.global_position
var origin = camera.global_position + camera.global_transform.basis * Vector3(0.4, -0.2, -0.6)
var base_dir = -camera.global_transform.basis.z
_current_aim_dir = base_dir
for i in range(8):
# Calculate spread
var right = camera.global_transform.basis.x
var up = camera.global_transform.basis.y
var x_spread = randf_range(-1.0, 1.0) * spread_angle
var y_spread = randf_range(-1.0, 1.0) * spread_angle
var fraction = float(i) / 7.0 # 0.0 to 1.0 (left to right)
var fire_dir = (base_dir + right * x_spread + up * y_spread).normalized()
_spawn_custom_projectile(origin, fire_dir)
# Offset from left (-0.1) to right (0.1) on the top edge of the launcher
var local_x = lerpf(-0.1, 0.1, fraction)
var local_offset = Vector3(local_x, 0.1, 0.0)
var launcher_center_local = Vector3(0.4, -0.4, -0.6)
var proj_origin = camera.global_position + camera.global_transform.basis * (launcher_center_local + local_offset)
# Fire direction: radial fan out
# They shoot mostly forward, but fan out horizontally, and slightly arch upwards radially
var angle = lerpf(-PI/3.0, PI/3.0, fraction) # -60 deg to +60 deg fan
var x_dir = sin(angle) * 0.6
var y_dir = cos(angle) * 0.8 # Reduced upward angle so it's not mostly straight up
var fire_dir = (base_dir + right * x_dir + up * y_dir).normalized()
_spawn_custom_projectile(proj_origin, fire_dir)
var _current_aim_dir: Vector3 = Vector3.ZERO
func _spawn_custom_projectile(origin: Vector3, fire_dir: Vector3) -> void:
var proj = load("res://weapons/homing_projectile.gd").new()
@@ -151,14 +166,21 @@ func _spawn_custom_projectile(origin: Vector3, fire_dir: Vector3) -> void:
proj.position = origin # Start at origin to spread outward around camera
proj.logical_source = origin
proj.velocity = fire_dir * projectile_speed
# Initial pop-up speed
proj.velocity = fire_dir * 5.0
if player:
proj.velocity += fire_dir * player.velocity.dot(fire_dir)
proj.initial_aim_dir = _current_aim_dir
proj.cruise_speed = 65.0
proj.ignition_timer = randf_range(0.3, 0.6) # Staggered ignition
proj.damage = base_damage
proj.min_damage = min_damage
proj.falloff_start = falloff_start
proj.max_range = max_range
proj.drop_gravity = 0.0
proj.drop_gravity = 5.0 # Slight arc before ignition
proj.owner_player = player
# Explosive stats