diff --git a/code/WorkInProgress/Chemistry-Reagents.dm b/code/WorkInProgress/Chemistry-Reagents.dm
index 936ed486665..086471c839f 100644
--- a/code/WorkInProgress/Chemistry-Reagents.dm
+++ b/code/WorkInProgress/Chemistry-Reagents.dm
@@ -700,6 +700,11 @@ datum
napalm.trace_gases += fuel
T.assume_air(napalm)
return
+ on_mob_life(var/mob/M)
+ if(!M) M = holder.my_atom
+ M:toxloss += 1
+ ..()
+ return
space_cleaner
name = "Space cleaner"
diff --git a/code/game/machinery/computer/computer.dm b/code/game/machinery/computer/computer.dm
index 821db91891f..89893774502 100644
--- a/code/game/machinery/computer/computer.dm
+++ b/code/game/machinery/computer/computer.dm
@@ -376,6 +376,7 @@ Pod/Blast Doors computer
G.fields["p_stat"] = "Active"
G.fields["m_stat"] = "Stable"
M.fields["b_type"] = text("[]", H.b_type)
+ M.fields["b_dna"] = H.dna.unique_enzymes
M.fields["mi_dis"] = "None"
M.fields["mi_dis_d"] = "No minor disabilities have been declared."
M.fields["ma_dis"] = "None"
diff --git a/code/game/machinery/computer/medical.dm b/code/game/machinery/computer/medical.dm
index 4259e0d59c7..0b777a41dee 100644
--- a/code/game/machinery/computer/medical.dm
+++ b/code/game/machinery/computer/medical.dm
@@ -71,7 +71,7 @@
else
dat += "General Record Lost!
"
if ((istype(src.active2, /datum/data/record) && data_core.medical.Find(src.active2)))
- dat += text("
\n
Medical Data
\nBlood Type: []
\n
\nMinor Disabilities: []
\nDetails: []
\n
\nMajor Disabilities: []
\nDetails: []
\n
\nAllergies: []
\nDetails: []
\n
\nCurrent Diseases: [] (per disease info placed in log/comment section)
\nDetails: []
\n
\nImportant Notes:
\n\t[]
\n
\nComments/Log
", src, src.active2.fields["b_type"], src, src.active2.fields["mi_dis"], src, src.active2.fields["mi_dis_d"], src, src.active2.fields["ma_dis"], src, src.active2.fields["ma_dis_d"], src, src.active2.fields["alg"], src, src.active2.fields["alg_d"], src, src.active2.fields["cdi"], src, src.active2.fields["cdi_d"], src, src.active2.fields["notes"])
+ dat += text("
\nMedical Data
\nBlood Type: []
\nDNA: []
\n
\nMinor Disabilities: []
\nDetails: []
\n
\nMajor Disabilities: []
\nDetails: []
\n
\nAllergies: []
\nDetails: []
\n
\nCurrent Diseases: [] (per disease info placed in log/comment section)
\nDetails: []
\n
\nImportant Notes:
\n\t[]
\n
\nComments/Log
", src, src.active2.fields["b_type"], src, src.active2.fields["b_dna"], src, src.active2.fields["mi_dis"], src, src.active2.fields["mi_dis_d"], src, src.active2.fields["ma_dis"], src, src.active2.fields["ma_dis_d"], src, src.active2.fields["alg"], src, src.active2.fields["alg_d"], src, src.active2.fields["cdi"], src, src.active2.fields["cdi_d"], src, src.active2.fields["notes"])
var/counter = 1
while(src.active2.fields[text("com_[]", counter)])
dat += text("[]
Delete Entry
", src.active2.fields[text("com_[]", counter)], src, counter)
@@ -197,7 +197,7 @@
switch(href_list["field"])
if("fingerprint")
if (istype(src.active1, /datum/data/record))
- var/t1 = input("Please input fingerprint hash:", "Med. records", src.active1.fields["id"], null) as text
+ var/t1 = input("Please input fingerprint hash:", "Med. records", src.active1.fields["fingerprint"], null) as text
if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || src.active1 != a1))
return
src.active1.fields["fingerprint"] = t1
@@ -276,6 +276,12 @@
if("b_type")
if (istype(src.active2, /datum/data/record))
src.temp = text("Blood Type:
\n\tA- A+
\n\tB- B+
\n\tAB- AB+
\n\tO- O+
", src, src, src, src, src, src, src, src)
+ if("b_dna")
+ if (istype(src.active1, /datum/data/record))
+ var/t1 = input("Please input DNA hash:", "Med. records", src.active1.fields["dna"], null) as text
+ if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || src.active1 != a1))
+ return
+ src.active1.fields["dna"] = t1
else
if (href_list["p_stat"])
@@ -355,6 +361,7 @@
R.fields["id"] = src.active1.fields["id"]
R.name = text("Medical Record #[]", R.fields["id"])
R.fields["b_type"] = "Unknown"
+ R.fields["b_dna"] = "Unknown"
R.fields["mi_dis"] = "None"
R.fields["mi_dis_d"] = "No minor disabilities have been declared."
R.fields["ma_dis"] = "None"
@@ -417,7 +424,7 @@
else
P.info += "General Record Lost!
"
if ((istype(src.active2, /datum/data/record) && data_core.medical.Find(src.active2)))
- P.info += text("
\nMedical Data
\nBlood Type: []
\n
\nMinor Disabilities: []
\nDetails: []
\n
\nMajor Disabilities: []
\nDetails: []
\n
\nAllergies: []
\nDetails: []
\n
\nCurrent Diseases: [] (per disease info placed in log/comment section)
\nDetails: []
\n
\nImportant Notes:
\n\t[]
\n
\nComments/Log
", src.active2.fields["b_type"], src.active2.fields["mi_dis"], src.active2.fields["mi_dis_d"], src.active2.fields["ma_dis"], src.active2.fields["ma_dis_d"], src.active2.fields["alg"], src.active2.fields["alg_d"], src.active2.fields["cdi"], src.active2.fields["cdi_d"], src.active2.fields["notes"])
+ P.info += text("
\nMedical Data
\nBlood Type: []
\nDNA: []
\n
\nMinor Disabilities: []
\nDetails: []
\n
\nMajor Disabilities: []
\nDetails: []
\n
\nAllergies: []
\nDetails: []
\n
\nCurrent Diseases: [] (per disease info placed in log/comment section)
\nDetails: []
\n
\nImportant Notes:
\n\t[]
\n
\nComments/Log
", src.active2.fields["b_type"], src.active2.fields["b_dna"], src.active2.fields["mi_dis"], src.active2.fields["mi_dis_d"], src.active2.fields["ma_dis"], src.active2.fields["ma_dis_d"], src.active2.fields["alg"], src.active2.fields["alg_d"], src.active2.fields["cdi"], src.active2.fields["cdi_d"], src.active2.fields["notes"])
var/counter = 1
while(src.active2.fields[text("com_[]", counter)])
P.info += text("[]
", src.active2.fields[text("com_[]", counter)])
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index 9fc71b08047..8848afc6c92 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -184,7 +184,7 @@
/obj/manifest/proc/manifest()
var/dat = "Crew Manifest:
"
for(var/mob/living/carbon/human/M in world)
- dat += text(" [] - []
", M.name, (istype(M.wear_id, /obj/item/weapon/card/id) ? text("[]", M.wear_id.assignment) : "Unknown Position"))
+ dat += text(" [] - []
", M.name, M.get_assignment())
var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( src.loc )
P.info = dat
P.name = "paper- 'Crew Manifest'"
diff --git a/code/game/objects/items/apc_frame.dm b/code/game/objects/items/apc_frame.dm
index bcca62b2ea0..4441bf49c5c 100644
--- a/code/game/objects/items/apc_frame.dm
+++ b/code/game/objects/items/apc_frame.dm
@@ -2,7 +2,7 @@
/obj/item/apc_frame/attackby(obj/item/weapon/W as obj, mob/user as mob)
if (istype(W, /obj/item/weapon/wrench))
- new /obj/item/stack/sheet/metal( src.loc, 2 )
+ new /obj/item/stack/sheet/metal( get_turf(src.loc), 2 )
del(src)
/obj/item/apc_frame/proc/try_build(turf/on_wall)
diff --git a/code/game/objects/radio/radio.dm b/code/game/objects/radio/radio.dm
index d63c3437079..b1349ab4f54 100644
--- a/code/game/objects/radio/radio.dm
+++ b/code/game/objects/radio/radio.dm
@@ -145,18 +145,11 @@ Frequency:
var/eqjobname
- if (istype(M, /mob/living/carbon))
- if (M:wear_id)
- var/id
- if (istype(M:wear_id, /obj/item/device/pda))
- var/obj/item/device/pda/pda = M:wear_id
- if (pda.id) id = pda.id.assignment
- else id = pda.ownjob
- else id = M:wear_id.assignment
- if (id) eqjobname = id
- else eqjobname = "No job"
- else
- eqjobname = "No id"
+ if (istype(M, /mob/living/carbon/human))
+ var/mob/living/carbon/human/H = M
+ eqjobname = H.get_assignment()
+ else if (istype(M, /mob/living/carbon))
+ eqjobname = "No id" //only humans can wear ID
else if (istype(M,/mob/living/silicon/ai))
eqjobname = "AI"
else if (istype(M,/mob/living/silicon/robot))
diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm
index 76134694e1e..946a05d1f6e 100644
--- a/code/modules/admin/admin.dm
+++ b/code/modules/admin/admin.dm
@@ -990,10 +990,7 @@ var/showadminmessages = 1
continue
H.paralysis += 5
if(H.wear_id)
- var/obj/item/weapon/card/id/id = H.wear_id
- if (istype (H.wear_id, /obj/item/device/pda))
- var/obj/item/device/pda/pda = H.wear_id
- id = pda.id
+ var/obj/item/weapon/card/id/id = H.get_idcard()
for(var/A in id.access)
if(A == access_security)
security++
@@ -1404,7 +1401,7 @@ var/showadminmessages = 1
dat += "| Name | Position |
"
for(var/mob/living/carbon/human/H in world)
if(H.ckey)
- dat += text("| [] | [] |
", H.name, (istype(H.wear_id, /obj/item/weapon/card/id) ? text("[]", H.wear_id.assignment) : "Unknown Position"))
+ dat += text("| [] | [] |
", H.name, H.get_assignment())
dat += "
"
usr << browse(dat, "window=manifest;size=440x410")
if("DNA")
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 4fc70337ae6..e8be1fb2c5e 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -2587,3 +2587,59 @@
var/obj/machinery/bot/mulebot/MB = AM
if(istype(MB))
MB.RunOver(src)
+
+//gets assignment from ID or ID inside PDA or PDA itself
+//Useful when player do something with computers
+/mob/living/carbon/human/proc/get_assignment(var/if_no_id = "No id", var/if_no_job = "No job")
+ var/obj/item/device/pda/pda = src.wear_id
+ var/obj/item/weapon/card/id/id = src.wear_id
+ if (istype(pda))
+ if (pda.id)
+ . = pda.id.assignment
+ else
+ . = pda.ownjob
+ else if (istype(id))
+ . = id.assignment
+ else
+ return if_no_id
+ if (!.)
+ . = if_no_job
+ return
+
+//gets name from ID or ID inside PDA or PDA itself
+//Useful when player do something with computers
+/mob/living/carbon/human/proc/get_authentification_name(var/if_no_id = "Unknown")
+ var/obj/item/device/pda/pda = src.wear_id
+ var/obj/item/weapon/card/id/id = src.wear_id
+ if (istype(pda))
+ if (pda.id)
+ . = pda.id.registered
+ else
+ . = pda.owner
+ else if (istype(id))
+ . = id.registered
+ else
+ return if_no_id
+ return
+
+//gets name from ID or PDA itself, ID inside PDA doesn't matter
+//Useful when player is being seen by other mobs
+/mob/living/carbon/human/proc/get_visible_name(var/if_no_id = "Unknown")
+ var/obj/item/device/pda/pda = src.wear_id
+ var/obj/item/weapon/card/id/id = src.wear_id
+ if (istype(pda))
+ . = pda.owner
+ else if (istype(id))
+ . = id.registered
+ else
+ return if_no_id
+ return
+
+//gets ID card object from special clothes slot or null.
+/mob/living/carbon/human/proc/get_idcard()
+ var/obj/item/weapon/card/id/id = src.wear_id
+ var/obj/item/device/pda/pda = src.wear_id
+ if (istype(pda) && pda.id)
+ id = pda.id
+ if (istype(id))
+ return id
diff --git a/code/modules/mob/living/carbon/human/whisper.dm b/code/modules/mob/living/carbon/human/whisper.dm
index 21b13cea0e9..aa7b65a74f6 100644
--- a/code/modules/mob/living/carbon/human/whisper.dm
+++ b/code/modules/mob/living/carbon/human/whisper.dm
@@ -18,15 +18,8 @@
var/alt_name = ""
if (istype(src, /mob/living/carbon/human) && src.name != src.real_name)
- if (src.wear_id)
- var/obj/item/weapon/card/id/id = src:wear_id
- if(istype(src:wear_id, /obj/item/device/pda))
- var/obj/item/device/pda/pda = src:wear_id
- id = pda.id
- alt_name = " (as [id:registered])"
- else
- alt_name = " (as Unknown)"
-
+ var/mob/living/carbon/human/H = src
+ alt_name = " (as [H.get_visible_name()])"
// Mute disability
if (src.sdisabilities & 2)
return
diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm
index fadd3de054f..c7e10cb73b0 100644
--- a/code/modules/mob/living/say.dm
+++ b/code/modules/mob/living/say.dm
@@ -27,17 +27,8 @@
var/alt_name = ""
if (istype(src, /mob/living/carbon/human) && src.name != src.real_name)
- if (src:wear_id)
- var/id
- if(istype(src:wear_id, /obj/item/device/pda))
- var/obj/item/device/pda/pda = src:wear_id
- id = pda.owner
- else
- id = src:wear_id.registered
- alt_name = " (as [id])"
- else
- alt_name = " (as Unknown)"
-
+ var/mob/living/carbon/human/H = src
+ alt_name = " (as [H.get_visible_name()])"
// Mute disability
if (src.sdisabilities & 2)
return
diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm
index 1d5d64a1f16..71012d84695 100644
--- a/code/modules/mob/new_player/new_player.dm
+++ b/code/modules/mob/new_player/new_player.dm
@@ -292,6 +292,7 @@ mob/new_player
G.fields["p_stat"] = "Active"
G.fields["m_stat"] = "Stable"
M.fields["b_type"] = text("[]", H.b_type)
+ M.fields["b_dna"] = H.dna.unique_enzymes
M.fields["mi_dis"] = "None"
M.fields["mi_dis_d"] = "No minor disabilities have been declared."
M.fields["ma_dis"] = "None"
diff --git a/code/modules/mob/say.dm b/code/modules/mob/say.dm
index d7b892eb99f..436625fc1e8 100644
--- a/code/modules/mob/say.dm
+++ b/code/modules/mob/say.dm
@@ -14,14 +14,8 @@
var/alt_name = ""
if (istype(src, /mob/living/carbon/human) && src.name != src.real_name)
- if (src:wear_id)
- var/obj/item/weapon/card/id/id = src:wear_id
- if(istype(src:wear_id, /obj/item/device/pda))
- var/obj/item/device/pda/pda = src:wear_id
- id = pda.id
- alt_name = " (as [id:registered])"
- else
- alt_name = " (as Unknown)"
+ var/mob/living/carbon/human/H = src
+ alt_name = " (as [H.get_authentification_name()])"
else if (istype(src, /mob/dead/observer))
name = "Ghost"
alt_name = " ([src.real_name])"