diff --git a/code/game/objects/items/weapons/handcuffs.dm b/code/game/objects/items/weapons/handcuffs.dm index d43251a2e48..39d8cf6b0f5 100644 --- a/code/game/objects/items/weapons/handcuffs.dm +++ b/code/game/objects/items/weapons/handcuffs.dm @@ -157,9 +157,14 @@ name = "bear trap" throw_speed = 1 throw_range = 1 - icon_state = "beartrap0" + icon_state = "beartrap" desc = "A trap used to catch bears and other legged creatures." var/armed = 0 + var/trap_damage = 20 + +/obj/item/weapon/restraints/legcuffs/beartrap/New() + ..() + icon_state = "[initial(icon_state)][armed]" /obj/item/weapon/restraints/legcuffs/beartrap/suicide_act(mob/user) user.visible_message("[user] is sticking \his head in the [src.name]! It looks like \he's trying to commit suicide.") @@ -170,10 +175,9 @@ ..() if(ishuman(user) && !user.stat && !user.restrained()) armed = !armed - icon_state = "beartrap[armed]" + icon_state = "[initial(icon_state)][armed]" user << "[src] is now [armed ? "armed" : "disarmed"]" - /obj/item/weapon/restraints/legcuffs/beartrap/Crossed(AM as mob|obj) if(armed && isturf(src.loc)) if(isliving(AM)) @@ -196,9 +200,31 @@ snap = 1 if(snap) armed = 0 - icon_state = "beartrap0" + icon_state = "[initial(icon_state)][armed]" playsound(src.loc, 'sound/effects/snap.ogg', 50, 1) L.visible_message("[L] triggers \the [src].", \ "You trigger \the [src]!") - L.apply_damage(20,BRUTE, def_zone) - ..() \ No newline at end of file + L.apply_damage(trap_damage,BRUTE, def_zone) + ..() + +/obj/item/weapon/restraints/legcuffs/beartrap/energy + name = "energy snare" + armed = 1 + icon_state = "e_snare" + trap_damage = 0 + +/obj/item/weapon/restraints/legcuffs/beartrap/energy/New() + ..() + spawn(100) + if(!istype(loc, /mob)) + var/datum/effect/effect/system/spark_spread/sparks = new /datum/effect/effect/system/spark_spread + sparks.set_up(1, 1, src) + sparks.start() + qdel(src) + +/obj/item/weapon/restraints/legcuffs/beartrap/energy/dropped() + ..() + qdel(src) + +/obj/item/weapon/restraints/legcuffs/beartrap/energy/attack_hand(mob/user) + Crossed(user) //honk \ No newline at end of file diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index a4c73816557..f98a2f72ef9 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -466,6 +466,7 @@ var/const/GALOSHES_DONT_HELP = 8 return if(legcuffed) legcuffed.loc = loc + legcuffed.dropped() legcuffed = null update_inv_legcuffed(0) else diff --git a/code/modules/projectiles/ammunition/energy.dm b/code/modules/projectiles/ammunition/energy.dm index d170962a7ae..3518b4c35ab 100644 --- a/code/modules/projectiles/ammunition/energy.dm +++ b/code/modules/projectiles/ammunition/energy.dm @@ -154,3 +154,13 @@ /obj/item/ammo_casing/energy/bolt/large projectile_type = /obj/item/projectile/energy/bolt/large select_name = "heavy bolt" + +obj/item/ammo_casing/energy/net + projectile_type = /obj/item/projectile/energy/net + select_name = "netting" + pellets = 6 + variance = 1 + +/obj/item/ammo_casing/energy/trap + projectile_type = /obj/item/projectile/energy/trap + select_name = "snare" \ No newline at end of file diff --git a/code/modules/projectiles/guns/energy/nuclear.dm b/code/modules/projectiles/guns/energy/nuclear.dm index aa1d4931ea4..6de08880434 100644 --- a/code/modules/projectiles/guns/energy/nuclear.dm +++ b/code/modules/projectiles/guns/energy/nuclear.dm @@ -19,6 +19,15 @@ force = 10 ammo_type = list(/obj/item/ammo_casing/energy/electrode/hos, /obj/item/ammo_casing/energy/laser/hos, /obj/item/ammo_casing/energy/disabler) +/obj/item/weapon/gun/energy/gun/dragnet + name = "DRAGnet" + desc = "The \"Dynamic Rapid-Apprehension of the Guilty\" net is a revolution in law enforcement technology." + icon_state = "dragnet" + item_state = null + origin_tech = "combat=3;magnets=3;materials=4; bluespace=4" + ammo_type = list(/obj/item/ammo_casing/energy/net, /obj/item/ammo_casing/energy/trap) + can_flashlight = 0 + /obj/item/weapon/gun/energy/gun/nuclear name = "advanced energy gun" desc = "An energy gun with an experimental miniaturized nuclear reactor that automatically charges the internal power cell." @@ -127,4 +136,4 @@ trigger_guard = 0 /obj/item/weapon/gun/energy/gun/turret/update_icon() - icon_state = initial(icon_state) + icon_state = initial(icon_state) \ No newline at end of file diff --git a/code/modules/projectiles/projectile/energy.dm b/code/modules/projectiles/projectile/energy.dm index ea3b048e13e..2cfe90da467 100644 --- a/code/modules/projectiles/projectile/energy.dm +++ b/code/modules/projectiles/projectile/energy.dm @@ -38,6 +38,78 @@ sparks.start() ..() +/obj/item/projectile/energy/net + name = "energy netting" + icon_state = "e_netting" + damage = 10 + damage_type = STAMINA + hitsound = 'sound/weapons/taserhit.ogg' + range = 10 + +/obj/item/projectile/energy/net/New() + ..() + SpinAnimation() + +/obj/item/projectile/energy/net/on_hit(var/atom/target, var/blocked = 0) + if(isliving(target) && !locate(/obj/effect/nettingportal) in loc) + new/obj/effect/nettingportal(get_turf(target)) + ..() + +/obj/item/projectile/energy/net/on_range() + var/datum/effect/effect/system/spark_spread/sparks = new /datum/effect/effect/system/spark_spread + sparks.set_up(1, 1, src) + sparks.start() + ..() + +/obj/effect/nettingportal + name = "DRAGnet teleportation field" + desc = "A field of bluespace energy, locking on to teleport a target." + icon = 'icons/effects/effects.dmi' + icon_state = "dragnetfield" + anchored = 1 + unacidable = 1 + +/obj/effect/nettingportal/New() + ..() + SetLuminosity(3) + var/obj/item/device/radio/beacon/teletarget = null + for(var/obj/machinery/computer/teleporter/com in machines) + if(com.target) + if(com.power_station && com.power_station.teleporter_hub && com.power_station.engaged) + teletarget = com.target + if(teletarget) + spawn(30) + for(var/mob/living/L in get_turf(src)) + do_teleport(L, teletarget, 2)//teleport what's in the tile to the beacon + qdel(src) + else + spawn(30) + for(var/mob/living/L in get_turf(src)) + do_teleport(L, L, 15) //Otherwise it just warps you off somewhere. + qdel(src) + + +/obj/item/projectile/energy/trap + name = "energy snare" + icon_state = "e_snare" + nodamage = 1 + weaken = 1 + hitsound = 'sound/weapons/taserhit.ogg' + range = 4 + +/obj/item/projectile/energy/trap/on_hit(var/atom/target, var/blocked = 0) + if(!ismob(target) || blocked >= 2) //Fully blocked by mob or collided with dense object - drop a trap + new/obj/item/weapon/restraints/legcuffs/beartrap/energy(get_turf(loc)) + else if(iscarbon(target)) + var/obj/item/weapon/restraints/legcuffs/beartrap/B = new /obj/item/weapon/restraints/legcuffs/beartrap/energy(get_turf(target)) + B.Crossed(target) + ..() + +/obj/item/projectile/energy/trap/on_range() + new/obj/item/weapon/restraints/legcuffs/beartrap/energy(loc) + ..() + + /obj/item/projectile/energy/declone name = "radiation beam" icon_state = "declone" @@ -45,7 +117,6 @@ damage_type = CLONE irradiate = 40 - /obj/item/projectile/energy/dart //ninja throwing dart name = "dart" icon_state = "toxin" diff --git a/icons/effects/effects.dmi b/icons/effects/effects.dmi index 39df26748eb..dc275c2512d 100644 Binary files a/icons/effects/effects.dmi and b/icons/effects/effects.dmi differ diff --git a/icons/obj/guns/energy.dmi b/icons/obj/guns/energy.dmi index ff23c626c9f..09fa557ac1a 100644 Binary files a/icons/obj/guns/energy.dmi and b/icons/obj/guns/energy.dmi differ diff --git a/icons/obj/items.dmi b/icons/obj/items.dmi index fabc21f2d9e..4979d68a241 100644 Binary files a/icons/obj/items.dmi and b/icons/obj/items.dmi differ diff --git a/icons/obj/projectiles.dmi b/icons/obj/projectiles.dmi index 52619ce1640..cc0325cdfae 100644 Binary files a/icons/obj/projectiles.dmi and b/icons/obj/projectiles.dmi differ