Numerous fixes.

This commit is contained in:
SkyMarshal
2011-12-25 10:57:23 -07:00
parent 9becacf956
commit dd8deae835
13 changed files with 339 additions and 37 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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()]\] <font color='orange'>Has been stabbed with [src.name] by [user.name] ([user.ckey])</font>")
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] to stab [M.name] ([M.ckey])</font>")
..()

View File

@@ -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("<font color=Maroon><B>Tape Recorder</B>: Playback stopped.</font>",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 <B>Tape Recorder</B>: \"[src.storedinfo[i]]\"",2)
O.show_message("<font color=Maroon><B>Tape Recorder</B>: [src.storedinfo[i]]</font>",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("<font color=Maroon><B>Tape Recorder</B>: End of recording.</font>",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("<font color=Maroon><B>Tape Recorder</B>: Skipping [src.playsleepseconds] seconds of silence</font>",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 <B>5</B>",2)
@@ -163,4 +190,67 @@
for(var/mob/O in hearers(world.view-1, get_turf(src)))
O.show_message("<B>1</B>",2)
sleep(10)
src.explode()
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 = "<B>Transcript:</B><BR><BR>"
for(var/i=1,src.storedinfo.len >= i,i++)
t1 += "[src.storedinfo[i]]<BR>"
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("<font color=Maroon><B>Tape Recorder</B>: Playback stopped.</font>",2)
src.icon_state = "taperecorderidle"
return
else
usr << "\red Stop what?"
return

View File

@@ -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 \
)

View File

@@ -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

View File

@@ -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"
)

View File

@@ -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

View File

@@ -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)

BIN
icons/policetape.dmi Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 930 B