Merge pull request #1213 from SkyMarshal/CoolTweaks

Several changes, any PDA with a security cartridge can be used to gather evidence to be put in the forensic scanning computer, removed a proc that should never have existed, moved the visible_message proc into the atom_procs file.
This commit is contained in:
Erthilo
2012-05-31 16:10:39 -07:00
19 changed files with 200 additions and 266 deletions

View File

@@ -1080,95 +1080,32 @@ var/using_new_click_proc = 0 //TODO ERRORAGE (This is temporary, while the DblCl
var/mob/living/carbon/U = M
U.swap_hand()
/*
/atom/proc/get_global_map_pos()
if(!islist(global_map) || isemptylist(global_map)) return
var/cur_x = null
var/cur_y = null
var/list/y_arr = null
for(cur_x=1,cur_x<=global_map.len,cur_x++)
y_arr = global_map[cur_x]
cur_y = y_arr.Find(src.z)
if(cur_y)
break
// world << "X = [cur_x]; Y = [cur_y]"
if(cur_x && cur_y)
return list("x"=cur_x,"y"=cur_y)
else
return 0
*/ //Don't touch this either. DMTG
/atom/proc/checkpass(passflag)
return pass_flags&passflag
//Could not find object proc defines and this could almost be an atom level one.
/obj/proc/process()
processing_objects.Remove(src)
return 0
// Show a message to all mobs in sight of this one
// This would be for visible actions by the src mob
// message is the message output to anyone who can see e.g. "[src] does something!"
// self_message (optional) is what the src mob sees e.g. "You do something!"
// blind_message (optional) is what blind people will hear e.g. "You hear something!"
/*Really why was this in the click proc of all the places you could put it
if (usr:a_intent == "help")
// ------- YOU HAVE THE HELP INTENT SELECTED -------
if(istype(src, /mob/living/carbon))
// ------- YOUR TARGET IS LIVING CARBON CREATURE (NOT AI OR CYBORG OR SIMPLE ANIMAL) -------
var/mob/living/carbon/C = src
if(usr:mutations & HEAL)
// ------- YOU ARE HUMAN, WITH THE HELP INTENT TARGETING A HUMAN AND HAVE THE 'HEAT' GENETIC MUTATION -------
if(C.stat != 2)
// ------- THE PERSON YOU'RE TOUCHING IS NOT DEAD -------
var/t_him = "it"
if (src.gender == MALE)
t_him = "his"
else if (src.gender == FEMALE)
t_him = "her"
var/u_him = "it"
if (usr.gender == MALE)
t_him = "him"
else if (usr.gender == FEMALE)
t_him = "her"
if(src != usr)
usr.visible_message( \
"\blue <i>[usr] places [u_him] palms on [src], healing [t_him]!</i>", \
"\blue You place your palms on [src] and heal [t_him].", \
)
else
usr.visible_message( \
"\blue <i>[usr] places [u_him] palms on [u_him]self and heals.</i>", \
"\blue You place your palms on yourself and heal.", \
)
C.adjustOxyLoss(-25)
C.adjustToxLoss(-25)
if(istype(C, /mob/living/carbon/human))
// ------- YOUR TARGET IS HUMAN -------
var/mob/living/carbon/human/H = C
var/datum/organ/external/affecting = H.get_organ(check_zone(usr:zone_sel:selecting))
if(affecting && affecting.heal_damage(25, 25))
H.UpdateDamageIcon()
else
C.heal_organ_damage(25, 25)
C.adjustCloneLoss(-25)
C.stunned = max(0, C.stunned-5)
C.paralysis = max(0, C.paralysis-5)
C.stuttering = max(0, C.stuttering-5)
C.drowsyness = max(0, C.drowsyness-5)
C.weakened = max(0, C.weakened-5)
usr:nutrition -= rand(1,10)
usr.next_move = world.time + 6
else
// ------- PERSON YOU'RE TOUCHING IS ALREADY DEAD -------
usr << "\red [src] is dead and can't be healed."
return
// ------- IF YOU DON'T HAVE THE SILLY ABILITY ABOVE OR FAIL ON ANY OTHER CHECK, THEN YOU'RE CLICKING ON SOMETHING WITH AN EMPTY HAND. ATTACK_HAND IT IS THEN -------
*/
/mob/visible_message(var/message, var/self_message, var/blind_message)
for(var/mob/M in viewers(src))
var/msg = message
if(self_message && M==src)
msg = self_message
M.show_message( msg, 1, blind_message, 2)
// Show a message to all mobs in sight of this atom
// Use for objects performing visible actions
// message is output to anyone who can see, e.g. "The [src] does something!"
// blind_message (optional) is what blind people will hear e.g. "You hear something!"
/atom/proc/visible_message(var/message, var/blind_message)
for(var/mob/M in viewers(src))
M.show_message( message, 1, blind_message, 2)

View File

@@ -840,22 +840,23 @@ ________________________________________________________________________________
U << "\red Procedure interrupted. Protocol terminated."
return
else if(istype(I, /obj/item/weapon/disk/tech_disk))//If it's a data disk, we want to copy the research on to the suit.
if(I:stored)//If it has something on it.
var/obj/item/weapon/disk/tech_disk/T = I
if(T.stored)//If it has something on it.
U << "Research information detected, processing..."
if(do_after(U,s_delay))
for(var/datum/tech/current_data in stored_research)
if(current_data.id==I:stored.id)
if(current_data.level<I:stored.level)
current_data.level=I:stored.level
if(current_data.id==T.stored.id)
if(current_data.level<T.stored.level)
current_data.level=T.stored.level
break
I:stored = null
T.stored = null
U << "\blue Data analyzed and updated. Disk erased."
else
U << "\red <b>ERROR</b>: \black Procedure interrupted. Process terminated."
else
I.loc = src
t_disk = I
U << "\blue You slot \the [I] into \the [src]."
T.loc = src
t_disk = T
U << "\blue You slot \the [T] into \the [src]."
return
..()

View File

@@ -50,7 +50,7 @@
CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
if((air_group && blobtype != "Shield") || (height==0)) return 1
if(istype(mover) && mover.checkpass(PASSBLOB)) return 1
if(istype(mover) && mover.pass_flags&PASSBLOB) return 1
return 0

View File

@@ -80,7 +80,7 @@
/obj/machinery/optable/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
if(air_group || (height==0)) return 1
if(istype(mover) && mover.checkpass(PASSTABLE))
if(istype(mover) && mover.pass_flags&PASSTABLE)
return 1
else
return 0

View File

@@ -133,7 +133,7 @@ for reference:
CanPass(atom/movable/mover, turf/target, height=0, air_group=0)//So bullets will fly over and stuff.
if(air_group || (height==0))
return 1
if(istype(mover) && mover.checkpass(PASSTABLE))
if(istype(mover) && mover.pass_flags&PASSTABLE)
return 1
else
return 0
@@ -260,7 +260,7 @@ for reference:
CanPass(atom/movable/mover, turf/target, height=0, air_group=0)//So bullets will fly over and stuff.
if(air_group || (height==0))
return 1
if(istype(mover) && mover.checkpass(PASSTABLE))
if(istype(mover) && mover.pass_flags&PASSTABLE)
return 1
else
return 0

View File

@@ -81,7 +81,7 @@
CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
if(air_group) return 0
if(istype(mover) && mover.checkpass(PASSGLASS))
if(istype(mover) && mover.pass_flags&PASSGLASS)
return !opacity
return !density

View File

@@ -58,7 +58,7 @@
return
/obj/machinery/door/window/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
if(istype(mover) && mover.checkpass(PASSGLASS))
if(istype(mover) && mover.pass_flags & PASSGLASS)
return 1
if(get_dir(loc, target) == dir) //Make sure looking at appropriate border
if(air_group) return 0
@@ -67,7 +67,7 @@
return 1
/obj/machinery/door/window/CheckExit(atom/movable/mover as mob|obj, turf/target as turf)
if(istype(mover) && mover.checkpass(PASSGLASS))
if(istype(mover) && mover.pass_flags & PASSGLASS)
return 1
if(get_dir(loc, target) == dir)
return !density

View File

@@ -475,7 +475,7 @@
/obj/machinery/shieldwall/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
if(air_group || (height==0)) return 1
if(istype(mover) && mover.checkpass(PASSGLASS))
if(istype(mover) && mover.pass_flags&PASSGLASS)
return prob(20)
else
if (istype(mover, /obj/item/projectile))

View File

@@ -161,6 +161,6 @@
/obj/effect/alien/resin/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
if(air_group) return 0
if(istype(mover) && mover.checkpass(PASSGLASS))
if(istype(mover) && mover.pass_flags & PASSGLASS)
return !opacity
return !density

View File

@@ -860,6 +860,8 @@
user.show_message("\blue No radiation detected.")
/obj/item/device/pda/afterattack(atom/A as mob|obj|turf|area, mob/user as mob)
if(!in_range(A, user))
return
switch(scanmode)
if(2)
if (!A.fingerprints)
@@ -878,6 +880,9 @@
user << "\blue Found [complete_prints.len] intact prints"
for(var/i in complete_prints)
user << "\blue [i]"
if(cartridge && cartridge.access_security)
cartridge.add_data(A)
user << "Data added to internal storage. Scan with a High-Resolution Scanner to retreive."
if(3)
if(!isnull(A.reagents))

View File

@@ -29,6 +29,7 @@
var/list/powermonitors = list()
var/message1 // used for status_displays
var/message2
var/list/stored = list()
engineering
name = "Power-ON Cartridge"
@@ -50,6 +51,7 @@
spawn(5)
radio = new /obj/item/radio/integrated/beepsky(src)
detective
name = "D.E.T.E.C.T. Cartridge"
icon_state = "cart-s"
@@ -570,6 +572,43 @@ Code:
else
menu += "ERROR: Unable to determine current location."
proc/add_data(atom/A as mob|obj|turf|area)
//I love hashtables.
var/list/data_entry = stored["\ref [A]"]
if(islist(data_entry)) //Yay, it was already stored!
//Merge the fingerprints.
var/list/data_prints = data_entry[1]
for(var/print in A.fingerprints)
var/merged_print = data_prints[print]
if(!merged_print)
data_prints[print] = A.fingerprints[print]
else
data_prints[print] = stringmerge(data_prints[print],A.fingerprints[print])
//Now the fibers
var/list/fibers = data_entry[2]
if(!fibers)
fibers = list()
if(A.suit_fibers && A.suit_fibers.len)
for(var/j = 1, j <= A.suit_fibers.len, j++) //Fibers~~~
if(!fibers.Find(A.suit_fibers[j])) //It isn't! Add!
fibers += A.suit_fibers[j]
var/list/blood = data_entry[3]
if(!blood)
blood = list()
if(A.blood_DNA && A.blood_DNA.len)
for(var/main_blood in A.blood_DNA)
if(!blood[main_blood])
blood[main_blood] = A.blood_DNA[blood]
return 1
var/list/sum_list[4] //Pack it back up!
sum_list[1] = A.fingerprints
sum_list[2] = A.suit_fibers
sum_list[3] = A.blood_DNA
sum_list[4] = "\The [A] in [get_area(A)]"
stored["\ref [A]"] = sum_list
return 0
/obj/item/weapon/cartridge/Topic(href, href_list)
..()

View File

@@ -64,7 +64,6 @@ MASS SPECTROMETER
desc = "Used to scan objects for DNA and fingerprints."
icon_state = "forensic1"
var/amount = 20.0
// var/printing = 0.0
var/list/stored = list()
w_class = 3.0
item_state = "electronic"
@@ -90,16 +89,6 @@ MASS SPECTROMETER
W.add_fingerprint(user)
return
// attack_self(mob/user as mob)
// src.printing = !( src.printing )
// if(src.printing)
// user << "\blue Printing turned on"
// else
// user << "\blue Printing turned off"
// src.icon_state = text("forensic[]", src.printing)
// add_fingerprint(user)
// return
attack(mob/living/carbon/human/M as mob, mob/user as mob)
if (!ishuman(M))
user << "\red [M] is not human and cannot have the fingerprints."
@@ -132,17 +121,16 @@ MASS SPECTROMETER
return
afterattack(atom/A as obj|turf|area, mob/user as mob)
if(!(locate(A) in oview(1,user)))
if(!in_range(A,user))
return
if(src.loc != user)
if(loc != user)
return
if(istype(A,/obj/machinery/computer/forensic_scanning)) //breaks shit.
return
if(istype(A,/obj/item/weapon/f_card))
user << "Haha, nice try. Cheater. (It would break stuff anyways.)"
user << "The scanner displays on the screen: \"ERROR 43: Object on Excluded Object List.\""
return
if(!A.fingerprints)
A.fingerprints = list()
add_fingerprint(user)
//Special case for blood splaters.
@@ -151,50 +139,46 @@ MASS SPECTROMETER
for(var/blood in A.blood_DNA)
user << "\blue Blood type: [A.blood_DNA[blood]]\nDNA: [blood]"
return
var/duplicate = 0
//General
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]!"
user.visible_message("\The [user] scans \the [A] with \a [src], the air around [user.gender == MALE ? "his": "her"] humming[prob(70) ? " gently." : "."]" ,\
"\blue Unable to locate any fingerprints, materials, fibers, or blood on [A]!",\
"You hear a faint hum of electrical equipment.")
return 0
//BLOOD
else if (A.blood_DNA)
user << "\blue Blood found on [A]. Analysing..."
sleep(15)
if(!duplicate)
duplicate = 1
var/i = add_data(A)
if(i)
user << "\blue Blood already in memory."
for(var/blood in A.blood_DNA)
user << "\blue Blood type: [A.blood_DNA[blood]]\nDNA: [blood]"
else
user << "\blue No Blood Located"
if(add_data(A))
user << "\blue Object already in internal memory. Consolidating data..."
return
//PRINTS
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)
duplicate = 1
var/i = add_data(A)
if(i)
user << "\blue Fingerprints already in memory."
user << "\blue Isolated [A.fingerprints.len] fingerprints: Data Stored: Scan with Hi-Res Forensic Scanner to retrieve."
//FIBERS
if(!A.suit_fibers)
user << "\blue No Fibers/Materials Located."
else
if(A.suit_fibers)
user << "\blue Fibers/Materials Data Stored: Scan with Hi-Res Forensic Scanner to retrieve."
if(!duplicate)
duplicate = 1
var/i = add_data(A)
if(i)
user << "\blue Fibers/Materials already in memory."
//Blood
if (A.blood_DNA)
user << "\blue Blood found on [A]. Analysing..."
spawn(15)
for(var/blood in A.blood_DNA)
user << "Blood type: \red [A.blood_DNA[blood]] \t \black DNA: \red [blood]"
if(prob(5))
user.visible_message("\The [user] scans \the [A] with \a [src], the air around [user.gender == MALE ? "his": "her"] humming[prob(70) ? " gently." : "."]" ,\
"You finish scanning \the [A].",\
"You hear a faint hum of electrical equipment.")
return 0
else
user.visible_message("\The [user] scans \the [A] with \a [src], the air around [user.gender == MALE ? "his": "her"] humming[prob(70) ? " gently." : "."]\n[user.gender == MALE ? "He": "She"] seems to perk up slightly at the readout." ,\
"The results of the scan pique your interest.",\
"You hear a faint hum of electrical equipment, and someone making a thoughtful noise.")
return 0
return
proc/add_data(atom/A as mob|obj|turf|area)

View File

@@ -94,7 +94,7 @@
CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
if(air_group || (height==0)) return 1
if(istype(mover) && mover.checkpass(PASSGRILLE))
if(istype(mover) && mover.pass_flags & PASSGRILLE)
return 1
else
if (istype(mover, /obj/item/projectile))

View File

@@ -117,7 +117,7 @@ TABLE AND RACK OBJECT INTERATIONS
/obj/structure/table/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
if(air_group || (height==0)) return 1
if(istype(mover) && (mover.checkpass(PASSTABLE) || (mover.flags & TABLEPASS) || mover.throwing)) //WTF do things hit tables like that? Jeez.
if(istype(mover) && (mover.pass_flags & PASSTABLE || (mover.flags & TABLEPASS) || mover.throwing)) //WTF do things hit tables like that? Jeez.
return 1
else
return 0
@@ -358,7 +358,7 @@ TABLE AND RACK OBJECT INTERATIONS
if(air_group || (height==0)) return 1
if(src.density == 0) //Because broken racks -Agouri |TODO: SPRITE!|
return 1
if(istype(mover) && (mover.checkpass(PASSTABLE) || mover.flags & TABLEPASS || mover.throwing))
if(istype(mover) && (mover.pass_flags & PASSTABLE || mover.flags & TABLEPASS || mover.throwing))
return 1
else
return 0

View File

@@ -34,7 +34,7 @@
del(src)
/obj/structure/window/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
if(istype(mover) && mover.checkpass(PASSGLASS))
if(istype(mover) && mover.pass_flags & PASSGLASS)
return 1
if (src.dir == SOUTHWEST || src.dir == SOUTHEAST || src.dir == NORTHWEST || src.dir == NORTHEAST)
return 0 //full tile window, you can't move into it!
@@ -44,7 +44,7 @@
return 1
/obj/structure/window/CheckExit(atom/movable/O as mob|obj, target as turf)
if(istype(O) && O.checkpass(PASSGLASS))
if(istype(O) && O.pass_flags & PASSGLASS)
return 1
if (get_dir(O.loc, target) == dir)
return 0

View File

@@ -46,7 +46,7 @@ var/list/supply_groups = new()
layer = 4
/obj/structure/plasticflaps/CanPass(atom/A, turf/T)
if(istype(A) && A.checkpass(PASSGLASS))
if(istype(A) && A.pass_flags&PASSGLASS)
return prob(60)
else if(istype(A, /mob/living)) // You Shall Not Pass!
var/mob/living/M = A

View File

