From 58e417838ff49e75f36b5a974b9babd0a8b0f3f2 Mon Sep 17 00:00:00 2001 From: SabreML <57483089+SabreML@users.noreply.github.com> Date: Sat, 6 Jan 2024 14:10:05 +0000 Subject: [PATCH] Fixes monkey orbiting breaking the camera (#5383) # About the pull request Fixes orbiting a monkey/farwa/stok/etc. locking your camera onto it. This was happening due to `RegisterSignal(src, COMSIG_MOVABLE_MOVED, PROC_REF(observer_move_react))` not being called if the target mob didn't have a HUD, meaning that the client's `eye` wouldn't be set back to their body when they tried moving away. I also moved the `COMSIG_PARENT_QDELETING` one over too so that the same doesn't happen if the target mob is deleted. (The other signals all seem to be HUD related.) # Explain why it's good for the game Bug! # Testing Photographs and Procedure
Screenshots & Videos ## Before: https://github.com/cmss13-devs/cmss13/assets/57483089/c188db1f-4fb2-4634-baeb-b87ab6e17ae8 https://github.com/cmss13-devs/cmss13/assets/57483089/05348463-49ed-442c-80c3-9c880b4f3d91 ## After: https://github.com/cmss13-devs/cmss13/assets/57483089/3f0c8da7-d688-4523-8f63-9f743e699326 https://github.com/cmss13-devs/cmss13/assets/57483089/b39eefa3-3138-437b-bffe-89813ee0a46b
# Changelog :cl: fix: Fixed observing a monkey/farwa/stok/etc. locking the camera onto it. /:cl: --- code/modules/mob/dead/observer/observer.dm | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 3108a09e62b5..2c06d28de8bb 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -262,6 +262,9 @@ var/mob/living/carbon/human/human_target = target client.eye = human_target + observe_target_mob = human_target + RegisterSignal(observe_target_mob, COMSIG_PARENT_QDELETING, PROC_REF(clean_observe_target)) + RegisterSignal(src, COMSIG_MOVABLE_MOVED, PROC_REF(observer_move_react)) if(!human_target.hud_used) return @@ -290,19 +293,14 @@ break - observe_target_mob = human_target - RegisterSignal(observe_target_mob, COMSIG_PARENT_QDELETING, PROC_REF(clean_observe_target)) RegisterSignal(observe_target_mob, COMSIG_MOB_GHOSTIZE, PROC_REF(observe_target_ghosting)) RegisterSignal(observe_target_mob, COMSIG_MOB_NEW_MIND, PROC_REF(observe_target_new_mind)) RegisterSignal(observe_target_mob, COMSIG_MOB_LOGIN, PROC_REF(observe_target_login)) - RegisterSignal(src, COMSIG_MOVABLE_MOVED, PROC_REF(observer_move_react)) - if(human_target.client) observe_target_client = human_target.client RegisterSignal(observe_target_client, COMSIG_CLIENT_SCREEN_ADD, PROC_REF(observe_target_screen_add)) RegisterSignal(observe_target_client, COMSIG_CLIENT_SCREEN_REMOVE, PROC_REF(observe_target_screen_remove)) - return /mob/dead/observer/reset_perspective(atom/A) if(observe_target_mob)