Skip to content

Commit c2b5146

Browse files
committed
12
1 parent d7699e2 commit c2b5146

File tree

17 files changed

+121
-94
lines changed

17 files changed

+121
-94
lines changed

code/__DEFINES/traits/declarations.dm

+4
Original file line numberDiff line numberDiff line change
@@ -308,3 +308,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
308308

309309
/// A trait gained by leaning against a wall
310310
#define TRAIT_LEANING "leaning"
311+
312+
/// used for dead mobs that are observing, but should not be afforded all the same platitudes as full ghosts.
313+
/// This is a mind trait because ghosts can be frequently deleted and we want to be sure this sticks.
314+
//#define TRAIT_OBSERVING_INVENTORY "observe_inventory"

code/_onclick/hud/alert.dm

+11-1
Original file line numberDiff line numberDiff line change
@@ -846,6 +846,11 @@ so as to remain in compliance with the most up-to-date laws."
846846
if(!hud_shown)
847847
for(var/i in 1 to alerts.len)
848848
mymob.client.screen -= alerts[alerts[i]]
849+
for(var/mob/dead/observer/observe in mymob.inventory_observers)
850+
if(!observe.client)
851+
LAZYREMOVE(mymob.inventory_observers, observe)
852+
continue
853+
observe.client.screen -= alerts[alerts[i]]
849854
return TRUE
850855
for(var/i in 1 to alerts.len)
851856
var/atom/movable/screen/alert/alert = alerts[alerts[i]]
@@ -868,6 +873,11 @@ so as to remain in compliance with the most up-to-date laws."
868873
. = ""
869874
alert.screen_loc = .
870875
mymob.client.screen |= alert
876+
for(var/mob/dead/observer/observe in mymob.inventory_observers)
877+
if(!observe.client)
878+
LAZYREMOVE(mymob.inventory_observers, observe)
879+
continue
880+
observe.client.screen |= alert
871881
return TRUE
872882

873883
/atom/movable/screen/alert/Click(location, control, params)
@@ -878,7 +888,7 @@ so as to remain in compliance with the most up-to-date laws."
878888
if(paramslist["shift"]) // screen objects don't do the normal Click() stuff so we'll cheat
879889
to_chat(usr, "<span class='boldnotice'>[name]</span> - <span class='info'>[desc]</span>")
880890
return FALSE
881-
891+
882892
if(master)
883893
return usr.client.Click(master, location, control, params)
884894

code/_onclick/hud/fullscreen.dm

+18-13
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@
1616
if(client && screen.should_show_to(src))
1717
screen.update_for_view(client.view)
1818
client.screen += screen
19-
for(var/mob/dead/observer/observe in orbiters)
20-
if(!istype(observe) || !observe.client || !observe.orbit_menu?.auto_observe)
21-
LAZYREMOVE(orbiters, observe)
19+
for(var/mob/dead/observer/observe in inventory_observers)
20+
if(!observe.client)
21+
LAZYREMOVE(inventory_observers, observe)
2222
continue
2323
observe.client.screen += screen
2424

@@ -34,8 +34,9 @@
3434
return
3535

3636
screens -= category
37-
for(var/mob/dead/observer/observe in orbiters)
38-
if(!istype(observe) || !observe.client)
37+
for(var/mob/dead/observer/observe in inventory_observers)
38+
if(!observe.client)
39+
LAZYREMOVE(inventory_observers, observe)
3940
continue
4041
observe.screens -= category
4142

@@ -46,8 +47,9 @@
4647
if(client)
4748
client.screen -= screen
4849

49-
for(var/mob/dead/observer/observe in orbiters)
50-
if(!istype(observe) || !observe.client)
50+
for(var/mob/dead/observer/observe in inventory_observers)
51+
if(!observe.client)
52+
LAZYREMOVE(inventory_observers, observe)
5153
continue
5254
observe.client.screen -= screen
5355
qdel(screen)
@@ -56,8 +58,9 @@
5658
/mob/proc/clear_fullscreen_after_animate(atom/movable/screen/fullscreen/screen)
5759
if(client)
5860
client.screen -= screen
59-
for(var/mob/dead/observer/observe in orbiters)
60-
if(!istype(observe) || !observe.client)
61+
for(var/mob/dead/observer/observe in inventory_observers)
62+
if(!observe.client)
63+
LAZYREMOVE(inventory_observers, observe)
6164
continue
6265
observe.client.screen -= screen
6366
qdel(screen)
@@ -78,15 +81,17 @@
7881
screen.update_for_view(mymob.client.view)
7982
mymob.client.screen |= screen
8083

