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:
CIB
2012-03-07 09:44:09 -08:00
39 changed files with 6299 additions and 6301 deletions
+1121 -1122
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -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
+3 -3
View File
@@ -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) .() */
+5 -5
View File
@@ -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
+1 -1
View File
@@ -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
View File
@@ -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()
+6
View File
@@ -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)
+4
View File
@@ -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))
+5
View File
@@ -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)
+1 -1
View File
@@ -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
+52 -44
View File
@@ -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
+3 -1
View File
@@ -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)
+14 -11
View File
@@ -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++
+1 -7
View File
@@ -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
+43 -63
View File
@@ -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 += "&nbsp<b>Fingerprints:</b><br>"
temp += "&nbsp;&nbsp;&nbsp;&nbsp;[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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[fibers[j]]"
temp += "&nbsp;&nbsp;&nbsp;&nbsp;Fibers: [dat]<br>"
else
temp += "&nbsp;&nbsp;&nbsp;&nbsp;No fibers found.<br>"
temp += "&nbsp<b>Fibers:</b><br>"
for(var/j = 1, j <= fibers.len, j++)
temp += "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[blood[j]]"
temp += "&nbsp;&nbsp;&nbsp;&nbsp;Blood: [dat]<br>"
else
temp += "&nbsp;&nbsp;&nbsp;&nbsp;No blood found.<br>"
temp += "&nbsp<b>Blood:</b><br>"
for(var/j = 1, j <= blood.len, j++)
temp += "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[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 += "&nbsp<b>Fingerprints:</b><br>"
P.info += "&nbsp;&nbsp;&nbsp;&nbsp;[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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[fibers[j]]"
P.info += "&nbsp;&nbsp;&nbsp;&nbsp;Fibers: [dat]<br>"
else
P.info += "&nbsp;&nbsp;&nbsp;&nbsp;No fibers found.<br>"
P.info += "&nbsp<b>Fibers:</b><br>"
for(var/j = 1, j <= fibers.len, j++)
P.info += "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[blood[j]]"
P.info += "&nbsp;&nbsp;&nbsp;&nbsp;Blood: [dat]<br>"
else
P.info += "&nbsp;&nbsp;&nbsp;&nbsp;No blood found."
P.info += "&nbsp<b>Blood:</b><br>"
for(var/j = 1, j <= blood.len, j++)
P.info += "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[fibers[j]]"
temp += "&nbsp;&nbsp;&nbsp;&nbsp;Fibers: [dat]<br>"
else
temp += "&nbsp;&nbsp;&nbsp;&nbsp;No fibers found."
temp += "&nbsp<b>Fibers:</b><br>"
for(var/j = 1, j <= fibers.len, j++)
temp += "<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[blood[j]]"
temp += "&nbsp;&nbsp;&nbsp;&nbsp;Blood: [dat]<br>"
else
temp += "&nbsp;&nbsp;&nbsp;&nbsp;No blood found.<br>"
temp += "&nbsp<b>Blood:</b><br>"
for(var/j = 1, j <= blood.len, j++)
temp += "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[fibers[j]]"
P.info += "&nbsp;&nbsp;&nbsp;&nbsp;Fibers: [dat]<br>"
else
P.info += "&nbsp;&nbsp;&nbsp;&nbsp;No fibers found."
P.info += "&nbsp<b>Fibers:</b><br>"
for(var/j = 1, j <= fibers.len, j++)
P.info += "<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[blood[j]]"
P.info += "&nbsp;&nbsp;&nbsp;&nbsp;Blood: [dat]<br>"
else
P.info += "&nbsp;&nbsp;&nbsp;&nbsp;No blood found.<br>"
P.info += "&nbsp<b>Blood:</b><br>"
for(var/j = 1, j <= blood.len, j++)
P.info += "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[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]
-4
View File
@@ -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
+1 -72
View File
@@ -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
+15 -6
View File
@@ -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
+46 -45
View File
@@ -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
+3
View File
@@ -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
+6 -3
View File
@@ -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
+2 -4
View File
@@ -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)
+7 -19
View File
@@ -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"
+76 -27
View File
@@ -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"
+4 -4
View File
@@ -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
+2 -2
View File
@@ -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
+8 -6
View File
@@ -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
View File
File diff suppressed because it is too large Load Diff