diff --git a/code/game/objects/items/devices/chameleonproj.dm b/code/game/objects/items/devices/chameleonproj.dm
index 140f13e6695..102b13780ca 100644
--- a/code/game/objects/items/devices/chameleonproj.dm
+++ b/code/game/objects/items/devices/chameleonproj.dm
@@ -180,7 +180,7 @@
var/active = FALSE
var/activationCost = 300
var/activationUpkeep = 50
- var/disguise = "landmate"
+ var/image/disguise
var/mob/living/silicon/robot/syndicate/saboteur/S
/obj/item/borg_chameleon/Destroy()
@@ -207,44 +207,78 @@
/obj/item/borg_chameleon/proc/toggle(mob/living/silicon/robot/syndicate/saboteur/user)
if(active)
- playsound(src, 'sound/effects/pop.ogg', 100, 1, -6)
- to_chat(user, "You deactivate [src].")
- deactivate(user)
+ to_chat(user, "You reconfigure [src].")
+ activate(user)
+ return
+ to_chat(user, "You activate [src].")
+ apply_wibbly_filters(user)
+ if(do_after(user, 5 SECONDS, target = user) && user.cell.use(activationCost))
+ activate(user)
else
- to_chat(user, "You activate [src].")
- apply_wibbly_filters(user)
- if(do_after(user, 50, target = user) && user.cell.use(activationCost))
- playsound(src, 'sound/effects/bamf.ogg', 100, 1, -6)
- to_chat(user, "You are now disguised as a Nanotrasen engineering cyborg.")
- activate(user)
- else
- to_chat(user, "The chameleon field fizzles.")
- do_sparks(3, FALSE, user)
- remove_wibbly_filters(user)
+ to_chat(user, "The chameleon field fizzles.")
+ do_sparks(3, FALSE, user)
+ remove_wibbly_filters(user)
/obj/item/borg_chameleon/process()
if(S)
if(!S.cell || !S.cell.use(activationUpkeep))
disrupt(S)
- else
- return PROCESS_KILL
+ return
+ return PROCESS_KILL
/obj/item/borg_chameleon/proc/activate(mob/living/silicon/robot/syndicate/saboteur/user)
+ var/static/list/module_options = list(
+ "Engineering" = image('icons/mob/robots.dmi', "engi-radial"),
+ "Janitor" = image('icons/mob/robots.dmi', "jan-radial"),
+ "Medical" = image('icons/mob/robots.dmi', "med-radial"),
+ "Mining" = image('icons/mob/robots.dmi', "mining-radial"),
+ "Service" = image('icons/mob/robots.dmi', "serv-radial"),
+ "Cancel Cloaking" = image('icons/mob/screen_gen.dmi', "x"))
+ var/selected_module = show_radial_menu(user, user, module_options, radius = 42)
+ if(!selected_module)
+ return
+ var/examine_text = "you shouldn't see this"
+ switch(selected_module)
+ if("Mining")
+ examine_text = "miner robot module"
+ if("Service")
+ examine_text = "service robot module"
+ if("Medical")
+ examine_text = "medical robot module"
+ if("Janitor")
+ examine_text = "janitorial robot module"
+ if("Engineering")
+ examine_text = "engineering robot module"
+ if("Cancel Cloaking")
+ deactivate(user)
+ return
+ var/module_sprites = user.get_module_sprites(selected_module)
+ var/selected_sprite = show_radial_menu(user, user, module_sprites, radius = 42)
+ if(!selected_sprite)
+ return
+ disguise = module_sprites[selected_sprite]
+ var/list/name_check = splittext(selected_sprite, "-")
+ user.custom_panel = trim(name_check[1])
START_PROCESSING(SSobj, src)
S = user
- user.base_icon = disguise
- user.icon_state = disguise
+ user.icon = disguise.icon
+ user.icon_state = disguise.icon_state
user.cham_proj = src
+ user.module.name = examine_text
user.bubble_icon = "robot"
active = TRUE
user.update_icons()
+ playsound(src, 'sound/effects/bamf.ogg', 100, TRUE, -6)
+ to_chat(user, "You are now disguised as a Nanotrasen [selected_module] cyborg.")
/obj/item/borg_chameleon/proc/deactivate(mob/living/silicon/robot/syndicate/saboteur/user)
STOP_PROCESSING(SSobj, src)
S = user
- user.base_icon = initial(user.base_icon)
+ user.icon = initial(user.icon)
user.icon_state = initial(user.icon_state)
+ user.module.name = initial(user.module.name)
user.bubble_icon = "syndibot"
+ user.custom_panel = null
active = FALSE
user.update_icons()
diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm
index b2e234ba5b7..d4a6dd3b755 100644
--- a/code/modules/mob/living/silicon/robot/robot_modules.dm
+++ b/code/modules/mob/living/silicon/robot/robot_modules.dm
@@ -651,7 +651,7 @@
// Sydicate engineer/sabotuer cyborg module.
/obj/item/robot_module/syndicate_saboteur
- name = "engineering robot module" //to disguise in examine
+ name = "saboteur robot module" // Disguises are handled in the actual cyborg projector
module_type = "Malf"
basic_modules = list(
/obj/item/flash/cyborg,