Observers can see through some alternate apperances (#1829)
This commit is contained in:
committed by
kevinz000
parent
a9a2a29dd4
commit
fce1875d73
@@ -10,6 +10,7 @@ GLOBAL_LIST_EMPTY(active_alternate_appearances)
|
||||
var/datum/atom_hud/alternate_appearance/AA = alternate_appearances[K]
|
||||
if(AA.appearance_key == key)
|
||||
AA.remove_from_hud(src)
|
||||
break
|
||||
|
||||
/atom/proc/add_alt_appearance(type, key, ...)
|
||||
if(!type || !key)
|
||||
@@ -59,6 +60,8 @@ GLOBAL_LIST_EMPTY(active_alternate_appearances)
|
||||
/datum/atom_hud/alternate_appearance/basic
|
||||
var/atom/target
|
||||
var/image/theImage
|
||||
var/add_ghost_version = FALSE
|
||||
var/ghost_appearance
|
||||
|
||||
/datum/atom_hud/alternate_appearance/basic/New(key, image/I, target_sees_appearance = TRUE)
|
||||
..()
|
||||
@@ -68,6 +71,16 @@ GLOBAL_LIST_EMPTY(active_alternate_appearances)
|
||||
add_to_hud(target, I)
|
||||
if(target_sees_appearance && ismob(target))
|
||||
add_hud_to(target)
|
||||
if(add_ghost_version)
|
||||
var/image/ghost_image = image(icon = I.icon , icon_state = I.icon_state, loc = I.loc)
|
||||
ghost_image.override = FALSE
|
||||
ghost_image.alpha = 128
|
||||
ghost_appearance = new /datum/atom_hud/alternate_appearance/basic/observers(key + "_observer", ghost_image, FALSE)
|
||||
|
||||
/datum/atom_hud/alternate_appearance/basic/Destroy()
|
||||
. = ..()
|
||||
if(ghost_appearance)
|
||||
QDEL_NULL(ghost_appearance)
|
||||
|
||||
/datum/atom_hud/alternate_appearance/basic/add_to_hud(atom/A)
|
||||
A.hud_list[appearance_key] = theImage
|
||||
@@ -76,32 +89,42 @@ GLOBAL_LIST_EMPTY(active_alternate_appearances)
|
||||
/datum/atom_hud/alternate_appearance/basic/remove_from_hud(atom/A)
|
||||
. = ..()
|
||||
A.hud_list -= appearance_key
|
||||
|
||||
/datum/atom_hud/alternate_appearance/basic/remove_from_hud(atom/A)
|
||||
. = ..()
|
||||
if(.)
|
||||
if(. && !QDELETED(src))
|
||||
qdel(src)
|
||||
|
||||
/datum/atom_hud/alternate_appearance/basic/everyone
|
||||
add_ghost_version = TRUE
|
||||
|
||||
/datum/atom_hud/alternate_appearance/basic/everyone/New()
|
||||
..()
|
||||
for(var/mob in GLOB.player_list)
|
||||
if(mob)
|
||||
for(var/mob in GLOB.mob_list)
|
||||
if(mobShouldSee(mob))
|
||||
add_hud_to(mob)
|
||||
|
||||
/datum/atom_hud/alternate_appearance/basic/everyone/mobShouldSee(mob/M)
|
||||
return TRUE
|
||||
return !isobserver(M)
|
||||
|
||||
/datum/atom_hud/alternate_appearance/basic/silicons
|
||||
|
||||
/datum/atom_hud/alternate_appearance/basic/silicons/New()
|
||||
..()
|
||||
for(var/mob in GLOB.silicon_mobs)
|
||||
if(mob)
|
||||
if(mobShouldSee(mob))
|
||||
add_hud_to(mob)
|
||||
|
||||
/datum/atom_hud/alternate_appearance/basic/silicons/mobShouldSee(mob/M)
|
||||
if(issilicon(M))
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/datum/atom_hud/alternate_appearance/basic/observers
|
||||
add_ghost_version = FALSE //just in case, to prevent infinite loops
|
||||
|
||||
/datum/atom_hud/alternate_appearance/basic/observers/New()
|
||||
..()
|
||||
for(var/mob in GLOB.dead_mob_list)
|
||||
if(mobShouldSee(mob))
|
||||
add_hud_to(mob)
|
||||
|
||||
/datum/atom_hud/alternate_appearance/basic/observers/mobShouldSee(mob/M)
|
||||
return isobserver(M)
|
||||
|
||||
@@ -120,6 +120,12 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER)
|
||||
|
||||
GLOB.dead_mob_list += src
|
||||
|
||||
for(var/v in GLOB.active_alternate_appearances)
|
||||
if(!v)
|
||||
continue
|
||||
var/datum/atom_hud/alternate_appearance/AA = v
|
||||
AA.onNewMob(src)
|
||||
|
||||
. = ..()
|
||||
|
||||
grant_all_languages()
|
||||
|
||||
Reference in New Issue
Block a user