Modified weapon scripts and resources with a simplified spread angle

variable.
This commit is contained in:
Henry Faber 2026-06-25 02:06:28 +01:00
parent 4f90c82b8f
commit 4f3839448b
7 changed files with 75 additions and 3 deletions

BIN
graphics/spread.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 282 B

View file

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

View file

@ -0,0 +1,19 @@
[gd_resource type="Resource" script_class="WeaponShot" format=3 uid="uid://ds53sryglmf27"]
[ext_resource type="PackedScene" uid="uid://ddpclu2vdy2ve" path="res://scenes/player_weapons/weapon_stock.tscn" id="1_pn64g"]
[ext_resource type="Script" uid="uid://7n1itonn35fm" path="res://scripts/weapon_shot.gd" id="2_4b7mw"]
[resource]
script = ExtResource("2_4b7mw")
shot_name = "spread"
bullet_scene = ExtResource("1_pn64g")
damage = 5
speed = 500
projectiles = 5
spacing = 30.0
origin = -15
horizontal_offset = 8.25
spread_angle = 15.0
stagger_offset = 0.5
stagger_animation = true
metadata/_custom_type_script = "uid://7n1itonn35fm"

View file

@ -13,6 +13,7 @@
[ext_resource type="Script" uid="uid://7n1itonn35fm" path="res://scripts/weapon_shot.gd" id="10_d2wvv"] [ext_resource type="Script" uid="uid://7n1itonn35fm" path="res://scripts/weapon_shot.gd" id="10_d2wvv"]
[ext_resource type="Resource" uid="uid://cck3gmnhu5agc" path="res://resources/player_weapon_resources/tri.tres" id="11_3v2ag"] [ext_resource type="Resource" uid="uid://cck3gmnhu5agc" path="res://resources/player_weapon_resources/tri.tres" id="11_3v2ag"]
[ext_resource type="Script" uid="uid://65d3hbrpm21x" path="res://scripts/effects/effects_component.gd" id="12_effcomp"] [ext_resource type="Script" uid="uid://65d3hbrpm21x" path="res://scripts/effects/effects_component.gd" id="12_effcomp"]
[ext_resource type="Resource" uid="uid://ds53sryglmf27" path="res://resources/player_weapon_resources/spread.tres" id="13_f1ej7"]
[sub_resource type="AtlasTexture" id="AtlasTexture_tuyoq"] [sub_resource type="AtlasTexture" id="AtlasTexture_tuyoq"]
atlas = ExtResource("5_qlg0r") atlas = ExtResource("5_qlg0r")
@ -157,7 +158,7 @@ script = ExtResource("6_y4r1p")
unique_name_in_owner = true unique_name_in_owner = true
script = ExtResource("7_d2wvv") script = ExtResource("7_d2wvv")
weapon_data = ExtResource("8_stock") weapon_data = ExtResource("8_stock")
available_weapons = Array[ExtResource("10_d2wvv")]([ExtResource("8_stock"), ExtResource("11_3v2ag"), ExtResource("9_ur7pv")]) available_weapons = Array[ExtResource("10_d2wvv")]([ExtResource("8_stock"), ExtResource("11_3v2ag"), ExtResource("9_ur7pv"), ExtResource("13_f1ej7")])
weapon_change_flash = SubResource("Resource_jej6c") weapon_change_flash = SubResource("Resource_jej6c")
metadata/_custom_type_script = "uid://ylmao2ndp22y" metadata/_custom_type_script = "uid://ylmao2ndp22y"

View file

@ -10,6 +10,9 @@ var time_offset: float = 0.5
# When this bullet should fire (absolute time) # When this bullet should fire (absolute time)
var fire_time: float = 0.0 var fire_time: float = 0.0
# Angle offset for spread shots (in degrees)
var angle: float = 0.0
# Track if this bullet is currently active in the shot # Track if this bullet is currently active in the shot
var is_active: bool = false var is_active: bool = false
@ -20,8 +23,9 @@ func _process(delta):
if !is_active and current_time >= fire_time: if !is_active and current_time >= fire_time:
activate() activate()
# Move the bullet # Move the bullet, factoring in spread angle
position.y -= shot_data.speed * delta var velocity = Vector2.UP.rotated(deg_to_rad(angle)) * shot_data.speed
position += velocity * delta
func activate(): func activate():
is_active = true is_active = true

View file

@ -34,9 +34,15 @@ func shoot():
# Final position combines symmetrical horizontal spread with symmetrical vertical spacing # Final position combines symmetrical horizontal spread with symmetrical vertical spacing
bullet.position = player.position + Vector2(bullet_horizontal_offset, weapon_data.origin + (vertical_offset + weapon_data.origin - total_projectiles)) bullet.position = player.position + Vector2(bullet_horizontal_offset, weapon_data.origin + (vertical_offset + weapon_data.origin - total_projectiles))
# Calculate angle for this bullet (only when projectiles >= 3)
var bullet_angle: float = 0.0
if total_projectiles >= 3:
bullet_angle = (index_from_center / center_index) * (weapon_data.spread_angle / 2.0)
# Set timing properties on the bullet # Set timing properties on the bullet
bullet.time_offset = time_offset bullet.time_offset = time_offset
bullet.fire_time = current_time + time_offset bullet.fire_time = current_time + time_offset
bullet.angle = bullet_angle
# Set the bullet data # Set the bullet data
bullet.set_weapon_data(weapon_data.bullet_scene, weapon_data) bullet.set_weapon_data(weapon_data.bullet_scene, weapon_data)

View file

@ -15,6 +15,8 @@ extends Resource
@export_category("Spread") @export_category("Spread")
# Horizontal distance between projectiles # Horizontal distance between projectiles
@export var horizontal_offset: float = 6.5 @export var horizontal_offset: float = 6.5
# Total spread angle in degrees (only applied when projectiles >= 3)
@export var spread_angle: float = 0.0
# Time delay per projectile index # Time delay per projectile index
@export var stagger_offset: float = 0.25 @export var stagger_offset: float = 0.25