diff --git a/code/game/objects/items/devices/radio/radio_objects.dm b/code/game/objects/items/devices/radio/radio_objects.dm
index 08b000980b6..4daf2bf4661 100644
--- a/code/game/objects/items/devices/radio/radio_objects.dm
+++ b/code/game/objects/items/devices/radio/radio_objects.dm
@@ -783,13 +783,19 @@ GLOBAL_LIST_EMPTY(deadsay_radio_systems)
/obj/item/radio/headset/deadsay
name = "spectral radio"
ks2type = /obj/item/encryptionkey/centcom
+ var/datum/action/item_action/chameleon_change/chameleon_action
-/obj/item/radio/headset/deadsay/New()
- ..()
+/obj/item/radio/headset/deadsay/Initialize(mapload)
+ . = ..()
+ chameleon_action = new(src)
+ chameleon_action.chameleon_type = /obj/item/radio/headset
+ chameleon_action.chameleon_name = "Headset"
+ chameleon_action.initialize_disguises()
GLOB.deadsay_radio_systems.Add(src)
make_syndie()
/obj/item/radio/headset/deadsay/Destroy()
+ QDEL_NULL(chameleon_action)
GLOB.deadsay_radio_systems.Remove(src)
return ..()
diff --git a/code/modules/mob/living/carbon/human/species/plasmaman.dm b/code/modules/mob/living/carbon/human/species/plasmaman.dm
index 7e4d2bd31f0..58799f9a621 100644
--- a/code/modules/mob/living/carbon/human/species/plasmaman.dm
+++ b/code/modules/mob/living/carbon/human/species/plasmaman.dm
@@ -160,9 +160,7 @@
O = new /datum/outfit/plasmaman/soo
H.equipOutfit(O, visualsOnly)
- H.internal = H.r_hand
H.update_action_buttons_icon()
- return FALSE
/datum/species/plasmaman/handle_life(mob/living/carbon/human/H)
var/atmos_sealed = !HAS_TRAIT(H, TRAIT_NOFIRE) && (isclothing(H.wear_suit) && H.wear_suit.flags & STOPSPRESSUREDMAGE) && (isclothing(H.head) && H.head.flags & STOPSPRESSUREDMAGE)
diff --git a/code/modules/ruins/ghost_bar.dm b/code/modules/ruins/ghost_bar.dm
index ea464780285..28f299a117f 100644
--- a/code/modules/ruins/ghost_bar.dm
+++ b/code/modules/ruins/ghost_bar.dm
@@ -14,6 +14,7 @@ GLOBAL_LIST_EMPTY(occupants_by_key)
restrict_antagban = FALSE
restrict_respawnability = FALSE
restrict_ahud = FALSE
+ outfit = /datum/outfit/ghost_bar
/obj/effect/mob_spawn/human/alive/ghost_bar/create(ckey, flavour = TRUE, name, mob/user = usr) // So divorced from the normal proc it's just being overriden
var/datum/character_save/save_to_load
@@ -37,16 +38,15 @@ GLOBAL_LIST_EMPTY(occupants_by_key)
return
save_to_load = new
save_to_load.randomise()
- var/mob/living/carbon/human/H = new(get_turf(src))
+ var/mob/living/carbon/human/human = new(get_turf(src))
+ human.speaks_ooc = TRUE
- save_to_load.copy_to(H)
- if(!H.back)
- equip_item(H, /obj/item/storage/backpack, ITEM_SLOT_BACK)
- equip_item(H, /obj/item/radio/headset/deadsay, ITEM_SLOT_LEFT_EAR)
- H.dna.species.before_equip_job(/datum/job/assistant, H)
- H.dna.species.remains_type = /obj/effect/decal/cleanable/ash
- var/obj/item/bio_chip/dust/I = new
- I.implant(H, null)
+ save_to_load.copy_to(human)
+ human.dna.species.before_equip_job(/datum/job/assistant, human)
+ human.job = assignedrole
+ if(outfit)
+ human.equipOutfit(outfit)
+ human.dna.species.remains_type = /obj/effect/decal/cleanable/ash
for(var/gear in save_to_load.loadout_gear)
var/datum/gear/G = GLOB.gear_datums[text2path(gear) || gear]
if(isnull(G))
@@ -54,56 +54,35 @@ GLOBAL_LIST_EMPTY(occupants_by_key)
if(G.allowed_roles) // Fix due to shitty HUD code
continue
if(G.slot)
- if(H.equip_to_slot_or_del(G.spawn_item(H, save_to_load.get_gear_metadata(G)), G.slot, TRUE))
- to_chat(H, "Equipping you with [G.display_name]!")
+ if(human.equip_to_slot_or_del(G.spawn_item(human, save_to_load.get_gear_metadata(G)), G.slot, TRUE))
+ to_chat(human, "Equipping you with [G.display_name]!")
else
- H.equip_or_collect(G.spawn_item(null, save_to_load.get_gear_metadata(G)))
- if(!H.w_uniform)
- equip_item(H, /obj/item/clothing/under/color/random, ITEM_SLOT_JUMPSUIT)
- if(!H.shoes)
- equip_item(H, /obj/item/clothing/shoes/black, ITEM_SLOT_SHOES)
- equip_item(H, /obj/item/stack/spacecash/c1000, ITEM_SLOT_LEFT_POCKET)
+ human.equip_or_collect(G.spawn_item(null, save_to_load.get_gear_metadata(G)))
- var/obj/item/card/id/syndicate/our_id = equip_item(H, /obj/item/card/id/syndicate/ghost_bar, ITEM_SLOT_ID)
- our_id.assignment = assignedrole
- our_id.registered_name = H.real_name
- our_id.sex = capitalize(H.gender)
- our_id.age = H.age
- our_id.name = "[our_id.registered_name]'s ID Card ([our_id.assignment])"
- our_id.photo = get_id_photo(H)
- our_id.owner_uid = H.UID()
- our_id.owner_ckey = H.ckey
- H.job = assignedrole
-
- H.dna.ready_dna(H)
- H.mind_initialize()
- H.mind.assigned_role = assignedrole
- H.mind.special_role = assignedrole
- H.mind.offstation_role = TRUE
- ADD_TRAIT(H, TRAIT_PACIFISM, GHOST_ROLE)
+ human.dna.ready_dna(human)
+ human.mind_initialize()
+ human.mind.assigned_role = assignedrole
+ human.mind.special_role = assignedrole
+ human.mind.offstation_role = TRUE
+ ADD_TRAIT(human, TRAIT_PACIFISM, GHOST_ROLE)
if(isobserver(user))
var/mob/dead/observer/ghost = user
if(ghost.can_reenter_corpse)
- ADD_TRAIT(H, TRAIT_RESPAWNABLE, GHOST_ROLE)
+ ADD_TRAIT(human, TRAIT_RESPAWNABLE, GHOST_ROLE)
- H.key = ckey
- H.dna.species.after_equip_job(/datum/job/assistant, H)
- if(isgrey(H))
+ human.key = ckey
+ human.dna.species.after_equip_job(/datum/job/assistant, human)
+ if(isgrey(human))
var/obj/item/organ/internal/cyberimp/brain/speech_translator/implant = new
- implant.insert(H)
+ implant.insert(human)
log_game("[ckey] has entered the ghost bar")
playsound(src, 'sound/machines/wooden_closet_open.ogg', 50)
- var/mob/old_mob = GLOB.occupants_by_key["[H.ckey]"]
+ var/mob/old_mob = GLOB.occupants_by_key["[human.ckey]"]
if(old_mob)
qdel(old_mob)
- GLOB.occupants_by_key["[H.ckey]"] = H
- RegisterSignal(H, COMSIG_PARENT_QDELETING, PROC_REF(clear_references_to_owner))
-
-/obj/effect/mob_spawn/human/alive/ghost_bar/proc/equip_item(mob/living/carbon/human/H, path, slot)
- var/obj/item/I = new path(H)
- H.equip_or_collect(I, slot, TRUE)
- H.speaks_ooc = TRUE
- return I
+ GLOB.occupants_by_key["[human.ckey]"] = human
+ RegisterSignal(human, COMSIG_PARENT_QDELETING, PROC_REF(clear_references_to_owner))
+ return human
/obj/effect/mob_spawn/human/alive/ghost_bar/proc/clear_references_to_owner(mob/mob_to_obliterate)
SIGNAL_HANDLER // COMSIG_PARENT_QDELETING
@@ -132,3 +111,35 @@ GLOBAL_LIST_EMPTY(occupants_by_key)
return
if(HAS_TRAIT_FROM(M, TRAIT_RESPAWNABLE, GHOST_ROLE))
M.dust()
+
+// MARK: Ghost Bar outfit
+/datum/outfit/ghost_bar
+ name = "Ghost Bar Occupant"
+ uniform = /obj/item/clothing/under/color/random
+ shoes = /obj/item/clothing/shoes/black
+ back = /obj/item/storage/backpack
+ l_ear = /obj/item/radio/headset/deadsay
+ l_pocket = /obj/item/stack/spacecash/c1000
+ id = /obj/item/card/id/syndicate/ghost_bar
+ bio_chips = list(/obj/item/bio_chip/dust)
+ backpack_contents = list(/obj/item/storage/box/syndie_kit/chameleon/ghost_bar)
+
+/datum/outfit/ghost_bar/post_equip(mob/living/carbon/human/human, visualsOnly)
+ . = ..()
+ var/obj/item/card/id/card = human.wear_id
+ card.assignment = human.job
+ card.registered_name = human.real_name
+ card.sex = capitalize(human.gender)
+ card.age = human.age
+ card.name = "[card.registered_name]'s ID Card ([card.assignment])"
+ card.photo = get_id_photo(human)
+ card.owner_uid = human.UID()
+ card.owner_ckey = human.ckey
+
+// MARK: Ghost Bar chameleon kit
+/obj/item/storage/box/syndie_kit/chameleon/ghost_bar/populate_contents()
+ . = ..()
+ for(var/obj/item/pda/pda in contents)
+ qdel(pda)
+ for(var/obj/item/radio/headset/headset in contents)
+ qdel(headset)