diff --git a/code/game/atom_procs.dm b/code/game/atom_procs.dm
index b99e5a6f32f..f7592907ce4 100644
--- a/code/game/atom_procs.dm
+++ b/code/game/atom_procs.dm
@@ -75,6 +75,30 @@
O << text("\red [] has been hit by [] with []", src, user, W)
return
+/atom/proc/add_hiddenprint(mob/living/M as mob)
+ if(isnull(M)) return
+ if(isnull(M.key)) return
+ if (!( src.flags ) & 256)
+ return
+ if (ishuman(M))
+ var/mob/living/carbon/human/H = M
+ if (!istype(H.dna, /datum/dna))
+ return 0
+ if (H.gloves)
+ if(src.fingerprintslast != H.key)
+ src.fingerprintshidden += text("\[[time_stamp()]\] (Wearing gloves). Real name: [], Key: []",H.real_name, H.key)
+ src.fingerprintslast = H.key
+ return 0
+ if (!( src.fingerprints ))
+ if(src.fingerprintslast != H.key)
+ src.fingerprintshidden += text("\[[time_stamp()]\] Real name: [], Key: []",H.real_name, H.key)
+ src.fingerprintslast = H.key
+ return 1
+ else
+ if(src.fingerprintslast != M.key)
+ src.fingerprintshidden += text("\[[time_stamp()]\] Real name: [], Key: []",M.real_name, M.key)
+ src.fingerprintslast = M.key
+ return
/atom/proc/add_fingerprint(mob/living/M as mob)
if(isnull(M)) return
diff --git a/code/game/machinery/camera.dm b/code/game/machinery/camera.dm
index 81eb3d6c1e5..c52aa8f44ea 100644
--- a/code/game/machinery/camera.dm
+++ b/code/game/machinery/camera.dm
@@ -356,11 +356,13 @@
O.show_message(text("\red [] has deactivated []!", user, src), 1)
playsound(src.loc, 'Wirecutter.ogg', 100, 1)
icon_state = "camera1"
+ add_hiddenprint(user)
else
for(var/mob/O in viewers(user, null))
O.show_message(text("\red [] has reactivated []!", user, src), 1)
playsound(src.loc, 'Wirecutter.ogg', 100, 1)
icon_state = "camera"
+ add_hiddenprint(user)
// now disconnect anyone using the camera
//Apparently, this will disconnect anyone even if the camera was re-activated.
//I guess that doesn't matter since they can't use it anyway?
diff --git a/code/game/objects/devices/chameleonproj.dm b/code/game/objects/devices/chameleonproj.dm
index c08ffa32e74..0526ec5ff29 100644
--- a/code/game/objects/devices/chameleonproj.dm
+++ b/code/game/objects/devices/chameleonproj.dm
@@ -25,7 +25,17 @@
relaymove(var/mob/user, direction)
if(can_move)
can_move = 0
- spawn(10) can_move = 1
+ switch(usr.bodytemperature)
+ if(300 to INFINITY)
+ spawn(10) can_move = 1
+ if(295 to 300)
+ spawn(13) can_move = 1
+ if(280 to 295)
+ spawn(16) can_move = 1
+ if(260 to 280)
+ spawn(20) can_move = 1
+ else
+ spawn(25) can_move = 1
step(src,direction)
return
diff --git a/code/game/objects/items/weapons/table_rack_parts.dm b/code/game/objects/items/weapons/table_rack_parts.dm
index 4dc1e13076c..cd341fcb9b8 100644
--- a/code/game/objects/items/weapons/table_rack_parts.dm
+++ b/code/game/objects/items/weapons/table_rack_parts.dm
@@ -18,7 +18,8 @@ RACK PARTS
del(src)
/obj/item/weapon/table_parts/attack_self(mob/user as mob)
- new /obj/structure/table( user.loc )
+ var/obj/structure/table/T = new /obj/structure/table( user.loc )
+ T.add_fingerprint(usr)
del(src)
return
diff --git a/code/game/objects/stacks/metal.dm b/code/game/objects/stacks/metal.dm
index 34bcdbf7be8..2920c6f7f10 100644
--- a/code/game/objects/stacks/metal.dm
+++ b/code/game/objects/stacks/metal.dm
@@ -50,8 +50,9 @@ FLOOR TILES
usr << "\blue Assembling grille..."
if (!do_after(usr, 10))
return
- new /obj/structure/grille( usr.loc )
+ var/obj/structure/grille/F = new /obj/structure/grille/ ( usr.loc )
usr << "\blue You assemble a grille"
+ F.add_fingerprint(usr)
use(2)
return
diff --git a/code/game/objects/stacks/stack.dm b/code/game/objects/stacks/stack.dm
index 3ca6fc7dce3..7d5a935046c 100644
--- a/code/game/objects/stacks/stack.dm
+++ b/code/game/objects/stacks/stack.dm
@@ -157,7 +157,7 @@
t1 += " [n*R.res_amount]x"
if (!(max_multiplier in multipliers))
t1 += " [max_multiplier*R.res_amount]x"
-
+
t1 += "