diff --git a/code/game/machinery/computer/camera_advanced.dm b/code/game/machinery/computer/camera_advanced.dm
index 3d1df935cf8..e91286fe422 100644
--- a/code/game/machinery/computer/camera_advanced.dm
+++ b/code/game/machinery/computer/camera_advanced.dm
@@ -37,18 +37,19 @@
off_action.Activate()
/obj/machinery/computer/camera_advanced/attack_hand(mob/user)
- if(..())
- return
- if(!iscarbon(user))
- return
if(current_user)
to_chat(user, "The console is already in use!")
return
-
+ if(!iscarbon(user))
+ return
+ if(..())
+ return
user.set_machine(src)
+
if(!eyeobj)
CreateEye()
- if(!eyeobj.initialized)
+
+ if(!eyeobj.eye_initialized)
var/camera_location
for(var/obj/machinery/camera/C in cameranet.cameras)
if(!C.can_use())
@@ -57,7 +58,7 @@
camera_location = get_turf(C)
break
if(camera_location)
- eyeobj.initialized = 1
+ eyeobj.eye_initialized = 1
give_eye_control(user)
eyeobj.setLoc(camera_location)
else
@@ -66,6 +67,7 @@
user.unset_machine()
else
give_eye_control(user)
+ eyeobj.setLoc(eyeobj.loc)
/obj/machinery/computer/camera_advanced/proc/give_eye_control(mob/user)
@@ -77,7 +79,6 @@
user.remote_view = 1
user.remote_control = eyeobj
user.reset_perspective(eyeobj)
- eyeobj.setLoc(eyeobj.loc)
/mob/camera/aiEye/remote
name = "Inactive Camera Eye"
@@ -86,10 +87,15 @@
var/acceleration = 1
var/mob/living/carbon/human/eye_user = null
var/obj/machinery/computer/camera_advanced/origin
- var/initialized = 0
+ var/eye_initialized = 0
var/visible_icon = 0
var/image/user_image = null
+/mob/camera/aiEye/remote/Destroy()
+ eye_user = null
+ origin = null
+ return ..()
+
/mob/camera/aiEye/remote/GetViewerClient()
if(eye_user)
return eye_user.client
@@ -102,12 +108,11 @@
T = get_turf(T)
loc = T
cameranet.visibility(src)
- if(eye_user.client)
- if(visible_icon)
+ if(visible_icon)
+ if(eye_user.client)
eye_user.client.images -= user_image
user_image = image(icon,loc,icon_state,FLY_LAYER)
eye_user.client.images += user_image
- eye_user.client.eye = src
/mob/camera/aiEye/remote/relaymove(mob/user,direct)
var/initial = initial(sprint)
@@ -140,14 +145,16 @@
remote_eye.origin.current_user = null
remote_eye.origin.jump_action.Remove(C)
remote_eye.eye_user = null
- C.reset_perspective(null)
if(C.client)
- C.client.images -= remote_eye.user_image
+ C.reset_perspective(null)
+ if(remote_eye.visible_icon)
+ C.client.images -= remote_eye.user_image
for(var/datum/camerachunk/chunk in remote_eye.visibleCameraChunks)
C.client.images -= chunk.obscured
C.remote_control = null
C.unset_machine()
src.Remove(C)
+ playsound(remote_eye.origin, 'sound/machines/terminal_off.ogg', 25, 0)
/datum/action/innate/camera_jump
name = "Jump To Camera"
@@ -175,7 +182,14 @@
T[text("[][]", netcam.c_tag, (netcam.can_use() ? null : " (Deactivated)"))] = netcam
+ playsound(origin, 'sound/machines/terminal_prompt.ogg', 25, 0)
var/camera = input("Choose which camera you want to view", "Cameras") as null|anything in T
var/obj/machinery/camera/final = T[camera]
+ playsound(origin, "terminal_type", 25, 0)
if(final)
+ playsound(origin, 'sound/machines/terminal_prompt_confirm.ogg', 25, 0)
remote_eye.setLoc(get_turf(final))
+ C.overlay_fullscreen("flash", /obj/screen/fullscreen/flash/noise)
+ C.clear_fullscreen("flash", 3) //Shorter flash than normal since it's an ~~advanced~~ console!
+ else
+ playsound(origin, 'sound/machines/terminal_prompt_deny.ogg', 25, 0)
diff --git a/code/game/sound.dm b/code/game/sound.dm
index ed5f0d15b4c..14269acb81f 100644
--- a/code/game/sound.dm
+++ b/code/game/sound.dm
@@ -12,6 +12,9 @@ var/list/page_sound = list('sound/effects/pageturn1.ogg', 'sound/effects/pagetur
var/list/gun_sound = list('sound/weapons/Gunshot.ogg', 'sound/weapons/Gunshot2.ogg','sound/weapons/Gunshot3.ogg','sound/weapons/Gunshot4.ogg')
var/list/computer_ambience = list('sound/goonstation/machines/ambicomp1.ogg', 'sound/goonstation/machines/ambicomp2.ogg', 'sound/goonstation/machines/ambicomp3.ogg')
var/list/ricochet = list('sound/weapons/effects/ric1.ogg', 'sound/weapons/effects/ric2.ogg','sound/weapons/effects/ric3.ogg','sound/weapons/effects/ric4.ogg','sound/weapons/effects/ric5.ogg')
+var/list/terminal_type = list('sound/machines/terminal_button01.ogg', 'sound/machines/terminal_button02.ogg', 'sound/machines/terminal_button03.ogg',
+ 'sound/machines/terminal_button04.ogg', 'sound/machines/terminal_button05.ogg', 'sound/machines/terminal_button06.ogg',
+ 'sound/machines/terminal_button07.ogg', 'sound/machines/terminal_button08.ogg')
/proc/playsound(var/atom/source, soundin, vol as num, vary, extrarange as num, falloff, var/is_global, var/pitch)
@@ -137,4 +140,6 @@ var/list/ricochet = list('sound/weapons/effects/ric1.ogg', 'sound/weapons/effect
soundin = pick(computer_ambience)
if("ricochet")
soundin = pick(ricochet)
+ if("terminal_type")
+ soundin = pick(terminal_type)
return soundin
diff --git a/code/modules/food_and_drinks/food/snacks.dm b/code/modules/food_and_drinks/food/snacks.dm
index ff684c3296b..add4e7c474f 100644
--- a/code/modules/food_and_drinks/food/snacks.dm
+++ b/code/modules/food_and_drinks/food/snacks.dm
@@ -1218,13 +1218,6 @@
user.drop_item()
forceMove(get_turf(O))
return Expand()
- if(istype(O, /obj/machinery/computer/camera_advanced/xenobio))
- var/obj/machinery/computer/camera_advanced/xenobio/X = O
- X.monkeys++
- to_chat(user, "You feed [src] to the [X]. It now has [X.monkeys] monkey cubes stored.")
- user.drop_item()
- qdel(src)
- return
..()
/obj/item/weapon/reagent_containers/food/snacks/monkeycube/water_act(volume, temperature)
diff --git a/code/modules/research/xenobiology/xenobio_camera.dm b/code/modules/research/xenobiology/xenobio_camera.dm
index 416eac1ba2a..9e0e26a0252 100644
--- a/code/modules/research/xenobiology/xenobio_camera.dm
+++ b/code/modules/research/xenobiology/xenobio_camera.dm
@@ -67,6 +67,26 @@
return
return ..()
+/obj/machinery/computer/camera_advanced/xenobio/attackby(obj/item/O, mob/user, params)
+ if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/monkeycube))
+ monkeys++
+ to_chat(user, "You feed [O] to [src]. It now has [monkeys] monkey cubes stored.")
+ user.drop_item()
+ qdel(O)
+ return
+ else if(istype(O, /obj/item/weapon/storage/bag))
+ var/obj/item/weapon/storage/P = O
+ var/loaded = 0
+ for(var/obj/G in P.contents)
+ if(istype(G, /obj/item/weapon/reagent_containers/food/snacks/monkeycube))
+ loaded = 1
+ monkeys++
+ qdel(G)
+ if(loaded)
+ to_chat(user, "You fill [src] with the monkey cubes stored in [O]. [src] now has [monkeys] monkey cubes stored.")
+ return
+ ..()
+
/datum/action/innate/camera_off/xenobio/Activate()
if(!target || !ishuman(target))
return
@@ -82,9 +102,8 @@
origin.monkey_recycle_action.Remove(C)
//All of this stuff below could probably be a proc for all advanced cameras, only the action removal needs to be camera specific
remote_eye.eye_user = null
+ C.reset_perspective(null)
if(C.client)
- C.client.perspective = MOB_PERSPECTIVE
- C.client.eye = src
C.client.images -= remote_eye.user_image
for(var/datum/camerachunk/chunk in remote_eye.visibleCameraChunks)
C.client.images -= chunk.obscured
@@ -109,6 +128,8 @@
S.forceMove(remote_eye.loc)
S.visible_message("[S] warps in!")
X.stored_slimes -= S
+ else
+ to_chat(owner, "Target is not near a camera. Cannot proceed.")
/datum/action/innate/slime_pick_up
name = "Pick up Slime"
@@ -132,7 +153,8 @@
S.visible_message("[S] vanishes in a flash of light!")
S.forceMove(X)
X.stored_slimes += S
-
+ else
+ to_chat(owner, "Target is not near a camera. Cannot proceed.")
/datum/action/innate/feed_slime
name = "Feed Slimes"
@@ -151,7 +173,8 @@
food.LAssailant = C
X.monkeys --
to_chat(owner, "[X] now has [X.monkeys] monkeys left.")
-
+ else
+ to_chat(owner, "Target is not near a camera. Cannot proceed.")
/datum/action/innate/monkey_recycle
name = "Recycle Monkeys"
@@ -168,5 +191,7 @@
for(var/mob/living/carbon/human/M in remote_eye.loc)
if(issmall(M) && M.stat)
M.visible_message("[M] vanishes as they are reclaimed for recycling!")
- X.monkeys += 0.2
+ X.monkeys = round(X.monkeys + 0.2,0.1)
qdel(M)
+ else
+ to_chat(owner, "Target is not near a camera. Cannot proceed.")
\ No newline at end of file
diff --git a/sound/machines/terminal_alert.ogg b/sound/machines/terminal_alert.ogg
new file mode 100644
index 00000000000..0f5006ee42c
Binary files /dev/null and b/sound/machines/terminal_alert.ogg differ
diff --git a/sound/machines/terminal_button01.ogg b/sound/machines/terminal_button01.ogg
new file mode 100644
index 00000000000..362d81f3c57
Binary files /dev/null and b/sound/machines/terminal_button01.ogg differ
diff --git a/sound/machines/terminal_button02.ogg b/sound/machines/terminal_button02.ogg
new file mode 100644
index 00000000000..6df9b289b55
Binary files /dev/null and b/sound/machines/terminal_button02.ogg differ
diff --git a/sound/machines/terminal_button03.ogg b/sound/machines/terminal_button03.ogg
new file mode 100644
index 00000000000..3bd1e2c4259
Binary files /dev/null and b/sound/machines/terminal_button03.ogg differ
diff --git a/sound/machines/terminal_button04.ogg b/sound/machines/terminal_button04.ogg
new file mode 100644
index 00000000000..f9020380d0a
Binary files /dev/null and b/sound/machines/terminal_button04.ogg differ
diff --git a/sound/machines/terminal_button05.ogg b/sound/machines/terminal_button05.ogg
new file mode 100644
index 00000000000..0bbfefe5273
Binary files /dev/null and b/sound/machines/terminal_button05.ogg differ
diff --git a/sound/machines/terminal_button06.ogg b/sound/machines/terminal_button06.ogg
new file mode 100644
index 00000000000..ecb521f272c
Binary files /dev/null and b/sound/machines/terminal_button06.ogg differ
diff --git a/sound/machines/terminal_button07.ogg b/sound/machines/terminal_button07.ogg
new file mode 100644
index 00000000000..a6ed66bbf26
Binary files /dev/null and b/sound/machines/terminal_button07.ogg differ
diff --git a/sound/machines/terminal_button08.ogg b/sound/machines/terminal_button08.ogg
new file mode 100644
index 00000000000..2d35c62cc4c
Binary files /dev/null and b/sound/machines/terminal_button08.ogg differ
diff --git a/sound/machines/terminal_insert_disc.ogg b/sound/machines/terminal_insert_disc.ogg
new file mode 100644
index 00000000000..07313dabaca
Binary files /dev/null and b/sound/machines/terminal_insert_disc.ogg differ
diff --git a/sound/machines/terminal_off.ogg b/sound/machines/terminal_off.ogg
new file mode 100644
index 00000000000..4882aa924af
Binary files /dev/null and b/sound/machines/terminal_off.ogg differ
diff --git a/sound/machines/terminal_on.ogg b/sound/machines/terminal_on.ogg
new file mode 100644
index 00000000000..95164b5b774
Binary files /dev/null and b/sound/machines/terminal_on.ogg differ
diff --git a/sound/machines/terminal_prompt.ogg b/sound/machines/terminal_prompt.ogg
new file mode 100644
index 00000000000..1ff4930a263
Binary files /dev/null and b/sound/machines/terminal_prompt.ogg differ
diff --git a/sound/machines/terminal_prompt_confirm.ogg b/sound/machines/terminal_prompt_confirm.ogg
new file mode 100644
index 00000000000..b838a764e8c
Binary files /dev/null and b/sound/machines/terminal_prompt_confirm.ogg differ
diff --git a/sound/machines/terminal_prompt_deny.ogg b/sound/machines/terminal_prompt_deny.ogg
new file mode 100644
index 00000000000..c408c21625f
Binary files /dev/null and b/sound/machines/terminal_prompt_deny.ogg differ