81-
for(var/mob/dead/observer/observe in mymob.orbiters)
82-
if(!istype(observe) || !observe.client)
84+
for(var/mob/dead/observer/observe in mymob.inventory_observers)
85+
if(!observe.client)
86+
LAZYREMOVE(mymob.inventory_observers, observe)
8387
continue
8488
observe.client.screen |= screen
8589
else
8690
mymob.client.screen -= screen
8791

88-
for(var/mob/dead/observer/observe in mymob.orbiters)
89-
if(!istype(observe) || !observe.client)
92+
for(var/mob/dead/observer/observe in mymob.inventory_observers)
93+
if(!observe.client)
94+
LAZYREMOVE(mymob.inventory_observers, observe)
9095
continue
9196
observe.client.screen -= screen
9297

code/datums/action.dm

+6-6
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,9 @@
4646
if(owner.client)
4747
owner.client.screen += button
4848

49-
for(var/mob/dead/observer/observe in user.orbiters)
50-
if(!istype(observe) || !observe.client || !observe.orbit_menu?.auto_observe)
51-
LAZYREMOVE(user.orbiters, observe)
49+
for(var/mob/dead/observer/observe in user.inventory_observers)
50+
if(!observe.client)
51+
LAZYREMOVE(user.inventory_observers, observe)
5252
continue
5353
observe.client.screen += button
5454

@@ -76,9 +76,9 @@
7676
if(user.client)
7777
user.client.screen -= button
7878

79-
for(var/mob/dead/observer/observe in user.orbiters)
80-
if(!istype(observe) || !observe.client || !observe.orbit_menu?.auto_observe)
81-
LAZYREMOVE(user.orbiters, observe)
79+
for(var/mob/dead/observer/observe in user.inventory_observers)
80+
if(!observe.client)
81+
LAZYREMOVE(user.inventory_observers, observe)
8282
continue
8383
observe.client.screen -= button
8484

code/datums/progressbar.dm

+3-2
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,9 @@
5757
user_client = user.client
5858
add_prog_bar_image_to_client()
5959
// Ghosts wants to see a do_afters too!
60-
for(var/mob/dead/observer/observe in user.orbiters)
61-
if(!istype(observe) || !observe.client)
60+
for(var/mob/dead/observer/observe in user.inventory_observers)
61+
if(!observe.client)
62+
LAZYREMOVE(user.inventory_observers, observe)
6263
continue
6364
user_client = observe.client
6465
add_prog_bar_image_to_client()

code/datums/status_effects/debuffs.dm

+6-6
Original file line numberDiff line numberDiff line change
@@ -944,9 +944,9 @@
944944
game_plane_master_controller.remove_filter("eye_blur")
945945

946946
// Maybe this should be bad for server perfomance, but i dont test it on production server
947-
for(var/mob/dead/observer/observe in owner.orbiters)
948-
if(!istype(observe) || !observe.client || !observe.orbit_menu?.auto_observe)
949-
LAZYREMOVE(owner.orbiters, observe)
947+
for(var/mob/dead/observer/observe in owner.inventory_observers)
948+
if(!observe.client)
949+
LAZYREMOVE(owner.inventory_observers, observe)
950950
continue
951951
game_plane_master_controller = observe.hud_used.plane_master_controllers[PLANE_MASTERS_GAME]
952952
game_plane_master_controller.remove_filter("eye_blur")
@@ -965,9 +965,9 @@
965965
game_plane_master_controller.add_filter("eye_blur", 1, gauss_blur_filter(amount_of_blur))
966966

967967
// Maybe this should be bad for server perfomance, but i dont test it on production server
968-
for(var/mob/dead/observer/observe in owner.orbiters)
969-
if(!istype(observe) || !observe.client || !observe.orbit_menu?.auto_observe)
970-
LAZYREMOVE(owner.orbiters, observe)
968+
for(var/mob/dead/observer/observe in owner.inventory_observers)
969+
if(!observe.client)
970+
LAZYREMOVE(owner.inventory_observers, observe)
971971
continue
972972
game_plane_master_controller = observe.hud_used.plane_master_controllers[PLANE_MASTERS_GAME]
973973
game_plane_master_controller.add_filter("eye_blur", 1, gauss_blur_filter(amount_of_blur))

