Police tape overhaul

General purge of copypaste code

Framework for easier adding of new tape types
Now you only need two sprites of roll and sprites of tape length (H and V)
Define them in police_tape.dm

To show it off, engineering tape added, passable by engineers and atmos techs

Last but not least - ability to lift the tape, allowing passage for pretty much everything.
Done by those with access, attack by empty hand on help intent.
This commit is contained in:
unknown
2012-05-12 22:16:23 +03:00
parent 21f0783e90
commit 9efafd39bd
11 changed files with 134 additions and 171 deletions

View File

@@ -1,97 +1,89 @@
/obj/item/policetaperoll/attack_self(mob/user as mob)
if(icon_state == "rollstart") /obj/item/taperoll/police
tapestartx = src.loc.x name = "police tape"
tapestarty = src.loc.y desc = "A roll of police tape used to block off crime scenes from the public."
tapestartz = src.loc.z icon_state = "police_start"
usr << "\blue You place the first end of the police tape." tape_type = /obj/item/tape/police
icon_state = "rollstop" 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/attack_self(mob/user as mob)
if(icon_state == "[icon_base]_start")
start = get_turf(src)
usr << "\blue You place the first end of the [src]."
icon_state = "[icon_base]_stop"
else else
tapeendx = src.loc.x icon_state = "[icon_base]_start"
tapeendy = src.loc.y end = get_turf(src)
tapeendz = src.loc.z if(start.y != end.y && start.x != end.x || start.z != end.z)
usr << "\blue [src] can only be laid horizontally or vertically."
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"
while (cur!=end)
if(cur.density == 1)
usr << "\blue You can't run [src] through a wall!"
return
cur = get_step_towards(cur,end)
cur = start
var/tapetest = 0 var/tapetest = 0
if(tapestartx == tapeendx && tapestarty > tapeendy && tapestartz == tapeendz) while (cur!=end)
for(var/Y=tapestarty,Y>=tapeendy,Y--) for(var/obj/item/tape/Ptest in cur)
var/turf/T = get_turf(locate(tapestartx,Y,tapestartz)) if(Ptest.icon_state == "[Ptest.icon_base]_[dir]")
if(T.density == 1) tapetest = 1
usr << "\blue You can't run police tape through a wall!" if(tapetest != 1)
icon_state = "rollstart" var/obj/item/tape/P = new tape_type(cur)
return P.icon_state = "[P.icon_base]_[dir]"
for(var/Y=tapestarty,Y>=tapeendy,Y--) cur = get_step_towards(cur,end)
var/turf/T = get_turf(locate(tapestartx,Y,tapestartz)) //is_blocked_turf(var/turf/T)
for(var/obj/item/policetape/Ptest in T) usr << "\blue You finish placing the [src]." //Git Test
if(Ptest.icon_state == "vertical")
tapetest = 1
if(tapetest != 1)
var/obj/item/policetape/P = new/obj/item/policetape(tapestartx,Y,tapestartz)
P.loc = locate(tapestartx,Y,tapestartz)
P.icon_state = "vertical"
usr << "\blue You finish placing the police tape." //Git Test
if(tapestartx == tapeendx && tapestarty < tapeendy && tapestartz == tapeendz) /obj/item/taperoll/police/afterattack(var/atom/A, mob/user as mob)
for(var/Y=tapestarty,Y<=tapeendy,Y++) if (istype(A, /obj/machinery/door/airlock))
var/turf/T = get_turf(locate(tapestartx,Y,tapestartz)) var/turf/T = get_turf(A)
if(T.density == 1) var/obj/item/tape/P = new tape_type(T.x,T.y,T.z)
usr << "\blue You can't run police tape through a wall!" P.loc = locate(T.x,T.y,T.z)
icon_state = "rollstart" P.icon_state = "door"
return P.layer = 3.2
for(var/Y=tapestarty,Y<=tapeendy,Y++) user << "\blue You finish placing the [src]."
var/turf/T = get_turf(locate(tapestartx,Y,tapestartz))
for(var/obj/item/policetape/Ptest in T)
if(Ptest.icon_state == "vertical")
tapetest = 1
if(tapetest != 1)
var/obj/item/policetape/P = new/obj/item/policetape(tapestartx,Y,tapestartz)
P.loc = locate(tapestartx,Y,tapestartz)
P.icon_state = "vertical"
usr << "\blue You finish placing the police tape."
if(tapestarty == tapeendy && tapestartx > tapeendx && tapestartz == tapeendz) /obj/item/tape/Bumped(M as mob)
for(var/X=tapestartx,X>=tapeendx,X--)
var/turf/T = get_turf(locate(X,tapestarty,tapestartz))
if(T.density == 1)
usr << "\blue You can't run police tape through a wall!"
icon_state = "rollstart"
return
for(var/X=tapestartx,X>=tapeendx,X--)
var/turf/T = get_turf(locate(X,tapestarty,tapestartz))
for(var/obj/item/policetape/Ptest in T)
if(Ptest.icon_state == "horizontal")
tapetest = 1
if(tapetest != 1)
var/obj/item/policetape/P = new/obj/item/policetape(X,tapestarty,tapestartz)
P.loc = locate(X,tapestarty,tapestartz)
P.icon_state = "horizontal"
usr << "\blue You finish placing the police tape."
if(tapestarty == tapeendy && tapestartx < tapeendx && tapestartz == tapeendz)
for(var/X=tapestartx,X<=tapeendx,X++)
var/turf/T = get_turf(locate(X,tapestarty,tapestartz))
if(T.density == 1)
usr << "\blue You can't run police tape through a wall!"
icon_state = "rollstart"
return
for(var/X=tapestartx,X<=tapeendx,X++)
var/turf/T = get_turf(locate(X,tapestarty,tapestartz))
for(var/obj/item/policetape/Ptest in T)
if(Ptest.icon_state == "horizontal")
tapetest = 1
if(tapetest != 1)
var/obj/item/policetape/P = new/obj/item/policetape(X,tapestarty,tapestartz)
P.loc = locate(X,tapestarty,tapestartz)
P.icon_state = "horizontal"
usr << "\blue You finish placing the police tape."
if(tapestarty != tapeendy && tapestartx != tapeendx)
usr << "\blue Police tape can only be laid horizontally or vertically."
icon_state = "rollstart"
/obj/item/policetape/Bumped(M as mob)
if(src.allowed(M)) if(src.allowed(M))
var/turf/T = get_turf(src) var/turf/T = get_turf(src)
M:loc = T M:loc = T
/obj/item/policetape/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) /obj/item/tape/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
if(!density) return 1
if(air_group || (height==0)) return 1 if(air_group || (height==0)) return 1
if ((mover.flags & 2 || istype(mover, /obj/effect/meteor) || mover.throwing == 1) ) if ((mover.flags & 2 || istype(mover, /obj/effect/meteor) || mover.throwing == 1) )
@@ -99,78 +91,48 @@
else else
return 0 return 0
/obj/item/policetape/attackby(obj/item/weapon/W as obj, mob/user as mob) /obj/item/tape/attackby(obj/item/weapon/W as obj, mob/user as mob)
breaktape(W, user) breaktape(W, user)
/obj/item/policetape/attack_hand(mob/user as mob) /obj/item/tape/attack_hand(mob/user as mob)
breaktape(null, user) if (user.a_intent == "help" && src.allowed(user))
user.show_viewers("\blue [user] lifts [src], allowing passage.")
src.density = 0
spawn(200)
src.density = 1
else
breaktape(null, user)
/obj/item/policetape/attack_paw(mob/user as mob) /obj/item/tape/attack_paw(mob/user as mob)
breaktape(/obj/item/weapon/wirecutters,user) breaktape(/obj/item/weapon/wirecutters,user)
/obj/item/policetape/proc/breaktape(obj/item/weapon/W as obj, mob/user as mob) /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)) ||(!is_cut(W) && !src.allowed(user)))) if(user.a_intent == "help" && ((!is_sharp(W) && src.allowed(user)) ||(!is_cut(W) && !src.allowed(user))))
user << "You can't break the tape with that!" user << "You can't break the [src] with that!"
return return
user.show_viewers(text("\blue [] breaks the police tape!", user)) user.show_viewers("\blue [user] breaks the [src]!")
var/OX = src.x
var/OY = src.y var/dir[2]
if(src.icon_state == "horizontal") 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/N = 0
var/X = OX + 1 var/turf/cur = get_step(src,dir[i])
var/turf/T = src.loc
while(N != 1) while(N != 1)
N = 1 N = 1
T = locate(X,T.y,T.z) for (var/obj/item/tape/P in cur)
for (var/obj/item/policetape/P in T) if(P.icon_state == icon_dir)
N = 0 N = 0
if(P.icon_state == "horizontal")
del(P) del(P)
X += 1 cur = get_step(cur,dir[i])
X = OX - 1
N = 0
while(N != 1)
N = 1
T = locate(X,T.y,T.z)
for (var/obj/item/policetape/P in T)
N = 0
if(P.icon_state == "horizontal")
del(P)
X -= 1
if(src.icon_state == "vertical")
var/N = 0
var/Y = OY + 1
var/turf/T = src.loc
while(N != 1)
N = 1
T = locate(T.x,Y,T.z)
for (var/obj/item/policetape/P in T)
N = 0
if(P.icon_state == "vertical")
del(P)
Y += 1
Y = OY - 1
N = 0
while(N != 1)
N = 1
T = locate(T.x,Y,T.z)
for (var/obj/item/policetape/P in T)
N = 0
if(P.icon_state == "vertical")
del(P)
Y -= 1
del(src) del(src)
return return
/obj/item/policetaperoll/afterattack(var/atom/A, mob/user as mob)
if (istype(A, /obj/machinery/door/airlock))
var/turf/T = get_turf(A)
var/obj/item/policetape/P = new/obj/item/policetape(T.x,T.y,T.z)
P.loc = locate(T.x,T.y,T.z)
P.icon_state = "door"
P.layer = 3.2
user << "\blue You finish placing the police tape."

View File

@@ -422,7 +422,7 @@
new /obj/item/weapon/clipboard(src) new /obj/item/weapon/clipboard(src)
new /obj/item/weapon/clipboard/notebook(src) new /obj/item/weapon/clipboard/notebook(src)
new /obj/item/device/detective_scanner(src) new /obj/item/device/detective_scanner(src)
new /obj/item/policetaperoll(src) new /obj/item/taperoll/police(src)
new /obj/item/weapon/storage/box/evidence(src) new /obj/item/weapon/storage/box/evidence(src)
new /obj/item/device/pda/detective(src) new /obj/item/device/pda/detective(src)
new /obj/item/clothing/suit/det_suit/armor(src) new /obj/item/clothing/suit/det_suit/armor(src)
@@ -445,7 +445,7 @@
new /obj/item/weapon/pepperspray(src) new /obj/item/weapon/pepperspray(src)
new /obj/item/device/flash(src) new /obj/item/device/flash(src)
new /obj/item/weapon/melee/baton(src) new /obj/item/weapon/melee/baton(src)
new /obj/item/policetaperoll(src) new /obj/item/taperoll/police(src)
new /obj/item/weapon/flashbang(src) new /obj/item/weapon/flashbang(src)
new /obj/item/device/pda/security(src) new /obj/item/device/pda/security(src)
new /obj/item/clothing/suit/armor/vest(src) new /obj/item/clothing/suit/armor/vest(src)

