From dd8deae83538c6b730d37ba6c78d68dca8d18f0d Mon Sep 17 00:00:00 2001 From: SkyMarshal Date: Sun, 25 Dec 2011 10:57:23 -0700 Subject: [PATCH] Numerous fixes. --- code/WorkInProgress/SkyMarshal/policetape.dm | 164 +++++++++++++++++++ code/defines/obj.dm | 26 ++- code/game/jobs/job/security.dm | 7 +- code/game/machinery/computer/security.dm | 2 +- code/game/objects/closets/secure/security.dm | 2 + code/game/objects/devices/flashlight.dm | 3 +- code/game/objects/devices/taperecorder.dm | 130 ++++++++++++--- code/game/objects/items.dm | 22 +++ code/game/objects/items/weapons/evidence.dm | 7 +- code/game/objects/storage/belt.dm | 4 +- code/game/throwing.dm | 5 +- code/modules/clothing/suits/armor.dm | 4 + icons/policetape.dmi | Bin 0 -> 930 bytes 13 files changed, 339 insertions(+), 37 deletions(-) create mode 100644 code/WorkInProgress/SkyMarshal/policetape.dm create mode 100644 icons/policetape.dmi diff --git a/code/WorkInProgress/SkyMarshal/policetape.dm b/code/WorkInProgress/SkyMarshal/policetape.dm new file mode 100644 index 0000000000..a130670a6e --- /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/defines/obj.dm b/code/defines/obj.dm index 0bb5f8dd06..668a0f5fe9 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/game/jobs/job/security.dm b/code/game/jobs/job/security.dm index 6f167e5b0a..7286893704 100644 --- a/code/game/jobs/job/security.dm +++ b/code/game/jobs/job/security.dm @@ -71,9 +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/weapon/reagent_containers/food/drinks/dflask(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) @@ -82,10 +81,10 @@ H.equip_if_possible(CIG, H.slot_wear_mask) */ //Fuck that thing. --SkyMarshal H.equip_if_possible(new /obj/item/clothing/gloves/detective(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/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/machinery/computer/security.dm b/code/game/machinery/computer/security.dm index 8e2b81390c..4123465769 100644 --- a/code/game/machinery/computer/security.dm +++ b/code/game/machinery/computer/security.dm @@ -232,7 +232,7 @@ What a mess.*/ Perp = new/list() t1 = lowertext(t1) for(var/datum/data/record/R in data_core.general) - var/temptext = R.fields["name"] + " " + R.fields["id"] + " " + R.fields["fingerprint"] + var/temptext = R.fields["name"] + " " + R.fields["id"] + " " + R.fields["fingerprint"] + " " + R.fields["b_dna"] if(findtext(temptext,t1)) var/prelist = new/list(2) prelist[1] = R diff --git a/code/game/objects/closets/secure/security.dm b/code/game/objects/closets/secure/security.dm index 70857ef484..196646b9a3 100644 --- a/code/game/objects/closets/secure/security.dm +++ b/code/game/objects/closets/secure/security.dm @@ -105,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) @@ -141,6 +142,7 @@ 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 2d723d933c..922d6dbe12 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 dc9b5b653d..abb413dea6 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 118b89ccd7..0183dcc26d 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 1519f56307..aa20e83a85 100644 --- a/code/game/objects/items/weapons/evidence.dm +++ b/code/game/objects/items/weapons/evidence.dm @@ -38,9 +38,10 @@ user << "You take the [I] out of the [src]." I.loc = user.loc src.underlays -= I - icon_state = "evidenceobj" + src.icon_state = "evidenceobj" else user << "The [src] is empty." + src.icon_state = "evidenceobj" /obj/item/weapon/storage/box/evidence name = "evidence bag box" @@ -51,7 +52,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 5a51aa630d..7fb560776f 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 12e7696f91..2311cd69b3 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/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index 59b311bfa8..83a8e37890 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -62,6 +62,8 @@ item_state = "gearharness" body_parts_covered = UPPER_TORSO|LOWER_TORSO 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/clothing/suit/storage/armourrigvest name = "armour rig vest" @@ -70,6 +72,8 @@ item_state = "armourrigvest" body_parts_covered = UPPER_TORSO|LOWER_TORSO 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) + armor = list(melee = 50, bullet = 15, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0) diff --git a/icons/policetape.dmi b/icons/policetape.dmi new file mode 100644 index 0000000000000000000000000000000000000000..f2736418da4b4b8128f841c322b5f37a0990f259 GIT binary patch literal 930 zcmV;T16}-yP)V=-0C=2@&Akf3Fcih{Irk|J?Jj<;StLa=wC@mXG#6qcHHtcz{0m)F`U4jj>~^;k)C&g@E+w#{#P-tu;u) zICf^50B$!s#^YhoYU{nucyL#p!Q)S()z-1=9$ST}fe$+PG+LqHe9w=4V=2l5FaqwX zGt`P4{G9JvDflITT7L~Li}P@h24@aK9-z9%7bBy!+B!~sZc|CnXsu8gzURlTaSECuKy{s=mW{c7?=zbT0kq~8 zrE+*cGX%sap2OlCZ$Aq(l>=&^nGo25oc#%6LcrIb0Fd4$BZ2_l6GTB5ZBs}PlLJci zCp7N?G5rYuZchLRd&B8^g{n)}J^{D%C-{06e9t)Vd6mq8W$~Y1>rX)78YS%*AIHuh z3D}>oM#7mdb#eEKS$_}xX3b>*0EQuae;4N2zbH#dz?K~s2_ox&Sj6Ol)Ax7X9Iz~L zIRM}}>+}8uSFFeMCpDb}0o)`Y_RRl?=BGh`^+G5|e}V`C0RH};5Mu9&wHN{b%JdwH zBA^7sybF}VK|pN*YU3cFwg9zp5Kvoy+BgWPEkJGj0P0B9D#{!XaR2}S07*qoM6N<$ Ef+%60Q2+n{ literal 0 HcmV?d00001