diff --git a/baystation12.dme b/baystation12.dme
index 38710d30f7c..3b1b41b84db 100644
--- a/baystation12.dme
+++ b/baystation12.dme
@@ -141,6 +141,7 @@
#define FILE_DIR "code/WorkInProgress/mapload"
#define FILE_DIR "code/WorkInProgress/Mini"
#define FILE_DIR "code/WorkInProgress/organs"
+#define FILE_DIR "code/WorkInProgress/SkyMarshal"
#define FILE_DIR "code/WorkInProgress/virus2"
#define FILE_DIR "code/WorkInProgress/virus2/Disease2"
#define FILE_DIR "html"
@@ -981,6 +982,7 @@
#include "code\WorkInProgress\mapload\dmm_suite.dm"
#include "code\WorkInProgress\mapload\reader.dm"
#include "code\WorkInProgress\Mini\customitems.dm"
+#include "code\WorkInProgress\SkyMarshal\policetape.dm"
#include "code\WorkInProgress\virus2\Prob.dm"
#include "code\WorkInProgress\virus2\Disease2\analyser.dm"
#include "code\WorkInProgress\virus2\Disease2\base.dm"
diff --git a/code/WorkInProgress/SkyMarshal/coatrack.dm b/code/WorkInProgress/SkyMarshal/coatrack.dm
new file mode 100644
index 00000000000..0807dce7448
--- /dev/null
+++ b/code/WorkInProgress/SkyMarshal/coatrack.dm
@@ -0,0 +1,96 @@
+/obj/machinery/coatrack/attack_hand(mob/user as mob)
+ switch(alert("What do you want from the coat rack?",,"Coat","Hat"))
+ if("Coat")
+ if(coat)
+ if(!user.get_active_hand())
+ user.put_in_hand(coat)
+ else
+ coat.loc = get_turf(user)
+ coat = null
+ if(!hat)
+ icon_state = "coatrack0"
+ else
+ icon_state = "coatrack1"
+ return
+ else
+ user << "\blue There is no coat to take!"
+ return
+ if("Hat")
+ if(hat)
+ if(!user.get_active_hand())
+ user.put_in_hand(hat)
+ else
+ hat.loc = get_turf(user)
+ hat = null
+ if(!coat)
+ icon_state = "coatrack0"
+ else
+ icon_state = "coatrack2"
+ return
+ else
+ user << "\blue There is no hat to take!"
+ return
+ user << "Something went wrong."
+ return
+
+/obj/machinery/coatrack/attackby(obj/item/weapon/W as obj, mob/user as mob)
+ var/obj/item/I = user.equipped()
+ if ( istype(I,/obj/item/clothing/head/det_hat) && !hat)
+ user.drop_item()
+ I.loc = src
+ hat = I
+ if(!coat)
+ icon_state = "coatrack1"
+ else
+ icon_state = "coatrack3"
+ for(var/mob/M in viewers(src, null))
+ if(M.client)
+ M.show_message(text("\blue [user] puts his hat onto the rack."), 2)
+ return
+ if ( istype(I,/obj/item/clothing/suit/storage/det_suit) && !coat)
+ user.drop_item()
+ I.loc = src
+ coat = I
+ if(!hat)
+ icon_state = "coatrack2"
+ else
+ icon_state = "coatrack3"
+ for(var/mob/M in viewers(src, null))
+ if(M.client)
+ M.show_message(text("\blue [user] puts his coat onto the rack."), 2)
+ return
+ if ( istype(I,/obj/item/clothing/head/det_hat) && hat)
+ user << "There's already a hat on the rack!"
+ return ..()
+ if ( istype(I,/obj/item/clothing/suit/storage/det_suit) && coat)
+ user << "There's already a coat on the rack!"
+ return ..()
+ user << "The coatrack wants none of what you offer."
+ return ..()
+
+
+/obj/machinery/coatrack/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
+ if ( istype(mover,/obj/item/clothing/head/det_hat) && !hat)
+ mover.loc = src
+ hat = mover
+ if(!coat)
+ icon_state = "coatrack1"
+ else
+ icon_state = "coatrack3"
+ for(var/mob/M in viewers(src, null))
+ if(M.client)
+ M.show_message(text("\blue The hat lands perfectly atop its hanger!"), 2)
+ return 0
+ if ( istype(mover,/obj/item/clothing/suit/storage/det_suit) && !coat)
+ mover.loc = src
+ coat = mover
+ if(!hat)
+ icon_state = "coatrack2"
+ else
+ icon_state = "coatrack3"
+ for(var/mob/M in viewers(src, null))
+ if(M.client)
+ M.show_message(text("\blue The coat lands perfectly atop its hanger!"), 2)
+ return 0
+ else
+ return 0
\ No newline at end of file
diff --git a/code/WorkInProgress/SkyMarshal/policetape.dm b/code/WorkInProgress/SkyMarshal/policetape.dm
new file mode 100644
index 00000000000..a130670a6e9
--- /dev/null
+++ b/code/WorkInProgress/SkyMarshal/policetape.dm
@@ -0,0 +1,164 @@
+/obj/item/policetaperoll/attack_self(mob/user as mob)
+ if(icon_state == "rollstart")
+ tapestartx = src.loc.x
+ tapestarty = src.loc.y
+ tapestartz = src.loc.z
+ usr << "\blue You place the first end of the police tape."
+ icon_state = "rollstop"
+ else
+ tapeendx = src.loc.x
+ tapeendy = src.loc.y
+ tapeendz = src.loc.z
+ var/tapetest = 0
+ if(tapestartx == tapeendx && tapestarty > tapeendy && tapestartz == tapeendz)
+ for(var/Y=tapestarty,Y>=tapeendy,Y--)
+ var/turf/T = get_turf(locate(tapestartx,Y,tapestartz))
+ if(T.density == 1)
+ usr << "\blue You can't run police tape through a wall!"
+ icon_state = "rollstart"
+ return
+ for(var/Y=tapestarty,Y>=tapeendy,Y--)
+ 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." //Git Test
+
+ if(tapestartx == tapeendx && tapestarty < tapeendy && tapestartz == tapeendz)
+ for(var/Y=tapestarty,Y<=tapeendy,Y++)
+ var/turf/T = get_turf(locate(tapestartx,Y,tapestartz))
+ if(T.density == 1)
+ usr << "\blue You can't run police tape through a wall!"
+ icon_state = "rollstart"
+ return
+ for(var/Y=tapestarty,Y<=tapeendy,Y++)
+ 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)
+ 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))
+ var/turf/T = get_turf(src)
+ M:loc = T
+
+/obj/item/policetape/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
+ 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/policetape/attackby(obj/item/weapon/W as obj, mob/user as mob)
+ breaktape(W, user)
+
+/obj/item/policetape/attack_hand(mob/user as mob)
+ breaktape(null, user)
+
+/obj/item/policetape/proc/breaktape(obj/item/weapon/W as obj, mob/user as mob)
+ if(!W || !is_cut(W))
+ user << "You can't break the tape with that!"
+ return
+ user.show_viewers(text("\blue [] breaks the police tape!", user))
+ var/OX = src.x
+ var/OY = src.y
+ if(src.icon_state == "horizontal")
+ var/N = 0
+ var/X = OX + 1
+ var/turf/T = src.loc
+ 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
+
+ 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)
+ return
diff --git a/code/WorkInProgress/detective_work.dm b/code/WorkInProgress/detective_work.dm
index 673c81bbb78..9b2d62cb00e 100644
--- a/code/WorkInProgress/detective_work.dm
+++ b/code/WorkInProgress/detective_work.dm
@@ -135,7 +135,8 @@ obj/machinery/computer/forensic_scanning
if(istype(I, /obj/item/weapon/evidencebag))
scanning = I.contents[1]
scanning.loc = src
- I.underlays -= scanning
+ I.underlays = null
+ I.icon_state = "evidenceobj"
else
scanning = I
M.drop_item()
diff --git a/code/defines/obj.dm b/code/defines/obj.dm
index 0bb5f8dd060..668a0f5fe9f 100644
--- a/code/defines/obj.dm
+++ b/code/defines/obj.dm
@@ -22,6 +22,28 @@
proc/initialize()
+/obj/item/policetaperoll
+ name = "police tape roll"
+ desc = "A roll of police tape used to block off crime scenes from the public."
+ icon = 'policetape.dmi'
+ icon_state = "rollstart"
+ flags = FPRINT
+ var/tapestartx = 0
+ var/tapestarty = 0
+ var/tapestartz = 0
+ var/tapeendx = 0
+ var/tapeendy = 0
+ var/tapeendz = 0
+
+/obj/item/policetape
+ name = "police tape"
+ desc = "A length of police tape. Do not cross."
+ icon = 'policetape.dmi'
+ anchored = 1
+ density = 1
+ throwpass = 1
+ req_access = list(access_security)
+
/obj/structure/signpost
icon = 'stationobjs.dmi'
icon_state = "signpost"
@@ -436,10 +458,6 @@
var/obj/structure/crematorium/connected = null
anchored = 1.0
-
-
-
-
/obj/structure/cable
level = 1
anchored =1
diff --git a/code/defines/obj/clothing/gloves.dm b/code/defines/obj/clothing/gloves.dm
index 55315576777..8de02f5d1ae 100644
--- a/code/defines/obj/clothing/gloves.dm
+++ b/code/defines/obj/clothing/gloves.dm
@@ -37,6 +37,23 @@
ce
color = "chief" //Exists for washing machines. Is not different from black gloves in any way.
+/obj/item/clothing/gloves/detective
+ desc = "Made of well worn leather, these gloves are comfortable, useful, and stylish!"
+ name = "The Detective's Gloves"
+ icon_state = "black"
+ item_state = "bgloves"
+ color="brown"
+ siemens_coefficient = 0.30
+ protective_temperature = 1100
+
+/obj/item/clothing/gloves/hos
+ desc = "These gloves belong to the man in charge of the guns."
+ name = "Head of Security's Gloves"
+ icon_state = "black"
+ item_state = "bgloves"
+ color="brown"
+ siemens_coefficient = 0.30
+ protective_temperature = 1100
/obj/item/clothing/gloves/cyborg
desc = "beep boop borp"
@@ -145,7 +162,6 @@
icon_state = "red"
item_state = "redgloves"
siemens_coefficient = 0.30
-
protective_temperature = 1100
/obj/item/clothing/gloves/rainbow
diff --git a/code/defines/obj/machinery.dm b/code/defines/obj/machinery.dm
index 15dbf0a4ab4..98e7a3efdeb 100644
--- a/code/defines/obj/machinery.dm
+++ b/code/defines/obj/machinery.dm
@@ -451,3 +451,13 @@
h_r = 245.0
h_g = 245.0
h_b = 245.0
+
+/obj/machinery/coatrack
+ name = "coatrack"
+ desc = "A fancy stand for the Detective's coat and hat."
+ icon_state = "coatrack0"
+ icon = 'coatrack.dmi'
+ density = 1
+ anchored = 1.0
+ var/obj/item/clothing/suit/storage/det_suit/coat
+ var/obj/item/clothing/head/det_hat/hat
\ No newline at end of file
diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm
index 67cd8981d04..619fde8125d 100644
--- a/code/game/gamemodes/cult/cult.dm
+++ b/code/game/gamemodes/cult/cult.dm
@@ -9,9 +9,10 @@
/proc/is_convertable_to_cult(datum/mind/mind)
if(!istype(mind)) return 0
- for(var/obj/item/weapon/implant/loyalty/L in mind.current)
+ //This makes security unconvertable. *comments out*
+/* for(var/obj/item/weapon/implant/loyalty/L in mind.current)
if(L && L.implanted)
- return 0
+ return 0 */
return 1
diff --git a/code/game/jobs/job/security.dm b/code/game/jobs/job/security.dm
index f9463337cc6..72868937048 100644
--- a/code/game/jobs/job/security.dm
+++ b/code/game/jobs/job/security.dm
@@ -17,7 +17,7 @@
H.equip_if_possible(new /obj/item/device/pda/heads/hos(H), H.slot_belt)
// H.equip_if_possible(new /obj/item/clothing/suit/armor/hos(H), H.slot_wear_suit)
//We're Bay12, not Goon. We don't need armor 24/7
- H.equip_if_possible(new /obj/item/clothing/gloves/red(H), H.slot_gloves)
+ H.equip_if_possible(new /obj/item/clothing/gloves/hos(H), H.slot_gloves)
H.equip_if_possible(new /obj/item/clothing/head/helmet/HoS(H), H.slot_head)
H.equip_if_possible(new /obj/item/clothing/glasses/sunglasses/sechud(H), H.slot_glasses)
H.equip_if_possible(new /obj/item/weapon/handcuffs(H), H.slot_in_backpack)
@@ -71,8 +71,8 @@
if(!H) return 0
H.equip_if_possible(new /obj/item/device/radio/headset/headset_sec(H), H.slot_ears)
H.equip_if_possible(new /obj/item/weapon/storage/backpack(H), H.slot_back)
- H.equip_if_possible(new /obj/item/weapon/storage/box/evidence(H.back), H.slot_in_backpack)
H.equip_if_possible(new /obj/item/clothing/under/det(H), H.slot_w_uniform)
+ H.equip_if_possible(new /obj/item/clothing/suit/storage/det_suit(H), H.slot_wear_suit)
H.equip_if_possible(new /obj/item/clothing/shoes/brown(H), H.slot_shoes)
H.equip_if_possible(new /obj/item/device/pda/detective(H), H.slot_belt)
H.equip_if_possible(new /obj/item/clothing/head/det_hat(H), H.slot_head)
@@ -80,11 +80,11 @@
CIG.light("")
H.equip_if_possible(CIG, H.slot_wear_mask) */
//Fuck that thing. --SkyMarshal
- H.equip_if_possible(new /obj/item/clothing/gloves/black(H), H.slot_gloves)
- H.equip_if_possible(new /obj/item/weapon/storage/fcard_kit(H.back), H.slot_in_backpack)
+ H.equip_if_possible(new /obj/item/clothing/gloves/detective(H), H.slot_gloves)
+ H.equip_if_possible(new /obj/item/weapon/storage/box/evidence(H.back), H.slot_in_backpack)
H.equip_if_possible(new /obj/item/weapon/fcardholder(H), H.slot_in_backpack)
- H.equip_if_possible(new /obj/item/clothing/suit/storage/det_suit(H), H.slot_wear_suit)
H.equip_if_possible(new /obj/item/device/detective_scanner(H), H.slot_in_backpack)
+ H.equip_if_possible(new /obj/item/weapon/reagent_containers/food/drinks/dflask(H.back), H.slot_in_backpack)
H.equip_if_possible(new /obj/item/weapon/zippo(H), H.slot_l_store)
// H.equip_if_possible(new /obj/item/weapon/reagent_containers/food/snacks/candy_corn(H), H.slot_h_store)
// No... just no. --SkyMarshal
diff --git a/code/game/objects/closets/secure/security.dm b/code/game/objects/closets/secure/security.dm
index 9dc558db8ea..196646b9a31 100644
--- a/code/game/objects/closets/secure/security.dm
+++ b/code/game/objects/closets/secure/security.dm
@@ -53,6 +53,7 @@
new /obj/item/clothing/under/jensen(src)
new /obj/item/clothing/suit/armor/hos/jensen(src)
new /obj/item/clothing/suit/armor/hos(src)
+ new /obj/item/clothing/gloves/hos(src)
new /obj/item/clothing/head/helmet/HoS/dermal(src)
new /obj/item/device/radio/headset/heads/hos(src)
new /obj/item/weapon/shield/riot(src)
@@ -104,6 +105,7 @@
new /obj/item/clothing/gloves/red(src)
new /obj/item/device/radio/headset/headset_sec(src)
new /obj/item/weapon/storage/belt/security(src)
+ new /obj/item/policetaperoll(src)
new /obj/item/weapon/flashbang(src)
new /obj/item/weapon/pepperspray(src)
new /obj/item/device/flash(src)
@@ -131,7 +133,7 @@
new /obj/item/clothing/under/det(src)
new /obj/item/clothing/suit/det_suit/armor(src)
new /obj/item/clothing/suit/storage/det_suit(src)
- new /obj/item/clothing/gloves/black(src)
+ new /obj/item/clothing/gloves/detective(src)
new /obj/item/clothing/head/det_hat(src)
new /obj/item/clothing/shoes/brown(src)
new /obj/item/device/radio/headset/headset_sec(src)
@@ -140,7 +142,9 @@
new /obj/item/weapon/clipboard(src)
new /obj/item/device/detective_scanner(src)
new /obj/item/weapon/pepperspray/small(src)
+ new /obj/item/policetaperoll(src)
new /obj/item/weapon/storage/box/evidence(src)
+ new /obj/item/weapon/reagent_containers/food/drinks/dflask(src)
return
diff --git a/code/game/objects/devices/flashlight.dm b/code/game/objects/devices/flashlight.dm
index 2d723d933ce..922d6dbe129 100644
--- a/code/game/objects/devices/flashlight.dm
+++ b/code/game/objects/devices/flashlight.dm
@@ -83,6 +83,7 @@
icon_on = "plight1"
icon_off = "plight0"
brightness_on = 3
+ w_class = 1
@@ -90,7 +91,7 @@
if(!ismob(M))
return
user << "\red You stab [M] with the pen."
- M << "\red You feel a tiny prick!"
+// M << "\red You feel a tiny prick!"
M.attack_log += text("\[[time_stamp()]\] Has been stabbed with [src.name] by [user.name] ([user.ckey])")
user.attack_log += text("\[[time_stamp()]\] Used the [src.name] to stab [M.name] ([M.ckey])")
..()
diff --git a/code/game/objects/devices/taperecorder.dm b/code/game/objects/devices/taperecorder.dm
index dc9b5b653d8..abb413dea65 100644
--- a/code/game/objects/devices/taperecorder.dm
+++ b/code/game/objects/devices/taperecorder.dm
@@ -1,5 +1,5 @@
/obj/item/device/taperecorder
- desc = "A device that can record up to a minute of dialogue and play it back. It automatically translates the content in playback."
+ desc = "A device that can record up to an hour of dialogue and play it back. It automatically translates the content in playback."
name = "universal recorder"
icon_state = "taperecorderidle"
item_state = "analyzer"
@@ -10,7 +10,9 @@
var/recording = 0.0
var/playing = 0.0
var/timerecorded = 0.0
+ var/playsleepseconds = 0.0
var/list/storedinfo = new/list()
+ var/list/timestamp = new/list()
flags = FPRINT | TABLEPASS| CONDUCT
throwforce = 2
throw_speed = 4
@@ -19,19 +21,20 @@
/obj/item/device/taperecorder/hear_talk(mob/M as mob, msg)
if (recording)
var/ending = copytext(msg, length(msg))
+ src.timestamp+= src.timerecorded
if (M.stuttering)
- src.storedinfo += "[M.name] stammers, \"[msg]\""
+ src.storedinfo += "\[[time2text(src.timerecorded*10,"mm:ss")]\] [M.name] stammers, \"[msg]\""
return
if (M.getBrainLoss() >= 60)
- src.storedinfo += "[M.name] gibbers, \"[msg]\""
+ src.storedinfo += "\[[time2text(src.timerecorded*10,"mm:ss")]\] [M.name] gibbers, \"[msg]\""
return
if (ending == "?")
- src.storedinfo += "[M.name] asks, \"[msg]\""
+ src.storedinfo += "\[[time2text(src.timerecorded*10,"mm:ss")]\] [M.name] asks, \"[msg]\""
return
else if (ending == "!")
- src.storedinfo += "[M.name] exclaims, \"[msg]\""
+ src.storedinfo += "\[[time2text(src.timerecorded*10,"mm:ss")]\] [M.name] exclaims, \"[msg]\""
return
- src.storedinfo += "[M.name] says, \"[msg]\""
+ src.storedinfo += "\[[time2text(src.timerecorded*10,"mm:ss")]\] [M.name] says, \"[msg]\""
return
/obj/item/device/taperecorder/attackby(obj/item/weapon/W as obj, mob/user as mob)
@@ -60,15 +63,18 @@
set name = "Start Recording"
set category = "Object"
if(usr.stat)
- usr << "Not when you're incapicated."
+ usr << "Not when you're incapacitated."
return
if(src.emagged == 1)
usr << "\red The tape recorder makes a scratchy noise."
return
src.icon_state = "taperecorderrecording"
- if(src.timerecorded < 60 && src.playing == 0)
+ if(src.timerecorded < 3600 && src.playing == 0)
+ usr << "\blue Recording started."
src.recording = 1
- for(src.timerecorded, src.timerecorded<60)
+ src.timestamp+= src.timerecorded
+ src.storedinfo += "\[[time2text(src.timerecorded*10,"mm:ss")]\] Recording started."
+ for(src.timerecorded, src.timerecorded<3600)
if(src.recording == 0)
break
src.timerecorded++
@@ -80,17 +86,25 @@
usr << "\red Either your tape recorder's memory is full, or it is currently playing back its memory."
-/obj/item/device/taperecorder/verb/stop_recording()
- set name = "Stop Recording"
+/obj/item/device/taperecorder/verb/stop()
+ set name = "Stop"
set category = "Object"
if(usr.stat)
- usr << "Not when you're incapicated."
+ usr << "Not when you're incapacitated."
return
- if (src.recording == 1 || src.playing == 1)
+ if (src.recording == 1)
src.recording = 0
+ src.timestamp+= src.timerecorded
+ src.storedinfo += "\[[time2text(src.timerecorded*10,"mm:ss")]\] Recording stopped."
+ usr << "\blue Recording stopped."
+ src.icon_state = "taperecorderidle"
+ return
+ else if (src.playing == 1)
src.playing = 0
- usr << "\blue Stopped."
+ var/turf/T = get_turf(src)
+ for(var/mob/O in hearers(world.view-1, T))
+ O.show_message("Tape Recorder: Playback stopped.",2)
src.icon_state = "taperecorderidle"
return
else
@@ -113,6 +127,7 @@
return
else
src.storedinfo -= src.storedinfo
+ src.timestamp -= src.timestamp
src.timerecorded = 0
usr << "\blue Memory cleared."
return
@@ -133,20 +148,32 @@
return
src.playing = 1
src.icon_state = "taperecorderplaying"
- for(var/i=1,src.timerecorded<60,sleep(10 * (src.timerecorded/src.storedinfo.len)))
+ usr << "\blue Playing started."
+ for(var/i=1,src.timerecorded<3600,sleep(10 * (src.playsleepseconds) ))
if (src.playing == 0)
break
if (src.storedinfo.len < i)
break
var/turf/T = get_turf(src)
for(var/mob/O in hearers(world.view-1, T))
- O.show_message("\green Tape Recorder: \"[src.storedinfo[i]]\"",2)
+ O.show_message("Tape Recorder: [src.storedinfo[i]]",2)
+ if (src.storedinfo.len < i+1)
+ src.playsleepseconds = 1
+ sleep(10)
+ T = get_turf(src)
+ for(var/mob/O in hearers(world.view-1, T))
+ O.show_message("Tape Recorder: End of recording.",2)
+ else
+ src.playsleepseconds = src.timestamp[i+1] - src.timestamp[i]
+ if (src.playsleepseconds > 19)
+ sleep(10)
+ T = get_turf(src)
+ for(var/mob/O in hearers(world.view-1, T))
+ O.show_message("Tape Recorder: Skipping [src.playsleepseconds] seconds of silence",2)
+ src.playsleepseconds = 1
i++
src.icon_state = "taperecorderidle"
src.playing = 0
- var/turf/T = get_turf(src)
- for(var/mob/O in hearers(world.view-1, T))
- O.show_message("Tape Recorder: End playback.",2)
if (src.emagged == 1.0)
for(var/mob/O in hearers(world.view-1, get_turf(src)))
O.show_message("Tape Recorder: This tape recorder will self destruct in 5",2)
@@ -163,4 +190,67 @@
for(var/mob/O in hearers(world.view-1, get_turf(src)))
O.show_message("1",2)
sleep(10)
- src.explode()
\ No newline at end of file
+ src.explode()
+
+
+/obj/item/device/taperecorder/verb/print_transcript()
+ set name = "Print Transcript"
+ set category = "Object"
+
+ if (src.recording == 1 || src.playing == 1)
+ usr << "\red You can't print the transcript while playing or recording!"
+ return
+ usr << "\blue Transcript printed."
+ var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(get_turf(src))
+ var/t1 = "Transcript:
"
+ for(var/i=1,src.storedinfo.len >= i,i++)
+ t1 += "[src.storedinfo[i]]
"
+ P.info = t1
+ P.name = "paper- 'Transcript'"
+
+
+/obj/item/device/taperecorder/attack_self(mob/user)
+ if(src.recording == 0 && src.playing == 0)
+ if(usr.stat)
+ usr << "Not when you're incapacitated."
+ return
+ if(src.emagged == 1)
+ usr << "\red The tape recorder makes a scratchy noise."
+ return
+ src.icon_state = "taperecorderrecording"
+ if(src.timerecorded < 3600 && src.playing == 0)
+ usr << "\blue Recording started."
+ src.recording = 1
+ src.timestamp+= src.timerecorded
+ src.storedinfo += "\[[time2text(src.timerecorded*10,"mm:ss")]\] Recording started."
+ for(src.timerecorded, src.timerecorded<3600)
+ if(src.recording == 0)
+ break
+ src.timerecorded++
+ sleep(10)
+ src.recording = 0
+ src.icon_state = "taperecorderidle"
+ return
+ else
+ usr << "\red Either your tape recorder's memory is full, or it is currently playing back its memory."
+ else
+ if(usr.stat)
+ usr << "Not when you're incapacitated."
+ return
+ if (src.recording == 1)
+ src.recording = 0
+ src.timestamp+= src.timerecorded
+ src.storedinfo += "\[[time2text(src.timerecorded*10,"mm:ss")]\] Recording stopped."
+ usr << "\blue Recording stopped."
+ src.icon_state = "taperecorderidle"
+ return
+ else if (src.playing == 1)
+ src.playing = 0
+ var/turf/T = get_turf(src)
+ for(var/mob/O in hearers(world.view-1, T))
+ O.show_message("Tape Recorder: Playback stopped.",2)
+ src.icon_state = "taperecorderidle"
+ return
+ else
+ usr << "\red Stop what?"
+ return
\ No newline at end of file
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index 118b89ccd7d..0183dcc26d3 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -466,3 +466,25 @@
istype(W, /obj/item/weapon/reagent_containers/syringe) || \
istype(W, /obj/item/weapon/kitchen/utensil/fork) && W.icon_state != "forkloaded" \
)
+
+/proc/is_cut(obj/item/W as obj)
+ return ( \
+ istype(W, /obj/item/weapon/wirecutters) || \
+ istype(W, /obj/item/weapon/circular_saw) || \
+ istype(W, /obj/item/weapon/melee/energy/sword) && W:active || \
+ istype(W, /obj/item/weapon/melee/energy/blade) || \
+ istype(W, /obj/item/weapon/shovel) || \
+ istype(W, /obj/item/weapon/kitchenknife) || \
+ istype(W, /obj/item/weapon/butch) || \
+ istype(W, /obj/item/weapon/scalpel) || \
+ istype(W, /obj/item/weapon/kitchen/utensil/knife) || \
+ istype(W, /obj/item/weapon/shard) \
+ )
+
+/proc/is_burn(obj/item/W as obj)
+ return ( \
+ istype(W, /obj/item/weapon/weldingtool) && W:welding || \
+ istype(W, /obj/item/weapon/zippo) && W:lit || \
+ istype(W, /obj/item/weapon/match) && W:lit || \
+ istype(W, /obj/item/clothing/mask/cigarette) && W:lit \
+ )
\ No newline at end of file
diff --git a/code/game/objects/items/weapons/evidence.dm b/code/game/objects/items/weapons/evidence.dm
index 1519f563075..0dd4243b75d 100644
--- a/code/game/objects/items/weapons/evidence.dm
+++ b/code/game/objects/items/weapons/evidence.dm
@@ -8,6 +8,7 @@
desc = "An empty evidence bag."
icon = 'storage.dmi'
icon_state = "evidenceobj"
+ w_class = 1
/* buggy and stuff
/obj/item/weapon/evidencebag/attackby(obj/item/weapon/O, mob/user as mob)
@@ -23,14 +24,30 @@
if(!(O && istype(O)) || O.anchored == 1)
user << "You can't put that inside the [src]!"
return ..()
+ if(O in user)
+ user << "You are wearing that."
+ return
if(src.contents.len > 0)
user << "The [src] already has something inside it."
return ..()
+ if(istype(O.loc, /obj/item/weapon/storage))
+ user << "This is broke as hell."
+ return
+/* var/obj/item/weapon/storage/U = O.loc
+ w_class = O.w_class
+ for(var/i, i < U.contents.len, i++)
+ if(O in U.contents[i])
+ U.contents[i] = null
+ O.loc = src
+ continue*/
user << "You put the [O] inside the [src]."
- O.loc = src
icon_state = "evidence"
src.underlays += O
desc = "An evidence bag containing \a [O]. [O.desc]"
+ O.loc = src
+ w_class = O.w_class
+ return
+
/obj/item/weapon/evidencebag/attack_self(mob/user as mob)
if (src.contents.len > 0)
@@ -38,9 +55,13 @@
user << "You take the [I] out of the [src]."
I.loc = user.loc
src.underlays -= I
- icon_state = "evidenceobj"
+ w_class = 1
+ src.icon_state = "evidenceobj"
+ desc = "An empty evidence bag."
else
- user << "The [src] is empty."
+ user << "[src] is empty."
+ src.icon_state = "evidenceobj"
+ return
/obj/item/weapon/storage/box/evidence
name = "evidence bag box"
@@ -51,7 +72,7 @@
new /obj/item/weapon/evidencebag(src)
new /obj/item/weapon/evidencebag(src)
new /obj/item/weapon/evidencebag(src)
- new /obj/item/weapon/evidencebag(src)
- new /obj/item/weapon/evidencebag(src)
+ new /obj/item/weapon/f_card(src)
+ new /obj/item/weapon/f_card(src)
..()
return
\ No newline at end of file
diff --git a/code/game/objects/storage/belt.dm b/code/game/objects/storage/belt.dm
index 5a51aa630df..7fb560776fc 100644
--- a/code/game/objects/storage/belt.dm
+++ b/code/game/objects/storage/belt.dm
@@ -116,7 +116,6 @@
"/obj/item/ammo_magazine",
"/obj/item/weapon/reagent_containers/food/snacks/donut",
"/obj/item/weapon/reagent_containers/food/snacks/jellydonut",
-
"/obj/item/device/radio",
"/obj/item/device/detective_scanner",
"/obj/item/device/pda",
@@ -131,5 +130,6 @@
"/obj/item/weapon/camera_test",
"/obj/item/weapon/cigpacket",
"/obj/item/weapon/zippo",
- "/obj/item/device/taperecorder"
+ "/obj/item/device/taperecorder",
+ "/obj/item/weapon/evidencebag"
)
\ No newline at end of file
diff --git a/code/game/throwing.dm b/code/game/throwing.dm
index 12e7696f912..2311cd69b32 100644
--- a/code/game/throwing.dm
+++ b/code/game/throwing.dm
@@ -96,11 +96,12 @@
src.throw_impact(A)
src.throwing = 0
if(isobj(A))
- if(A.density) // **TODO: Better behaviour for windows
- // which are dense, but shouldn't always stop movement
+ if(A.density && !A.throwpass) // **TODO: Better behaviour for windows
+ // which are dense, but shouldn't always stop movement
src.throw_impact(A)
src.throwing = 0
+/atom/var/throwpass = 0
/atom/proc/throw_impact(atom/hit_atom)
if(istype(hit_atom,/mob/living))
var/mob/living/M = hit_atom
diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm
index 924ab5c62a2..8e365f061fa 100644
--- a/code/modules/admin/admin.dm
+++ b/code/modules/admin/admin.dm
@@ -1882,16 +1882,26 @@
if(istype(M, /mob/living/carbon/alien))
dat += "