diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm
index a10372b8be8..c7c4205bc1c 100644
--- a/code/modules/paperwork/photography.dm
+++ b/code/modules/paperwork/photography.dm
@@ -310,7 +310,11 @@
pc.Blend(tiny_img,ICON_OVERLAY, 12, 19)
var/datum/picture/P = new()
- P.fields["name"] = "photo"
+ if(istype(src,/obj/item/device/camera/digital))
+ P.fields["name"] = input(user,"Name photo:","photo")
+ P.name = P.fields["name"]//So the name is displayed on the print/delete list.
+ else
+ P.fields["name"] = "photo"
P.fields["author"] = user
P.fields["icon"] = ic
P.fields["tiny"] = pc
@@ -351,6 +355,82 @@
return p
+/*****************
+* digital camera *
+******************/
+/obj/item/device/camera/digital
+ name = "digital camera"
+ desc = "A digital camera. A small screen shows there is space for 10 photos left."
+ var/list/datum/picture/saved_pictures = list()
+ pictures_left = 30
+ var/max_storage = 10
+
+/obj/item/device/camera/digital/afterattack(atom/target as mob|obj|turf|area, mob/user as mob, flag)
+ if(!on || !pictures_left || ismob(target.loc)) return
+ captureimage(target, user, flag)
+
+ playsound(loc, pick('sound/items/polaroid1.ogg', 'sound/items/polaroid2.ogg'), 75, 1, -3)
+
+ desc = "A digital camera. A small screen shows that there are currently [saved_pictures.len] pictures stored."
+ icon_state = icon_off
+ on = 0
+ spawn(64)
+ icon_state = icon_on
+ on = 1
+
+/obj/item/device/camera/digital/captureimage(atom/target, mob/user, flag)
+ if(saved_pictures.len >= max_storage)
+ user << "Maximum photo storage capacity reached."
+ return
+ user << "Picture saved."
+ var/x_c = target.x - (size-1)/2
+ var/y_c = target.y + (size-1)/2
+ var/z_c = target.z
+ var/list/turfs = list()
+ var/mobs = ""
+ for(var/i = 1; i <= size; i++)
+ for(var/j = 1; j <= size; j++)
+ var/turf/T = locate(x_c, y_c, z_c)
+ if(can_capture_turf(T, user))
+ turfs.Add(T)
+ mobs += get_mobs(T)
+ x_c++
+ y_c--
+ x_c = x_c - size
+
+ var/datum/picture/P = createpicture(target, user, turfs, mobs, flag)
+ saved_pictures += P
+
+/obj/item/device/camera/digital/verb/print_picture()
+ set name = "Print picture"
+ set category = "Object"
+ set src in usr
+
+ if(saved_pictures.len == 0)
+ usr << "No images saved."
+ return
+ if(pictures_left == 0)
+ usr << "There is no film left to print."
+ return
+
+ var/datum/picture/P = null
+ P = input("Select image to print:",P) as null|anything in saved_pictures
+ if(P)
+ printpicture(usr,P)
+ pictures_left --
+
+/obj/item/device/camera/digital/verb/delete_picture()
+ set name = "Delete picture"
+ set category = "Object"
+ set src in usr
+
+ if(saved_pictures.len == 0)
+ usr << "No images saved"
+ return
+ var/datum/picture/P = null
+ P = input("Select image to delete:",P) as null|anything in saved_pictures
+ if(P)
+ saved_pictures -= P
/**************
*video camera *
diff --git a/code/modules/research/designs/misc_designs.dm b/code/modules/research/designs/misc_designs.dm
index 4b0dc6425e9..403e5745ca8 100644
--- a/code/modules/research/designs/misc_designs.dm
+++ b/code/modules/research/designs/misc_designs.dm
@@ -39,4 +39,14 @@
build_type = PROTOLATHE | AUTOLATHE
materials = list("$metal" = 30, "$glass" = 10)
build_path = /obj/item/weapon/disk/tech_disk
+ category = list("Miscellaneous")
+
+/datum/design/digital_camera
+ name = "Digital Camera"
+ desc = "Produce an enhanced version of the standard issue camera."
+ id = "digitalcamera"
+ req_tech = list("programming" = 2, "materials" = 2)
+ build_type = PROTOLATHE
+ materials = list("$metal" = 500, "$glass" = 300)
+ build_path = /obj/item/device/camera/digital
category = list("Miscellaneous")
\ No newline at end of file