code/game/objects/items/weapons/storage/storage.dm

+17-14
Original file line numberDiff line numberDiff line change
@@ -174,15 +174,18 @@
174174
orient2hud(user) // this only needs to happen to make .contents show properly as screen objects.
175175
if(user.s_active)
176176
user.s_active.hide_from(user)
177-
user.client.screen |= boxes
178-
user.client.screen |= closer
179-
user.client.screen |= contents
177+
user.client.screen -= boxes
178+
user.client.screen -= closer
179+
user.client.screen -= contents
180+
user.client.screen += boxes
181+
user.client.screen += closer
182+
user.client.screen += contents
180183
user.s_active = src
181184
LAZYOR(mobs_viewing, user)
182185

183-
for(var/mob/dead/observer/observe in user.orbiters)
184-
if(!istype(observe) || !observe.client || !observe.orbit_menu?.auto_observe)
185-
LAZYREMOVE(user.orbiters, observe)
186+
for(var/mob/dead/observer/observe in user.inventory_observers)
187+
if(!observe.client)
188+
LAZYREMOVE(user.inventory_observers, observe)
186189
continue
187190
show_to(observe)
188191

@@ -196,9 +199,9 @@
196199
if(user.s_active == src)
197200
user.s_active = null
198201

199-
for(var/mob/dead/observer/observe in user.orbiters)
200-
if(!istype(observe) || !observe.client || !observe.orbit_menu?.auto_observe)
201-
LAZYREMOVE(user.orbiters, observe)
202+
for(var/mob/dead/observer/observe in user.inventory_observers)
203+
if(!observe.client)
204+
LAZYREMOVE(user.inventory_observers, observe)
202205
continue
203206
hide_from(observe)
204207

@@ -210,7 +213,7 @@
210213

211214

212215
/obj/item/storage/proc/update_viewers()
213-
for(var/mob/M as anything in mobs_viewing)
216+
for(var/mob/M in mobs_viewing)
214217
if(!QDELETED(M) && M.s_active == src && (M in range(1, loc)))
215218
continue
216219
hide_from(M)
@@ -440,11 +443,11 @@
440443
if(usr.client && usr.s_active != src)
441444
usr.client.screen -= W
442445

443-
for(var/mob/dead/observer/observe in usr.orbiters)
444-
if(!istype(observe))
446+
for(var/mob/dead/observer/observe in usr.inventory_observers)
447+
if(!observe.client)
448+
LAZYREMOVE(usr.inventory_observers, observe)
445449
continue
446-
if(observe.client && observe.s_active != src)
447-
observe.client.screen -= W
450+
observe.client.screen -= W
448451

449452
add_fingerprint(usr)
450453

code/modules/balloon_alert/balloon_alert.dm

+3-2
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,9 @@
6969

7070
viewer_client?.images += balloon_alert
7171

72-
for(var/mob/dead/observer/observe in viewer.orbiters)
73-
if(!istype(observe) || !observe.client)
72+
for(var/mob/dead/observer/observe in viewer.inventory_observers)
73+
if(!observe.client)
74+
LAZYREMOVE(viewer, observe)
7475
continue
7576
observe.client.images += balloon_alert
7677

code/modules/client/client_procs.dm

+3-3
Original file line numberDiff line numberDiff line change
@@ -1394,9 +1394,9 @@
13941394
var/atom/old_eye = eye
13951395
eye = new_eye
13961396

1397-
for(var/mob/dead/observer/observe in mob.orbiters)
1398-
if(!istype(observe) || !observe.client || !observe.orbit_menu?.auto_observe)
1399-
LAZYREMOVE(mob.orbiters, observe)
1397+
for(var/mob/dead/observer/observe in mob.inventory_observers)
1398+
if(!observe.client)
1399+
LAZYREMOVE(mob.inventory_observers, observe)
14001400
continue
14011401
observe.client.eye = new_eye
14021402

code/modules/mob/dead/observer/observer.dm

+17-16
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER)
4242
///does the ghost have plant scanner mode on? by default it should be off
4343
var/plant_analyzer = FALSE
4444
var/datum/orbit_menu/orbit_menu
45+
var/mob/living/do_observe_target = null
4546

4647
/mob/dead/observer/New(mob/body=null, flags=1)
4748
set_invisibility(GLOB.observer_default_invisibility)
@@ -683,42 +684,42 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
683684
set_sight(mob_eye.sight)
684685

685686
client.clear_screen()
686-
LAZYOR(mob_eye.orbiters, src)
687+
LAZYOR(mob_eye.inventory_observers, src)
687688
mob_eye.hud_used.show_hud(mob_eye.hud_used.hud_version, src)
688689

690+
do_observe_target = mob_eye
691+
689692
for(var/datum/action/act in mob_eye.actions)
690693
if( istype(act.button, /atom/movable/screen/movable/action_button/hide_toggle) || \
691-
(act in src.actions))
694+
(act in src.actions)) //maybe last check is useless
692695
continue
693-
client.screen += act.button
694-
695-
//An ingenious way to block access to the button. Yes, it's on the screen, but you can't press it.
696-
// for(var/atom/movable/screen/movable/action_button/button in client.screen)
697-
// button.mosue_opacity = 0
696+
client.screen |= act.button
697+
for(var/atom/movable/screen/alert/alert in mob_eye.alerts)
698+
client.screen |= alert
698699

699700
/mob/dead/observer/proc/handle_when_autoobserve_move()
700701
SIGNAL_HANDLER // COMSIG_ORBITER_ORBIT_STOP
701702

702703
reset_perspective(null)
704+
hud_used.reorganize_alerts()
703705
cleanup_observe()
706+
hud_used.plane_master_controllers[PLANE_MASTERS_GAME].remove_filter("eye_blur")
704707
lighting_alpha = client?.prefs.ghost_darkness_level //Remembers ghost lighting pref
705708
update_sight()
706-
LAZYREMOVE(orbiting?.orbiters, src)
707-
709+
LAZYREMOVE(do_observe_target.inventory_observers, src)
708710
clear_fullscreens()
709-
710711
if(src) // If player discconnected
711712
UnregisterSignal(src, COMSIG_ORBITER_ORBIT_STOP)
712-
if(orbiting != null)
713-
UnregisterSignal(orbiting, COMSIG_MOB_UPDATE_SIGHT)
713+
UnregisterSignal(do_observe_target, COMSIG_MOB_UPDATE_SIGHT)
714+
do_observe_target = null
714715

715716
/mob/dead/observer/proc/handle_when_autoobserve_sight_updated()
716717
SIGNAL_HANDLER // COMSIG_MOB_UPDATE_SIGHT
717718

718-
var/mob/mob_eye = orbiting
719-
sight = mob_eye?.sight
720-
lighting_alpha = mob_eye?.lighting_alpha
721-
update_sight()
719+
if(orbiting && client)
720+
sight = do_observe_target.sight
721+
lighting_alpha = do_observe_target.lighting_alpha
722+
update_sight()
722723

723724
/mob/dead/observer/verb/toggle_ghostsee()
724725
set name = "Toggle Ghost Vision"

code/modules/mob/dead/observer/orbit.dm

+1-2
Original file line numberDiff line numberDiff line change
@@ -74,8 +74,7 @@
7474

7575
var/atom/movable/eye_mob = owner.orbiting
7676
owner.orbiting = null
77-
owner.reset_perspective(null)
78-
owner.cleanup_observe()
77+
owner.handle_when_autoobserve_move()
7978
owner.orbiting = eye_mob
8079

8180
/datum/orbit_menu/ui_data(mob/user)

code/modules/mob/living/carbon/human/inventory.dm

+4-2
Original file line numberDiff line numberDiff line change
@@ -317,9 +317,11 @@
317317
if(client)
318318
client.screen -= I
319319

320-
for(var/mob/dead/observer/observe in orbiters)
321-
if(observe.client && istype(observe))
320+
for(var/mob/dead/observer/observe in inventory_observers)
321+
if(observe.client && observe.client.eye == src && observe.do_observe_target == src)
322322
observe.client.screen -= I
323+
else
324+
LAZYREMOVE(inventory_observers, observe)
323325

324326
I.forceMove(src)
325327
I.layer = ABOVE_HUD_LAYER

0 commit comments

Comments
 (0)