mirror of
https://github.com/vgstation-coders/vgstation13.git
synced 2025-12-10 18:32:03 +00:00
@@ -487,7 +487,21 @@
|
||||
SA.health -= 20
|
||||
..()
|
||||
|
||||
|
||||
/obj/item/weapon/batteringram
|
||||
name = "battering ram"
|
||||
desc = "A hydraulic compression/spreader-type mechanism which, when applied to a door, will charge before rapidly expanding and dislodging frames."
|
||||
flags = TWOHANDABLE | MUSTTWOHAND | FPRINT
|
||||
icon = 'icons/obj/weapons.dmi'
|
||||
icon_state = "ram"
|
||||
siemens_coefficient = 0
|
||||
throwforce = 15
|
||||
w_class = 3
|
||||
w_type = RECYK_METAL
|
||||
origin_tech = "combat=5"
|
||||
attack_verb = list("rammed", "bludgeoned")
|
||||
force = 15
|
||||
throw_speed = 1
|
||||
throw_range = 3
|
||||
|
||||
/obj/item/weapon/caution
|
||||
desc = "Caution! Wet Floor!"
|
||||
|
||||
@@ -986,6 +986,31 @@ About the new airlock wires panel:
|
||||
if (shock(user, 75))
|
||||
return
|
||||
|
||||
if(istype(I, /obj/item/weapon/batteringram))
|
||||
user.delayNextAttack(30)
|
||||
var/breaktime = 60 //Same amount of time as drilling a wall, then a girder
|
||||
if(welded)
|
||||
breaktime += 30 //Welding buys you a little time
|
||||
src.visible_message("<span class='warning'>[user] is battering down [src]!</span>", "<span class='warning'>You begin to batter [src].</span>")
|
||||
playsound(get_turf(src), 'sound/effects/shieldbash.ogg', 50, 1)
|
||||
if(do_after(user, breaktime))
|
||||
//Calculate bolts separtely, in case they dropped in the last 6-9 seconds.
|
||||
if(src.locked == 1)
|
||||
playsound(get_turf(src), 'sound/effects/shieldbash.ogg', 50, 1)
|
||||
src.visible_message("<span class='warning'>[user] is battering the bolts!</span>", "<span class='warning'>You begin to smash the bolts...</span>")
|
||||
if(!do_after(user,190)) //Same amount as drilling an R-wall, longer if it was welded
|
||||
return //If they moved, cancel us out
|
||||
playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 50, 1)
|
||||
src.visible_message("<span class='warning'>[user] broke down the door!</span>", "<span class='warning'>You broke the door!</span>")
|
||||
playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 50, 1)
|
||||
operating = -1
|
||||
var/obj/structure/door_assembly/DA = revert(user,user.dir)
|
||||
DA.anchored = 0
|
||||
DA.state = 0 //Completely smash the door here; reduce it to its lowest state, eject electronics smoked
|
||||
DA.update_state()
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
if (istype(I, /obj/item/weapon/weldingtool))
|
||||
if (density && !operating)
|
||||
var/obj/item/weapon/weldingtool/WT = I
|
||||
@@ -1026,44 +1051,8 @@ About the new airlock wires panel:
|
||||
// TODO: refactor the called proc
|
||||
if (do_after(user, 40))
|
||||
user << "<span class='notice'>You removed the airlock electronics!</span>"
|
||||
|
||||
var/obj/structure/door_assembly/DA = new assembly_type(loc)
|
||||
DA.anchored = 1
|
||||
DA.fingerprints += src.fingerprints
|
||||
DA.fingerprintshidden += src.fingerprintshidden
|
||||
DA.fingerprintslast = user.ckey
|
||||
if (mineral)
|
||||
DA.glass = mineral
|
||||
// TODO: check DA.glass
|
||||
else if (glass && !DA.glass)
|
||||
DA.glass = 1
|
||||
|
||||
DA.state = 1
|
||||
DA.created_name = name
|
||||
DA.update_state()
|
||||
|
||||
var/obj/item/weapon/circuitboard/airlock/A
|
||||
|
||||
// TODO: check electronics
|
||||
if (!electronics)
|
||||
A = new/obj/item/weapon/circuitboard/airlock(loc)
|
||||
|
||||
// TODO: recheck the vars
|
||||
if(req_access && req_access.len)
|
||||
A.conf_access = req_access
|
||||
else if(req_one_access && req_one_access.len)
|
||||
A.conf_access = req_one_access
|
||||
A.one_access = 1
|
||||
else
|
||||
A = electronics
|
||||
electronics = null
|
||||
A.loc = loc
|
||||
|
||||
if (operating == -1)
|
||||
A.icon_state = "door_electronics_smoked"
|
||||
operating = 0
|
||||
|
||||
del(src)
|
||||
revert(user,null)
|
||||
qdel(src)
|
||||
return
|
||||
else if(arePowerSystemsOn() && !(stat & NOPOWER))
|
||||
user << "<span class='notice'>The airlock's motors resist your efforts to force it.</span>"
|
||||
@@ -1102,6 +1091,43 @@ About the new airlock wires panel:
|
||||
|
||||
return
|
||||
|
||||
/obj/machinery/door/airlock/proc/revert(mob/user as mob, var/direction)
|
||||
var/obj/structure/door_assembly/DA = new assembly_type(loc)
|
||||
DA.anchored = 1
|
||||
DA.fingerprints += src.fingerprints
|
||||
DA.fingerprintshidden += src.fingerprintshidden
|
||||
DA.fingerprintslast = user.ckey
|
||||
if (mineral)
|
||||
DA.glass = mineral
|
||||
else if (glass && !DA.glass)
|
||||
DA.glass = 1
|
||||
|
||||
DA.state = 1
|
||||
DA.created_name = name
|
||||
DA.update_state()
|
||||
|
||||
var/obj/item/weapon/circuitboard/airlock/A
|
||||
|
||||
if (!electronics)
|
||||
A = new/obj/item/weapon/circuitboard/airlock(loc)
|
||||
|
||||
if(req_access && req_access.len)
|
||||
A.conf_access = req_access
|
||||
else if(req_one_access && req_one_access.len)
|
||||
A.conf_access = req_one_access
|
||||
A.one_access = 1
|
||||
else
|
||||
A = electronics
|
||||
electronics = null
|
||||
A.loc = loc
|
||||
|
||||
if (operating == -1)
|
||||
A.icon_state = "door_electronics_smoked"
|
||||
operating = 0
|
||||
if(direction)
|
||||
A.throw_at(get_edge_target_turf(src, direction),10,4)
|
||||
return DA //Returns the new assembly
|
||||
|
||||
/obj/machinery/door/airlock/plasma/attackby(C as obj, mob/user as mob)
|
||||
if(C)
|
||||
ignite(is_hot(C))
|
||||
|
||||
@@ -154,6 +154,7 @@
|
||||
new /obj/item/weapon/melee/baton/loaded(src)
|
||||
new /obj/item/weapon/gun/energy/taser(src)
|
||||
new /obj/item/weapon/storage/box/bolas(src)
|
||||
new /obj/item/weapon/batteringram(src)
|
||||
return
|
||||
|
||||
|
||||
@@ -189,6 +190,7 @@
|
||||
new /obj/item/taperoll/police(src)
|
||||
new /obj/item/device/hailer(src) //wonder if vg would spam this
|
||||
new /obj/item/clothing/gloves/black(src)
|
||||
new /obj/item/device/gps/secure(src)
|
||||
return
|
||||
|
||||
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
var/list/GPS_list = list()
|
||||
var/list/SPS_list = list()
|
||||
|
||||
/obj/item/device/gps
|
||||
name = "global positioning system"
|
||||
desc = "Helping lost spacemen find their way through the planets since 2016."
|
||||
@@ -18,6 +20,9 @@ var/list/GPS_list = list()
|
||||
overlays += "working"
|
||||
|
||||
/obj/item/device/gps/Destroy()
|
||||
if(istype(src,/obj/item/device/gps/secure))
|
||||
SPS_list.Remove(src)
|
||||
else
|
||||
GPS_list.Remove(src)
|
||||
..()
|
||||
|
||||
@@ -32,13 +37,18 @@ var/list/GPS_list = list()
|
||||
|
||||
/obj/item/device/gps/attack_self(mob/user as mob)
|
||||
var/obj/item/device/gps/t = ""
|
||||
var/list/locallist = null
|
||||
if(istype(src,/obj/item/device/gps/secure))
|
||||
locallist = SPS_list.Copy()
|
||||
else
|
||||
locallist = GPS_list.Copy()
|
||||
if(emped)
|
||||
t += "ERROR"
|
||||
else
|
||||
t += "<BR><A href='?src=\ref[src];tag=1'>Set Tag</A> "
|
||||
t += "<BR>Tag: [gpstag]"
|
||||
|
||||
for(var/obj/item/device/gps/G in GPS_list)
|
||||
for(var/obj/item/device/gps/G in locallist)
|
||||
var/turf/pos = get_turf(G)
|
||||
var/area/gps_area = get_area(G)
|
||||
var/tracked_gpstag = G.gpstag
|
||||
@@ -101,3 +111,31 @@ var/list/GPS_list = list()
|
||||
desc = "A more rugged looking GPS device. Useful for finding miners. Or their corpses."
|
||||
icon_state = "gps-m"
|
||||
gpstag = "MIN0"
|
||||
|
||||
/obj/item/device/gps/secure
|
||||
name = "secure positioning system"
|
||||
desc = "A secure channel SPS with several features designed to keep its wearer safe."
|
||||
icon_state = "sps"
|
||||
gpstag = "SEC0"
|
||||
|
||||
/obj/item/device/gps/secure/New()
|
||||
SPS_list.Add(src)
|
||||
gpstag = "SEC0"
|
||||
name = "secure positioning system ([gpstag])"
|
||||
overlays += "working"
|
||||
|
||||
/obj/item/device/gps/secure/OnMobDeath(mob/wearer as mob)
|
||||
..()
|
||||
for(var/obj/item/device/gps/secure/S in SPS_list)
|
||||
S.announce(wearer, src, "died")
|
||||
|
||||
/obj/item/device/gps/secure/dropped(mob/wearer as mob)
|
||||
..()
|
||||
if(!istype(src.loc, /turf))
|
||||
return
|
||||
for(var/obj/item/device/gps/secure/S in SPS_list)
|
||||
S.announce(wearer, src, "lost [wearer.gender == FEMALE ? "her" : "his"] SPS")
|
||||
|
||||
/obj/item/device/gps/secure/proc/announce(var/mob/living/carbon/human/wearer, var/obj/item/device/gps/secure/SPS, var/reason)
|
||||
src.visible_message("Your SPS beeps: <span class='warning'>Warning! [wearer] has [reason] at [get_area(SPS)].</span>")
|
||||
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.5 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 43 KiB |
Reference in New Issue
Block a user