DRAGnet; new sprite, new functionality (#90713)

## About The Pull Request


![image](https://github.com/user-attachments/assets/9e143b3c-3435-430b-a949-04a354a46688)

New sprites for the DRAGnet, coming alongside some functionaltiy
changes.

DRAGnets are now bulky, and do not fit in backpacks. They also cannot be
dual-wielded.

DRAGnet no longer have the trap snare functionality. You know, the
infamous bola bullet.

DRAGnets now have two functions; 
The first function is straight up a scatter disabler blast that does a
total of 55 stamina damage point blank (it's like, 5 less than what it
did before).

The second function is a single bolt that, when it hits a living mob,
dealing 30 damage and staggering it briefly slowing it down. It also
places down a wide net of transportation fields around the target, much
like the net functionality does on live (but that's attached to the
scatter function, not the single bolt)


![image](https://github.com/user-attachments/assets/336585d3-924e-4d4c-9c29-c16e7de88990)

### Misc Changes

DRAGnets now cost more form cargo, at 3600 credits. (This barely matters
for departmental orders)

## Why It's Good For The Game

The sprite is ancient. Like nearing two decades old ancient. I believe
the INTENTION was this thing


![a3ec8cabc5d93992168a57ad48d21996d037e67f_00](https://github.com/user-attachments/assets/bc29c2ad-dc93-4503-83e3-8997f4e625c1)

It didn't really work out that way.


![image](https://github.com/user-attachments/assets/db2bcc94-902f-476f-8ed4-b90883519bc9)

Either way, the new sprite is cool and more unique in my opinion.
Fitting its status as an energy weapon.

As for balance changes; I've wanted to do this for a very long time but
put it off a lot. I think this is about the most moderate approach I
have. It otherwise functions pretty much as expected, maintaining the
cool niche functionality while exorcising the problem bits; one-handed
energy shotgun bit, and the bola shot bit.

I think I've spent at least the last...four or so years hammering on
about the horror that is this gun for balance? And even when it was
seeing more widespread use from people who recognized how bullshit it
really was, I didn't really want to get rid of the bit I actually quite
liked, which was the teleportation field.

I'm happy with this version.

## Changelog
🆑 NecromancerAnne (Code, Mild Sprite Edits) Michiyamenotehifunana
(Sprites)
image: Replaces the decrepit DRAGnet sprite with something newer and
more interesting.
balance: Completely reworks the DRAGnet. They are now bulky energy guns.
balance: Snare is now a single shot bolt that deals 30 stamina force,
staggers the target and lays out a net of teleportation fields that can
transport anyone standing on them for too long to a DRAGnet beacon.
balance: Net has been replaced with a scattershot disabler round. 
/🆑
This commit is contained in:
necromanceranne
2025-04-30 22:31:39 +10:00
committed by GitHub
parent 96cdac9d0b
commit 1c3c50c9e9
14 changed files with 57 additions and 73 deletions

View File

@@ -50,15 +50,15 @@
select_name = "goddamn meteor"
newtonian_force = 3
/obj/item/ammo_casing/energy/net
projectile_type = /obj/projectile/energy/net
select_name = "netting"
pellets = 6
variance = 40
/obj/item/ammo_casing/energy/scatter
projectile_type = /obj/projectile/beam/disabler/scatter
select_name = "scatter"
pellets = 10
variance = 10
harmful = FALSE
/obj/item/ammo_casing/energy/trap
projectile_type = /obj/projectile/energy/trap
/obj/item/ammo_casing/energy/snare
projectile_type = /obj/projectile/energy/snare
select_name = "snare"
harmful = FALSE

View File

@@ -29,6 +29,8 @@
var/single_shot_type_overlay = TRUE
///Should we give an overlay to empty guns?
var/display_empty = TRUE
///If we have an additional overlay based on our shot type while active
var/shot_type_fluff_overlay = FALSE
///whether the gun's cell drains the cyborg user's cell to recharge
var/use_cyborg_cell = FALSE
@@ -256,8 +258,9 @@
return
var/overlay_icon_state = "[icon_state]_charge"
var/obj/item/ammo_casing/energy/shot = ammo_type[select]
if(modifystate)
var/obj/item/ammo_casing/energy/shot = ammo_type[select]
if(single_shot_type_overlay)
. += "[icon_state]_[initial(shot.select_name)]"
overlay_icon_state += "_[initial(shot.select_name)]"
@@ -266,6 +269,10 @@
if(ratio == 0 && display_empty)
. += "[icon_state]_empty"
return
if(shot_type_fluff_overlay)
. += "[icon_state]_[initial(shot.select_name)]_extra"
if(shaded_charge)
. += "[icon_state]_charge[ratio]"
return

View File

@@ -85,16 +85,23 @@
flags_1 = PREVENT_CONTENTS_EXPLOSION_1
/obj/item/gun/energy/e_gun/dragnet
name = "\improper DRAGnet"
desc = "The \"Dynamic Rapid-Apprehension of the Guilty\" net is a revolution in law enforcement technology. Can be synced with a DRAGnet beacon to set a teleport destination for snare rounds."
name = "\improper DRAGnet translocation shotgun"
desc = "The \"Dynamic Rapid-Apprehension of the Guilty Network\" translocation shotgun (or DRAGnet for short) is a revolution in law enforcement technology. \
By syncing the weapon to a DRAGnet beacon, the bluespace transportation fields produced by the weapon's 'snare' function can rapidly exfiltrate an entire \
security squad, with criminal in tow. Otherwise, the weapon is an entirely nonlethal apprehension tool. Exceptionally useful for nonlethal close-quarters battle."
icon_state = "dragnet"
inhand_icon_state = "dragnet"
worn_icon_state = "dragnet"
base_icon_state = "dragnet"
lefthand_file = 'icons/mob/inhands/weapons/guns_lefthand.dmi'
righthand_file = 'icons/mob/inhands/weapons/guns_righthand.dmi'
ammo_type = list(/obj/item/ammo_casing/energy/net, /obj/item/ammo_casing/energy/trap)
modifystate = FALSE
w_class = WEIGHT_CLASS_NORMAL
ammo_x_offset = 1
ammo_type = list(/obj/item/ammo_casing/energy/scatter, /obj/item/ammo_casing/energy/snare)
w_class = WEIGHT_CLASS_BULKY
weapon_weight = WEAPON_MEDIUM
slot_flags = ITEM_SLOT_BACK
ammo_y_offset = 1
ammo_x_offset = 0
charge_sections = 3
shot_type_fluff_overlay = TRUE
///A dragnet beacon set to be the teleport destination for snare teleport rounds.
var/obj/item/dragnet_beacon/linked_beacon
@@ -124,11 +131,6 @@
visible_message(span_warning("A light on the [src] flashes, indicating that it is no longer linked with a DRAGnet beacon!"))
linked_beacon = null
/obj/item/gun/energy/e_gun/dragnet/snare
name = "Energy Snare Launcher"
desc = "Fires an energy snare that slows the target down."
ammo_type = list(/obj/item/ammo_casing/energy/trap)
/obj/item/gun/energy/e_gun/turret
name = "hybrid turret gun"
desc = "A heavy hybrid energy cannon with two settings: Stun and kill."

View File

@@ -202,7 +202,6 @@
/obj/projectile/bullet/mime,
/obj/projectile/curse_hand,
/obj/projectile/energy/electrode,
/obj/projectile/energy/net,
/obj/projectile/energy/nuclear_particle,
/obj/projectile/gravityattract,
/obj/projectile/gravitychaos,

View File

@@ -145,6 +145,17 @@
/obj/projectile/beam/disabler/weak
damage = 15
/obj/projectile/beam/disabler/scatter
name = "scatter disabler"
icon_state = "scatterdisabler"
damage = 5.5
damage_falloff_tile = -0.5
speed = 1.2
impact_effect_type = /obj/effect/temp_visual/impact_effect/green_laser
tracer_type = /obj/effect/projectile/tracer/xray
muzzle_type = /obj/effect/projectile/muzzle/xray
impact_type = /obj/effect/projectile/impact/xray
/obj/projectile/beam/disabler/smoothbore
name = "unfocused disabler beam"
weak_against_armour = TRUE

View File

@@ -1,28 +1,32 @@
/obj/projectile/energy/net
name = "energy netting"
/obj/projectile/energy/snare
name = "energy snare"
icon_state = "e_netting"
damage = 10
damage = 30
damage_type = STAMINA
hitsound = 'sound/items/weapons/taserhit.ogg'
range = 10
/obj/projectile/energy/net/Initialize(mapload)
/obj/projectile/energy/snare/Initialize(mapload)
. = ..()
SpinAnimation()
/obj/projectile/energy/net/on_hit(atom/target, blocked = 0, pierce_hit)
/obj/projectile/energy/snare/on_hit(atom/target, blocked = 0, pierce_hit)
var/obj/item/dragnet_beacon/destination_beacon = null
var/obj/item/gun/energy/e_gun/dragnet/our_dragnet = fired_from
if(our_dragnet && istype(our_dragnet))
destination_beacon = our_dragnet.linked_beacon
if(isliving(target))
var/turf/Tloc = get_turf(target)
if(!locate(/obj/effect/nettingportal) in Tloc)
new /obj/effect/nettingportal(Tloc, destination_beacon)
var/mob/living/living_target = target
living_target.adjust_staggered_up_to(STAGGERED_SLOWDOWN_LENGTH * 0.5, 5 SECONDS)
for(var/turf/trapped_turf in range(1, get_turf(living_target)))
if(trapped_turf.density)
continue
new /obj/effect/nettingportal(trapped_turf, destination_beacon)
. = ..()
/obj/projectile/energy/net/on_range()
/obj/projectile/energy/snare/on_range()
do_sparks(1, TRUE, src)
. = ..()
@@ -114,41 +118,3 @@
do_sparks(3, TRUE, src)
balloon_alert(user, "beacon unlocked")
return TRUE
/obj/projectile/energy/trap
name = "energy snare"
icon_state = "e_snare"
hitsound = 'sound/items/weapons/taserhit.ogg'
range = 4
/obj/projectile/energy/trap/on_hit(atom/target, blocked = 0, pierce_hit)
if(!ismob(target) || blocked >= 100) //Fully blocked by mob or collided with dense object - drop a trap
new/obj/item/restraints/legcuffs/beartrap/energy(get_turf(loc))
else if(iscarbon(target))
var/obj/item/restraints/legcuffs/beartrap/B = new /obj/item/restraints/legcuffs/beartrap/energy(get_turf(target))
B.spring_trap(target)
. = ..()
/obj/projectile/energy/trap/on_range()
new /obj/item/restraints/legcuffs/beartrap/energy(loc)
..()
/obj/projectile/energy/trap/cyborg
name = "Energy Bola"
icon_state = "e_snare"
hitsound = 'sound/items/weapons/taserhit.ogg'
range = 10
/obj/projectile/energy/trap/cyborg/on_hit(atom/target, blocked = 0, pierce_hit)
if(!ismob(target) || blocked >= 100)
do_sparks(1, TRUE, src)
qdel(src)
if(iscarbon(target))
var/obj/item/restraints/legcuffs/beartrap/B = new /obj/item/restraints/legcuffs/beartrap/energy/cyborg(get_turf(target))
B.spring_trap(target)
QDEL_IN(src, 10)
. = ..()
/obj/projectile/energy/trap/cyborg/on_range()
do_sparks(1, TRUE, src)
qdel(src)