mirror of
https://github.com/vgstation-coders/vgstation13.git
synced 2025-12-10 10:21:11 +00:00
fixed poker table sprites looking bad (haven't tested yet so there still may be some shading issues) fixed poker tables mysteriously disappearing on construction fixed glass stacking with plasmaglass fixed being able to walk on solid objects built on tape
205 lines
5.7 KiB
Plaintext
205 lines
5.7 KiB
Plaintext
//Define all tape types in policetape.dm
|
|
/obj/item/taperoll
|
|
name = "tape roll"
|
|
icon = 'icons/policetape.dmi'
|
|
icon_state = "rollstart"
|
|
flags = FPRINT
|
|
w_class = 1.0
|
|
var/turf/start
|
|
var/turf/end
|
|
var/tape_type = /obj/item/tape
|
|
var/icon_base
|
|
|
|
/obj/item/tape
|
|
name = "tape"
|
|
icon = 'icons/policetape.dmi'
|
|
anchored = 1
|
|
density = 1
|
|
var/icon_base
|
|
|
|
/obj/item/taperoll/police
|
|
name = "police tape"
|
|
desc = "A roll of police tape used to block off crime scenes from the public."
|
|
icon_state = "police_start"
|
|
tape_type = /obj/item/tape/police
|
|
icon_base = "police"
|
|
|
|
/obj/item/tape/police
|
|
name = "police tape"
|
|
desc = "A length of police tape. Do not cross."
|
|
req_access = list(access_security)
|
|
icon_base = "police"
|
|
|
|
/obj/item/taperoll/engineering
|
|
name = "engineering tape"
|
|
desc = "A roll of engineering tape used to block off working areas from the public."
|
|
icon_state = "engineering_start"
|
|
tape_type = /obj/item/tape/engineering
|
|
icon_base = "engineering"
|
|
|
|
/obj/item/tape/engineering
|
|
name = "engineering tape"
|
|
desc = "A length of engineering tape. Better not cross it."
|
|
req_one_access = list(access_engine,access_atmospherics)
|
|
icon_base = "engineering"
|
|
|
|
/obj/item/taperoll/atmos
|
|
name = "atmospherics tape"
|
|
desc = "A roll of atmospherics tape used to block off working areas from the public."
|
|
icon_state = "atmos_start"
|
|
tape_type = /obj/item/tape/atmos
|
|
icon_base = "atmos"
|
|
|
|
/obj/item/tape/atmos
|
|
name = "atmospherics tape"
|
|
desc = "A length of atmospherics tape. Better not cross it."
|
|
req_one_access = list(access_engine,access_atmospherics)
|
|
icon_base = "atmos"
|
|
|
|
/obj/item/taperoll/attack_self(mob/user as mob)
|
|
if(icon_state == "[icon_base]_start")
|
|
start = get_turf(src)
|
|
if(istype(start,/turf/space))
|
|
usr << "<span class='warning'>You can't place [src] in space</span>"
|
|
return
|
|
usr << "<span class='notice'>You place the first end of [src].</span>"
|
|
icon_state = "[icon_base]_stop"
|
|
else
|
|
icon_state = "[icon_base]_start"
|
|
end = get_turf(src)
|
|
if(istype(end,/turf/space))
|
|
usr << "<span class='warning'>You can't place [src] in space</span>"
|
|
return
|
|
if(start.y != end.y && start.x != end.x || start.z != end.z)
|
|
usr << "<span class='notice'>[src] can only be laid in a straight line.</span>"
|
|
return
|
|
|
|
var/turf/cur = start
|
|
var/dir
|
|
if (start.x == end.x)
|
|
var/d = end.y-start.y
|
|
if(d) d = d/abs(d)
|
|
end = get_turf(locate(end.x,end.y+d,end.z))
|
|
dir = "v"
|
|
else
|
|
var/d = end.x-start.x
|
|
if(d) d = d/abs(d)
|
|
end = get_turf(locate(end.x+d,end.y,end.z))
|
|
dir = "h"
|
|
|
|
var/can_place = 1
|
|
while (cur!=end && can_place)
|
|
if(cur.density == 1)
|
|
can_place = 0
|
|
else
|
|
for(var/obj/O in cur)
|
|
if(!istype(O, /obj/item/tape) && O.density)
|
|
can_place = 0
|
|
break
|
|
cur = get_step_towards(cur,end)
|
|
if (!can_place)
|
|
usr << "<span class='warning'>You can't run [src] through that!</span>"
|
|
return
|
|
|
|
cur = start
|
|
var/tapetest = 0
|
|
while (cur!=end)
|
|
for(var/obj/item/tape/Ptest in cur)
|
|
if(Ptest.icon_state == "[Ptest.icon_base]_[dir]")
|
|
tapetest = 1
|
|
if(tapetest != 1)
|
|
var/obj/item/tape/P = new tape_type(cur)
|
|
P.icon_state = "[P.icon_base]_[dir]"
|
|
cur = get_step_towards(cur,end)
|
|
//is_blocked_turf(var/turf/T)
|
|
usr << "<span class='notice'>You finish placing [src].</span>"
|
|
user.visible_message("<span class='warning'>[user] finishes placing [src].</span>") //Now you know who to whack with a stun baton
|
|
|
|
/obj/item/taperoll/afterattack(atom/target, mob/user, proximity_flag, click_parameters)
|
|
if(proximity_flag == 0) // not adjacent
|
|
return
|
|
|
|
if(istype(target, /obj/machinery/door/airlock) || istype(target, /obj/machinery/door/firedoor))
|
|
var/turf = get_turf(target)
|
|
|
|
if(locate(tape_type) in turf) //Don't you dare stack tape // can be remove for a new feature
|
|
return
|
|
|
|
user << "<span class='notice'>You start placing [src].</span>"
|
|
|
|
if(!do_mob(user, target, 30))
|
|
return
|
|
|
|
var/atom/tape = new tape_type(turf)
|
|
tape.icon_state = "[icon_base]_door"
|
|
tape.layer = 3.2
|
|
|
|
user << "<span class='notice'>You placed [src].</span>"
|
|
|
|
/obj/item/tape/Bumped(M as mob)
|
|
if(src.allowed(M))
|
|
var/turf/T = get_turf(src)
|
|
for(var/atom/A in T) //Check to see if there's anything solid on the tape's turf (it's possible to build on it)
|
|
if(A.density)
|
|
return
|
|
M:loc = T
|
|
|
|
/obj/item/tape/CanPass(atom/movable/mover, turf/target, height=1.5, air_group = 0)
|
|
if(!density) return 1
|
|
if(air_group || (height==0)) return 1
|
|
|
|
if ((mover.flags & 2 || istype(mover, /obj/effect/meteor) || mover.throwing == 1) )
|
|
return 1
|
|
else
|
|
return 0
|
|
|
|
/obj/item/tape/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
|
breaktape(W, user)
|
|
|
|
/obj/item/tape/attack_hand(mob/user as mob)
|
|
if (user.a_intent == "help" && src.allowed(user))
|
|
if(density == 0)
|
|
user.visible_message("<span class='notice'>[user] pulls [src] back down.</span>")
|
|
src.density = 1
|
|
else
|
|
user.visible_message("<span class='notice'>[user] lifts [src], allowing passage.</span>")
|
|
src.density = 0
|
|
else
|
|
if(density == 0) //You can pass through it, moron
|
|
return
|
|
breaktape(null, user)
|
|
|
|
/obj/item/tape/attack_paw(mob/user as mob)
|
|
breaktape(/obj/item/weapon/wirecutters,user)
|
|
|
|
/obj/item/tape/proc/breaktape(obj/item/weapon/W as obj, mob/user as mob)
|
|
if(user.a_intent == "help" && ((!is_sharp(W) && src.allowed(user))))
|
|
user << "<span class='notice'>You can't break [src] with that!</span>"
|
|
return
|
|
user.visible_message("<span class='warning'>[user] breaks [src]!</span>")
|
|
|
|
var/dir[2]
|
|
var/icon_dir = src.icon_state
|
|
if(icon_dir == "[src.icon_base]_h")
|
|
dir[1] = EAST
|
|
dir[2] = WEST
|
|
if(icon_dir == "[src.icon_base]_v")
|
|
dir[1] = NORTH
|
|
dir[2] = SOUTH
|
|
|
|
for(var/i=1;i<3;i++)
|
|
var/N = 0
|
|
var/turf/cur = get_step(src,dir[i])
|
|
while(N != 1)
|
|
N = 1
|
|
for (var/obj/item/tape/P in cur)
|
|
if(P.icon_state == icon_dir)
|
|
N = 0
|
|
del(P)
|
|
cur = get_step(cur,dir[i])
|
|
|
|
del(src)
|
|
return
|
|
|
|
|