@@ -392,7 +392,7 @@ obj/machinery/computer/forensic_scanning
scan_data += "Fibers/Materials Found:<br>"
for(var/data in scanning.suit_fibers)
scan_data += "- [data]<br>"
if(istype(scanning,/obj/item/device/detective_scanner))
if(istype(scanning,/obj/item/device/detective_scanner) || (istype(scanning, /obj/item/device/pda) && scanning:cartridge && scanning:cartridge.access_security))
scan_data += "<br><b>Data transfered from Scanner to Database.</b><br>"
add_data_scanner(scanning)
else if(!scanning.fingerprints)
@@ -425,12 +425,19 @@ obj/machinery/computer/forensic_scanning
return
proc/add_data_scanner(var/obj/item/device/detective_scanner/W)
if(W.stored)
for(var/atom in W.stored)
var/list/data = W.stored[atom]
add_data_master(atom,data[1],data[2],data[3],data[4])
W.stored = list()
proc/add_data_scanner(var/obj/item/device/W)
if(istype(W, /obj/item/device/detective_scanner))
if(W:stored)
for(var/atom in W:stored)
var/list/data = W:stored[atom]
add_data_master(atom,data[1],data[2],data[3],data[4])
W:stored = list()
else if(istype(W, /obj/item/device/pda) && W:cartridge && W:cartridge.access_security)
if(W:cartridge.stored)
for(var/atom in W:cartridge.stored)
var/list/data = W:cartridge.stored[atom]
add_data_master(atom,data[1],data[2],data[3],data[4])
W:cartridge.stored = list()
return
proc/add_data(var/atom/scanned_atom)
@@ -446,89 +453,88 @@ obj/machinery/computer/forensic_scanning
//What follows is massive. It cross references all stored data in the scanner with the other stored data,
//and what is already in the computer. Not sure how bad the lag may/may not be.
if(!atom_fingerprints) //No prints
if(!misc)
misc = list()
var/list/data_entry = misc[atom_reference]
if(data_entry)
var/list/fibers = data_entry[1]
if(!fibers)
fibers = list()
if(atom_suit_fibers)
for(var/j = 1, j <= atom_suit_fibers.len, j++) //Fibers~~~
if(!fibers.Find(atom_suit_fibers[j])) //It isn't! Add!
fibers += atom_suit_fibers[j]
var/list/blood = data_entry[2]
if(!blood)
blood = list()
if(atom_blood_DNA)
for(var/main_blood in atom_blood_DNA)
if(!blood[main_blood])
blood[main_blood] = atom_blood_DNA[blood]
return 1
if(!misc)
misc = list()
var/list/data_entry = misc[atom_reference]
if(data_entry)
var/list/fibers = data_entry[1]
if(!fibers)
fibers = list()
if(atom_suit_fibers)
for(var/j = 1, j <= atom_suit_fibers.len, j++) //Fibers~~~
if(!fibers.Find(atom_suit_fibers[j])) //It isn't! Add!
fibers += atom_suit_fibers[j]
var/list/blood = data_entry[2]
if(!blood)
blood = list()
if(atom_blood_DNA)
for(var/main_blood in atom_blood_DNA)
if(!blood[main_blood])
blood[main_blood] = atom_blood_DNA[blood]
else
var/list/templist[3]
templist[1] = atom_suit_fibers
templist[2] = atom_blood_DNA
templist[3] = atom_name
misc[atom_reference] = templist //Store it!
return 0
//Has prints.
if(!files)
files = list()
for(var/main_print in atom_fingerprints)
var/list/data_entry = files[main_print]
if(data_entry)//The print is already in here!
var/list/internal_atom = data_entry[atom_reference] //Lets see if we can find the current object
if(internal_atom)
//We must be on a roll! Just update what needs to be updated.
var/list/internal_prints = internal_atom[1]
for(var/print in atom_fingerprints) //Sorry for the double loop! D:
var/associated_print = internal_prints[print]
var/reference_print = atom_fingerprints[print]
if(associated_print && associated_print != reference_print) //It does not match
internal_prints[print] = stringmerge(associated_print, reference_print)
else if(!associated_print)
internal_prints[print] = reference_print
//If the main print was updated, lets update the master as well.
if(print == main_print && (!associated_print || (associated_print && associated_print != reference_print)))
update_fingerprints(main_print, internal_prints[print])
//Fibers.
var/list/fibers = internal_atom[2]
if(!fibers)
fibers = list()
if(atom_suit_fibers)
for(var/j = 1, j < atom_suit_fibers.len, j++) //Fibers~~~
if(!fibers.Find(atom_suit_fibers[j])) //It isn't! Add!
fibers += atom_suit_fibers[j]
//Blood.
var/list/blood = internal_atom[3]
if(!blood)
blood = list()
if(atom_blood_DNA)
for(var/main_blood in atom_blood_DNA)
if(!blood[main_blood])
blood[main_blood] = atom_blood_DNA[blood]
if(atom_fingerprints)
if(!files)
files = list()
for(var/main_print in atom_fingerprints)
data_entry = files[main_print]
if(data_entry)//The print is already in here!
var/list/internal_atom = data_entry[atom_reference] //Lets see if we can find the current object
if(internal_atom)
//We must be on a roll! Just update what needs to be updated.
var/list/internal_prints = internal_atom[1]
for(var/print in atom_fingerprints) //Sorry for the double loop! D:
var/associated_print = internal_prints[print]
var/reference_print = atom_fingerprints[print]
if(associated_print && associated_print != reference_print) //It does not match
internal_prints[print] = stringmerge(associated_print, reference_print)
else if(!associated_print)
internal_prints[print] = reference_print
//If the main print was updated, lets update the master as well.
if(print == main_print && (!associated_print || (associated_print && associated_print != reference_print)))
update_fingerprints(main_print, internal_prints[print])
//Fibers.
var/list/fibers = internal_atom[2]
if(!fibers)
fibers = list()
if(atom_suit_fibers)
for(var/j = 1, j < atom_suit_fibers.len, j++) //Fibers~~~
if(!fibers.Find(atom_suit_fibers[j])) //It isn't! Add!
fibers += atom_suit_fibers[j]
//Blood.
var/list/blood = internal_atom[3]
if(!blood)
blood = list()
if(atom_blood_DNA)
for(var/main_blood in atom_blood_DNA)
if(!blood[main_blood])
blood[main_blood] = atom_blood_DNA[blood]
continue
//It's not in there! We gotta add it.
update_fingerprints(main_print, atom_fingerprints[main_print])
var/list/data_point[4]
data_point[1] = atom_fingerprints
data_point[2] = atom_suit_fibers
data_point[3] = atom_blood_DNA
data_point[4] = atom_name
data_entry[atom_reference] = data_point
continue
//It's not in there! We gotta add it.
update_fingerprints(main_print, atom_fingerprints[main_print])
//No print at all! New data entry, go!
var/list/data_point[4]
data_point[1] = atom_fingerprints
data_point[2] = atom_suit_fibers
data_point[3] = atom_blood_DNA
data_point[4] = atom_name
data_entry[atom_reference] = data_point
continue
//No print at all! New data entry, go!
var/list/data_point[4]
data_point[1] = atom_fingerprints
data_point[2] = atom_suit_fibers
data_point[3] = atom_blood_DNA
data_point[4] = atom_name
var/list/new_file[1]
new_file[1] = atom_fingerprints[main_print]
new_file[atom_reference] = data_point
files[main_print] = new_file
var/list/new_file[1]
new_file[1] = atom_fingerprints[main_print]
new_file[atom_reference] = data_point
files[main_print] = new_file
return 1
/********************************
***END DO NOT DIRECTLY CALL ME***

View File

@@ -1,19 +1,3 @@
/mob/living/Life()
..()
// While I'm doing a terriblly lazy way of initalizing things, why don't I make it so people's preferences tag along with them. This could be useful in fixing the fucking cloned-as-unknown thing, making me not have to dynamically load them during tensioner, and of course, storing metadata.
//Whoever wrote this should go suck a choad. This was causing runtimes, asshat. IN ADDITION, YOU PUT IT IN THE LIFE PROC YOU ASSHAT
// if(!src.storedpreferences)
// src.storedpreferences = new
// storedpreferences.savefile_load(src, 0)
return
/mob/living/verb/succumb()
set hidden = 1
if ((src.health < 0 && src.health > -95.0))

View File

@@ -64,28 +64,6 @@
src << msg
return
// Show a message to all mobs in sight of this one
// This would be for visible actions by the src mob
// message is the message output to anyone who can see e.g. "[src] does something!"
// self_message (optional) is what the src mob sees e.g. "You do something!"
// blind_message (optional) is what blind people will hear e.g. "You hear something!"
/mob/visible_message(var/message, var/self_message, var/blind_message)
for(var/mob/M in viewers(src))
var/msg = message
if(self_message && M==src)
msg = self_message
M.show_message( msg, 1, blind_message, 2)
// Show a message to all mobs in sight of this atom
// Use for objects performing visible actions
// message is output to anyone who can see, e.g. "The [src] does something!"
// blind_message (optional) is what blind people will hear e.g. "You hear something!"
/atom/proc/visible_message(var/message, var/blind_message)
for(var/mob/M in viewers(src))
M.show_message( message, 1, blind_message, 2)
/mob/proc/findname(msg)
for(var/mob/M in world)
if (M.real_name == text("[]", msg))
@@ -1158,7 +1136,7 @@ note dizziness decrements automatically in the mob's Life() proc.
if(!isemptylist(args))
for(var/file in args)
src << browse_rsc(file)
return 1
return 1
return 0