mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-10 14:44:05 +01:00
WIP on detective work overhaul
Give command ported, with more sanity checks (It works, now!) Added BS12 c4 in addition to TG c4 Fixed server air alarm Book length increased 3 fold. Blood and gibs now maintains DNA Fixed evidence bags Ported the awesome BS12 handcuff stuff, with flavor text.
This commit is contained in:
@@ -20,6 +20,9 @@
|
||||
sleep(3)
|
||||
if (i > 0)
|
||||
var/obj/effect/decal/cleanable/blood/b = new /obj/effect/decal/cleanable/blood/splatter(src.loc)
|
||||
b.blood_DNA = blood_DNA
|
||||
b.blood_type = blood_type
|
||||
b.OriginalMob = OriginalMob
|
||||
for(var/datum/disease/D in src.viruses)
|
||||
b.viruses += D
|
||||
if (step_to(src, get_step(src, direction), 0))
|
||||
|
||||
@@ -66,11 +66,11 @@ MASS SPECTROMETER
|
||||
var/amount = 20.0
|
||||
var/printing = 0.0
|
||||
var/fibers_index = 0
|
||||
var/list/stored_fibers = null
|
||||
var/list/stored_name = null
|
||||
var/list/stored_fibers = list()
|
||||
var/list/stored_name = list()
|
||||
var/prints_index = 0
|
||||
var/list/stored_prints = null
|
||||
var/list/prints_name = null
|
||||
var/list/stored_prints = list()
|
||||
var/list/prints_name = list()
|
||||
w_class = 3.0
|
||||
item_state = "electronic"
|
||||
flags = FPRINT | TABLEPASS | ONBELT | CONDUCT | USEDELAY
|
||||
@@ -138,20 +138,22 @@ MASS SPECTROMETER
|
||||
return
|
||||
|
||||
/obj/item/device/detective_scanner/afterattack(atom/A as mob|obj|turf|area, mob/user as mob)
|
||||
|
||||
if(src.loc != user)
|
||||
return 0
|
||||
src.add_fingerprint(user)
|
||||
if (istype(A, /obj/effect/decal/cleanable/blood) || istype(A, /obj/effect/rune))
|
||||
if(A.blood_DNA)
|
||||
user << "\blue Blood type: [A.blood_type]\nDNA: [A.blood_DNA]"
|
||||
return
|
||||
if (!( A.fingerprints ) && !(A.suit_fibers) && !(A.blood_DNA))
|
||||
user << "\blue Unable to locate any fingerprints, materials, fibers, or fingerprints on [A]!"
|
||||
return 0
|
||||
else if (A.blood_DNA)
|
||||
user << "\blue Blood found on [A]. Analysing..."
|
||||
sleep(15)
|
||||
user << "\blue Blood type: [A.blood_type]\nDNA: [A.blood_DNA]"
|
||||
else
|
||||
user << "\blue No blood found on [A]."
|
||||
if (!( A.fingerprints ) && !(A.suit_fibers))
|
||||
user << "\blue Unable to locate any fingerprints or fibers on [A]!"
|
||||
return 0
|
||||
if(!( A.fingerprints ))
|
||||
user << "\blue Unable to locate any fingerprints on [A]!"
|
||||
else
|
||||
|
||||
@@ -162,7 +162,7 @@
|
||||
if(isalien(user)) // -- TLE
|
||||
var/mob/living/carbon/alien/A = user
|
||||
|
||||
if(!A.has_fine_manipulation || w_class >= 4)
|
||||
if(!A.has_fine_manipulation || w_class <= 4)
|
||||
user << "Your claws aren't capable of such fine manipulation."
|
||||
return
|
||||
|
||||
@@ -196,20 +196,23 @@
|
||||
|
||||
/obj/item/attackby(obj/item/W as obj, mob/user as mob)
|
||||
if (istype(W, /obj/item/weapon/packageWrap))
|
||||
var/location = get_turf(src.loc)
|
||||
if(istype(src,/obj/item/weapon/storage) && istype(src.loc, /mob)) //Put it into the bag
|
||||
return
|
||||
if(istype(src.loc,/obj/item/weapon/storage) || istype(src.loc,/obj/item/clothing/suit/storage/)) //Taking stuff out of storage duplicates it.
|
||||
user << "\blue Do not do this, it is broken as all hell. Take it out of the container first."
|
||||
return
|
||||
for(var/obj/item/T in user) //Lets remove it from their inventory
|
||||
if(T == src)
|
||||
user.remove_from_mob(T)
|
||||
break
|
||||
if(istype(src.loc,/obj/item/weapon/storage)) //Taking stuff out of storage duplicates it.
|
||||
var/obj/item/weapon/storage/U = src.loc
|
||||
user.client.screen -= src
|
||||
U.contents.Remove(src)
|
||||
if(istype(src.loc,/obj/item/clothing/suit/storage/))
|
||||
var/obj/item/clothing/suit/storage/X = src.loc
|
||||
user.client.screen -= src
|
||||
X.contents.Remove(src)
|
||||
if(src in user)
|
||||
user.remove_from_mob(src)
|
||||
var/obj/item/weapon/packageWrap/O = W
|
||||
if (O.amount > 1)
|
||||
var/obj/item/smallDelivery/P = new /obj/item/smallDelivery(get_turf(src.loc))
|
||||
var/obj/item/smallDelivery/P = new /obj/item/smallDelivery(location)
|
||||
P.wrapped = src
|
||||
|
||||
src.loc = P
|
||||
O.amount -= 1
|
||||
else if(istype(W,/obj/item/wardrobe))
|
||||
@@ -225,6 +228,7 @@
|
||||
user << "\blue The wardrobe is full."
|
||||
return
|
||||
user << "\blue You pick up all the items."
|
||||
user.visible_message("\blue [user] gathers up the pile of stuff, and puts it into \the [src]")
|
||||
I.update_icon()
|
||||
|
||||
/obj/item/attack_self(mob/user as mob)
|
||||
|
||||
@@ -0,0 +1,84 @@
|
||||
/obj/item/weapon/syndie
|
||||
icon = 'syndieweapons.dmi'
|
||||
|
||||
/*C-4 explosive charge and etc, replaces the old syndie transfer valve bomb.*/
|
||||
|
||||
|
||||
/*The explosive charge itself. Flashes for five seconds before exploding.*/
|
||||
|
||||
/obj/item/weapon/syndie/c4explosive
|
||||
icon_state = "c-4small_0"
|
||||
item_state = "c-4small"
|
||||
name = "mysterious package"
|
||||
desc = "A mysterious package."
|
||||
w_class = 3
|
||||
|
||||
var/power = 1 /*Size of the explosion.*/
|
||||
var/size = "small" /*Used for the icon, this one will make c-4small_0 for the off state.*/
|
||||
|
||||
/obj/item/weapon/syndie/c4explosive/heavy
|
||||
icon_state = "c-4large_0"
|
||||
item_state = "c-4large"
|
||||
desc = "A mysterious package, it's quite heavy."
|
||||
power = 2
|
||||
size = "large"
|
||||
|
||||
/obj/item/weapon/syndie/c4explosive/New()
|
||||
var/K = rand(1,2000)
|
||||
K = md5(num2text(K)+name)
|
||||
K = copytext(K,1,7)
|
||||
src.desc += "\n You see [K] engraved on \the [src]"
|
||||
var/obj/item/weapon/syndie/c4detonator/detonator = new(src.loc)
|
||||
detonator.desc += "\n You see [K] engraved on \the [src]"
|
||||
detonator.bomb = src
|
||||
|
||||
/obj/item/weapon/syndie/c4explosive/proc/detonate()
|
||||
icon_state = "c-4[size]_1"
|
||||
spawn(50)
|
||||
explosion(get_turf(src), power, power*2, power*3, power*4, power*4)
|
||||
for(var/dirn in cardinal) //This is to guarantee that C4 at least breaks down all immediately adjacent walls and doors.
|
||||
var/turf/simulated/wall/T = get_step(src,dirn)
|
||||
if(locate(/obj/machinery/door/airlock) in T)
|
||||
var/obj/machinery/door/airlock/D = locate() in T
|
||||
if(D.density)
|
||||
D.open()
|
||||
if(istype(T,/turf/simulated/wall))
|
||||
T.dismantle_wall(1)
|
||||
del(src)
|
||||
|
||||
|
||||
/*Detonator, disguised as a lighter*/
|
||||
/*Click it when closed to open, when open to bring up a prompt asking you if you want to close it or press the button.*/
|
||||
|
||||
/obj/item/weapon/syndie/c4detonator
|
||||
icon_state = "c-4detonator_0"
|
||||
item_state = "c-4detonator"
|
||||
name = "lighter" /*Sneaky, thanks Dreyfus.*/
|
||||
desc = "A disposable lighter, it's quite heavy."
|
||||
w_class = 1
|
||||
|
||||
var/obj/item/weapon/syndie/c4explosive/bomb
|
||||
var/pr_open = 0 /*Is the "What do you want to do?" prompt open?*/
|
||||
|
||||
/obj/item/weapon/syndie/c4detonator/attack_self(mob/user as mob)
|
||||
switch(src.icon_state)
|
||||
if("c-4detonator_0")
|
||||
src.icon_state = "c-4detonator_1"
|
||||
user << "You flick open the lighter."
|
||||
|
||||
if("c-4detonator_1")
|
||||
if(!pr_open)
|
||||
pr_open = 1
|
||||
switch(alert(user, "What would you like to do?", "Lighter", "Press the button.", "Close the lighter."))
|
||||
if("Press the button.")
|
||||
user << "\red You press the button."
|
||||
flick("c-4detonator_click", src)
|
||||
if(src.bomb)
|
||||
src.bomb.detonate()
|
||||
log_admin("[user.real_name]([user.ckey]) has triggered [src.bomb] with [src].")
|
||||
message_admins("\red [user.real_name]([user.ckey]) has triggered [src.bomb] with [src].")
|
||||
|
||||
if("Close the lighter.")
|
||||
src.icon_state = "c-4detonator_0"
|
||||
user << "You close the lighter."
|
||||
pr_open = 0
|
||||
Reference in New Issue
Block a user