diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index fc24fb14bad..70e74cab0eb 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -122,6 +122,63 @@ var/global/image/fire_overlay = image("icon" = 'icons/effects/fire.dmi', "icon_s
slot_drone_storage\
)
+
+ var/list/chameleon_blacklist = list()
+ var/list/chameleon_list = list()
+ var/chameleon_type = null
+ var/chameleon_name = "Item"
+ var/datum/action/item_action/chameleon/change/chameleon_change_action
+ var/chameleon_action_type = /datum/action/item_action/chameleon/change
+
+/datum/action/item_action/chameleon/change
+ name = "Chameleon Change"
+
+/datum/action/item_action/chameleon/change/Trigger()
+ if(!Checks())
+ return
+
+ var/obj/item/I = target
+ I.chameleon_change(owner)
+ return 1
+
+/obj/item/New()
+ ..()
+ if(chameleon_type)
+ chameleon_change_action = new chameleon_action_type(src)
+ chameleon_change_action.name = "Change [chameleon_name] Appearance"
+ chameleon_blacklist += type
+ for(var/U in typesof(chameleon_type)-chameleon_blacklist)
+ var/obj/item/V = new U
+ chameleon_list += V
+
+/obj/item/pickup(mob/user)
+ ..()
+ if(chameleon_type)
+ chameleon_change_action.Grant(user)
+
+/obj/item/dropped(mob/user)
+ ..()
+ if(chameleon_type)
+ chameleon_change_action.Remove(user)
+
+/obj/item/proc/chameleon_change(user)
+ var/obj/item/clothing/under/A
+ A = input("Select [chameleon_name] to change it to", "Chameleon [chameleon_name]", A) in chameleon_list
+ if(!A)
+ return
+ if(istype(user, /mob/living/carbon))
+ var/mob/living/C = user
+ if(C.stat != CONSCIOUS)
+ return
+
+ desc = A.desc
+ name = A.name
+ icon_state = A.icon_state
+ item_state = A.item_state
+ icon = A.icon
+
+ C.update_icons() //so our overlays update.
+
/obj/item/proc/check_allowed_items(atom/target, not_inside, target_self)
if(((src in target) && !target_self) || ((!istype(target.loc, /turf)) && (!istype(target, /turf)) && (not_inside)) || is_type_in_list(target, can_be_placed_into))
return 0
diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm
index 81b0d72c4e5..455d06a33d1 100644
--- a/code/game/objects/items/weapons/storage/uplink_kits.dm
+++ b/code/game/objects/items/weapons/storage/uplink_kits.dm
@@ -5,9 +5,9 @@
switch (pickweight(list("bloodyspai" = 3, "stealth" = 3, "bond" = 1, "screwed" = 3, "sabotage" = 3, "guns" = 1, "murder" = 2, "implant" = 2, "hacker" = 2, "lordsingulo" = 2, "darklord" = 1)))
if("bloodyspai")
new /obj/item/clothing/under/chameleon(src)
- new /obj/item/clothing/mask/gas/voice(src)
+ new /obj/item/clothing/mask/chameleon(src)
new /obj/item/weapon/card/id/syndicate(src)
- new /obj/item/clothing/shoes/sneakers/syndigaloshes(src)
+ new /obj/item/clothing/shoes/chameleon(src)
new /obj/item/device/camera_bug(src)
new /obj/item/device/multitool/ai_detect(src)
new /obj/item/device/encryptionkey/syndicate(src)
@@ -55,7 +55,7 @@
new /obj/item/weapon/melee/energy/sword/saber(src)
new /obj/item/clothing/glasses/thermal/syndi(src)
new /obj/item/weapon/card/emag(src)
- new /obj/item/clothing/shoes/sneakers/syndigaloshes(src)
+ new /obj/item/clothing/shoes/chameleon(src)
return
if("implant")
@@ -240,3 +240,18 @@
new /obj/item/weapon/reagent_containers/hypospray/medipen/tuberculosiscure(src)
new /obj/item/weapon/reagent_containers/syringe(src)
new /obj/item/weapon/reagent_containers/glass/bottle/tuberculosiscure(src)
+
+/obj/item/weapon/storage/box/syndie_kit/chameleon
+ name = "chameleon kit"
+
+/obj/item/weapon/storage/box/syndie_kit/chameleon/New()
+ ..()
+ new /obj/item/clothing/under/chameleon(src)
+ new /obj/item/clothing/suit/chameleon(src)
+ new /obj/item/clothing/gloves/chameleon(src)
+ new /obj/item/clothing/shoes/chameleon(src)
+ new /obj/item/clothing/suit/chameleon(src)
+ new /obj/item/clothing/head/chameleon(src)
+ new /obj/item/clothing/mask/chameleon(src)
+ new /obj/item/weapon/stamp/chameleon(src)
+ new /obj/item/weapon/gun/energy/laser/chameleon(src)
\ No newline at end of file
diff --git a/code/modules/awaymissions/mission_code/snowdin.dm b/code/modules/awaymissions/mission_code/snowdin.dm
index 3f2db7b6d2a..1acf5f000d0 100644
--- a/code/modules/awaymissions/mission_code/snowdin.dm
+++ b/code/modules/awaymissions/mission_code/snowdin.dm
@@ -127,7 +127,7 @@ obj/item/weapon/paper/crumpled/snowdin/shovel
/obj/item/weapon/c4 = 7,
/obj/item/weapon/grenade/clusterbuster/smoke = 15,
/obj/item/clothing/under/chameleon = 13,
- /obj/item/clothing/shoes/sneakers/syndigaloshes = 10,
+ /obj/item/clothing/shoes/chameleon = 10,
/obj/item/borg/upgrade/ddrill = 3,
/obj/item/borg/upgrade/soh = 3)
diff --git a/code/modules/clothing/chameleon.dm b/code/modules/clothing/chameleon.dm
new file mode 100644
index 00000000000..7d3f8e08a80
--- /dev/null
+++ b/code/modules/clothing/chameleon.dm
@@ -0,0 +1,112 @@
+/obj/item/clothing/under/chameleon
+//starts off as black
+ name = "black jumpsuit"
+ icon_state = "black"
+ item_state = "bl_suit"
+ item_color = "black"
+ desc = "It's a plain jumpsuit. It has a small dial on the wrist."
+ action_button_name = "Change"
+ origin_tech = "syndicate=3"
+ sensor_mode = 0 //Hey who's this guy on the Syndicate Shuttle??
+ random_sensor = 0
+ burn_state = FIRE_PROOF
+ armor = list(melee = 10, bullet = 10, laser = 10, energy = 0, bomb = 0, bio = 0, rad = 0)
+
+ chameleon_type = /obj/item/clothing/under
+ chameleon_name = "Jumpsuit"
+
+/obj/item/clothing/suit/chameleon
+ name = "armor"
+ desc = "A slim armored vest that protects against most types of damage."
+ icon_state = "armor"
+ item_state = "armor"
+ blood_overlay_type = "armor"
+ origin_tech = "syndicate=3"
+ burn_state = FIRE_PROOF
+ armor = list(melee = 10, bullet = 10, laser = 10, energy = 0, bomb = 0, bio = 0, rad = 0)
+
+ chameleon_type = /obj/item/clothing/suit
+ chameleon_name = "Suit"
+
+/obj/item/clothing/glasses/chameleon
+ name = "Optical Meson Scanner"
+ desc = "Used by engineering and mining staff to see basic structural and terrain layouts through walls, regardless of lighting condition."
+ icon_state = "meson"
+ item_state = "meson"
+
+ origin_tech = "syndicate=3"
+ burn_state = FIRE_PROOF
+ armor = list(melee = 10, bullet = 10, laser = 10, energy = 0, bomb = 0, bio = 0, rad = 0)
+
+ chameleon_type = /obj/item/clothing/glasses
+ chameleon_name = "Glasses"
+
+/obj/item/clothing/gloves/chameleon
+ desc = "These gloves will protect the wearer from electric shock."
+ name = "insulated gloves"
+ icon_state = "yellow"
+ item_state = "ygloves"
+
+ burn_state = FIRE_PROOF
+ armor = list(melee = 10, bullet = 10, laser = 10, energy = 0, bomb = 0, bio = 0, rad = 0)
+
+ chameleon_type = /obj/item/clothing/gloves
+ chameleon_name = "Gloves"
+
+/obj/item/clothing/head/chameleon
+ name = "grey cap"
+ desc = "It's a baseball hat in a tasteful grey colour."
+ icon_state = "greysoft"
+ item_color = "grey"
+
+ burn_state = FIRE_PROOF
+ armor = list(melee = 10, bullet = 10, laser = 10, energy = 0, bomb = 0, bio = 0, rad = 0)
+
+ chameleon_type = /obj/item/clothing/head
+ chameleon_name = "Hat"
+
+/obj/item/clothing/mask/chameleon
+ name = "gas mask"
+ desc = "A face-covering mask that can be connected to an air supply. While good for concealing your identity, it isn't good for blocking gas flow." //More accurate
+ icon_state = "gas_alt"
+ item_state = "gas_alt"
+
+ burn_state = FIRE_PROOF
+ armor = list(melee = 10, bullet = 10, laser = 10, energy = 0, bomb = 0, bio = 0, rad = 0)
+
+ chameleon_type = /obj/item/clothing/mask
+ chameleon_name = "Mask"
+ var/vchange = 1
+
+/obj/item/clothing/mask/chameleon/attack_self(mob/user)
+ vchange = !vchange
+ user << "The voice changer is now [vchange ? "on" : "off"]!"
+
+/obj/item/clothing/shoes/chameleon
+ name = "black shoes"
+ icon_state = "black"
+ item_color = "black"
+ desc = "A pair of black shoes."
+
+ permeability_coefficient = 0.05
+ flags = NOSLIP
+ origin_tech = "syndicate=3"
+ burn_state = FIRE_PROOF
+ can_hold_items = 1
+ armor = list(melee = 10, bullet = 10, laser = 10, energy = 0, bomb = 0, bio = 0, rad = 0)
+
+ chameleon_type = /obj/item/clothing/shoes
+ chameleon_name = "Shoes"
+
+
+/obj/item/weapon/gun/energy/laser/chameleon
+ name = "practice laser gun"
+ desc = "A modified version of the basic laser gun, this one fires less concentrated energy bolts designed for target practice."
+ ammo_type = list(/obj/item/ammo_casing/energy/laser/practice)
+ clumsy_check = 0
+ needs_permit = 0
+ pin = /obj/item/device/firing_pin
+ cell_type = /obj/item/weapon/stock_parts/cell/bluespace
+
+ chameleon_type = /obj/item/weapon/gun
+ chameleon_name = "Gun"
\ No newline at end of file
diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm
index 6055104b49f..623baae2c9f 100644
--- a/code/modules/clothing/masks/gasmask.dm
+++ b/code/modules/clothing/masks/gasmask.dm
@@ -53,20 +53,6 @@
icon_state = "syndicate"
strip_delay = 60
-/obj/item/clothing/mask/gas/voice
- name = "gas mask"
- //desc = "A face-covering mask that can be connected to an air supply. It seems to house some odd electronics."
- var/mode = 0// 0==Scouter | 1==Night Vision | 2==Thermal | 3==Meson
- var/voice = "Unknown"
- var/vchange = 0//This didn't do anything before. It now checks if the mask has special functions/N
- origin_tech = "syndicate=4"
- action_button_name = "Toggle mask"
-
-/obj/item/clothing/mask/gas/voice/attack_self(mob/user)
- vchange = !vchange
- user << "The voice changer is now [vchange ? "on" : "off"]!"
-
-
/obj/item/clothing/mask/gas/clown_hat
name = "clown wig and mask"
desc = "A true prankster's facial attire. A clown is incomplete without his wig and mask."
diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm
index 190a09a1643..b63d3a4f771 100644
--- a/code/modules/clothing/shoes/miscellaneous.dm
+++ b/code/modules/clothing/shoes/miscellaneous.dm
@@ -7,17 +7,6 @@
playsound(user, 'sound/weapons/genhit2.ogg', 50, 1)
return(BRUTELOSS)
-/obj/item/clothing/shoes/sneakers/syndigaloshes
- desc = "A pair of brown shoes."
- name = "brown shoes"
- icon_state = "brown"
- item_state = "brown"
- permeability_coefficient = 0.05
- flags = NOSLIP
- origin_tech = "syndicate=3"
- burn_state = FIRE_PROOF
- can_hold_items = 1
-
/obj/item/clothing/shoes/sneakers/mime
name = "mime shoes"
icon_state = "mime"
diff --git a/code/modules/clothing/under/chameleon.dm b/code/modules/clothing/under/chameleon.dm
deleted file mode 100644
index f38708348bb..00000000000
--- a/code/modules/clothing/under/chameleon.dm
+++ /dev/null
@@ -1,97 +0,0 @@
-/obj/item/clothing/under/chameleon
-//starts off as black
- name = "black jumpsuit"
- icon_state = "black"
- item_state = "bl_suit"
- item_color = "black"
- desc = "It's a plain jumpsuit. It has a small dial on the wrist."
- action_button_name = "Change"
- origin_tech = "syndicate=3"
- sensor_mode = 0 //Hey who's this guy on the Syndicate Shuttle??
- random_sensor = 0
- var/list/clothing_choices = list()
- var/malfunctioning = 0
- burn_state = FIRE_PROOF
- armor = list(melee = 10, bullet = 10, laser = 10,energy = 0, bomb = 0, bio = 0, rad = 0)
-
-/obj/item/clothing/under/chameleon/New()
- ..()
- for(var/U in subtypesof(/obj/item/clothing/under/color))
- var/obj/item/clothing/under/V = new U
- src.clothing_choices += V
-
- for(var/U in subtypesof(/obj/item/clothing/under/rank))
- var/obj/item/clothing/under/V = new U
- src.clothing_choices += V
- return
-
-
-/obj/item/clothing/under/chameleon/attackby(obj/item/clothing/under/U, mob/user, params)
- ..()
- if(istype(U, /obj/item/clothing/under/chameleon))
- user << "\Nothing happens."
- return
- if(istype(U, /obj/item/clothing/under))
- if(src.clothing_choices.Find(U))
- user << "Pattern is already recognised by the suit."
- return
- src.clothing_choices += U
- user << "Pattern absorbed by the suit."
-
-
-/obj/item/clothing/under/chameleon/emp_act(severity)
- name = "psychedelic"
- desc = "Groovy!"
- icon_state = "psyche"
- item_color = "psyche"
- malfunctioning = 1
- if(ismob(loc))
- var/mob/M = loc
- M.update_inv_w_uniform()
- M << "Your jumpsuit malfunctions!"
- spawn(200)
- name = "Black Jumpsuit"
- icon_state = "black"
- item_state = "bl_suit"
- item_color = "black"
- malfunctioning = 0
- if(ismob(loc))
- var/mob/M = loc
- M.update_inv_w_uniform()
- M << "Your jumpsuit is functioning normally again."
- ..()
-
-/obj/item/clothing/under/chameleon/attack_self()
- set src in usr
-
- var/obj/item/clothing/under/A
- A = input("Select Colour to change it to", "BOOYEA", A) in clothing_choices
- if(!A)
- return
-
- if(usr.stat != CONSCIOUS)
- return
-
- if(malfunctioning)
- usr << "Your jumpsuit is malfunctioning!"
- return
-
- desc = null
- permeability_coefficient = 0.90
-
- desc = A.desc
- name = A.name
- icon_state = A.icon_state
- item_state = A.item_state
- item_color = A.item_color
- suit_color = A.suit_color
- usr.update_inv_w_uniform() //so our overlays update.
-
-
-
-/obj/item/clothing/under/chameleon/all/New()
- ..()
- var/blocked = list(/obj/item/clothing/under/chameleon, /obj/item/clothing/under/chameleon/all) //to prevent an infinite loop
- for(var/U in typesof(/obj/item/clothing/under)-blocked)
- var/obj/item/clothing/under/V = new U
- src.clothing_choices += V
diff --git a/code/modules/events/wizard/curseditems.dm b/code/modules/events/wizard/curseditems.dm
index eb1d15c4038..67db16aa319 100644
--- a/code/modules/events/wizard/curseditems.dm
+++ b/code/modules/events/wizard/curseditems.dm
@@ -31,7 +31,7 @@
loadout[6] = /obj/item/clothing/gloves/boxing
ruins_spaceworthiness = 1
if("voicemodulators")
- loadout[4] = /obj/item/clothing/mask/gas/voice
+ loadout[4] = /obj/item/clothing/mask/chameleon
if("catgirls2015")
loadout[3] = /obj/item/clothing/head/kitty
ruins_spaceworthiness = 1
diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm
index 8cde367bace..ac3cff9610d 100644
--- a/code/modules/flufftext/Hallucination.dm
+++ b/code/modules/flufftext/Hallucination.dm
@@ -463,8 +463,8 @@ var/list/non_fakeattack_weapons = list(/obj/item/weapon/gun/projectile, /obj/ite
/obj/item/weapon/gun/energy/kinetic_accelerator/crossbow, /obj/item/weapon/melee/energy/sword/saber,\
/obj/item/weapon/storage/box/syndicate, /obj/item/weapon/storage/box/emps,\
/obj/item/weapon/cartridge/syndicate, /obj/item/clothing/under/chameleon,\
- /obj/item/clothing/shoes/sneakers/syndigaloshes, /obj/item/weapon/card/id/syndicate,\
- /obj/item/clothing/mask/gas/voice, /obj/item/clothing/glasses/thermal,\
+ /obj/item/clothing/shoes/chameleon, /obj/item/weapon/card/id/syndicate,\
+ /obj/item/clothing/mask/chameleon, /obj/item/clothing/glasses/thermal,\
/obj/item/device/chameleon, /obj/item/weapon/card/emag,\
/obj/item/weapon/storage/toolbox/syndicate, /obj/item/weapon/aiModule,\
/obj/item/device/radio/headset/syndicate, /obj/item/weapon/c4,\
diff --git a/code/modules/mob/living/carbon/human/say.dm b/code/modules/mob/living/carbon/human/say.dm
index 4f2ef525153..b4152717bab 100644
--- a/code/modules/mob/living/carbon/human/say.dm
+++ b/code/modules/mob/living/carbon/human/say.dm
@@ -31,8 +31,8 @@
return ..() | dna.mutations_get_spans() | dna.species_get_spans()
/mob/living/carbon/human/GetVoice()
- if(istype(wear_mask, /obj/item/clothing/mask/gas/voice))
- var/obj/item/clothing/mask/gas/voice/V = wear_mask
+ if(istype(wear_mask, /obj/item/clothing/mask/chameleon))
+ var/obj/item/clothing/mask/chameleon/V = wear_mask
if(V.vchange && wear_id)
var/obj/item/weapon/card/id/idcard = wear_id.GetID()
if(istype(idcard))
diff --git a/code/modules/ninja/ninja_event.dm b/code/modules/ninja/ninja_event.dm
index 17eb0f7b0f6..1ef8d0a23e0 100644
--- a/code/modules/ninja/ninja_event.dm
+++ b/code/modules/ninja/ninja_event.dm
@@ -202,7 +202,7 @@ Contents:
equip_to_slot_or_del(theSuit, slot_wear_suit)
equip_to_slot_or_del(new /obj/item/clothing/gloves/space_ninja(src), slot_gloves)
equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/space_ninja(src), slot_head)
- equip_to_slot_or_del(new /obj/item/clothing/mask/gas/voice/space_ninja(src), slot_wear_mask)
+ equip_to_slot_or_del(new /obj/item/clothing/mask/gas/space_ninja(src), slot_wear_mask)
equip_to_slot_or_del(new /obj/item/clothing/glasses/night(src), slot_glasses)
equip_to_slot_or_del(EK, slot_belt)
equip_to_slot_or_del(new /obj/item/device/flashlight(src), slot_r_store)
diff --git a/code/modules/ninja/suit/mask.dm b/code/modules/ninja/suit/mask.dm
index 87e9255e41d..f5c5b4dbd4c 100644
--- a/code/modules/ninja/suit/mask.dm
+++ b/code/modules/ninja/suit/mask.dm
@@ -10,130 +10,9 @@ Contents:
-/obj/item/clothing/mask/gas/voice/space_ninja
+/obj/item/clothing/mask/gas/space_ninja
name = "ninja mask"
desc = "A close-fitting mask that acts both as an air filter and a post-modern fashion statement."
icon_state = "s-ninja"
item_state = "s-ninja_mask"
- vchange = 1
strip_delay = 120
-
-/obj/item/clothing/mask/gas/voice/space_ninja/speechModification(message)
- if(voice == "Unknown")
- if(copytext(message, 1, 2) != "*")
- var/list/temp_message = splittext(message, " ")
- var/list/pick_list = list()
- for(var/i = 1, i <= temp_message.len, i++)
- pick_list += i
- for(var/i=1, i <= abs(temp_message.len/3), i++)
- var/H = pick(pick_list)
- if(findtext(temp_message[H], "*") || findtext(temp_message[H], ";") || findtext(temp_message[H], ":")) continue
- temp_message[H] = ninjaspeak(temp_message[H])
- pick_list -= H
- message = jointext(temp_message, " ")
-
- //The Alternate speech mod is now the main one.
- message = replacetext(message, "l", "r")
- message = replacetext(message, "rr", "ru")
- message = replacetext(message, "v", "b")
- message = replacetext(message, "f", "hu")
- message = replacetext(message, "'t", "")
- message = replacetext(message, "t ", "to ")
- message = replacetext(message, " I ", " ai ")
- message = replacetext(message, "th", "z")
- message = replacetext(message, "is", "izu")
- message = replacetext(message, "ziz", "zis")
- message = replacetext(message, "se", "su")
- message = replacetext(message, "br", "bur")
- message = replacetext(message, "ry", "ri")
- message = replacetext(message, "you", "yuu")
- message = replacetext(message, "ck", "cku")
- message = replacetext(message, "eu", "uu")
- message = replacetext(message, "ow", "au")
- message = replacetext(message, "are", "aa")
- message = replacetext(message, "ay", "ayu")
- message = replacetext(message, "ea", "ii")
- message = replacetext(message, "ch", "chi")
- message = replacetext(message, "than", "sen")
- message = replacetext(message, ".", "")
- message = lowertext(message)
-
- return message
-
-
-
-/obj/item/clothing/mask/gas/voice/space_ninja/New()
- verbs += /obj/item/clothing/mask/gas/voice/space_ninja/proc/togglev
-
-
-//This proc is linked to human life.dm. It determines what hud icons to display based on mind special role for most mobs.
-/obj/item/clothing/mask/gas/voice/space_ninja/proc/assess_targets(list/target_list, mob/living/carbon/U)
- var/icon/tempHud = 'icons/mob/hud.dmi'
- for(var/mob/living/target in target_list)
- if(iscarbon(target))
- switch(target.mind.special_role)
- if("traitor")
- U.client.images += image(tempHud,target,"hudtraitor")
- if("Revolutionary","Head Revolutionary")
- U.client.images += image(tempHud,target,"hudrevolutionary")
- if("Cultist")
- U.client.images += image(tempHud,target,"hudcultist")
- if("Changeling")
- U.client.images += image(tempHud,target,"hudchangeling")
- if("Wizard","Fake Wizard")
- U.client.images += image(tempHud,target,"hudwizard")
- if("Hunter","Sentinel","Drone","Queen")
- U.client.images += image(tempHud,target,"hudalien")
- if("Syndicate")
- U.client.images += image(tempHud,target,"hudoperative")
- if("Death Commando")
- U.client.images += image(tempHud,target,"huddeathsquad")
- if("Space Ninja")
- U.client.images += image(tempHud,target,"hudninja")
- else//If we don't know what role they have but they have one.
- U.client.images += image(tempHud,target,"hudunknown1")
- else if(issilicon(target))//If the silicon mob has no law datum, no inherent laws, or a law zero, add them to the hud.
- var/mob/living/silicon/silicon_target = target
- if(!silicon_target.laws||(silicon_target.laws&&(silicon_target.laws.zeroth||!silicon_target.laws.inherent.len)))
- if(isrobot(silicon_target))//Different icons for robutts and AI.
- U.client.images += image(tempHud,silicon_target,"hudmalborg")
- else
- U.client.images += image(tempHud,silicon_target,"hudmalai")
- return 1
-
-
-/obj/item/clothing/mask/gas/voice/space_ninja/proc/togglev()
- set name = "Toggle Voice"
- set desc = "Toggles the voice synthesizer on or off."
- set category = "Ninja Equip"
-
- var/mob/U = loc//Can't toggle voice when you're not wearing the mask.
- var/vchange = (alert("Would you like to synthesize a new name or turn off the voice synthesizer?",,"New Name","Turn Off"))
- if(vchange == "New Name")
- var/chance = rand(1,100)
- switch(chance)
- if(1 to 50)//High chance of a regular name.
- voice = "[rand(0,1) == 1 ? pick(first_names_female) : pick(first_names_male)] [pick(last_names)]"
- if(51 to 70)//Smaller chance of a lizard name.
- voice = "[pick(lizard_name(MALE),lizard_name(FEMALE))]"
- if(71 to 80)//Small chance of a clown name.
- voice = "[pick(clown_names)]"
- if(81 to 90)//Small chance of a wizard name.
- voice = "[pick(wizard_first)] [pick(wizard_second)]"
- if(91 to 100)//Small chance of an existing crew name.
- var/list/names = list()
- for(var/mob/living/carbon/human/M in player_list)
- if(M == U || !M.client || !M.real_name)
- continue
- names.Add(M.real_name)
- voice = !names.len ? "Cuban Pete" : pick(names)
- U << "You are now mimicking [voice]."
- else
- U << "The voice synthesizer is [voice!="Unknown"?"now":"already"] deactivated."
- voice = "Unknown"
- return
-
-
-/obj/item/clothing/mask/gas/voice/space_ninja/examine(mob/user)
- ..()
- user << "Voice mimicking algorithm is set [!vchange?"inactive":"active"]."
diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm
index 0de92685532..e5b1da10739 100644
--- a/code/modules/power/lighting.dm
+++ b/code/modules/power/lighting.dm
@@ -183,11 +183,11 @@
switch(fitting)
if("tube")
brightness = 8
- if(prob(2))
+ if(prob(6))
broken(1)
if("bulb")
brightness = 4
- if(prob(5))
+ if(prob(12))
broken(1)
spawn(1)
update(0)
diff --git a/code/modules/uplink/uplink_item.dm b/code/modules/uplink/uplink_item.dm
index 0e6f48cc781..2f6ebf76447 100644
--- a/code/modules/uplink/uplink_item.dm
+++ b/code/modules/uplink/uplink_item.dm
@@ -650,27 +650,17 @@ var/list/uplink_items = list() // Global list so we only initialize this once.
/datum/uplink_item/stealthy_tools
category = "Stealth and Camouflage Items"
-/datum/uplink_item/stealthy_tools/chameleon_jumpsuit
- name = "Chameleon Jumpsuit"
- desc = "A jumpsuit used to imitate the uniforms of Nanotrasen crewmembers. It can change form at any time \
- to resemble another jumpsuit. May react unpredictably to electromagnetic disruptions."
+/datum/uplink_item/stealthy_tool/chameleon
+ name = "Chameleon Kit"
+ desc = "A set of items that contain chameleon technology allowing you to disguise as pretty much anything on the station, and more!"
item = /obj/item/clothing/under/chameleon
cost = 2
-/datum/uplink_item/stealthy_tools/chameleon_stamp
- name = "Chameleon Stamp"
- desc = "A stamp that can be activated to imitate an official Nanotrasen Stamp. The disguised stamp will \
- work exactly like the real stamp and will allow you to forge false documents to gain access or equipment; \
- it can also be used in a washing machine to forge clothing."
- item = /obj/item/weapon/stamp/chameleon
- cost = 1
- surplus = 35
-
/datum/uplink_item/stealthy_tools/syndigaloshes
- name = "No-Slip Brown Shoes"
+ name = "No-Slip Chameleon Shoes"
desc = "These shoes will allow the wearer to run on wet floors and slippery objects without falling down. \
They do not work on heavily lubricated surfaces."
- item = /obj/item/clothing/shoes/sneakers/syndigaloshes
+ item = /obj/item/clothing/shoes/chameleon
cost = 2
exclude_modes = list(/datum/game_mode/nuclear)
@@ -691,12 +681,6 @@ var/list/uplink_items = list() // Global list so we only initialize this once.
item = /obj/item/weapon/card/id/syndicate
cost = 2
-/datum/uplink_item/stealthy_tools/voice_changer
- name = "Voice Changer"
- desc = "A conspicuous gas mask that mimics the voice named on your identification card. It can be toggled on and off."
- item = /obj/item/clothing/mask/gas/voice
- cost = 3
-
/datum/uplink_item/stealthy_tools/chameleon_proj
name = "Chameleon Projector"
desc = "Projects an image across a user, disguising them as an object scanned with it, as long as they don't \
@@ -737,7 +721,7 @@ var/list/uplink_items = list() // Global list so we only initialize this once.
cost = 4
surplus = 30
exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/gang)
-
+
/datum/uplink_item/stealthy_tools/emplight
name = "EMP Flashlight"
desc = "A small, self-charging, short-ranged EMP device disguised as a flashlight. \
diff --git a/tgstation.dme b/tgstation.dme
index ff3c097ee4c..42d187fdc19 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -13,6 +13,7 @@
// END_PREFERENCES
// BEGIN_INCLUDE
+#include "tgstation.2.1.3.dmm"
#include "_maps\__MAP_DEFINES.dm"
#include "_maps\tgstation2.dm"
#include "code\_compile_options.dm"
@@ -904,6 +905,7 @@
#include "code\modules\client\preferences.dm"
#include "code\modules\client\preferences_savefile.dm"
#include "code\modules\client\preferences_toggles.dm"
+#include "code\modules\clothing\chameleon.dm"
#include "code\modules\clothing\clothing.dm"
#include "code\modules\clothing\glasses\engine_goggles.dm"
#include "code\modules\clothing\glasses\glasses.dm"
@@ -943,7 +945,6 @@
#include "code\modules\clothing\suits\toggles.dm"
#include "code\modules\clothing\suits\utility.dm"
#include "code\modules\clothing\suits\wiz_robe.dm"
-#include "code\modules\clothing\under\chameleon.dm"
#include "code\modules\clothing\under\color.dm"
#include "code\modules\clothing\under\miscellaneous.dm"
#include "code\modules\clothing\under\pants.dm"