View File

@@ -23,28 +23,28 @@
proc/initialize() proc/initialize()
/obj/item/policetaperoll //Define all tape types in policetape.dm
name = "police tape roll" /obj/item/taperoll
desc = "A roll of police tape used to block off crime scenes from the public." name = "tape roll"
icon = 'policetape.dmi' icon = 'policetape.dmi'
icon_state = "rollstart" icon_state = "rollstart"
flags = FPRINT flags = FPRINT
w_class = 1.0 w_class = 1.0
var/tapestartx = 0 var
var/tapestarty = 0 turf/start
var/tapestartz = 0 turf/end
var/tapeendx = 0 tape_type = /obj/item/tape
var/tapeendy = 0 icon_base
var/tapeendz = 0
/obj/item/policetape /obj/item/tape
name = "police tape" name = "tape"
desc = "A length of police tape. Do not cross."
icon = 'policetape.dmi' icon = 'policetape.dmi'
anchored = 1 anchored = 1
density = 1 density = 1
req_access = list(access_security) var/icon_base
/*
*/
/obj/structure/signpost /obj/structure/signpost
icon = 'stationobjs.dmi' icon = 'stationobjs.dmi'
icon_state = "signpost" icon_state = "signpost"

View File

@@ -362,7 +362,7 @@ Airlock index -> wire color are { 9, 4, 6, 7, 5, 8, 1, 2, 3 }.
//world << text("airlock attackby src [] obj [] mob []", src, C, user) //world << text("airlock attackby src [] obj [] mob []", src, C, user)
if(istype(C, /obj/item/device/detective_scanner)) if(istype(C, /obj/item/device/detective_scanner))
return return
if(istype(C, /obj/item/policetaperoll)) if(istype(C, /obj/item/taperoll/police))
return return
if (!istype(usr, /mob/living/silicon)) if (!istype(usr, /mob/living/silicon))
if (src.isElectrified()) if (src.isElectrified())

View File

@@ -32,6 +32,7 @@
new /obj/item/device/multitool(src) new /obj/item/device/multitool(src)
new /obj/item/device/flash(src) new /obj/item/device/flash(src)
new /obj/item/clothing/glasses/meson(src) new /obj/item/clothing/glasses/meson(src)
new /obj/item/taperoll/engineering(src)
return return

View File

@@ -136,7 +136,7 @@
var/obj/item/weapon/storage/backpack/security/BPK = new /obj/item/weapon/storage/backpack/security(src) var/obj/item/weapon/storage/backpack/security/BPK = new /obj/item/weapon/storage/backpack/security(src)
var/obj/item/weapon/storage/box/B = new(BPK) var/obj/item/weapon/storage/box/B = new(BPK)
new /obj/item/weapon/pen(B) new /obj/item/weapon/pen(B)
new /obj/item/policetaperoll(src) new /obj/item/taperoll/police(src)
new /obj/item/clothing/suit/armor/vest(src) new /obj/item/clothing/suit/armor/vest(src)
new /obj/item/clothing/suit/storage/gearharness(src) new /obj/item/clothing/suit/storage/gearharness(src)
new /obj/item/clothing/head/helmet(src) new /obj/item/clothing/head/helmet(src)
@@ -174,7 +174,7 @@
new /obj/item/weapon/pen(C) new /obj/item/weapon/pen(C)
new /obj/item/weapon/clipboard/notebook(src) new /obj/item/weapon/clipboard/notebook(src)
new /obj/item/device/detective_scanner(src) new /obj/item/device/detective_scanner(src)
new /obj/item/policetaperoll(src) new /obj/item/taperoll/police(src)
new /obj/item/weapon/storage/box/evidence(src) new /obj/item/weapon/storage/box/evidence(src)
new /obj/item/device/pda/detective(src) new /obj/item/device/pda/detective(src)
new /obj/item/device/radio/headset/headset_sec(src) new /obj/item/device/radio/headset/headset_sec(src)

View File

@@ -153,7 +153,7 @@
"/obj/item/weapon/zippo", "/obj/item/weapon/zippo",
"/obj/item/device/taperecorder", "/obj/item/device/taperecorder",
"/obj/item/weapon/evidencebag", "/obj/item/weapon/evidencebag",
"/obj/item/policetaperoll" "/obj/item/taperoll/police"
) )
/obj/item/weapon/storage/belt/soulstone /obj/item/weapon/storage/belt/soulstone

View File

@@ -1,5 +1,5 @@
/obj/item/clothing/suit/armor /obj/item/clothing/suit/armor
allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/pepperspray,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/policetaperoll) allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/pepperspray,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/taperoll/police)
body_parts_covered = UPPER_TORSO|LOWER_TORSO body_parts_covered = UPPER_TORSO|LOWER_TORSO
flags = FPRINT | TABLEPASS flags = FPRINT | TABLEPASS
flags_inv = HIDEJUMPSUIT flags_inv = HIDEJUMPSUIT
@@ -52,7 +52,7 @@
item_state = "gearharness" item_state = "gearharness"
body_parts_covered = UPPER_TORSO|LOWER_TORSO body_parts_covered = UPPER_TORSO|LOWER_TORSO
flags = FPRINT | TABLEPASS | ONESIZEFITSALL flags = FPRINT | TABLEPASS | ONESIZEFITSALL
allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/pepperspray,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/policetaperoll) allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/pepperspray,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/taperoll/police)
flags_inv = 0 flags_inv = 0
/obj/item/clothing/suit/armor/reactive /obj/item/clothing/suit/armor/reactive
@@ -72,7 +72,7 @@
item_state = "armourrigvest" item_state = "armourrigvest"
body_parts_covered = UPPER_TORSO|LOWER_TORSO body_parts_covered = UPPER_TORSO|LOWER_TORSO
flags = FPRINT | TABLEPASS | ONESIZEFITSALL flags = FPRINT | TABLEPASS | ONESIZEFITSALL
allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/pepperspray,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/policetaperoll) allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/pepperspray,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/taperoll/police)
armor = list(melee = 50, bullet = 15, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0) armor = list(melee = 50, bullet = 15, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0)
/obj/item/clothing/suit/armor/reactive/IsShield() /obj/item/clothing/suit/armor/reactive/IsShield()

View File

@@ -12,7 +12,7 @@
icon_state = "detective" icon_state = "detective"
item_state = "det_suit" item_state = "det_suit"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
allowed = list(/obj/item/weapon/tank/emergency_oxygen, /obj/item/device/flashlight,/obj/item/weapon/gun/energy,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/cigpacket,/obj/item/weapon/lighter,/obj/item/device/detective_scanner,/obj/item/device/taperecorder,/obj/item/policetaperoll) allowed = list(/obj/item/weapon/tank/emergency_oxygen, /obj/item/device/flashlight,/obj/item/weapon/gun/energy,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/cigpacket,/obj/item/weapon/lighter,/obj/item/device/detective_scanner,/obj/item/device/taperecorder,/obj/item/taperoll/police)
armor = list(melee = 50, bullet = 10, laser = 25, energy = 10, bomb = 0, bio = 0, rad = 0) armor = list(melee = 50, bullet = 10, laser = 25, energy = 10, bomb = 0, bio = 0, rad = 0)
@@ -23,7 +23,7 @@
item_state = "armor" item_state = "armor"
flags = FPRINT | TABLEPASS | ONESIZEFITSALL flags = FPRINT | TABLEPASS | ONESIZEFITSALL
body_parts_covered = UPPER_TORSO|LOWER_TORSO body_parts_covered = UPPER_TORSO|LOWER_TORSO
allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/policetaperoll) allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/taperoll/police)
armor = list(melee = 50, bullet = 15, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0) armor = list(melee = 50, bullet = 15, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0)
/obj/item/clothing/under/det/verb/holster() /obj/item/clothing/under/det/verb/holster()

View File

@@ -75,7 +75,7 @@
item_state = "invisible" item_state = "invisible"
body_parts_covered = UPPER_TORSO|LOWER_TORSO body_parts_covered = UPPER_TORSO|LOWER_TORSO
flags = FPRINT | TABLEPASS | ONESIZEFITSALL flags = FPRINT | TABLEPASS | ONESIZEFITSALL
allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/pepperspray,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/policetaperoll) allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/pepperspray,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/taperoll/police)
armor = list(melee = 50, bullet = 15, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0) armor = list(melee = 50, bullet = 15, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0)
flags_inv = 0 flags_inv = 0

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB