mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-18 10:33:30 +01:00
Merge pull request #627 from SkyMarshal/master
Hacktool buffed, guns buffed, armor nerfed, point blank shooting reinstated, removed disposal space cannon, de-lagged and optimized detective work..
This commit is contained in:
+1121
-1122
File diff suppressed because it is too large
Load Diff
@@ -6,7 +6,7 @@ obj/machinery/atmospherics/pipe/simple/heat_exchanging
|
||||
var/initialize_directions_he
|
||||
|
||||
minimum_temperature_difference = 20
|
||||
thermal_conductivity = WINDOW_HEAT_TRANSFER_COEFFICIENT
|
||||
thermal_conductivity = OPEN_HEAT_TRANSFER_COEFFICIENT
|
||||
|
||||
// BubbleWrap
|
||||
New()
|
||||
|
||||
@@ -16,8 +16,8 @@
|
||||
t_him = "her"
|
||||
|
||||
if (src.w_uniform)
|
||||
if (src.w_uniform.blood_DNA.len)
|
||||
usr << "\red [src.name] is wearing a[src.w_uniform.blood_DNA.len ? " bloody " : " "] \icon[src.w_uniform] [src.w_uniform.name]!"
|
||||
if (src.w_uniform.blood_DNA)
|
||||
usr << "\red [src.name] is wearing a[src.w_uniform.blood_DNA ? " bloody " : " "] \icon[src.w_uniform] [src.w_uniform.name]!"
|
||||
else
|
||||
usr << "\blue [src.name] is wearing a \icon[src.w_uniform] [src.w_uniform.name]."
|
||||
|
||||
@@ -25,8 +25,8 @@
|
||||
usr << "\blue [src.name] is \icon[src.handcuffed] handcuffed!"
|
||||
|
||||
if (src.wear_suit)
|
||||
if (src.wear_suit.blood_DNA.len)
|
||||
usr << "\red [src.name] has a[src.wear_suit.blood_DNA.len ? " bloody " : " "] \icon[src.wear_suit] [src.wear_suit.name] on!"
|
||||
if (src.wear_suit.blood_DNA)
|
||||
usr << "\red [src.name] has a[src.wear_suit.blood_DNA ? " bloody " : " "] \icon[src.wear_suit] [src.wear_suit.name] on!"
|
||||
else
|
||||
usr << "\blue [src.name] has a \icon[src.wear_suit] [src.wear_suit.name] on."
|
||||
|
||||
@@ -37,43 +37,43 @@
|
||||
usr << "\blue [src.name] has a \icon[src.r_ear] [src.r_ear.name] on [t_his] right ear."
|
||||
|
||||
if (src.wear_mask)
|
||||
if (src.wear_mask.blood_DNA.len)
|
||||
usr << "\red [src.name] has a[src.wear_mask.blood_DNA.len ? " bloody " : " "] \icon[src.wear_mask] [src.wear_mask.name] on [t_his] face!"
|
||||
if (src.wear_mask.blood_DNA)
|
||||
usr << "\red [src.name] has a[src.wear_mask.blood_DNA ? " bloody " : " "] \icon[src.wear_mask] [src.wear_mask.name] on [t_his] face!"
|
||||
else
|
||||
usr << "\blue [src.name] has a \icon[src.wear_mask] [src.wear_mask.name] on [t_his] face."
|
||||
|
||||
if (src.l_hand)
|
||||
if (src.l_hand.blood_DNA.len)
|
||||
usr << "\red [src.name] has a[src.l_hand.blood_DNA.len ? " bloody " : " "] \icon[src.l_hand] [src.l_hand.name] in [t_his] left hand!"
|
||||
if (src.l_hand.blood_DNA)
|
||||
usr << "\red [src.name] has a[src.l_hand.blood_DNA ? " bloody " : " "] \icon[src.l_hand] [src.l_hand.name] in [t_his] left hand!"
|
||||
else
|
||||
usr << "\blue [src.name] has a \icon[src.l_hand] [src.l_hand.name] in [t_his] left hand."
|
||||
|
||||
if (src.r_hand)
|
||||
if (src.r_hand.blood_DNA.len)
|
||||
usr << "\red [src.name] has a[src.r_hand.blood_DNA.len ? " bloody " : " "] \icon[src.r_hand] [src.r_hand.name] in [t_his] right hand!"
|
||||
if (src.r_hand.blood_DNA)
|
||||
usr << "\red [src.name] has a[src.r_hand.blood_DNA ? " bloody " : " "] \icon[src.r_hand] [src.r_hand.name] in [t_his] right hand!"
|
||||
else
|
||||
usr << "\blue [src.name] has a \icon[src.r_hand] [src.r_hand.name] in [t_his] right hand."
|
||||
|
||||
if (src.belt)
|
||||
if (src.belt.blood_DNA.len)
|
||||
usr << "\red [src.name] has a[src.belt.blood_DNA.len ? " bloody " : " "] \icon[src.belt] [src.belt.name] on [t_his] belt!"
|
||||
if (src.belt.blood_DNA)
|
||||
usr << "\red [src.name] has a[src.belt.blood_DNA ? " bloody " : " "] \icon[src.belt] [src.belt.name] on [t_his] belt!"
|
||||
else
|
||||
usr << "\blue [src.name] has a \icon[src.belt] [src.belt.name] on [t_his] belt."
|
||||
if(src.s_store)
|
||||
if(src.s_store.blood_DNA.len)
|
||||
usr << "\red [src.name] has a[src.s_store.blood_DNA.len ? " bloody " : " "] \icon[src.s_store] [src.s_store.name] on [t_his][src.wear_suit.blood_DNA.len ? " bloody " : " "] \icon[src.wear_suit] [src.wear_suit.name]!"
|
||||
if(src.s_store.blood_DNA)
|
||||
usr << "\red [src.name] has a[src.s_store.blood_DNA ? " bloody " : " "] \icon[src.s_store] [src.s_store.name] on [t_his][src.wear_suit.blood_DNA ? " bloody " : " "] \icon[src.wear_suit] [src.wear_suit.name]!"
|
||||
else
|
||||
usr << "\blue [src.name] has a \icon[src.s_store] [src.s_store.name] on [t_his][src.wear_suit.blood_DNA.len ? " bloody " : " "] \icon[src.wear_suit] [src.wear_suit.name]."
|
||||
usr << "\blue [src.name] has a \icon[src.s_store] [src.s_store.name] on [t_his][src.wear_suit.blood_DNA ? " bloody " : " "] \icon[src.wear_suit] [src.wear_suit.name]."
|
||||
if (src.shoes)
|
||||
usr << "[src.shoes.blood_DNA.len ? "\red" : "\blue"][src.name] has a[src.shoes.blood_DNA.len ? " bloody " : " "] \icon[src.shoes] [src.shoes.name] on [t_his] feet."
|
||||
usr << "[src.shoes.blood_DNA ? "\red" : "\blue"][src.name] has a[src.shoes.blood_DNA ? " bloody " : " "] \icon[src.shoes] [src.shoes.name] on [t_his] feet."
|
||||
|
||||
|
||||
if (src.gloves)
|
||||
if (src.gloves.blood_DNA.len)
|
||||
if (src.gloves.blood_DNA)
|
||||
usr << "\red [src.name] has bloody \icon[src.gloves] [src.gloves.name] on [t_his] hands!"
|
||||
else
|
||||
usr << "\blue [src.name] has \icon[src.gloves] [src.gloves.name] on [t_his] hands."
|
||||
else if (src.blood_DNA.len)
|
||||
else if (src.blood_DNA)
|
||||
usr << "\red [src.name] has bloody hands!"
|
||||
|
||||
if (src.back)
|
||||
|
||||
@@ -368,6 +368,9 @@
|
||||
var/list/eavesdroppers = get_mobs_in_view(7, src)
|
||||
for(var/mob/M in listening)
|
||||
eavesdroppers.Remove(M)
|
||||
for(var/mob/M in eavesdroppers)
|
||||
if(M.stat)
|
||||
eavesdroppers.Remove(M)
|
||||
|
||||
for (var/obj/O in ((W | contents)-used_radios))
|
||||
W |= O
|
||||
|
||||
@@ -144,7 +144,7 @@
|
||||
overlays += image("icon" = 'uniform_fat.dmi', "icon_state" = "[t1][!lying ? "_s" : "_l"]", "layer" = MOB_LAYER)
|
||||
else*/
|
||||
overlays += image("icon" = 'uniform.dmi', "icon_state" = text("[][]",t1, (!(lying) ? "_s" : "_l")), "layer" = MOB_LAYER)
|
||||
if (w_uniform.blood_DNA.len)
|
||||
if (w_uniform.blood_DNA)
|
||||
var/icon/stain_icon = icon('blood.dmi', "uniformblood[!lying ? "" : "2"]")
|
||||
overlays += image("icon" = stain_icon, "layer" = MOB_LAYER)
|
||||
|
||||
@@ -174,14 +174,14 @@
|
||||
else if(ro.destroyed)
|
||||
gloves_icon.Blend(new /icon('limb_mask.dmi', "left_[lying?"l":"s"]"), ICON_MULTIPLY)
|
||||
overlays += image(gloves_icon, "layer" = MOB_LAYER)
|
||||
if (gloves.blood_DNA.len)
|
||||
if (gloves.blood_DNA)
|
||||
var/icon/stain_icon = icon('blood.dmi', "bloodyhands[!lying ? "" : "2"]")
|
||||
if(lo.destroyed)
|
||||
stain_icon.Blend(new /icon('limb_mask.dmi', "right_[lying?"l":"s"]"), ICON_MULTIPLY)
|
||||
else if(ro.destroyed)
|
||||
stain_icon.Blend(new /icon('limb_mask.dmi', "left_[lying?"l":"s"]"), ICON_MULTIPLY)
|
||||
overlays += image("icon" = stain_icon, "layer" = MOB_LAYER)
|
||||
else if (blood_DNA.len)
|
||||
else if (blood_DNA)
|
||||
var/icon/stain_icon = icon('blood.dmi', "bloodyhands[!lying ? "" : "2"]")
|
||||
if(lo.destroyed)
|
||||
stain_icon.Blend(new /icon('limb_mask.dmi', "right_[lying?"l":"s"]"), ICON_MULTIPLY)
|
||||
@@ -210,7 +210,7 @@
|
||||
else if(ro.destroyed && !lying)
|
||||
shoes_icon.Blend(new /icon('limb_mask.dmi', "left[lying?"_l":""]"), ICON_MULTIPLY)
|
||||
overlays += image(shoes_icon, "layer" = MOB_LAYER)
|
||||
if (shoes.blood_DNA.len)
|
||||
if (shoes.blood_DNA)
|
||||
var/icon/stain_icon = icon('blood.dmi', "shoesblood[!lying ? "" : "2"]")
|
||||
if(lo.destroyed)
|
||||
stain_icon.Blend(new /icon('limb_mask.dmi', "right_[lying?"l":"s"]"), ICON_MULTIPLY)
|
||||
@@ -269,7 +269,7 @@
|
||||
var/t1 = wear_suit.icon_state
|
||||
overlays += image("icon" = 'suit.dmi', "icon_state" = text("[][]", t1, (!( lying ) ? null : "2")), "layer" = MOB_LAYER)
|
||||
if (wear_suit)
|
||||
if (wear_suit.blood_DNA.len)
|
||||
if (wear_suit.blood_DNA)
|
||||
var/icon/stain_icon = null
|
||||
if (istype(wear_suit, /obj/item/clothing/suit/armor/vest || /obj/item/clothing/suit/storage/wcoat))
|
||||
stain_icon = icon('blood.dmi', "armorblood[!lying ? "" : "2"]")
|
||||
@@ -309,7 +309,7 @@
|
||||
var/t1 = wear_mask.icon_state
|
||||
overlays += image("icon" = 'mask.dmi', "icon_state" = text("[][]", t1, (!( lying ) ? null : "2")), "layer" = MOB_LAYER)
|
||||
if (!istype(wear_mask, /obj/item/clothing/mask/cigarette))
|
||||
if (wear_mask.blood_DNA.len)
|
||||
if (wear_mask.blood_DNA)
|
||||
var/icon/stain_icon = icon('blood.dmi', "maskblood[!lying ? "" : "2"]")
|
||||
overlays += image("icon" = stain_icon, "layer" = MOB_LAYER)
|
||||
wear_mask.screen_loc = ui_mask
|
||||
@@ -323,7 +323,7 @@
|
||||
overlays += image("icon" = head_icon, "layer" = MOB_LAYER)
|
||||
if(gimmick_hat)
|
||||
overlays += image("icon" = icon('gimmick_head.dmi', "[gimmick_hat][!lying ? "" : "2"]"), "layer" = MOB_LAYER)
|
||||
if (head.blood_DNA.len)
|
||||
if (head.blood_DNA)
|
||||
var/icon/stain_icon = icon('blood.dmi', "helmetblood[!lying ? "" : "2"]")
|
||||
overlays += image("icon" = stain_icon, "layer" = MOB_LAYER)
|
||||
head.screen_loc = ui_head
|
||||
|
||||
@@ -1396,7 +1396,7 @@ var/list/the_station_areas = list (
|
||||
S.volume = 100
|
||||
S.priority = 255
|
||||
S.status = SOUND_UPDATE
|
||||
process()
|
||||
// process()
|
||||
|
||||
Entered(atom/movable/Obj,atom/OldLoc)
|
||||
if(ismob(Obj))
|
||||
@@ -1411,7 +1411,7 @@ var/list/the_station_areas = list (
|
||||
mysound.status = SOUND_PAUSED | SOUND_UPDATE
|
||||
Obj << mysound
|
||||
|
||||
proc/process()
|
||||
/* proc/process()
|
||||
set background = 1
|
||||
|
||||
var/sound/S = null
|
||||
@@ -1431,4 +1431,4 @@ var/list/the_station_areas = list (
|
||||
spawn(sound_delay)
|
||||
H << S
|
||||
|
||||
spawn(60) .()
|
||||
spawn(60) .() */
|
||||
@@ -2,10 +2,10 @@
|
||||
layer = 2
|
||||
var/level = 2
|
||||
var/flags = FPRINT
|
||||
var/list/fingerprints = list()
|
||||
var/list/fingerprintshidden = list()
|
||||
var/list/fingerprints
|
||||
var/list/fingerprintshidden
|
||||
var/fingerprintslast = null
|
||||
var/list/blood_DNA = list()
|
||||
var/list/blood_DNA
|
||||
var/last_bumped = 0
|
||||
var/pass_flags = 0
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
var/datum/reagents/reagents = null
|
||||
|
||||
//Detective Work, used for the duplicate data points kept in the scanners
|
||||
var/atom/movable/original_atom = null
|
||||
var/list/original_atom
|
||||
|
||||
//var/chem_is_open_container = 0
|
||||
// replaced by OPENCONTAINER flags and atom/proc/is_open_container()
|
||||
@@ -242,4 +242,4 @@ atom/movable/proc/forceMove(atom/destination)
|
||||
loc = destination
|
||||
loc.Entered(src)
|
||||
return 1
|
||||
return 0
|
||||
return 0
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
var/obj/screen/gun/item/item_use_icon = null
|
||||
var/obj/screen/gun/move/gun_move_icon = null
|
||||
var/obj/screen/gun/run/gun_run_icon = null
|
||||
var/obj/screen/gun/mode/gun_setting_icon
|
||||
var/obj/screen/gun/mode/gun_setting_icon = null
|
||||
|
||||
var/total_luminosity = 0 //This controls luminosity for mobs, when you pick up lights and such this is edited. If you want the mob to use lights it must update its lum in its life proc or such. Note clamp this value around 7 or such to prevent massive light lag.
|
||||
var/last_luminosity = 0
|
||||
|
||||
+25
-16
@@ -84,6 +84,8 @@
|
||||
if (!( src.flags ) & 256)
|
||||
return
|
||||
if (ishuman(M))
|
||||
if(!fingerprintshidden)
|
||||
fingerprintshidden = list()
|
||||
add_fibers(M)
|
||||
if (M.mutations2 & mFingerprints)
|
||||
if(src.fingerprintslast != M.key)
|
||||
@@ -99,7 +101,7 @@
|
||||
if(src.fingerprintslast != H.key)
|
||||
src.fingerprintshidden += text("(Wearing gloves). Real name: [], Key: []",H.real_name, H.key)
|
||||
src.fingerprintslast = H.key
|
||||
H.gloves.add_fingerprint(M)
|
||||
H.gloves.add_fingerprint(M)
|
||||
if(H.gloves != src)
|
||||
if(prob(75) && istype(H.gloves, /obj/item/clothing/gloves/latex))
|
||||
return 0
|
||||
@@ -108,6 +110,8 @@
|
||||
if(src.fingerprintslast != H.key)
|
||||
src.fingerprintshidden += text("Real name: [], Key: []",H.real_name, H.key)
|
||||
src.fingerprintslast = H.key
|
||||
if(!fingerprints)
|
||||
fingerprints = list()
|
||||
var/new_prints = 0
|
||||
var/prints
|
||||
for(var/i = 1, i <= src.fingerprints.len, i++)
|
||||
@@ -122,20 +126,22 @@
|
||||
if(src.fingerprints.len == 1)
|
||||
src.fingerprints = list()
|
||||
else
|
||||
for(var/j = (i + 1), j < (src.fingerprints.len), j++)
|
||||
src.fingerprints[j-1] = src.fingerprints[j]
|
||||
for(var/j = i, j <= (src.fingerprints.len), j++)
|
||||
src.fingerprints[j] = src.fingerprints[j+1]
|
||||
src.fingerprints.len--
|
||||
else
|
||||
src.fingerprints[i] = "1=" + L[num2text(1)] + "&2=" + test_print
|
||||
src.fingerprints[i] = "1=[L[num2text(1)]]&2=[test_print]"
|
||||
if(new_prints)
|
||||
src.fingerprints[new_prints] = text("1=[]&2=[]", md5(H.dna.uni_identity), stringmerge(prints,stars(md5(H.dna.uni_identity), (H.gloves ? rand(10,20) : rand(25,40)))))
|
||||
else if(new_prints == 0)
|
||||
if(!src.fingerprints)
|
||||
if(!src.fingerprints || !src.fingerprints.len)
|
||||
src.fingerprints = list(text("1=[]&2=[]", md5(H.dna.uni_identity), stars(md5(H.dna.uni_identity), H.gloves ? rand(10,20) : rand(25,40))))
|
||||
src.fingerprints += text("1=[]&2=[]", md5(H.dna.uni_identity), stars(md5(H.dna.uni_identity), H.gloves ? rand(10,20) : rand(25,40)))
|
||||
else
|
||||
src.fingerprints += text("1=[]&2=[]", md5(H.dna.uni_identity), stars(md5(H.dna.uni_identity), H.gloves ? rand(10,20) : rand(25,40)))
|
||||
for(var/i = 1, i <= src.fingerprints.len, i++)
|
||||
if(length(src.fingerprints[i]) != 69)
|
||||
src.fingerprints.Remove(src.fingerprints[i])
|
||||
if(fingerprints && !fingerprints.len) del(fingerprints)
|
||||
return 1
|
||||
else
|
||||
if(src.fingerprintslast != M.key)
|
||||
@@ -153,10 +159,7 @@
|
||||
if (!( src.flags ) & 256)
|
||||
return
|
||||
if(!blood_DNA)
|
||||
var/turf/Z = get_turf(src)
|
||||
message_admins("\red ERROR: [src] at [Z.x], [Z.y], [Z.z] is missing it's blood_DNA list!")
|
||||
log_game("\red ERROR: [src] at [Z.x], [Z.y], [Z.z] is missing it's blood_DNA list!")
|
||||
return
|
||||
blood_DNA = list()
|
||||
if (blood_DNA.len)
|
||||
if (istype(src, /obj/item)&&!istype(src, /obj/item/weapon/melee/energy))//Only regular items. Energy melee weapon are not affected.
|
||||
var/obj/item/source2 = src
|
||||
@@ -273,15 +276,18 @@
|
||||
log_game("\red ERROR: [src] at [Z.x], [Z.y], [Z.z] is missing it's blood_DNA list!")
|
||||
blood_DNA = list()
|
||||
return
|
||||
if ( src.blood_DNA.len )
|
||||
if ( src.blood_DNA )
|
||||
if (istype (src, /mob/living/carbon))
|
||||
var/obj/item/source2 = src
|
||||
source2.blood_DNA = list()
|
||||
del(source2.blood_DNA)
|
||||
if(ishuman(src))
|
||||
var/mob/living/carbon/human/M = src
|
||||
M.bloody_hands = 0
|
||||
//var/icon/I = new /icon(source2.icon_old, source2.icon_state) //doesnt have icon_old
|
||||
//source2.icon = I
|
||||
if (istype (src, /obj/item))
|
||||
var/obj/item/source2 = src
|
||||
source2.blood_DNA = list()
|
||||
del(source2.blood_DNA)
|
||||
// var/icon/I = new /icon(source2.icon_old, source2.icon_state)
|
||||
if(source2.icon_old)
|
||||
source2.icon = source2.icon_old
|
||||
@@ -289,9 +295,12 @@
|
||||
else
|
||||
source2.icon = initial(icon)
|
||||
source2.update_icon()
|
||||
if(istype(src, /obj/item/clothing/gloves))
|
||||
var/obj/item/clothing/gloves/G = src
|
||||
G.transfer_blood = 0
|
||||
if (istype(src, /turf/simulated))
|
||||
var/obj/item/source2 = src
|
||||
source2.blood_DNA = list()
|
||||
del(source2.blood_DNA)
|
||||
if(source2.icon_old)
|
||||
var/icon/I = new /icon(source2.icon_old, source2.icon_state)
|
||||
source2.icon = I
|
||||
@@ -316,8 +325,8 @@
|
||||
break
|
||||
else
|
||||
src.fingerprints[i] = "1=" + prints["1"] + "&2=" + new_print
|
||||
if(!src.fingerprints)
|
||||
src.fingerprints = list()
|
||||
if(fingerprints && !fingerprints.len)
|
||||
del(fingerprints)
|
||||
if(istype(src, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/M = src
|
||||
M.update_clothing()
|
||||
|
||||
@@ -19,6 +19,12 @@
|
||||
|
||||
// determine DNA fragment from hairstyle
|
||||
// :wtc:
|
||||
// If the character doesn't have initialized hairstyles / beardstyles, initialize it for them!
|
||||
if(!character.hair_style)
|
||||
character.hair_style = new/datum/sprite_accessory/hair/short
|
||||
|
||||
if(!character.facial_hair_style)
|
||||
character.facial_hair_style = new/datum/sprite_accessory/facial_hair/shaved
|
||||
|
||||
var/list/styles = typesof(/datum/sprite_accessory/hair) - /datum/sprite_accessory/hair
|
||||
var/hrange = round(4095 / styles.len)
|
||||
|
||||
@@ -373,6 +373,10 @@ datum/objective/steal
|
||||
if(istype(M, /mob/living/silicon/ai) && M.stat != 2)
|
||||
// world << "yay, you win!"
|
||||
return 1
|
||||
for(var/mob/living/silicon/ai/M in world)
|
||||
if(istype(M.loc, /turf))
|
||||
if(istype(get_area(M), /area/shuttle/escape))
|
||||
return 1
|
||||
else
|
||||
for(var/obj/I in all_items)
|
||||
if(istype(I, steal_target))
|
||||
|
||||
@@ -66,6 +66,11 @@
|
||||
continue
|
||||
else if (M == usr)
|
||||
continue
|
||||
var/turf/temp_turf = get_turf(M)
|
||||
if(temp_turf.z != 1 && temp_turf.z != 5) //Not on mining or the station.
|
||||
continue
|
||||
if(!checkcameravis(M)) //Not near a camera
|
||||
continue
|
||||
|
||||
var/name = M.name
|
||||
if (name in names)
|
||||
|
||||
@@ -140,7 +140,7 @@
|
||||
sleep(6)
|
||||
open()
|
||||
return 1
|
||||
if (src.allowed(user))
|
||||
if (src.allowed(user) || istype(I, /obj/item/device/hacktool))
|
||||
if (src.density)
|
||||
open()
|
||||
else
|
||||
|
||||
@@ -60,7 +60,8 @@
|
||||
// 1 = laser
|
||||
// 2 = cannon
|
||||
// 3 = pulse
|
||||
var/health = 80
|
||||
var/health = 18
|
||||
var/id = ""
|
||||
var/obj/machinery/turretcover/cover = null
|
||||
var/popping = 0
|
||||
var/wasvalid = 0
|
||||
@@ -295,27 +296,38 @@
|
||||
icon_state = "motion3"
|
||||
anchored = 1
|
||||
density = 0
|
||||
req_access = list(access_ai_upload)
|
||||
var/enabled = 1
|
||||
var/id = ""
|
||||
var/lethal = 0
|
||||
var/locked = 1
|
||||
var/control_area //can be area name, path or nothing.
|
||||
req_access = list(access_ai_upload)
|
||||
var/similar_controls
|
||||
var/turrets
|
||||
|
||||
/obj/machinery/turretid/east
|
||||
pixel_x = 28
|
||||
|
||||
/obj/machinery/turretid/south
|
||||
pixel_y = -28
|
||||
|
||||
/obj/machinery/turretid/west
|
||||
pixel_x = -28
|
||||
|
||||
/obj/machinery/turretid/north
|
||||
pixel_y = 28
|
||||
|
||||
/obj/machinery/turretid/New()
|
||||
..()
|
||||
if(!control_area)
|
||||
var/area/CA = get_area(src)
|
||||
if(CA.master && CA.master != CA)
|
||||
control_area = CA.master
|
||||
else
|
||||
control_area = CA
|
||||
else if(istext(control_area))
|
||||
for(var/area/A in world)
|
||||
if(A.name && A.name==control_area)
|
||||
control_area = A
|
||||
break
|
||||
//don't have to check if control_area is path, since get_area_all_atoms can take path.
|
||||
return
|
||||
spawn(10) // allow map load
|
||||
turrets = list()
|
||||
for(var/obj/machinery/turret/T in world)
|
||||
if(T.id == id)
|
||||
turrets += T
|
||||
|
||||
similar_controls = list() // On modifying a control, all the similar controls should change their icon_state as well
|
||||
for(var/obj/machinery/turretid/TC in world)
|
||||
if(TC.id == id && TC != src)
|
||||
similar_controls += TC
|
||||
|
||||
/obj/machinery/turretid/attackby(obj/item/weapon/W, mob/user)
|
||||
if(stat & BROKEN) return
|
||||
@@ -365,20 +377,6 @@
|
||||
user << browse(t, "window=turretid")
|
||||
onclose(user, "turretid")
|
||||
|
||||
|
||||
/obj/machinery/turret/attack_alien(mob/living/carbon/alien/humanoid/M as mob)
|
||||
if(!(stat & BROKEN))
|
||||
playsound(src.loc, 'slash.ogg', 25, 1, -1)
|
||||
for(var/mob/O in viewers(src, null))
|
||||
if ((O.client && !( O.blinded )))
|
||||
O.show_message(text("\red <B>[] has slashed at []!</B>", M, src), 1)
|
||||
src.health -= 15
|
||||
if (src.health <= 0)
|
||||
src.die()
|
||||
else
|
||||
M << "\green That object is useless to you."
|
||||
return
|
||||
|
||||
/obj/machinery/turretid/Topic(href, href_list)
|
||||
..()
|
||||
if (src.locked)
|
||||
@@ -394,25 +392,35 @@
|
||||
src.attack_hand(usr)
|
||||
|
||||
/obj/machinery/turretid/proc/updateTurrets()
|
||||
if(control_area)
|
||||
for (var/obj/machinery/turret/aTurret in get_area_all_atoms(control_area))
|
||||
aTurret.setState(enabled, lethal)
|
||||
update_icons()
|
||||
|
||||
/obj/machinery/turretid/proc/update_icons()
|
||||
if (src.enabled)
|
||||
if (src.lethal)
|
||||
icon_state = "motion1"
|
||||
src.icon_state = "motion1"
|
||||
for(var/obj/machinery/turretid/TC in src.similar_controls) //Change every similar control's icon as well
|
||||
TC.icon_state = "motion1"
|
||||
else
|
||||
icon_state = "motion3"
|
||||
src.icon_state = "motion3"
|
||||
for(var/obj/machinery/turretid/TC in src.similar_controls)
|
||||
TC.icon_state = "motion3"
|
||||
else
|
||||
icon_state = "motion0"
|
||||
if(control_area)
|
||||
for (var/obj/machinery/turretid/aTurret in get_area_all_atoms(control_area))
|
||||
aTurret.icon_state = icon_state
|
||||
aTurret.enabled = enabled
|
||||
aTurret.lethal = lethal
|
||||
src.icon_state = "motion0"
|
||||
for(var/obj/machinery/turretid/TC in src.similar_controls)
|
||||
TC.icon_state = "motion0"
|
||||
|
||||
for (var/obj/machinery/turret/aTurret in turrets)
|
||||
aTurret.setState(enabled, lethal)
|
||||
|
||||
/obj/machinery/turret/attack_alien(mob/living/carbon/alien/humanoid/M as mob)
|
||||
if(!(stat & BROKEN))
|
||||
playsound(src.loc, 'slash.ogg', 25, 1, -1)
|
||||
for(var/mob/O in viewers(src, null))
|
||||
if ((O.client && !( O.blinded )))
|
||||
O.show_message(text("\red <B>[] has slashed at []!</B>", M, src), 1)
|
||||
src.health -= 15
|
||||
if (src.health <= 0)
|
||||
src.die()
|
||||
else
|
||||
M << "\green That object is useless to you."
|
||||
return
|
||||
|
||||
|
||||
/obj/structure/turret/gun_turret
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
src.req_access += pick(get_all_accesses())
|
||||
..()
|
||||
|
||||
/obj/structure/closet/secure_closet/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
/obj/structure/closet/secure_closet/attackby(obj/item/W as obj, mob/user as mob)
|
||||
if(src.opened)
|
||||
if(istype(W, /obj/item/weapon/grab))
|
||||
if(src.large)
|
||||
@@ -70,6 +70,18 @@
|
||||
else
|
||||
src.icon_state = src.icon_closed
|
||||
|
||||
else if(istype(W, /obj/item/device/hacktool))
|
||||
spawn(0)
|
||||
user << "Standby, jacking into the security systems..."
|
||||
if(do_after(user, 20))
|
||||
user << "Wiping access requirements..."
|
||||
else
|
||||
user << "You need to stay still!"
|
||||
if(do_after(user, 20))
|
||||
user << "Access requirements are wiped! Anyone can access the locker, now!"
|
||||
req_access = list()
|
||||
else
|
||||
user << "You need to stay still!"
|
||||
else
|
||||
user << "\red Access Denied"
|
||||
return
|
||||
|
||||
@@ -749,8 +749,10 @@
|
||||
user << "\blue No fingerprints found on [C]"
|
||||
else
|
||||
user << text("\blue [C]'s Fingerprints: [md5(C:dna.uni_identity)]")
|
||||
if ( !(C:blood_DNA.len) )
|
||||
if ( !C:blood_DNA || !C:blood_DNA.len )
|
||||
user << "\blue No blood found on [C]"
|
||||
if(C:blood_DNA)
|
||||
del(C:blood_DNA)
|
||||
else
|
||||
user << "\blue Blood found on [C]. Analysing..."
|
||||
spawn(15)
|
||||
|
||||
@@ -123,8 +123,10 @@ MASS SPECTROMETER
|
||||
|
||||
user << "\blue Done printing."
|
||||
user << text("\blue [M]'s Fingerprints: [md5(M.dna.uni_identity)]")
|
||||
if ( !(M.blood_DNA.len) )
|
||||
if ( !M.blood_DNA || !M.blood_DNA.len )
|
||||
user << "\blue No blood found on [M]"
|
||||
if(M.blood_DNA)
|
||||
del(M.blood_DNA)
|
||||
else
|
||||
user << "\blue Blood found on [M]. Analysing..."
|
||||
spawn(15)
|
||||
@@ -143,18 +145,20 @@ MASS SPECTROMETER
|
||||
if(istype(A,/obj/item/weapon/f_card))
|
||||
user << "Haha, nice try. Cheater. (It would break stuff anyways.)"
|
||||
return
|
||||
if(!A.fingerprints)
|
||||
A.fingerprints = list()
|
||||
src.add_fingerprint(user)
|
||||
if (istype(A, /obj/effect/decal/cleanable/blood) || istype(A, /obj/effect/rune))
|
||||
if(!isnull(A.blood_DNA.len))
|
||||
if(!isnull(A.blood_DNA))
|
||||
for(var/i = 1, i <= A.blood_DNA.len, i++)
|
||||
var/list/templist = A.blood_DNA[i]
|
||||
user << "\blue Blood type: [templist[2]]\nDNA: [templist[1]]"
|
||||
return
|
||||
var/duplicate = 0
|
||||
if ((!A.fingerprints || A.fingerprints.len == 0) && !(A.suit_fibers) && !(A.blood_DNA.len))
|
||||
if ((!A.fingerprints || !A.fingerprints.len) && !A.suit_fibers && !A.blood_DNA)
|
||||
user << "\blue Unable to locate any fingerprints, materials, fibers, or blood on [A]!"
|
||||
return 0
|
||||
else if (A.blood_DNA.len)
|
||||
else if (A.blood_DNA)
|
||||
user << "\blue Blood found on [A]. Analysing..."
|
||||
sleep(15)
|
||||
if(!duplicate)
|
||||
@@ -167,8 +171,10 @@ MASS SPECTROMETER
|
||||
user << "\blue Blood type: [templist[2]]\nDNA: [templist[1]]"
|
||||
else
|
||||
user << "\blue No Blood Located"
|
||||
if(!A.fingerprints || A.fingerprints.len == 0)
|
||||
if(!A.fingerprints || !A.fingerprints.len)
|
||||
user << "\blue No Fingerprints Located."
|
||||
if(A.fingerprints)
|
||||
del(A.fingerprints)
|
||||
else
|
||||
user << text("\blue Isolated [A.fingerprints.len] fingerprints: Data Stored: Scan with Hi-Res Forensic Scanner to retrieve.")
|
||||
if(!duplicate)
|
||||
@@ -208,7 +214,8 @@ MASS SPECTROMETER
|
||||
for(var/i = 1, i < (stored.len + 1), i++) //Lets see if the object is already in there!
|
||||
var/list/temp = stored[i]
|
||||
var/atom/checker = temp[1]
|
||||
if(checker.original_atom == A || checker.original_atom == A.original_atom) //It is! Merge!
|
||||
var/atom_checker_scan = (A.original_atom ? checker.original_atom[1] == A.original_atom[1] : 0)
|
||||
if(checker.original_atom[1] == A || atom_checker_scan) //It is! Merge!
|
||||
merged = 1
|
||||
var/list/prints = temp[2]
|
||||
if(!prints)
|
||||
@@ -251,11 +258,7 @@ MASS SPECTROMETER
|
||||
if(!merged) //Uh, oh! New data point!
|
||||
var/list/sum_list[4] //Pack it back up!
|
||||
sum_list[1] = A.get_duplicate(src)
|
||||
if(!A.fingerprints)
|
||||
world << "Report this to a dev! [A] was lacking a list() for fingerprints!"
|
||||
sum_list[2] = list()
|
||||
else
|
||||
sum_list[2] = A.fingerprints
|
||||
sum_list[2] = A.fingerprints
|
||||
sum_list[3] = A.suit_fibers
|
||||
sum_list[4] = A.blood_DNA
|
||||
stored.len++
|
||||
|
||||
@@ -101,13 +101,7 @@
|
||||
t = "huge"
|
||||
else
|
||||
if ((usr.mutations & CLUMSY) && prob(50)) t = "funny-looking"
|
||||
if(!blood_DNA)
|
||||
var/turf/Z = get_turf(src)
|
||||
message_admins("\red ERROR: [src] at [Z.x], [Z.y], [Z.z] is missing it's blood_DNA list!")
|
||||
log_game("\red ERROR: [src] at [Z.x], [Z.y], [Z.z] is missing it's blood_DNA list!")
|
||||
blood_DNA = list()
|
||||
return
|
||||
usr << text("This is a []\icon[][]. It is a [] item.", !src.blood_DNA.len ? "" : "bloody ",src, src.name, t)
|
||||
usr << text("This is a []\icon[][]. It is a [] item.", !src.blood_DNA ? "" : "bloody ",src, src.name, t)
|
||||
if(src.desc)
|
||||
usr << src.desc
|
||||
return
|
||||
|
||||
@@ -61,7 +61,7 @@ atom/proc/get_duplicate(var/atom/location)
|
||||
if(src.original_atom)
|
||||
temp_atom.original_atom = src.original_atom
|
||||
else
|
||||
temp_atom.original_atom = src
|
||||
temp_atom.original_atom = list(src)
|
||||
return temp_atom
|
||||
|
||||
#define FINGERPRINT_COMPLETE 6 //This is the output of the stringpercent(print) proc, and means about 80% of
|
||||
@@ -245,28 +245,23 @@ obj/machinery/computer/forensic_scanning
|
||||
print_string = "Fingerprints: (80% or higher completion reached)<br>" + prints[num2text(2)] + "<br>"
|
||||
temp += print_string
|
||||
for(var/i = 2, i <= dossier.len, i++)
|
||||
temp += "<hr>"
|
||||
var/list/outputs = dossier[i]
|
||||
var/item_name = get_name(outputs[1])
|
||||
var/list/prints_len = outputs[2]
|
||||
temp += "Object: [item_name]<br>"
|
||||
temp += "<big><b>Object:</b> [item_name]</big><br>"
|
||||
temp += " <b>Fingerprints:</b><br>"
|
||||
temp += " [prints_len.len] Unique fingerprints found.<br>"
|
||||
var/list/fibers = outputs[3]
|
||||
if(fibers && fibers.len)
|
||||
var/dat = "[fibers[1]]"
|
||||
for(var/j = 2, j <= fibers.len, j++)
|
||||
dat += ",<br> [fibers[j]]"
|
||||
temp += " Fibers: [dat]<br>"
|
||||
else
|
||||
temp += " No fibers found.<br>"
|
||||
temp += " <b>Fibers:</b><br>"
|
||||
for(var/j = 1, j <= fibers.len, j++)
|
||||
temp += " [fibers[j]]<br>"
|
||||
var/list/blood = outputs[4]
|
||||
if(blood && blood.len)
|
||||
var/dat = "[blood[1]]"
|
||||
if(blood.len > 1)
|
||||
for(var/j = 2, j <= blood.len, j++)
|
||||
dat += ",<br> [blood[j]]"
|
||||
temp += " Blood: [dat]<br>"
|
||||
else
|
||||
temp += " No blood found.<br>"
|
||||
temp += " <b>Blood:</b><br>"
|
||||
for(var/j = 1, j <= blood.len, j++)
|
||||
temp += " [blood[j]]<br>"
|
||||
else
|
||||
temp = "ERROR. Database not found!<br>"
|
||||
temp += "<br><a href='?src=\ref[src];operation=database;delete_record=[href_list["identifier"]]'>{Delete this Dossier}</a>"
|
||||
@@ -286,28 +281,23 @@ obj/machinery/computer/forensic_scanning
|
||||
print_string = "Fingerprints: " + prints[num2text(2)] + "<BR>"
|
||||
P.info += print_string
|
||||
for(var/i = 2, i <= dossier.len, i++)
|
||||
P.info += "<hr>"
|
||||
var/list/outputs = dossier[i]
|
||||
var/item_name = get_name(outputs[1])
|
||||
var/list/prints_len = outputs[2]
|
||||
P.info += "Object: [item_name]<br>"
|
||||
P.info += "<big><b>Object:</b> [item_name]</big><br>"
|
||||
P.info += " <b>Fingerprints:</b><br>"
|
||||
P.info += " [prints_len.len] Unique fingerprints found.<br>"
|
||||
var/list/fibers = outputs[3]
|
||||
if(fibers && fibers.len)
|
||||
var/dat = "[fibers[1]]"
|
||||
for(var/j = 2, j <= fibers.len, j++)
|
||||
dat += ",<br> [fibers[j]]"
|
||||
P.info += " Fibers: [dat]<br>"
|
||||
else
|
||||
P.info += " No fibers found.<br>"
|
||||
P.info += " <b>Fibers:</b><br>"
|
||||
for(var/j = 1, j <= fibers.len, j++)
|
||||
P.info += " [fibers[j]]<br>"
|
||||
var/list/blood = outputs[4]
|
||||
if(blood && blood.len)
|
||||
var/dat = "[blood[1]]"
|
||||
if(blood.len > 1)
|
||||
for(var/j = 2, j <= blood.len, j++)
|
||||
dat += ",<br> [blood[j]]"
|
||||
P.info += " Blood: [dat]<br>"
|
||||
else
|
||||
P.info += " No blood found."
|
||||
P.info += " <b>Blood:</b><br>"
|
||||
for(var/j = 1, j <= blood.len, j++)
|
||||
P.info += " [blood[j]]<br>"
|
||||
else
|
||||
usr << "ERROR. Database not found!<br>"
|
||||
if("auxiliary")
|
||||
@@ -317,23 +307,17 @@ obj/machinery/computer/forensic_scanning
|
||||
var/identifier = text2num(href_list["identifier"])
|
||||
var/list/outputs = misc[identifier]
|
||||
var/item_name = get_name(outputs[1])
|
||||
temp += "Consolidated data points: [item_name]<br>"
|
||||
temp += "<big><b>Consolidated data points:</b> [item_name]</big><br>"
|
||||
var/list/fibers = outputs[2]
|
||||
if(fibers && fibers.len)
|
||||
var/dat = "[fibers[1]]"
|
||||
for(var/j = 2, j <= fibers.len, j++)
|
||||
dat += "<br> [fibers[j]]"
|
||||
temp += " Fibers: [dat]<br>"
|
||||
else
|
||||
temp += " No fibers found."
|
||||
temp += " <b>Fibers:</b><br>"
|
||||
for(var/j = 1, j <= fibers.len, j++)
|
||||
temp += "<br> [fibers[j]]"
|
||||
var/list/blood = outputs[3]
|
||||
if(blood && blood.len)
|
||||
var/dat = "[blood[1]]"
|
||||
for(var/j = 2, j <= blood.len, j++)
|
||||
dat += "<br> [blood[j]]"
|
||||
temp += " Blood: [dat]<br>"
|
||||
else
|
||||
temp += " No blood found.<br>"
|
||||
temp += " <b>Blood:</b><br>"
|
||||
for(var/j = 1, j <= blood.len, j++)
|
||||
temp += " [blood[j]]<br>"
|
||||
else
|
||||
temp = "ERROR. Database not found!<br>"
|
||||
temp += "<br><a href='?src=\ref[src];operation=database;delete_aux=[href_list["identifier"]]'>{Delete This Record}</a>"
|
||||
@@ -348,23 +332,17 @@ obj/machinery/computer/forensic_scanning
|
||||
P.name = "Auxiliary Database File ([item_name])"
|
||||
P.overlays += "paper_words"
|
||||
P.info = "<b>Auxiliary Evidence Database</b><br><br>"
|
||||
P.info += "Consolidated data points: [item_name]<br>"
|
||||
P.info += "<big><b>Consolidated data points:</b> [item_name]</big><br>"
|
||||
var/list/fibers = outputs[2]
|
||||
if(fibers && fibers.len)
|
||||
var/dat = "[fibers[1]]"
|
||||
for(var/j = 2, j <= fibers.len, j++)
|
||||
dat += "<br> [fibers[j]]"
|
||||
P.info += " Fibers: [dat]<br>"
|
||||
else
|
||||
P.info += " No fibers found."
|
||||
P.info += " <b>Fibers:</b><br>"
|
||||
for(var/j = 1, j <= fibers.len, j++)
|
||||
P.info += "<br> [fibers[j]]"
|
||||
var/list/blood = outputs[3]
|
||||
if(blood && blood.len)
|
||||
var/dat = "[blood[1]]"
|
||||
for(var/j = 2, j <= blood.len, j++)
|
||||
dat += "<br> [blood[j]]"
|
||||
P.info += " Blood: [dat]<br>"
|
||||
else
|
||||
P.info += " No blood found.<br>"
|
||||
P.info += " <b>Blood:</b><br>"
|
||||
for(var/j = 1, j <= blood.len, j++)
|
||||
P.info += " [blood[j]]<br>"
|
||||
else
|
||||
usr << "ERROR. Database not found!<br>"
|
||||
if("scan")
|
||||
@@ -400,14 +378,14 @@ obj/machinery/computer/forensic_scanning
|
||||
scan_process = 0
|
||||
scan_name = scanning.name
|
||||
scan_data = "<u>[scanning]</u><br><br>"
|
||||
if (scanning.blood_DNA.len)
|
||||
if (scanning.blood_DNA)
|
||||
scan_data += "Blood Found:<br>"
|
||||
for(var/i = 1, i <= scanning.blood_DNA.len, i++)
|
||||
var/list/templist = scanning.blood_DNA[i]
|
||||
scan_data += "-Blood type: [templist[2]]\nDNA: [templist[1]]<br><br>"
|
||||
else
|
||||
scan_data += "No Blood Found<br><br>"
|
||||
if (!length(scanning.fingerprints))
|
||||
if(!scanning.fingerprints)
|
||||
scan_data += "No Fingerprints Found<br><br>"
|
||||
else
|
||||
var/list/L = scanning.fingerprints
|
||||
@@ -441,7 +419,7 @@ obj/machinery/computer/forensic_scanning
|
||||
if(istype(scanning,/obj/item/device/detective_scanner))
|
||||
scan_data += "<br><b>Data transfered from Scanner to Database.</b><br>"
|
||||
add_data_scanner(scanning)
|
||||
else if(!length(scanning.fingerprints))
|
||||
else if(!scanning.fingerprints)
|
||||
scan_data += "<br><b><a href='?src=\ref[src];operation=add'>Add to Database?</a></b><br>"
|
||||
else
|
||||
temp = "Scan Failed: No Object"
|
||||
@@ -510,7 +488,7 @@ obj/machinery/computer/forensic_scanning
|
||||
A.suit_fibers = tempsuit_fibers
|
||||
backup_DNA = A.blood_DNA
|
||||
A.blood_DNA = tempblood_DNA
|
||||
if((!A.fingerprints || !length(A.fingerprints))) //No prints
|
||||
if((!A.fingerprints)) //No prints
|
||||
var/merged = 0
|
||||
if(!misc)
|
||||
misc = list()
|
||||
@@ -518,7 +496,8 @@ obj/machinery/computer/forensic_scanning
|
||||
for(var/i = 1, i <= misc.len, i++) //Lets see if we can find it.
|
||||
var/list/templist = misc[i]
|
||||
var/atom/check = templist[1]
|
||||
if(check.original_atom == A || check.original_atom == A.original_atom) //There it is!
|
||||
var/atom_checker_scan = (A.original_atom ? check.original_atom[1] == A.original_atom[1] : 0)
|
||||
if(check.original_atom[1] == A || atom_checker_scan) //There it is!
|
||||
merged = 1
|
||||
var/list/fibers = templist[2]
|
||||
if(!fibers)
|
||||
@@ -549,7 +528,7 @@ obj/machinery/computer/forensic_scanning
|
||||
misc[misc.len] = templist //Store it!
|
||||
return !merged
|
||||
else //Has prints.
|
||||
var/list/found_prints[A.fingerprints.len + 1]
|
||||
var/list/found_prints[A.fingerprints.len]
|
||||
for(var/i = 1, i <= found_prints.len, i++)
|
||||
found_prints[i] = 0
|
||||
if(!files)
|
||||
@@ -567,7 +546,8 @@ obj/machinery/computer/forensic_scanning
|
||||
for(var/n = 2, n <= perp_list.len, n++) //Lets see if it is already in the database
|
||||
var/list/target = perp_list[n]
|
||||
var/atom/atom_checker = target[1]
|
||||
if(atom_checker.original_atom == A || atom_checker.original_atom == A.original_atom) //Found the original object!
|
||||
var/atom_checker_scan = (A.original_atom ? atom_checker.original_atom[1] == A.original_atom[1] : 0)
|
||||
if(atom_checker.original_atom[1] == A || atom_checker_scan) //Found the original object!
|
||||
found2 = 1
|
||||
var/list/prints = target[2]
|
||||
if(!prints)
|
||||
@@ -617,7 +597,7 @@ obj/machinery/computer/forensic_scanning
|
||||
perp_list.len++
|
||||
perp_list[perp_list.len] = sum_list
|
||||
files[i] = perp_list
|
||||
for(var/m = 1, m < found_prints.len, m++) //Uh Oh! A print wasn't used! New datapoint!
|
||||
for(var/m = 1, m <= found_prints.len, m++) //Uh Oh! A print wasn't used! New datapoint!
|
||||
if(found_prints[m] == 0)
|
||||
var/list/newperp[2]
|
||||
var/list/sum_list[4]
|
||||
|
||||
@@ -139,8 +139,6 @@
|
||||
verbs += /client/proc/only_one // Fateweaver suggested I do this - Doohl
|
||||
verbs += /client/proc/callprocgen
|
||||
verbs += /client/proc/callprocobj
|
||||
verbs += /client/proc/cmd_debug_prints
|
||||
verbs += /client/proc/cmd_debug_blood
|
||||
verbs += /client/proc/rnd_check_designs
|
||||
|
||||
if (holder.level >= 5)//Game Admin********************************************************************
|
||||
@@ -426,8 +424,6 @@
|
||||
verbs -= /client/proc/delbook
|
||||
verbs -= /client/proc/Force_Event_admin
|
||||
verbs -= /client/proc/radioalert
|
||||
verbs -= /client/proc/cmd_debug_prints
|
||||
verbs -= /client/proc/cmd_debug_blood
|
||||
verbs -= /client/proc/rnd_check_designs
|
||||
verbs -= /client/proc/make_tajaran
|
||||
|
||||
|
||||
@@ -813,75 +813,4 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
M.equip_if_possible(W, M.slot_wear_id)
|
||||
|
||||
M.update_clothing()
|
||||
return
|
||||
|
||||
|
||||
/client/proc/cmd_debug_blood()
|
||||
set category = "Debug"
|
||||
set name = "Analyze all blood_DNA"
|
||||
|
||||
// to prevent REALLY stupid activations
|
||||
switch(alert("Are you sure?", ,"Yes", "No"))
|
||||
if("No")
|
||||
return
|
||||
world << "\red ALERT! \black Standby for high CPU bugtesting to determine missing blood_DNA values!"
|
||||
world << "\red THIS WILL PROBABLY LAG LIKE HELL."
|
||||
world << "Initiating in 10 BYOND seconds..."
|
||||
log_admin("[key_name(src)] has initiated a scan of all blood_DNA lists!")
|
||||
message_admins("[key_name_admin(src)] has initiated a scan of all blood_DNA lists!", 0)
|
||||
sleep(100)
|
||||
world << "\red SCAN INITIATED."
|
||||
spawn(0) //I am not stupid enough to leave that in a regular loop.
|
||||
for(var/atom/O in world)
|
||||
if(!islist(O.blood_DNA))
|
||||
var/turf/T = get_turf(O)
|
||||
if(istype(O.loc,/turf))
|
||||
src << "[O] at [T.x],[T.y],[T.z] has a non-list blood_DNA variable! (Last touched by [O.fingerprintslast])"
|
||||
else
|
||||
src << "[O] in [O.loc] at [T.x],[T.y],[T.z] has a non-list blood_DNA variable! (Last touched by [O.fingerprintslast])"
|
||||
world << "\red SCAN COMPLETE."
|
||||
world << "Thank you for your patience."
|
||||
return
|
||||
|
||||
|
||||
/client/proc/cmd_debug_prints()
|
||||
set category = "Debug"
|
||||
set name = "Analyze all fingerprints"
|
||||
|
||||
// to prevent REALLY stupid activations
|
||||
switch(alert("Are you sure?", ,"Yes", "No"))
|
||||
if("No")
|
||||
return
|
||||
world << "\red ALERT! \black Standby for high CPU bugtesting to determine incorrect fingerprint values!"
|
||||
world << "\red THIS WILL PROBABLY LAG LIKE HELL."
|
||||
world << "Initiating in 10 BYOND seconds..."
|
||||
log_admin("[key_name(src)] has initiated a scan of all fingerprints!")
|
||||
message_admins("[key_name_admin(src)] has initiated a scan of all fingerprints!", 0)
|
||||
sleep(100)
|
||||
world << "\red SCAN INITIATED."
|
||||
spawn(0) //I am not stupid enough to leave that in a regular loop.
|
||||
for(var/atom/O in world)
|
||||
if(istype(O, /mob)) //Lets not.
|
||||
continue
|
||||
if(!islist(O.fingerprints))
|
||||
var/turf/T = get_turf(O)
|
||||
if(istype(O.loc,/turf))
|
||||
src << "[O] at [T.x],[T.y],[T.z] has a non-list fingerprints variable! (Last touched by [O.fingerprintslast])"
|
||||
else
|
||||
src << "[O] in [O.loc] at [T.x],[T.y],[T.z] has a non-list fingerprints variable! (Last touched by [O.fingerprintslast])"
|
||||
else if (O.fingerprints.len)
|
||||
for(var/i = 1, i <= O.fingerprints.len, i++)
|
||||
if(length(O.fingerprints[i]) != 69)
|
||||
var/turf/T = get_turf(O)
|
||||
if(isnull(T))
|
||||
src << "[O] at [O.loc] has a fingerprints variable of incorrect length! (TURF NOT FOUND). (Last touched by [O.fingerprintslast])"
|
||||
else
|
||||
if(istype(O.loc,/turf))
|
||||
src << "[O] at [T.x],[T.y],[T.z] has a fingerprints variable of incorrect length! (Last touched by [O.fingerprintslast])"
|
||||
else
|
||||
src << "[O] in [O.loc] at [T.x],[T.y],[T.z] has a fingerprints variable of incorrect length! (Last touched by [O.fingerprintslast])"
|
||||
break
|
||||
|
||||
world << "\red SCAN COMPLETE."
|
||||
world << "Thank you for your patience."
|
||||
return
|
||||
return
|
||||
@@ -157,8 +157,11 @@ datum
|
||||
blood_prop = new(T)
|
||||
blood_prop.blood_DNA = list(list(self.data["blood_DNA"], self.data["blood_type"]))
|
||||
else
|
||||
blood_prop.blood_DNA.len++
|
||||
blood_prop.blood_DNA[blood_prop.blood_DNA.len] = list(self.data["blood_DNA"], self.data["blood_type"])
|
||||
if(!blood_prop.blood_DNA)
|
||||
blood_prop.blood_DNA = list(list(self.data["blood_DNA"], self.data["blood_type"]))
|
||||
else
|
||||
blood_prop.blood_DNA.len++
|
||||
blood_prop.blood_DNA[blood_prop.blood_DNA.len] = list(self.data["blood_DNA"], self.data["blood_type"])
|
||||
|
||||
for(var/datum/disease/D in self.data["viruses"])
|
||||
var/datum/disease/newVirus = new D.type
|
||||
@@ -184,8 +187,11 @@ datum
|
||||
blood_prop = new(T)
|
||||
blood_prop.blood_DNA = list(list(self.data["blood_DNA"],"A+"))
|
||||
else
|
||||
blood_prop.blood_DNA.len++
|
||||
blood_prop.blood_DNA[blood_prop.blood_DNA.len] = list(self.data["blood_DNA"], "A+")
|
||||
if(!blood_prop.blood_DNA)
|
||||
blood_prop.blood_DNA = list(list(self.data["blood_DNA"],"A+"))
|
||||
else
|
||||
blood_prop.blood_DNA.len++
|
||||
blood_prop.blood_DNA[blood_prop.blood_DNA.len] = list(self.data["blood_DNA"], "A+")
|
||||
|
||||
for(var/datum/disease/D in self.data["viruses"])
|
||||
var/datum/disease/newVirus = new D.type
|
||||
@@ -205,8 +211,11 @@ datum
|
||||
blood_prop = new(T)
|
||||
blood_prop.blood_DNA = list(list("UNKNOWN DNA","X*"))
|
||||
else
|
||||
blood_prop.blood_DNA.len++
|
||||
blood_prop.blood_DNA[blood_prop.blood_DNA.len] = list("UNKNOWN DNA","X*")
|
||||
if(!blood_prop.blood_DNA)
|
||||
blood_prop.blood_DNA = list(list("UNKNOWN DNA","X*"))
|
||||
else
|
||||
blood_prop.blood_DNA.len++
|
||||
blood_prop.blood_DNA[blood_prop.blood_DNA.len] = list("UNKNOWN DNA","X*")
|
||||
|
||||
for(var/datum/disease/D in self.data["viruses"])
|
||||
var/datum/disease/newVirus = new D.type
|
||||
|
||||
@@ -379,7 +379,7 @@
|
||||
if (!t1)
|
||||
t1 = wear_suit.icon_state
|
||||
overlays += image("icon" = 'mob.dmi', "icon_state" = text("[][]", t1, (!( lying ) ? null : "2")), "layer" = MOB_LAYER)
|
||||
if (wear_suit.blood_DNA.len)
|
||||
if (wear_suit.blood_DNA)
|
||||
if (istype(wear_suit, /obj/item/clothing/suit/armor))
|
||||
overlays += image("icon" = 'blood.dmi', "icon_state" = "armorblood[!lying ? "" : "2"]", "layer" = MOB_LAYER)
|
||||
else
|
||||
@@ -404,7 +404,7 @@
|
||||
if (!t1)
|
||||
t1 = head.icon_state
|
||||
overlays += image("icon" = 'mob.dmi', "icon_state" = text("[][]", t1, (!( lying ) ? null : "2")), "layer" = MOB_LAYER)
|
||||
if (head.blood_DNA.len)
|
||||
if (head.blood_DNA)
|
||||
overlays += image("icon" = 'blood.dmi', "icon_state" = "helmetblood[!lying ? "" : "2"]", "layer" = MOB_LAYER)
|
||||
head.screen_loc = ui_oclothing
|
||||
|
||||
|
||||
@@ -16,8 +16,8 @@
|
||||
t_him = "her"
|
||||
|
||||
if (src.w_uniform)
|
||||
if (src.w_uniform.blood_DNA.len)
|
||||
usr << "\red [src.name] is wearing a[src.w_uniform.blood_DNA.len ? " bloody " : " "] \icon[src.w_uniform] [src.w_uniform.name]!"
|
||||
if (src.w_uniform.blood_DNA)
|
||||
usr << "\red [src.name] is wearing a[src.w_uniform.blood_DNA ? " bloody " : " "] \icon[src.w_uniform] [src.w_uniform.name]!"
|
||||
else
|
||||
usr << "\blue [src.name] is wearing a \icon[src.w_uniform] [src.w_uniform.name]."
|
||||
|
||||
@@ -25,8 +25,8 @@
|
||||
usr << "\blue [src.name] is \icon[src.handcuffed] handcuffed!"
|
||||
|
||||
if (src.wear_suit)
|
||||
if (src.wear_suit.blood_DNA.len)
|
||||
usr << "\red [src.name] has a[src.wear_suit.blood_DNA.len ? " bloody " : " "] \icon[src.wear_suit] [src.wear_suit.name] on!"
|
||||
if (src.wear_suit.blood_DNA)
|
||||
usr << "\red [src.name] has a[src.wear_suit.blood_DNA ? " bloody " : " "] \icon[src.wear_suit] [src.wear_suit.name] on!"
|
||||
else
|
||||
usr << "\blue [src.name] has a \icon[src.wear_suit] [src.wear_suit.name] on."
|
||||
|
||||
@@ -37,51 +37,51 @@
|
||||
usr << "\blue [src.name] has a \icon[src.r_ear] [src.r_ear.name] on [t_his] right ear."
|
||||
|
||||
if (src.wear_mask)
|
||||
if (src.wear_mask.blood_DNA.len)
|
||||
usr << "\red [src.name] has a[src.wear_mask.blood_DNA.len ? " bloody " : " "] \icon[src.wear_mask] [src.wear_mask.name] on [t_his] face!"
|
||||
if (src.wear_mask.blood_DNA)
|
||||
usr << "\red [src.name] has a[src.wear_mask.blood_DNA ? " bloody " : " "] \icon[src.wear_mask] [src.wear_mask.name] on [t_his] face!"
|
||||
else
|
||||
usr << "\blue [src.name] has a \icon[src.wear_mask] [src.wear_mask.name] on [t_his] face."
|
||||
|
||||
if (src.head)
|
||||
usr << "\blue [src.name] is wearing a[src.head.blood_DNA.len ? " bloody " : " "] \icon[src.head] [src.head.name] on [t_his] head!"
|
||||
usr << "\blue [src.name] is wearing a[src.head.blood_DNA ? " bloody " : " "] \icon[src.head] [src.head.name] on [t_his] head!"
|
||||
|
||||
if (src.glasses)
|
||||
usr << "\blue [src.name] is wearing a pair of [src.glasses.blood_DNA.len ? " bloody " : " "] \icon[src.glasses] [src.glasses.name]!"
|
||||
usr << "\blue [src.name] is wearing a pair of [src.glasses.blood_DNA ? " bloody " : " "] \icon[src.glasses] [src.glasses.name]!"
|
||||
|
||||
|
||||
|
||||
if (src.l_hand)
|
||||
if (src.l_hand.blood_DNA.len)
|
||||
usr << "\red [src.name] has a[src.l_hand.blood_DNA.len ? " bloody " : " "] \icon[src.l_hand] [src.l_hand.name] in [t_his] left hand!"
|
||||
if (src.l_hand.blood_DNA)
|
||||
usr << "\red [src.name] has a[src.l_hand.blood_DNA ? " bloody " : " "] \icon[src.l_hand] [src.l_hand.name] in [t_his] left hand!"
|
||||
else
|
||||
usr << "\blue [src.name] has a \icon[src.l_hand] [src.l_hand.name] in [t_his] left hand."
|
||||
|
||||
if (src.r_hand)
|
||||
if (src.r_hand.blood_DNA.len)
|
||||
usr << "\red [src.name] has a[src.r_hand.blood_DNA.len ? " bloody " : " "] \icon[src.r_hand] [src.r_hand.name] in [t_his] right hand!"
|
||||
if (src.r_hand.blood_DNA)
|
||||
usr << "\red [src.name] has a[src.r_hand.blood_DNA ? " bloody " : " "] \icon[src.r_hand] [src.r_hand.name] in [t_his] right hand!"
|
||||
else
|
||||
usr << "\blue [src.name] has a \icon[src.r_hand] [src.r_hand.name] in [t_his] right hand."
|
||||
|
||||
if (src.belt)
|
||||
if (src.belt.blood_DNA.len)
|
||||
usr << "\red [src.name] has a[src.belt.blood_DNA.len ? " bloody " : " "] \icon[src.belt] [src.belt.name] on [t_his] belt!"
|
||||
if (src.belt.blood_DNA)
|
||||
usr << "\red [src.name] has a[src.belt.blood_DNA ? " bloody " : " "] \icon[src.belt] [src.belt.name] on [t_his] belt!"
|
||||
else
|
||||
usr << "\blue [src.name] has a \icon[src.belt] [src.belt.name] on [t_his] belt."
|
||||
if(src.s_store)
|
||||
if(src.s_store.blood_DNA.len)
|
||||
usr << "\red [src.name] has a[src.s_store.blood_DNA.len ? " bloody " : " "] \icon[src.s_store] [src.s_store.name] on [t_his][src.wear_suit.blood_DNA.len ? " bloody " : " "] \icon[src.wear_suit] [src.wear_suit.name]!"
|
||||
if(src.s_store.blood_DNA)
|
||||
usr << "\red [src.name] has a[src.s_store.blood_DNA ? " bloody " : " "] \icon[src.s_store] [src.s_store.name] on [t_his][src.wear_suit.blood_DNA ? " bloody " : " "] \icon[src.wear_suit] [src.wear_suit.name]!"
|
||||
else
|
||||
usr << "\blue [src.name] has a \icon[src.s_store] [src.s_store.name] on [t_his][src.wear_suit.blood_DNA.len ? " bloody " : " "] \icon[src.wear_suit] [src.wear_suit.name]."
|
||||
usr << "\blue [src.name] has a \icon[src.s_store] [src.s_store.name] on [t_his][src.wear_suit.blood_DNA ? " bloody " : " "] \icon[src.wear_suit] [src.wear_suit.name]."
|
||||
if (src.shoes)
|
||||
usr << "[src.shoes.blood_DNA.len ? "\red" : "\blue"] [src.name] has a[src.shoes.blood_DNA.len ? " bloody " : " "] \icon[src.shoes] [src.shoes.name] on [t_his] feet."
|
||||
usr << "[src.shoes.blood_DNA ? "\red" : "\blue"] [src.name] has a[src.shoes.blood_DNA ? " bloody " : " "] \icon[src.shoes] [src.shoes.name] on [t_his] feet."
|
||||
|
||||
|
||||
if (src.gloves)
|
||||
if (src.gloves.blood_DNA.len)
|
||||
if (src.gloves.blood_DNA)
|
||||
usr << "\red [src.name] has bloody \icon[src.gloves] [src.gloves.name] on [t_his] hands!"
|
||||
else
|
||||
usr << "\blue [src.name] has \icon[src.gloves] [src.gloves.name] on [t_his] hands."
|
||||
else if (src.blood_DNA.len)
|
||||
else if (src.blood_DNA)
|
||||
usr << "\red [src.name] has bloody hands!"
|
||||
|
||||
if (src.back)
|
||||
@@ -97,7 +97,7 @@
|
||||
id = src.wear_id.registered_name
|
||||
if (src.wear_id.PHOTO)
|
||||
photo = 1
|
||||
if (id != src.real_name && in_range(src, usr) && prob(10))
|
||||
if (id != src.real_name && in_range(src, usr))
|
||||
if (photo)
|
||||
usr << "\red [src.name] is wearing \icon[src.wear_id] [src.wear_id.name] with a photo yet doesn't seem to be that person!!!"
|
||||
else
|
||||
@@ -144,34 +144,35 @@
|
||||
O.show_message("[usr] checks [src]'s pulse.", 1)
|
||||
sleep(15)
|
||||
usr << "\red [name] has no pulse!"
|
||||
else
|
||||
if (src.getBruteLoss())
|
||||
if (src.getBruteLoss() < 30)
|
||||
usr << "\red [src.name] looks slightly injured!"
|
||||
else
|
||||
usr << "\red <B>[src.name] looks severely injured!</B>"
|
||||
|
||||
if (src.cloneloss)
|
||||
if (src.cloneloss < 30)
|
||||
usr << "\red [src.name] looks slightly... unfinished?"
|
||||
else
|
||||
usr << "\red <B>[src.name] looks very... unfinished?</B>"
|
||||
if (src.getBruteLoss())
|
||||
if (src.getBruteLoss() < 30)
|
||||
usr << "\red [src.name] looks slightly injured!"
|
||||
else
|
||||
usr << "\red <B>[src.name] looks severely injured!</B>"
|
||||
|
||||
if (src.getFireLoss())
|
||||
if (src.getFireLoss() < 30)
|
||||
usr << "\red [src.name] looks slightly burned!"
|
||||
else
|
||||
usr << "\red <B>[src.name] looks severely burned!</B>"
|
||||
if (src.cloneloss)
|
||||
if (src.cloneloss < 30)
|
||||
usr << "\red [src.name] looks slightly... unfinished?"
|
||||
else
|
||||
usr << "\red <B>[src.name] looks very... unfinished?</B>"
|
||||
|
||||
if (src.nutrition < 100)
|
||||
usr << "\red [src.name] looks like flesh and bones."
|
||||
else if (src.nutrition >= 500)
|
||||
if (usr.nutrition < 100)
|
||||
usr << "\red [src.name] looks very round and delicious. Like a little piggy. A tasty piggy."
|
||||
else
|
||||
usr << "\blue [src.name] looks quite chubby."
|
||||
if (src.getFireLoss())
|
||||
if (src.getFireLoss() < 30)
|
||||
usr << "\red [src.name] looks slightly burned!"
|
||||
else
|
||||
usr << "\red <B>[src.name] looks severely burned!</B>"
|
||||
|
||||
else if (src.brainloss >= 60)
|
||||
if (src.nutrition < 100)
|
||||
usr << "\red [src.name] looks like flesh and bones."
|
||||
else if (src.nutrition >= 500)
|
||||
if (usr.nutrition < 100)
|
||||
usr << "\red [src.name] looks very round and delicious. Like a little piggy. A tasty piggy."
|
||||
else
|
||||
usr << "\blue [src.name] looks quite chubby."
|
||||
|
||||
if(!stat)
|
||||
if (src.brainloss >= 60)
|
||||
usr << "\red [src.name] has a stupid expression on [t_his] face."
|
||||
if (!src.client)
|
||||
usr << "\red [src.name] doesn't seem as though they want to talk."
|
||||
|
||||
@@ -886,7 +886,7 @@
|
||||
overlays += image("icon" = 'uniform_fat.dmi', "icon_state" = "[t1][!lying ? "_s" : "_l"]", "layer" = MOB_LAYER)
|
||||
else
|
||||
overlays += image("icon" = 'uniform.dmi', "icon_state" = text("[][]",t1, (!(lying) ? "_s" : "_l")), "layer" = MOB_LAYER)
|
||||
if (w_uniform.blood_DNA.len)
|
||||
if (w_uniform.blood_DNA)
|
||||
var/icon/stain_icon = icon('blood.dmi', "uniformblood[!lying ? "" : "2"]")
|
||||
overlays += image("icon" = stain_icon, "layer" = MOB_LAYER)
|
||||
|
||||
@@ -916,14 +916,14 @@
|
||||
else if(ro.destroyed)
|
||||
gloves_icon.Blend(new /icon('limb_mask.dmi', "left_[lying?"l":"s"]"), ICON_MULTIPLY)
|
||||
overlays += image(gloves_icon, "layer" = MOB_LAYER)
|
||||
if (gloves.blood_DNA.len)
|
||||
if (gloves.blood_DNA)
|
||||
var/icon/stain_icon = icon('blood.dmi', "bloodyhands[!lying ? "" : "2"]")
|
||||
if(lo.destroyed)
|
||||
stain_icon.Blend(new /icon('limb_mask.dmi', "right_[lying?"l":"s"]"), ICON_MULTIPLY)
|
||||
else if(ro.destroyed)
|
||||
stain_icon.Blend(new /icon('limb_mask.dmi', "left_[lying?"l":"s"]"), ICON_MULTIPLY)
|
||||
overlays += image("icon" = stain_icon, "layer" = MOB_LAYER)
|
||||
else if (blood_DNA.len)
|
||||
else if (blood_DNA)
|
||||
var/icon/stain_icon = icon('blood.dmi', "bloodyhands[!lying ? "" : "2"]")
|
||||
if(lo.destroyed)
|
||||
stain_icon.Blend(new /icon('limb_mask.dmi', "right_[lying?"l":"s"]"), ICON_MULTIPLY)
|
||||
@@ -952,7 +952,7 @@
|
||||
else if(ro.destroyed && !lying)
|
||||
shoes_icon.Blend(new /icon('limb_mask.dmi', "left[lying?"_l":""]"), ICON_MULTIPLY)
|
||||
overlays += image(shoes_icon, "layer" = MOB_LAYER)
|
||||
if (shoes.blood_DNA.len)
|
||||
if (shoes.blood_DNA)
|
||||
var/icon/stain_icon = icon('blood.dmi', "shoesblood[!lying ? "" : "2"]")
|
||||
if(lo.destroyed)
|
||||
stain_icon.Blend(new /icon('limb_mask.dmi', "right_[lying?"l":"s"]"), ICON_MULTIPLY)
|
||||
@@ -1011,7 +1011,7 @@
|
||||
var/t1 = wear_suit.icon_state
|
||||
overlays += image("icon" = 'suit.dmi', "icon_state" = text("[][]", t1, (!( lying ) ? null : "2")), "layer" = MOB_LAYER)
|
||||
if (wear_suit)
|
||||
if (wear_suit.blood_DNA.len)
|
||||
if (wear_suit.blood_DNA)
|
||||
var/icon/stain_icon = null
|
||||
if (istype(wear_suit, /obj/item/clothing/suit/armor/vest || /obj/item/clothing/suit/storage/wcoat))
|
||||
stain_icon = icon('blood.dmi', "armorblood[!lying ? "" : "2"]")
|
||||
@@ -1047,7 +1047,7 @@
|
||||
var/t1 = wear_mask.icon_state
|
||||
overlays += image("icon" = 'mask.dmi', "icon_state" = text("[][]", t1, (!( lying ) ? null : "2")), "layer" = MOB_LAYER)
|
||||
if (!istype(wear_mask, /obj/item/clothing/mask/cigarette))
|
||||
if (wear_mask.blood_DNA.len)
|
||||
if (wear_mask.blood_DNA)
|
||||
var/icon/stain_icon = icon('blood.dmi', "maskblood[!lying ? "" : "2"]")
|
||||
overlays += image("icon" = stain_icon, "layer" = MOB_LAYER)
|
||||
wear_mask.screen_loc = ui_mask
|
||||
@@ -1061,7 +1061,7 @@
|
||||
overlays += image("icon" = head_icon, "layer" = MOB_LAYER)
|
||||
if(gimmick_hat)
|
||||
overlays += image("icon" = icon('gimmick_head.dmi', "[gimmick_hat][!lying ? "" : "2"]"), "layer" = MOB_LAYER)
|
||||
if (head.blood_DNA.len)
|
||||
if (head.blood_DNA)
|
||||
var/icon/stain_icon = icon('blood.dmi', "helmetblood[!lying ? "" : "2"]")
|
||||
overlays += image("icon" = stain_icon, "layer" = MOB_LAYER)
|
||||
head.screen_loc = ui_head
|
||||
|
||||
@@ -37,6 +37,7 @@ emp_act
|
||||
/mob/living/carbon/human/proc/checkarmor(var/datum/organ/external/def_zone, var/type)
|
||||
if(!type) return 0
|
||||
var/protection = 0
|
||||
var/adjuster = 0
|
||||
var/list/body_parts = list(head, wear_mask, wear_suit, w_uniform)
|
||||
for(var/bp in body_parts)
|
||||
if(!bp) continue
|
||||
@@ -44,6 +45,8 @@ emp_act
|
||||
var/obj/item/clothing/C = bp
|
||||
if(C.body_parts_covered & def_zone.body_part)
|
||||
protection += C.armor[type]
|
||||
adjuster++
|
||||
protection = (adjuster ? protection/(sqrt(adjuster)) : 0)
|
||||
return protection
|
||||
|
||||
|
||||
|
||||
@@ -338,6 +338,9 @@
|
||||
var/list/eavesdroppers = get_mobs_in_view(7, src)
|
||||
for(var/mob/M in listening)
|
||||
eavesdroppers.Remove(M)
|
||||
for(var/mob/M in eavesdroppers)
|
||||
if(M.stat)
|
||||
eavesdroppers.Remove(M)
|
||||
|
||||
for (var/obj/O in ((W | contents)-used_radios))
|
||||
W |= O
|
||||
|
||||
@@ -606,12 +606,15 @@
|
||||
machine = null
|
||||
src << browse(null, t1)
|
||||
|
||||
if(href_list["teleto"])
|
||||
src.client.jumptoturf(locate(href_list["teleto"]))
|
||||
|
||||
if(href_list["priv_msg"])
|
||||
var/mob/M = locate(href_list["priv_msg"])
|
||||
if(M)
|
||||
if(src.client && client.muted_complete)
|
||||
src << "You are muted have a nice day"
|
||||
return
|
||||
//if(src.client && client.muted_complete)
|
||||
// src << "You are muted have a nice day"
|
||||
// return
|
||||
if (!ismob(M))
|
||||
return
|
||||
|
||||
|
||||
@@ -92,13 +92,11 @@ obj/item/weapon/organ/New(loc, mob/living/carbon/human/H)
|
||||
if(!istype(H))
|
||||
return
|
||||
if(H.dna)
|
||||
if(blood_DNA.len)
|
||||
if(blood_DNA && blood_DNA.len)
|
||||
blood_DNA.len++
|
||||
blood_DNA[blood_DNA.len] = list(H.dna.unique_enzymes, H.dna.b_type)
|
||||
else
|
||||
var/templist[1]
|
||||
templist[1] = list(H.dna.unique_enzymes, H.dna.b_type)
|
||||
blood_DNA = templist
|
||||
blood_DNA = list(list(H.dna.unique_enzymes, H.dna.b_type))
|
||||
|
||||
var/icon/I = new /icon(icon, icon_state)
|
||||
|
||||
|
||||
@@ -603,9 +603,7 @@
|
||||
if(!istype(usr.equipped(),/obj/item/weapon/gun))
|
||||
usr << "You need your gun in your active hand to do that!"
|
||||
return
|
||||
usr.AllowTargetMove()
|
||||
dir = (dir%2)+1
|
||||
name = "Disallow Walking"
|
||||
usr.client.AllowTargetMove()
|
||||
gun_click_time = world.time
|
||||
|
||||
if("Disallow Walking")
|
||||
@@ -614,9 +612,7 @@
|
||||
if(!istype(usr.equipped(),/obj/item/weapon/gun))
|
||||
usr << "You need your gun in your active hand to do that!"
|
||||
return
|
||||
usr.AllowTargetMove()
|
||||
dir = (dir%2)+1
|
||||
name = "Allow Walking"
|
||||
usr.client.AllowTargetMove()
|
||||
gun_click_time = world.time
|
||||
|
||||
if("Allow Running")
|
||||
@@ -625,9 +621,7 @@
|
||||
if(!istype(usr.equipped(),/obj/item/weapon/gun))
|
||||
usr << "You need your gun in your active hand to do that!"
|
||||
return
|
||||
usr.AllowTargetRun()
|
||||
dir = (dir%2)+1
|
||||
name = "Disallow Running"
|
||||
usr.client.AllowTargetRun()
|
||||
gun_click_time = world.time
|
||||
|
||||
if("Disallow Running")
|
||||
@@ -636,9 +630,7 @@
|
||||
if(!istype(usr.equipped(),/obj/item/weapon/gun))
|
||||
usr << "You need your gun in your active hand to do that!"
|
||||
return
|
||||
usr.AllowTargetRun()
|
||||
dir = (dir%2)+1
|
||||
name = "Allow Running"
|
||||
usr.client.AllowTargetRun()
|
||||
gun_click_time = world.time
|
||||
|
||||
if("Allow Item Use")
|
||||
@@ -647,9 +639,7 @@
|
||||
if(!istype(usr.equipped(),/obj/item/weapon/gun))
|
||||
usr << "You need your gun in your active hand to do that!"
|
||||
return
|
||||
name = "Disallow Item Use"
|
||||
dir = (dir%2)+1
|
||||
usr.AllowTargetClick()
|
||||
usr.client.AllowTargetClick()
|
||||
gun_click_time = world.time
|
||||
|
||||
|
||||
@@ -659,13 +649,11 @@
|
||||
if(!istype(usr.equipped(),/obj/item/weapon/gun))
|
||||
usr << "You need your gun in your active hand to do that!"
|
||||
return
|
||||
name = "Allow Item Use"
|
||||
dir = (dir%2)+1
|
||||
usr.AllowTargetClick()
|
||||
usr.client.AllowTargetClick()
|
||||
gun_click_time = world.time
|
||||
|
||||
if("Toggle Gun Mode")
|
||||
usr.ToggleGunMode()
|
||||
usr.client.ToggleGunMode()
|
||||
|
||||
else
|
||||
DblClick()
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
|
||||
/obj/item/ammo_casing/c38
|
||||
desc = "A .38 bullet casing."
|
||||
caliber = "38"
|
||||
caliber = "357"
|
||||
projectile_type = "/obj/item/projectile/bullet/weakbullet"
|
||||
|
||||
|
||||
|
||||
@@ -79,11 +79,40 @@
|
||||
M.apply_damage(75, BRUTE, "head", used_weapon = "Suicide attempt with a gun")
|
||||
M.apply_damage(85, BRUTE, "chest")
|
||||
M.visible_message("\red [user] pulls the trigger. Ow.")
|
||||
del(src.in_chamber)
|
||||
del(in_chamber)
|
||||
mouthshoot = 0
|
||||
return
|
||||
else if(target && M == target)
|
||||
PreFire(M,user)
|
||||
return
|
||||
else if(user.a_intent == "hurt" && load_into_chamber() && (istype(src.in_chamber, /obj/item/projectile/beam) || istype(src.in_chamber, /obj/item/projectile/energy)\
|
||||
|| istype(src.in_chamber, /obj/item/projectile/bullet)))
|
||||
//Lets shoot them, then.
|
||||
user.visible_message("\red <b> [user] fires \the [src] point blank at [M]!</b>")
|
||||
M.bullet_act(in_chamber,"head")
|
||||
if (prob(20))
|
||||
if (M.paralysis < 10)
|
||||
M.paralysis = 10
|
||||
else
|
||||
if (M.weakened < 10)
|
||||
M.weakened = 10
|
||||
if(M.stat != 2) M.stat = 1
|
||||
if(M.health <= -50) //I pumped 7 more rounds into the guy, and only did an extra 26 damage :|
|
||||
M.apply_damage(45) //So we'll put him an inch from death.
|
||||
del(in_chamber)
|
||||
return
|
||||
else if(user.a_intent != "hurt" && load_into_chamber() && istype(src,/obj/item/weapon/gun/energy/taser))
|
||||
if (prob(50))
|
||||
if (M.paralysis < 60 && (!(M.mutations & 8)) )
|
||||
M.paralysis = 60
|
||||
else
|
||||
if (M.weakened < 60 && (!(M.mutations & 8)) )
|
||||
M.weakened = 60
|
||||
if (M.stuttering < 60 && (!(M.mutations & 8)) )
|
||||
M.stuttering = 60
|
||||
user.visible_message("\red <B>[M] has been stunned with the taser gun by [user]!</B>")
|
||||
del(in_chamber)
|
||||
return
|
||||
else
|
||||
return ..()
|
||||
|
||||
@@ -181,6 +210,9 @@
|
||||
proc/TargetActed()
|
||||
var/mob/M = loc
|
||||
if(target == M) return
|
||||
if(src.loc != M.equipped())
|
||||
target.NotTargeted(src)
|
||||
return
|
||||
usr.last_move_intent = world.time
|
||||
Fire(target,usr)
|
||||
var/dir_to_fire = sd_get_approx_dir(M,target)
|
||||
@@ -190,7 +222,7 @@
|
||||
afterattack(atom/A as mob|obj|turf|area, mob/living/user as mob|obj, flag, params)
|
||||
if(flag) return //we're placing gun on a table or in backpack
|
||||
if(istype(target, /obj/machinery/recharger) && istype(src, /obj/item/weapon/gun/energy)) return//Shouldnt flag take care of this?
|
||||
if(user && user.gun_mode)
|
||||
if(user && user.client && user.client.gun_mode)
|
||||
PreFire(A,user,params)
|
||||
else
|
||||
Fire(A,user,params)
|
||||
@@ -205,10 +237,11 @@
|
||||
// if(M.type == /mob)
|
||||
// return FindTarget(M,user,params)
|
||||
var/mob/M = GunTrace(usr.x,usr.y,A.x,A.y,usr.z,usr)
|
||||
if(M && ismob(M) && !target && !M.client.admin_invis)
|
||||
Aim(M)
|
||||
return
|
||||
if(ismob(A) && target != A)
|
||||
if(M && ismob(M) && isliving(M) && !target)
|
||||
if(!(M.client && M.client.admin_invis))
|
||||
Aim(M)
|
||||
return
|
||||
if(ismob(A) && isliving(A) && target != A)
|
||||
Aim(A)
|
||||
else if(lock_time < world.time + 10)
|
||||
Fire(A,user,params)
|
||||
@@ -283,8 +316,8 @@ mob/proc
|
||||
if(!targeted_by) targeted_by = list()
|
||||
targeted_by += I
|
||||
I.target = src
|
||||
//I.lock_time = world.time + 10 //Target has 1 second to realize they're targeted and stop (or target the opponent).
|
||||
src << "((\red <b>Your character is being targeted. They have 1 second to stop any click or move actions.</b> \black While targeted, they may \
|
||||
I.lock_time = world.time + 20 //Target has 1 second to realize they're targeted and stop (or target the opponent).
|
||||
src << "((\red <b>Your character is being targeted. They have 2 seconds to stop any click or move actions.</b> \black While targeted, they may \
|
||||
drag and drop items in or into the map, speak, and click on interface buttons. Clicking on the map, their items \
|
||||
(other than a weapon to de-target), or moving will result in being fired upon. \red The aggressor may also fire manually, \
|
||||
so try not to get on their bad side.\black ))"
|
||||
@@ -301,17 +334,17 @@ mob/proc
|
||||
if(T.client)
|
||||
T.client.screen += T.item_use_icon
|
||||
T.client.screen += T.gun_move_icon
|
||||
while(targeted_by)
|
||||
while(targeted_by && T.client)
|
||||
sleep(1)
|
||||
if(last_move_intent > I.lock_time + 10 && !T.target_can_move) //If the target moved while targeted
|
||||
if(last_move_intent > I.lock_time + 10 && !T.client.target_can_move) //If the target moved while targeted
|
||||
I.TargetActed()
|
||||
I.lock_time = world.time + 5
|
||||
else if(last_move_intent > I.lock_time + 10 && !T.target_can_run && m_intent == "run") //If the target ran while targeted
|
||||
I.lock_time = world.time + 10
|
||||
else if(last_move_intent > I.lock_time + 10 && !T.client.target_can_run && m_intent == "run") //If the target ran while targeted
|
||||
I.TargetActed()
|
||||
I.lock_time = world.time + 5
|
||||
if(last_target_click > I.lock_time + 10 && !T.target_can_click) //If the target clicked the map to pick something up/shoot/etc
|
||||
I.lock_time = world.time + 10
|
||||
if(last_target_click > I.lock_time + 10 && !T.client.target_can_click) //If the target clicked the map to pick something up/shoot/etc
|
||||
I.TargetActed()
|
||||
I.lock_time = world.time + 5
|
||||
I.lock_time = world.time + 10
|
||||
|
||||
NotTargeted(var/obj/item/weapon/gun/I,silent)
|
||||
if(!silent)
|
||||
@@ -325,9 +358,6 @@ mob/proc
|
||||
del(T.item_use_icon)
|
||||
del(T.gun_move_icon)
|
||||
del(T.gun_run_icon)
|
||||
T.target_can_move = 0
|
||||
T.target_can_run = 0
|
||||
T.target_can_click = 0
|
||||
if(!targeted_by.len) del targeted_by
|
||||
spawn(1) update_clothing()
|
||||
|
||||
@@ -372,7 +402,7 @@ mob/proc
|
||||
// layer = 99
|
||||
|
||||
//If you move out of range, it isn't going to still stay locked on you any more.
|
||||
mob/var
|
||||
client/var
|
||||
target_can_move = 0
|
||||
target_can_run = 0
|
||||
target_can_click = 0
|
||||
@@ -389,7 +419,7 @@ mob/Move()
|
||||
if(!(G.target in view(src)))
|
||||
//ClearRequest("Aim")
|
||||
G.target.NotTargeted(G)
|
||||
mob/verb
|
||||
client/verb
|
||||
//These are called by the on-screen buttons, adjusting what the victim can and cannot do.
|
||||
AllowTargetMove()
|
||||
set hidden=1
|
||||
@@ -397,15 +427,20 @@ mob/verb
|
||||
if(!target_can_move)
|
||||
// winset(usr,"default.target_can_move","is-flat=true;border=sunken")
|
||||
usr << "Target may now walk."
|
||||
gun_run_icon = new /obj/screen/gun/run(null)
|
||||
if(client)
|
||||
client.screen += gun_run_icon
|
||||
usr.gun_run_icon = new /obj/screen/gun/run(null)
|
||||
screen += usr.gun_run_icon
|
||||
if(usr.gun_move_icon)
|
||||
usr.gun_move_icon.dir = 1
|
||||
usr.gun_move_icon.name = "Disallow Walking"
|
||||
else
|
||||
// winset(usr,"default.target_can_move","is-flat=false;border=none")
|
||||
usr << "Target may no longer move."
|
||||
target_can_run = 0
|
||||
del(gun_run_icon)
|
||||
for(var/obj/item/weapon/gun/G in src)
|
||||
del(usr.gun_run_icon)
|
||||
if(usr.gun_move_icon)
|
||||
usr.gun_move_icon.dir = 2
|
||||
usr.gun_move_icon.name = "Allow Walking"
|
||||
for(var/obj/item/weapon/gun/G in usr)
|
||||
G.lock_time = world.time + 5
|
||||
if(G.target)
|
||||
if(!target_can_move)
|
||||
@@ -418,9 +453,15 @@ mob/verb
|
||||
if(!target_can_run)
|
||||
// winset(usr,"default.target_can_move","is-flat=true;border=sunken")
|
||||
usr << "Target may now run."
|
||||
if(usr.gun_run_icon)
|
||||
usr.gun_run_icon.dir = 1
|
||||
usr.gun_run_icon.name = "Disallow Running"
|
||||
else
|
||||
// winset(usr,"default.target_can_move","is-flat=false;border=none")
|
||||
usr << "Target may no longer run."
|
||||
if(usr.gun_run_icon)
|
||||
usr.gun_run_icon.dir = 2
|
||||
usr.gun_run_icon.name = "Allow Running"
|
||||
for(var/obj/item/weapon/gun/G in src)
|
||||
G.lock_time = world.time + 5
|
||||
if(G.target)
|
||||
@@ -434,9 +475,15 @@ mob/verb
|
||||
if(!target_can_click)
|
||||
// winset(usr,"default.target_can_click","is-flat=true;border=sunken")
|
||||
usr << "Target may now use items."
|
||||
if(usr.item_use_icon)
|
||||
usr.item_use_icon.dir = 1
|
||||
usr.item_use_icon.name = "Disallow Item Use"
|
||||
else
|
||||
// winset(usr,"default.target_can_click","is-flat=false;border=none")
|
||||
usr << "Target may no longer use items."
|
||||
if(usr.item_use_icon)
|
||||
usr.item_use_icon.dir = 2
|
||||
usr.item_use_icon.name = "Allow Item Use"
|
||||
for(var/obj/item/weapon/gun/G in src)
|
||||
G.lock_time = world.time + 5
|
||||
if(G.target)
|
||||
@@ -451,8 +498,10 @@ mob/verb
|
||||
if(!gun_mode)
|
||||
// winset(usr,"default.target_can_click","is-flat=true;border=sunken")
|
||||
usr << "You will now take people captive."
|
||||
if(usr.gun_setting_icon)
|
||||
usr.gun_setting_icon.dir = 2
|
||||
else
|
||||
// winset(usr,"default.target_can_click","is-flat=false;border=none")
|
||||
usr << "You will now shoot where you target."
|
||||
if(usr.gun_setting_icon)
|
||||
usr.gun_setting_icon.dir = (usr.gun_setting_icon.dir%2)+1
|
||||
if(usr.gun_setting_icon)
|
||||
usr.gun_setting_icon.dir = 1
|
||||
@@ -2,7 +2,7 @@
|
||||
desc = "A cheap Martian knock-off of a Smith & Wesson Model 10. Uses .38-Special rounds."
|
||||
name = "\improper Revolver"
|
||||
icon_state = "detective"
|
||||
caliber = "38"
|
||||
caliber = "357"
|
||||
origin_tech = "combat=2;materials=2"
|
||||
ammo_type = "/obj/item/ammo_casing/c38"
|
||||
|
||||
|
||||
@@ -2,10 +2,10 @@
|
||||
name = "\improper Laser"
|
||||
icon_state = "laser"
|
||||
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
|
||||
damage = 20
|
||||
damage = 40
|
||||
damage_type = BURN
|
||||
flag = "laser"
|
||||
eyeblur = 2
|
||||
eyeblur = 4
|
||||
var/ID = 0
|
||||
var/main = 0
|
||||
|
||||
@@ -51,13 +51,13 @@
|
||||
/obj/item/projectile/beam/heavylaser
|
||||
name = "\improper Heavy Laser"
|
||||
icon_state = "heavylaser"
|
||||
damage = 40
|
||||
damage = 60
|
||||
|
||||
|
||||
/obj/item/projectile/beam/pulse
|
||||
name = "\improper Pulse"
|
||||
icon_state = "u_laser"
|
||||
damage = 50
|
||||
damage = 40
|
||||
|
||||
|
||||
/obj/item/projectile/beam/deathlaser
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
|
||||
|
||||
/obj/item/projectile/bullet/weakbullet
|
||||
damage = 5
|
||||
damage = 15
|
||||
stun = 5
|
||||
weaken = 5
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
|
||||
/obj/item/projectile/bullet/stunshot
|
||||
name = "\improper Stunshot"
|
||||
damage = 5
|
||||
damage = 15
|
||||
stun = 10
|
||||
weaken = 10
|
||||
stutter = 10
|
||||
@@ -601,12 +601,12 @@
|
||||
active = 1
|
||||
dir = DOWN
|
||||
spawn(1)
|
||||
process() // spawn off the movement process
|
||||
move() // spawn off the movement process
|
||||
|
||||
return
|
||||
|
||||
// movement process, persists while holder is moving through pipes
|
||||
process()
|
||||
proc/move()
|
||||
var/obj/structure/disposalpipe/last
|
||||
while(active)
|
||||
sleep(1) // was 1
|
||||
|
||||
@@ -260,6 +260,10 @@
|
||||
"Meeting Room", "HoP Office", "Captain",
|
||||
"Atmospherics", "Engineering", "Chief Engineer", "Robotics",)
|
||||
|
||||
mining
|
||||
locationList = list("Mining Main","Mining North","Mining West")
|
||||
spaceList = list(0,0,0)
|
||||
|
||||
w_class = 1
|
||||
item_state = "electronic"
|
||||
flags = FPRINT | TABLEPASS | ONBELT | CONDUCT
|
||||
|
||||
@@ -126,12 +126,14 @@ won't update every console in existence) but it's more of a hassle to do. Also,
|
||||
SyncRDevices()
|
||||
|
||||
process()
|
||||
for(var/obj/machinery/r_n_d/server/centcom/C in world) //have it automatically push research to the centcomm server so wild griffins can't fuck up R&D's work --NEO
|
||||
for(var/datum/tech/T in files.known_tech)
|
||||
C.files.AddTech2Known(T)
|
||||
for(var/datum/design/D in files.known_designs)
|
||||
C.files.AddDesign2Known(D)
|
||||
C.files.RefreshResearch()
|
||||
if(!(world.time % 600)) //Lets only have it do it every 100 ticks. Good god.
|
||||
for(var/obj/machinery/r_n_d/server/centcom/C in world) //have it automatically push research to the centcomm server so wild griffins can't fuck up R&D's work --NEO
|
||||
for(var/datum/tech/T in files.known_tech)
|
||||
C.files.AddTech2Known(T)
|
||||
for(var/datum/design/D in files.known_designs)
|
||||
C.files.AddDesign2Known(D)
|
||||
C.files.RefreshResearch()
|
||||
return
|
||||
|
||||
attackby(var/obj/item/weapon/D as obj, var/mob/user as mob)
|
||||
//The construction/deconstruction of the console code.
|
||||
|
||||
+4783
-4795
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user