diff --git a/code/game/objects/structures/ghost_role_spawners.dm b/code/game/objects/structures/ghost_role_spawners.dm index b8d14a6555..306868daba 100644 --- a/code/game/objects/structures/ghost_role_spawners.dm +++ b/code/game/objects/structures/ghost_role_spawners.dm @@ -662,6 +662,72 @@ to_chat(M,"You're once again longer hearing deadchat.") +/datum/action/disguise + name = "Disguise" + button_icon_state = "ling_transform" + icon_icon = 'icons/mob/actions/actions_changeling.dmi' + background_icon_state = "bg_mime" + var/currently_disguised = FALSE + var/static/list/mob_blacklist = typecacheof(list( + /mob/living/simple_animal/pet, + /mob/living/simple_animal/hostile/retaliate/goose, + /mob/living/simple_animal/hostile/poison, + /mob/living/simple_animal/hostile/retaliate/goat, + /mob/living/simple_animal/cow, + /mob/living/simple_animal/chick, + /mob/living/simple_animal/chicken, + /mob/living/simple_animal/kiwi, + /mob/living/simple_animal/babyKiwi, + /mob/living/simple_animal/deer, + /mob/living/simple_animal/parrot, + /mob/living/simple_animal/hostile/lizard, + /mob/living/simple_animal/crab, + /mob/living/simple_animal/cockroach, + /mob/living/simple_animal/butterfly, + /mob/living/simple_animal/mouse, + /mob/living/simple_animal/sloth, + /mob/living/simple_animal/opossum, + /mob/living/simple_animal/hostile/bear, + /mob/living/simple_animal/hostile/asteroid/polarbear, + /mob/living/simple_animal/hostile/asteroid/wolf, + /mob/living/carbon/monkey, + /mob/living/simple_animal/hostile/gorilla, + /mob/living/carbon/alien/larva, + /mob/living/simple_animal/hostile/retaliate/frog + )) + + +/datum/action/disguise/Trigger() + var/mob/living/carbon/human/H = owner + if(!currently_disguised) + var/user_object_type = input(H, "Disguising as OBJECT or MOB?") as null|anything in list("OBJECT", "MOB") + if(user_object_type) + var/search_term = stripped_input(H, "Enter the search term") + if(search_term) + var/list_to_search + if(user_object_type == "MOB") + list_to_search = subtypesof(/mob) - mob_blacklist + else + list_to_search = subtypesof(/obj) + var/list/filtered_results = list() + for(var/some_search_item in list_to_search) + if(findtext("[some_search_item]", search_term)) + filtered_results += some_search_item + if(!length(filtered_results)) + to_chat(H, "Nothing matched your search query!") + else + var/disguise_selection = input("Select item to disguise as") as null|anything in filtered_results + if(disguise_selection) + var/atom/disguise_item = disguise_selection + var/image/I = image(icon = initial(disguise_item.icon), icon_state = initial(disguise_item.icon_state), loc = H) + I.override = TRUE + I.layer = ABOVE_MOB_LAYER + H.add_alt_appearance(/datum/atom_hud/alternate_appearance/basic/everyone, "ghost_cafe_disguise", I) + currently_disguised = TRUE + else + H.remove_alt_appearance("ghost_cafe_disguise") + currently_disguised = FALSE + /obj/effect/mob_spawn/human/ghostcafe/special(mob/living/carbon/human/new_spawn) if(new_spawn.client) new_spawn.client.prefs.copy_to(new_spawn) @@ -679,6 +745,8 @@ to_chat(new_spawn,"Ghosting is free!") var/datum/action/toggle_dead_chat_mob/D = new(new_spawn) D.Grant(new_spawn) + var/datum/action/disguise/disguise_action = new(new_spawn) + disguise_action.Grant(new_spawn) /datum/outfit/ghostcafe name = "ID, jumpsuit and shoes"