Created
March 28, 2018 17:24
-
-
Save Davidj361/7f94cf89758a1b0e478d76b7570a98e7 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
GLOBAL_LIST_EMPTY(active_alternate_appearances) | |
/atom | |
var/list/alternate_appearances | |
/atom/proc/remove_alt_appearance(key) | |
if(alternate_appearances) | |
for(var/K in 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) | |
return | |
if(alternate_appearances && alternate_appearances[key]) | |
return | |
var/list/arguments = args.Copy(2) | |
new type(arglist(arguments)) | |
/datum/atom_hud/alternate_appearance | |
var/appearance_key | |
/datum/atom_hud/alternate_appearance/New(key) | |
..() | |
GLOB.active_alternate_appearances += src | |
appearance_key = key | |
/datum/atom_hud/alternate_appearance/Destroy() | |
GLOB.active_alternate_appearances -= src | |
return ..() | |
/datum/atom_hud/alternate_appearance/proc/onNewMob(mob/M) | |
if(mobShouldSee(M)) | |
add_hud_to(M) | |
/datum/atom_hud/alternate_appearance/proc/mobShouldSee(mob/M) | |
return FALSE | |
/datum/atom_hud/alternate_appearance/add_to_hud(atom/A, image/I) | |
. = ..() | |
if(.) | |
LAZYINITLIST(A.alternate_appearances) | |
A.alternate_appearances[appearance_key] = src | |
/datum/atom_hud/alternate_appearance/remove_from_hud(atom/A) | |
. = ..() | |
if(.) | |
LAZYREMOVE(A.alternate_appearances, appearance_key) | |
//an alternate appearance that attaches a single image to a single atom | |
/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) | |
..() | |
theImage = I | |
target = I.loc | |
hud_icons = list(appearance_key) | |
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) | |
LAZYINITLIST(A.hud_list) | |
A.hud_list[appearance_key] = theImage | |
. = ..() | |
/datum/atom_hud/alternate_appearance/basic/remove_from_hud(atom/A) | |
. = ..() | |
A.hud_list -= appearance_key | |
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.mob_list) | |
if(mobShouldSee(mob)) | |
add_hud_to(mob) | |
/datum/atom_hud/alternate_appearance/basic/everyone/mobShouldSee(mob/M) | |
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(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/AI | |
/datum/atom_hud/alternate_appearance/basic/AI/New(target_sees_appearance = TRUE) | |
..() | |
for(var/mob/living/silicon/ai/AI in GLOB.silicon_mobs) | |
if(mobShouldSee(AI)) | |
add_hud_to(AI) | |
/datum/atom_hud/alternate_appearance/basic/AI/mobShouldSee(mob/M) | |
if(isAI(M)) | |
return TRUE | |
return FALSE | |
/datum/atom_hud/alternate_appearance/basic/AI/digitalcamo/New(target_sees_appearance = 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) | |
/datum/atom_hud/alternate_appearance/basic/noncult | |
/datum/atom_hud/alternate_appearance/basic/noncult/New() | |
..() | |
for(var/mob in GLOB.player_list) | |
if(mobShouldSee(mob)) | |
add_hud_to(mob) | |
/datum/atom_hud/alternate_appearance/basic/noncult/mobShouldSee(mob/M) | |
if(!iscultist(M)) | |
return TRUE | |
return FALSE | |
/datum/atom_hud/alternate_appearance/basic/cult | |
/datum/atom_hud/alternate_appearance/basic/cult/New() | |
..() | |
for(var/mob in GLOB.player_list) | |
if(mobShouldSee(mob)) | |
add_hud_to(mob) | |
/datum/atom_hud/alternate_appearance/basic/cult/mobShouldSee(mob/M) | |
if(iscultist(M)) | |
return TRUE | |
return FALSE | |
/datum/atom_hud/alternate_appearance/basic/blessedAware | |
/datum/atom_hud/alternate_appearance/basic/blessedAware/New() | |
..() | |
for(var/mob in GLOB.mob_list) | |
if(mobShouldSee(mob)) | |
add_hud_to(mob) | |
/datum/atom_hud/alternate_appearance/basic/blessedAware/mobShouldSee(mob/M) | |
if(M.mind && (M.mind.assigned_role == "Chaplain")) | |
return TRUE | |
if (istype(M, /mob/living/simple_animal/hostile/construct/wraith)) | |
return TRUE | |
if(isrevenant(M) || iseminence(M) || iswizard(M)) | |
return TRUE | |
return FALSE |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment