diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm index 043f96d19d6..52b20188bda 100644 --- a/code/datums/uplink_item.dm +++ b/code/datums/uplink_item.dm @@ -1268,6 +1268,13 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) item = /obj/item/chameleon cost = 7 +/datum/uplink_item/stealthy_tools/chameleon_counter + name = "Chameleon Counterfeiter" + desc = "This device disguises itself as any object scanned by it. The disguise is not a perfect replica and can be noticed when examined by an observer." + reference = "CC" + item = /obj/item/chameleon_counterfeiter + cost = 2 + /datum/uplink_item/stealthy_tools/camera_bug name = "Camera Bug" desc = "Enables you to view all cameras on the network to track a target." diff --git a/code/game/objects/items/devices/chameleon_counter.dm b/code/game/objects/items/devices/chameleon_counter.dm new file mode 100644 index 00000000000..502a81865ee --- /dev/null +++ b/code/game/objects/items/devices/chameleon_counter.dm @@ -0,0 +1,77 @@ +/obj/item/chameleon_counterfeiter + name = "chameleon counterfeiter" + icon = 'icons/obj/device.dmi' + icon_state = "cham_counter" + flags = CONDUCT + slot_flags = SLOT_BELT + item_state = "electronic" + w_class = WEIGHT_CLASS_SMALL + origin_tech = "syndicate=3;magnets=3" + var/can_use = TRUE + var/saved_name + var/saved_desc + var/saved_icon + var/saved_icon_state + var/saved_item_state + var/saved_overlays + var/saved_underlays + var/dummy_active = FALSE + +/obj/item/chameleon_counterfeiter/examine(mob/user) + . = ..() + if(dummy_active) + . += "It doesn't look quite right..." + +/obj/item/chameleon_counterfeiter/afterattack(obj/item/target, mob/user, proximity) + if(!proximity || !check_sprite(target) || target.alpha < 255 || target.invisibility != 0) + return + if(dummy_active || !isitem(target)) + return + playsound(get_turf(src), 'sound/weapons/flash.ogg', 100, 1, -6) + to_chat(user, "Scanned [target].") + saved_name = target.name + saved_desc = target.desc + saved_icon = target.icon + saved_icon_state = target.icon_state + saved_item_state = target.item_state + saved_overlays = target.overlays + saved_underlays = target.underlays + +/obj/item/chameleon_counterfeiter/proc/check_sprite(atom/target) + return (target.icon_state in icon_states(target.icon)) + +/obj/item/chameleon_counterfeiter/proc/matter_toggle(mob/living/user) + if(!can_use || !saved_name) + return + playsound(get_turf(src), 'sound/effects/pop.ogg', 100, 1, -6) + if(dummy_active) + matter_deactivate() + to_chat(user, "You deactivate [src].") + else + to_chat(user, "You activate [src].") + matter_activate() + +/obj/item/chameleon_counterfeiter/proc/matter_activate() + name = saved_name + desc = saved_desc + icon = saved_icon + icon_state = saved_icon_state + item_state = saved_item_state + overlays = saved_overlays + underlays = saved_underlays + dummy_active = TRUE + +/obj/item/chameleon_counterfeiter/proc/matter_deactivate() + name = initial(name) + desc = initial(desc) + icon = initial(icon) + icon_state = initial(icon_state) + item_state = initial(item_state) + overlays = initial(overlays) + underlays = initial(underlays) + dummy_active = FALSE + can_use = FALSE + addtimer(VARSET_CALLBACK(src, can_use, TRUE), 3 SECONDS) + +/obj/item/chameleon_counterfeiter/attack_self(mob/living/user) + matter_toggle(user) diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi index 6f5251c9ba8..2c9dee8178c 100644 Binary files a/icons/obj/device.dmi and b/icons/obj/device.dmi differ diff --git a/paradise.dme b/paradise.dme index 86447f6f077..24cd8caacc9 100644 --- a/paradise.dme +++ b/paradise.dme @@ -893,6 +893,7 @@ #include "code\game\objects\items\devices\aicard.dm" #include "code\game\objects\items\devices\autopsy.dm" #include "code\game\objects\items\devices\camera_bug.dm" +#include "code\game\objects\items\devices\chameleon_counter.dm" #include "code\game\objects\items\devices\chameleonproj.dm" #include "code\game\objects\items\devices\enginepicker.dm" #include "code\game\objects\items\devices\flash.dm"