diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm
index 88ac1b70e2..98e2fda186 100644
--- a/code/_onclick/hud/hud.dm
+++ b/code/_onclick/hud/hud.dm
@@ -188,14 +188,15 @@ datum/hud/New(mob/owner)
//Triggered when F12 is pressed (Unless someone changed something in the DMF)
-/mob/verb/button_pressed_F12()
+/mob/verb/button_pressed_F12(var/full = 0 as null)
set name = "F12"
set hidden = 1
if(hud_used)
if(ishuman(src))
- if(!src.client) return
-
+ if(!client) return
+ if(client.view != world.view)
+ return
if(hud_used.hud_shown)
hud_used.hud_shown = 0
if(src.hud_used.adding)
@@ -209,10 +210,15 @@ datum/hud/New(mob/owner)
//Due to some poor coding some things need special treatment:
//These ones are a part of 'adding', 'other' or 'hotkeybuttons' but we want them to stay
- src.client.screen += src.hud_used.l_hand_hud_object //we want the hands to be visible
- src.client.screen += src.hud_used.r_hand_hud_object //we want the hands to be visible
- src.client.screen += src.hud_used.action_intent //we want the intent swticher visible
- src.hud_used.action_intent.screen_loc = ui_acti_alt //move this to the alternative position, where zone_select usually is.
+ if(!full)
+ src.client.screen += src.hud_used.l_hand_hud_object //we want the hands to be visible
+ src.client.screen += src.hud_used.r_hand_hud_object //we want the hands to be visible
+ src.client.screen += src.hud_used.action_intent //we want the intent swticher visible
+ src.hud_used.action_intent.screen_loc = ui_acti_alt //move this to the alternative position, where zone_select usually is.
+ else
+ src.client.screen -= src.healths
+ src.client.screen -= src.internals
+ src.client.screen -= src.gun_setting_icon
//These ones are not a part of 'adding', 'other' or 'hotkeybuttons' but we want them gone.
src.client.screen -= src.zone_sel //zone_sel is a mob variable for some reason.
@@ -225,7 +231,12 @@ datum/hud/New(mob/owner)
src.client.screen += src.hud_used.other
if(src.hud_used.hotkeybuttons && !src.hud_used.hotkey_ui_hidden)
src.client.screen += src.hud_used.hotkeybuttons
-
+ if(src.healths)
+ src.client.screen |= src.healths
+ if(src.internals)
+ src.client.screen |= src.internals
+ if(src.gun_setting_icon)
+ src.client.screen |= src.gun_setting_icon
src.hud_used.action_intent.screen_loc = ui_acti //Restore intent selection to the original position
src.client.screen += src.zone_sel //This one is a special snowflake
diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm
index 1ea768d005..59721a24ab 100644
--- a/code/modules/mob/mob_movement.dm
+++ b/code/modules/mob/mob_movement.dm
@@ -186,6 +186,12 @@
if(L.incorporeal_move)//Move though walls
Process_Incorpmove(direct)
return
+ if(mob.client)
+ if(mob.client.view != world.view)
+ if(locate(/obj/item/weapon/gun/energy/sniperrifle, mob.contents)) // If mob moves while zoomed in with sniper rifle, unzoom them.
+ var/obj/item/weapon/gun/energy/sniperrifle/s = locate() in mob
+ if(s.zoom)
+ s.zoom()
if(Process_Grab()) return
@@ -447,4 +453,4 @@
prob_slip = 0 // Changing this to zero to make it line up with the comment.
prob_slip = round(prob_slip)
- return(prob_slip)
\ No newline at end of file
+ return(prob_slip)
diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm
index 9f7f749a6d..e6b0f37739 100644
--- a/code/modules/projectiles/guns/energy/special.dm
+++ b/code/modules/projectiles/guns/energy/special.dm
@@ -216,26 +216,32 @@ obj/item/weapon/gun/energy/staff/focus
charge_cost = 250
fire_delay = 35
w_class = 4.0
-
var/zoom = 0
/obj/item/weapon/gun/energy/sniperrifle/dropped(mob/user)
user.client.view = world.view
- zoom = 0
/obj/item/weapon/gun/energy/sniperrifle/verb/zoom()
- set category = "Special Verbs"
- set name = "Zoom"
+ set category = "Object"
+ set name = "Use Sniper Scope"
set popup_menu = 0
if(usr.stat || !(istype(usr,/mob/living/carbon/human)))
- usr << "No."
+ usr << "You are unable to focus down the scope of the rifle."
+ return
+ if(!zoom && usr.get_active_hand() != src)
+ usr << "You are too distracted to look down the scope, perhaps if it was in your active hand this might work better"
return
- src.zoom = !src.zoom
- usr << ("Zoom mode [zoom?"en":"dis"]abled.")
- if(zoom)
+ if(usr.client.view == world.view)
+ if(!usr.hud_used.hud_shown)
+ usr.button_pressed_F12(1) // If the user has already limited their HUD this avoids them having a HUD when they zoom in
+ usr.button_pressed_F12(1)
usr.client.view = 12
- usr << sound('sound/mecha/imag_enh.ogg',volume=50)
+ zoom = 1
else
- usr.client.view = world.view //world.view - default mob view size
+ usr.client.view = world.view
+ if(!usr.hud_used.hud_shown)
+ usr.button_pressed_F12(1)
+ zoom = 0
+ usr << "Zoom mode [zoom?"en":"dis"]abled."
return