diff --git a/baystation12.int b/baystation12.int
index 364c188ceb..b82874fded 100644
--- a/baystation12.int
+++ b/baystation12.int
@@ -1,11 +1,6 @@
// BEGIN_INTERNALS
/*
MAP_ICON_TYPE: 0
-LAST_COMPILE_VERSION: 503.1224
-WINDOW: code\modules\paperwork\photography.dm;code\modules\mob\living\silicon\ai\ai.dm;code\_onclick\click.dm;code\_onclick\ai.dm;code\modules\mob\transform_procs.dm;code\game\objects\items\blueprints.dm;code\modules\paperwork\ai_photography.dm
-DIR: code code\_onclick code\game\gamemodes code\game\gamemodes\mutiny code\game\gamemodes\mutiny\directives code\game\objects code\game\objects\items code\modules code\modules\mob code\modules\mob\living code\modules\mob\living\silicon code\modules\mob\living\silicon\ai code\modules\paperwork code\WorkInProgress\AI_Visibility icons icons\mob icons\obj icons\obj\atmospherics sound sound\vox
-FILE: code\modules\paperwork\ai_photography.dm
-LAST_COMPILE_TIME: 1406556860
AUTO_FILE_DIR: OFF
*/
// END_INTERNALS
diff --git a/code/game/machinery/newscaster.dm b/code/game/machinery/newscaster.dm
index b1783b1707..fba4927947 100644
--- a/code/game/machinery/newscaster.dm
+++ b/code/game/machinery/newscaster.dm
@@ -748,16 +748,27 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
/obj/machinery/newscaster/proc/AttachPhoto(mob/user as mob)
if(photo)
- photo.loc = src.loc
- user.put_in_inactive_hand(photo)
+ if(!issilicon(user))
+ photo.loc = src.loc
+ user.put_in_inactive_hand(photo)
photo = null
if(istype(user.get_active_hand(), /obj/item/weapon/photo))
photo = user.get_active_hand()
user.drop_item()
photo.loc = src
+ else if(istype(user,/mob/living/silicon))
+ var/mob/living/silicon/tempAI = user
+ var/obj/item/device/camera/siliconcam/camera = tempAI.aiCamera
+ if(!camera)
+ return
+ var/datum/picture/selection = camera.selectpicture()
+ if (!selection)
+ return
-
+ var/obj/item/weapon/photo/P = new/obj/item/weapon/photo()
+ P.construct(selection)
+ photo = P
//########################################################################################################################
diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm
index b40a3fb6ad..0fe0ddc93d 100644
--- a/code/modules/mob/living/silicon/ai/ai.dm
+++ b/code/modules/mob/living/silicon/ai/ai.dm
@@ -32,7 +32,6 @@ var/list/ai_list = list()
var/obj/item/device/pda/ai/aiPDA = null
var/obj/item/device/multitool/aiMulti = null
var/obj/item/device/radio/headset/heads/ai_integrated/aiRadio = null
- var/obj/item/device/camera/siliconcam/aiCamera = null
var/custom_sprite = 0 //For our custom sprites
//Hud stuff
diff --git a/code/modules/mob/living/silicon/robot/drone/drone.dm b/code/modules/mob/living/silicon/robot/drone/drone.dm
index 0ab4e42028..cd0cbc9e2c 100644
--- a/code/modules/mob/living/silicon/robot/drone/drone.dm
+++ b/code/modules/mob/living/silicon/robot/drone/drone.dm
@@ -61,6 +61,10 @@
flavor_text = "It's a tiny little repair drone. The casing is stamped with an NT logo and the subscript: 'NanoTrasen Recursive Repair Systems: Fixing Tomorrow's Problem, Today!'"
updateicon()
+/mob/living/silicon/robot/drone/init()
+ new/obj/item/device/camera/siliconcam/drone_camera(src)
+ playsound(src.loc, 'sound/machines/twobeep.ogg', 50, 0)
+
//Redefining some robot procs...
/mob/living/silicon/robot/drone/updatename()
real_name = "maintenance drone ([rand(100,999)])"
diff --git a/code/modules/mob/living/silicon/robot/photos.dm b/code/modules/mob/living/silicon/robot/photos.dm
index 31b40cf60d..fbcc3bf484 100644
--- a/code/modules/mob/living/silicon/robot/photos.dm
+++ b/code/modules/mob/living/silicon/robot/photos.dm
@@ -3,9 +3,6 @@
if (!master_cam)
return
- if(!aiCamera)
- aiCamera = new/obj/item/device/camera/siliconcam/robot_camera(src)
-
var/synced
synced = 0
for(var/datum/picture/z in aiCamera.aipictures)
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index 15342d04b5..4daa0f5cf8 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -65,7 +65,6 @@
var/scrambledcodes = 0 // Used to determine if a borg shows up on the robotics console. Setting to one hides them.
var/braintype = "Cyborg"
var/pose
- var/obj/item/device/camera/siliconcam/aiCamera = null //photography
/mob/living/silicon/robot/New(loc,var/syndie = 0,var/unfinished = 0)
spark_system = new /datum/effect/effect/system/spark_spread()
@@ -139,11 +138,11 @@
hud_list[IMPCHEM_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
hud_list[IMPTRACK_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
hud_list[SPECIALROLE_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
+ init()
- if(istype(src,/mob/living/silicon/robot/drone))
- playsound(src.loc, 'sound/machines/twobeep.ogg', 50, 0)
- else
- playsound(loc, 'sound/voice/liveagain.ogg', 75, 1)
+/mob/living/silicon/robot/proc/init()
+ new/obj/item/device/camera/siliconcam/robot_camera(src)
+ playsound(loc, 'sound/voice/liveagain.ogg', 75, 1)
// setup the PDA and its name
/mob/living/silicon/robot/proc/setup_PDA()
diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm
index 99adb65ed0..d730bd9b5f 100644
--- a/code/modules/mob/living/silicon/silicon.dm
+++ b/code/modules/mob/living/silicon/silicon.dm
@@ -13,6 +13,8 @@
var/speak_exclamation = "declares"
var/speak_query = "queries"
+ var/obj/item/device/camera/siliconcam/aiCamera = null //photography
+
/mob/living/silicon/proc/show_laws()
return
diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm
index 7f006325e6..6963fe2f75 100644
--- a/code/modules/paperwork/photocopier.dm
+++ b/code/modules/paperwork/photocopier.dm
@@ -34,6 +34,8 @@
dat += "+
"
else if(toner)
dat += "Please insert paper to copy.
"
+ if(istype(user,/mob/living/silicon))
+ dat += "Print photo from database
"
dat += "Current toner level: [toner]"
if(!toner)
dat +="
Please insert a new toner cartridge!"
@@ -112,6 +114,27 @@
if(copies < maxcopies)
copies++
updateUsrDialog()
+ else if(href_list["aipic"])
+ if(!istype(usr,/mob/living/silicon)) return
+ if(toner >= 5)
+ var/mob/living/silicon/tempAI = usr
+ var/obj/item/device/camera/siliconcam/camera = tempAI.aiCamera
+
+ if(!camera)
+ return
+ var/datum/picture/selection = camera.selectpicture()
+ if (!selection)
+ return
+
+ var/obj/item/weapon/photo/p = new /obj/item/weapon/photo (src.loc)
+ p.construct(selection)
+ if (p.desc == "")
+ p.desc += "Copied by [tempAI.name]"
+ else
+ p.desc += " - Copied by [tempAI.name]"
+ toner -= 5
+ sleep(15)
+ updateUsrDialog()
attackby(obj/item/O as obj, mob/user as mob)
if(istype(O, /obj/item/weapon/paper))
diff --git a/code/modules/paperwork/silicon_photography.dm b/code/modules/paperwork/silicon_photography.dm
index e5041ab96a..4fbe953d72 100644
--- a/code/modules/paperwork/silicon_photography.dm
+++ b/code/modules/paperwork/silicon_photography.dm
@@ -5,10 +5,6 @@
var/name = "image"
var/list/fields = list()
-/datum/inject
- var/name = "image"
- var/list/fields = list()
-
/obj/item/device/camera/siliconcam
var/in_camera_mode = 0
var/photos_taken = 0
@@ -20,6 +16,9 @@
/obj/item/device/camera/siliconcam/robot_camera //camera cyborgs can take pictures with
name = "Cyborg photo camera"
+/obj/item/device/camera/siliconcam/drone_camera //currently doesn't offer the verbs, thus cannot be used
+ name = "Drone photo camera"
+
/obj/item/device/camera/siliconcam/proc/injectaialbum(var/datum/picture/P, var/sufix = "") //stores image information to a list similar to that of the datacore
photos_taken++
P.fields["name"] = "Image [photos_taken][sufix]"
@@ -37,6 +36,9 @@
usr << "Image recorded"
/obj/item/device/camera/siliconcam/proc/selectpicture(obj/item/device/camera/siliconcam/cam)
+ if(!cam)
+ cam = getsource()
+
var/list/nametemp = list()
var/find
if(cam.aipictures.len == 0)
@@ -50,8 +52,8 @@
if(q.fields["name"] == find)
return q
-/obj/item/device/camera/siliconcam/proc/viewpictures(obj/item/device/camera/siliconcam/cam)
- var/datum/picture/selection = selectpicture(cam)
+/obj/item/device/camera/siliconcam/proc/viewpictures()
+ var/datum/picture/selection = selectpicture()
if(!selection)
return
@@ -112,7 +114,7 @@
set desc = "View images"
set src in usr
- viewpictures(src)
+ viewpictures()
/obj/item/device/camera/siliconcam/ai_camera/verb/delete_images()
set category = "AI Commands"
@@ -120,7 +122,7 @@
set desc = "Delete image"
set src in usr
- deletepicture(src)
+ deletepicture()
/obj/item/device/camera/siliconcam/robot_camera/verb/take_image()
set category ="Robot Commands"
@@ -136,8 +138,7 @@
set desc = "View images"
set src in usr
- var/obj/item/device/camera/siliconcam/cam = getsource()
- viewpictures(cam)
+ viewpictures()
/obj/item/device/camera/siliconcam/robot_camera/verb/delete_images()
set category = "Robot Commands"
@@ -145,9 +146,13 @@
set desc = "Delete a local image"
set src in usr
+ // Explicitly only allow deletion from the local camera
deletepicture(src)
obj/item/device/camera/siliconcam/proc/getsource()
+ if(istype(src.loc, /mob/living/silicon/ai))
+ return src
+
var/mob/living/silicon/robot/C = src.loc
var/obj/item/device/camera/siliconcam/Cinfo
if(C.connected_ai)