From a00d4b16a4b583bcef43021556b475cecd66725f Mon Sep 17 00:00:00 2001 From: coiax Date: Wed, 24 Jan 2018 19:58:00 +0000 Subject: [PATCH] Costumes for nuclear operatives (#34487) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 🆑 coiax add: Nuclear operatives that wish to fail in style can purchase Centcom Official and Clown costumes. They can also buy a defective chameleon kit. /🆑 It's funny. Other costume ideas welcome. Also merges two Initializes in camo guns Centcom Inspector outfit does have a Centcom headset, but it has no encryption chips. The outfit also is missing an egun. Removes the "Stealthy" description from camo shoes in the nuke op uplink they buy the same damn shoes, they're just more expensive for immersive and plausible reasons. --- code/game/machinery/PDApainter.dm | 4 +- .../objects/items/devices/radio/headset.dm | 4 + .../objects/items/implants/implant_clown.dm | 2 +- code/game/objects/items/storage/backpack.dm | 13 +++ .../game/objects/items/storage/uplink_kits.dm | 24 +++++ code/modules/clothing/chameleon.dm | 100 +++++++++++++----- code/modules/paperwork/stamps.dm | 11 ++ code/modules/uplink/uplink_items.dm | 40 ++++--- 8 files changed, 155 insertions(+), 43 deletions(-) diff --git a/code/game/machinery/PDApainter.dm b/code/game/machinery/PDApainter.dm index 6156ee1d86d..ba8be95065c 100644 --- a/code/game/machinery/PDApainter.dm +++ b/code/game/machinery/PDApainter.dm @@ -34,7 +34,9 @@ /obj/item/device/pda/ai, /obj/item/device/pda/heads, /obj/item/device/pda/clear, - /obj/item/device/pda/syndicate) + /obj/item/device/pda/syndicate, + /obj/item/device/pda/chameleon, + /obj/item/device/pda/chameleon/broken) for(var/P in typesof(/obj/item/device/pda) - blocked) var/obj/item/device/pda/D = new P diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm index 0fc957fdca7..1362721e1d5 100644 --- a/code/game/objects/items/devices/radio/headset.dm +++ b/code/game/objects/items/devices/radio/headset.dm @@ -194,6 +194,10 @@ keyslot = new /obj/item/device/encryptionkey/headset_com keyslot2 = new /obj/item/device/encryptionkey/headset_cent +/obj/item/device/radio/headset/headset_cent/empty + keyslot = null + keyslot2 = null + /obj/item/device/radio/headset/headset_cent/commander keyslot = new /obj/item/device/encryptionkey/heads/captain diff --git a/code/game/objects/items/implants/implant_clown.dm b/code/game/objects/items/implants/implant_clown.dm index 18a22c1e605..ae1fef109dd 100644 --- a/code/game/objects/items/implants/implant_clown.dm +++ b/code/game/objects/items/implants/implant_clown.dm @@ -14,7 +14,7 @@ playsound(loc, 'sound/misc/sadtrombone.ogg', 50, 0) /obj/item/implanter/sad_trombone - name = "implanter (sad_trombone)" + name = "implanter (sad trombone)" imp_type = /obj/item/implant/sad_trombone /obj/item/implantcase/sad_trombone diff --git a/code/game/objects/items/storage/backpack.dm b/code/game/objects/items/storage/backpack.dm index 84cd51fe229..c1aa39ddb1a 100644 --- a/code/game/objects/items/storage/backpack.dm +++ b/code/game/objects/items/storage/backpack.dm @@ -553,3 +553,16 @@ new /obj/item/reagent_containers/food/drinks/bottle/vodka/badminka(src) new /obj/item/reagent_containers/syringe/stimulants(src) new /obj/item/grenade/syndieminibomb(src) + +// For ClownOps. +/obj/item/storage/backpack/duffelbag/clown/syndie + slowdown = 0 + silent = TRUE + +/obj/item/storage/backpack/duffelbag/clown/syndie/PopulateContents() + new /obj/item/device/pda/clown(src) + new /obj/item/clothing/under/rank/clown(src) + new /obj/item/clothing/shoes/clown_shoes(src) + new /obj/item/clothing/mask/gas/clown_hat(src) + new /obj/item/bikehorn(src) + new /obj/item/implanter/sad_trombone(src) diff --git a/code/game/objects/items/storage/uplink_kits.dm b/code/game/objects/items/storage/uplink_kits.dm index fb44d094c72..7ce832acd39 100644 --- a/code/game/objects/items/storage/uplink_kits.dm +++ b/code/game/objects/items/storage/uplink_kits.dm @@ -308,3 +308,27 @@ /obj/item/storage/box/syndie_kit/imp_radio/PopulateContents() new /obj/item/implanter/radio(src) + +/obj/item/storage/box/syndie_kit/centcom_costume/PopulateContents() + new /obj/item/clothing/under/rank/centcom_officer(src) + new /obj/item/clothing/shoes/sneakers/black(src) + new /obj/item/clothing/gloves/color/black(src) + new /obj/item/device/radio/headset/headset_cent/empty(src) + new /obj/item/clothing/glasses/sunglasses(src) + new /obj/item/storage/backpack/satchel(src) + new /obj/item/device/pda/heads(src) + new /obj/item/clipboard(src) + +/obj/item/storage/box/syndie_kit/chameleon/broken/PopulateContents() + new /obj/item/clothing/under/chameleon/broken(src) + new /obj/item/clothing/suit/chameleon/broken(src) + new /obj/item/clothing/gloves/chameleon/broken(src) + new /obj/item/clothing/shoes/chameleon/broken(src) + new /obj/item/clothing/glasses/chameleon/broken(src) + new /obj/item/clothing/head/chameleon/broken(src) + new /obj/item/clothing/mask/chameleon/broken(src) + new /obj/item/storage/backpack/chameleon/broken(src) + new /obj/item/device/radio/headset/chameleon/broken(src) + new /obj/item/stamp/chameleon/broken(src) + new /obj/item/device/pda/chameleon/broken(src) + // No chameleon laser, they can't randomise for //REASONS// diff --git a/code/modules/clothing/chameleon.dm b/code/modules/clothing/chameleon.dm index d282fb9aed3..ac3718394d5 100644 --- a/code/modules/clothing/chameleon.dm +++ b/code/modules/clothing/chameleon.dm @@ -153,13 +153,15 @@ select_look(owner) return 1 -/datum/action/item_action/chameleon/change/proc/emp_randomise() +/datum/action/item_action/chameleon/change/proc/emp_randomise(var/amount = EMP_RANDOMISE_TIME) if(istype(target, /obj/item/gun/energy/laser/chameleon)) return //Please no crash! START_PROCESSING(SSprocessing, src) random_look(owner) - emp_timer = world.time + EMP_RANDOMISE_TIME + var/new_value = world.time + amount + if(new_value > emp_timer) + emp_timer = new_value /datum/action/item_action/chameleon/change/process() if(world.time > emp_timer) @@ -189,8 +191,8 @@ item_state = "engi_suit" item_color = "engine" -/obj/item/clothing/under/chameleon/New() - ..() +/obj/item/clothing/under/chameleon/Initialize() + . = ..() chameleon_action = new(src) chameleon_action.chameleon_type = /obj/item/clothing/under chameleon_action.chameleon_name = "Jumpsuit" @@ -200,6 +202,10 @@ /obj/item/clothing/under/chameleon/emp_act(severity) chameleon_action.emp_randomise() +/obj/item/clothing/under/chameleon/broken/Initialize() + . = ..() + chameleon_action.emp_randomise(INFINITY) + /obj/item/clothing/suit/chameleon name = "armor" desc = "A slim armored vest that protects against most types of damage." @@ -211,8 +217,8 @@ var/datum/action/item_action/chameleon/change/chameleon_action -/obj/item/clothing/suit/chameleon/New() - ..() +/obj/item/clothing/suit/chameleon/Initialize() + . = ..() chameleon_action = new(src) chameleon_action.chameleon_type = /obj/item/clothing/suit chameleon_action.chameleon_name = "Suit" @@ -222,6 +228,10 @@ /obj/item/clothing/suit/chameleon/emp_act(severity) chameleon_action.emp_randomise() +/obj/item/clothing/suit/chameleon/broken/Initialize() + . = ..() + chameleon_action.emp_randomise(INFINITY) + /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." @@ -232,8 +242,8 @@ var/datum/action/item_action/chameleon/change/chameleon_action -/obj/item/clothing/glasses/chameleon/New() - ..() +/obj/item/clothing/glasses/chameleon/Initialize() + . = ..() chameleon_action = new(src) chameleon_action.chameleon_type = /obj/item/clothing/glasses chameleon_action.chameleon_name = "Glasses" @@ -243,6 +253,10 @@ /obj/item/clothing/glasses/chameleon/emp_act(severity) chameleon_action.emp_randomise() +/obj/item/clothing/glasses/chameleon/broken/Initialize() + . = ..() + chameleon_action.emp_randomise(INFINITY) + /obj/item/clothing/gloves/chameleon desc = "These gloves will protect the wearer from electric shock." name = "insulated gloves" @@ -254,8 +268,8 @@ var/datum/action/item_action/chameleon/change/chameleon_action -/obj/item/clothing/gloves/chameleon/New() - ..() +/obj/item/clothing/gloves/chameleon/Initialize() + . = ..() chameleon_action = new(src) chameleon_action.chameleon_type = /obj/item/clothing/gloves chameleon_action.chameleon_name = "Gloves" @@ -265,6 +279,10 @@ /obj/item/clothing/gloves/chameleon/emp_act(severity) chameleon_action.emp_randomise() +/obj/item/clothing/gloves/chameleon/broken/Initialize() + . = ..() + chameleon_action.emp_randomise(INFINITY) + /obj/item/clothing/head/chameleon name = "grey cap" desc = "It's a baseball hat in a tasteful grey colour." @@ -276,8 +294,8 @@ var/datum/action/item_action/chameleon/change/chameleon_action -/obj/item/clothing/head/chameleon/New() - ..() +/obj/item/clothing/head/chameleon/Initialize() + . = ..() chameleon_action = new(src) chameleon_action.chameleon_type = /obj/item/clothing/head chameleon_action.chameleon_name = "Hat" @@ -287,6 +305,10 @@ /obj/item/clothing/head/chameleon/emp_act(severity) chameleon_action.emp_randomise() +/obj/item/clothing/head/chameleon/broken/Initialize() + . = ..() + chameleon_action.emp_randomise(INFINITY) + /obj/item/clothing/head/chameleon/drone // The camohat, I mean, holographic hat projection, is part of the // drone itself. @@ -294,8 +316,8 @@ armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0) // which means it offers no protection, it's just air and light -/obj/item/clothing/head/chameleon/drone/New() - ..() +/obj/item/clothing/head/chameleon/drone/Initialize() + . = ..() chameleon_action.random_look() var/datum/action/item_action/chameleon/drone/togglehatmask/togglehatmask_action = new(src) togglehatmask_action.UpdateButtonIcon() @@ -320,8 +342,8 @@ var/datum/action/item_action/chameleon/change/chameleon_action -/obj/item/clothing/mask/chameleon/New() - ..() +/obj/item/clothing/mask/chameleon/Initialize() + . = ..() chameleon_action = new(src) chameleon_action.chameleon_type = /obj/item/clothing/mask chameleon_action.chameleon_name = "Mask" @@ -331,6 +353,10 @@ /obj/item/clothing/mask/chameleon/emp_act(severity) chameleon_action.emp_randomise() +/obj/item/clothing/mask/chameleon/broken/Initialize() + . = ..() + chameleon_action.emp_randomise(INFINITY) + /obj/item/clothing/mask/chameleon/attack_self(mob/user) vchange = !vchange to_chat(user, "The voice changer is now [vchange ? "on" : "off"]!") @@ -343,8 +369,8 @@ // Can drones use the voice changer part? Let's not find out. vchange = 0 -/obj/item/clothing/mask/chameleon/drone/New() - ..() +/obj/item/clothing/mask/chameleon/drone/Initialize() + . = ..() chameleon_action.random_look() var/datum/action/item_action/chameleon/drone/togglehatmask/togglehatmask_action = new(src) togglehatmask_action.UpdateButtonIcon() @@ -367,8 +393,8 @@ var/datum/action/item_action/chameleon/change/chameleon_action -/obj/item/clothing/shoes/chameleon/New() - ..() +/obj/item/clothing/shoes/chameleon/Initialize() + . = ..() chameleon_action = new(src) chameleon_action.chameleon_type = /obj/item/clothing/shoes chameleon_action.chameleon_name = "Shoes" @@ -378,6 +404,10 @@ /obj/item/clothing/shoes/chameleon/emp_act(severity) chameleon_action.emp_randomise() +/obj/item/clothing/shoes/chameleon/broken/Initialize() + . = ..() + chameleon_action.emp_randomise(INFINITY) + /obj/item/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." @@ -405,8 +435,6 @@ chameleon_action.chameleon_blacklist = typecacheof(/obj/item/gun/magic, ignore_root_path = FALSE) chameleon_action.initialize_disguises() -/obj/item/gun/energy/laser/chameleon/Initialize() - . = ..() projectile_copy_vars = list("name", "icon", "icon_state", "item_state", "speed", "color", "hitsound", "forcedodge", "impact_effect_type", "range", "suppressed", "hitsound_wall", "impact_effect_type", "pass_flags") chameleon_projectile_vars = list("name" = "practice laser", "icon" = 'icons/obj/projectiles.dmi', "icon_state" = "laser") gun_copy_vars = list("fire_sound", "burst_size", "fire_delay") @@ -505,8 +533,8 @@ name = "backpack" var/datum/action/item_action/chameleon/change/chameleon_action -/obj/item/storage/backpack/chameleon/New() - ..() +/obj/item/storage/backpack/chameleon/Initialize() + . = ..() chameleon_action = new(src) chameleon_action.chameleon_type = /obj/item/storage/backpack chameleon_action.chameleon_name = "Backpack" @@ -515,14 +543,18 @@ /obj/item/storage/backpack/chameleon/emp_act(severity) chameleon_action.emp_randomise() +/obj/item/storage/backpack/chameleon/broken/Initialize() + . = ..() + chameleon_action.emp_randomise(INFINITY) + /obj/item/storage/belt/chameleon name = "toolbelt" desc = "Holds tools." silent = 1 var/datum/action/item_action/chameleon/change/chameleon_action -/obj/item/storage/belt/chameleon/New() - ..() +/obj/item/storage/belt/chameleon/Initialize() + . = ..() chameleon_action = new(src) chameleon_action.chameleon_type = /obj/item/storage/belt chameleon_action.chameleon_name = "Belt" @@ -531,6 +563,10 @@ /obj/item/storage/belt/chameleon/emp_act(severity) chameleon_action.emp_randomise() +/obj/item/storage/belt/chameleon/broken/Initialize() + . = ..() + chameleon_action.emp_randomise(INFINITY) + /obj/item/device/radio/headset/chameleon name = "radio headset" var/datum/action/item_action/chameleon/change/chameleon_action @@ -545,12 +581,16 @@ /obj/item/device/radio/headset/chameleon/emp_act(severity) chameleon_action.emp_randomise() +/obj/item/device/radio/headset/chameleon/broken/Initialize() + . = ..() + chameleon_action.emp_randomise(INFINITY) + /obj/item/device/pda/chameleon name = "PDA" var/datum/action/item_action/chameleon/change/chameleon_action -/obj/item/device/pda/chameleon/New() - ..() +/obj/item/device/pda/chameleon/Initialize() + . = ..() chameleon_action = new(src) chameleon_action.chameleon_type = /obj/item/device/pda chameleon_action.chameleon_name = "PDA" @@ -560,3 +600,7 @@ /obj/item/device/pda/chameleon/emp_act(severity) chameleon_action.emp_randomise() +/obj/item/device/pda/chameleon/broken/Initialize() + . = ..() + chameleon_action.emp_randomise(INFINITY) + diff --git a/code/modules/paperwork/stamps.dm b/code/modules/paperwork/stamps.dm index 87cc09f4673..97038bd94c5 100644 --- a/code/modules/paperwork/stamps.dm +++ b/code/modules/paperwork/stamps.dm @@ -109,3 +109,14 @@ if(initial(stamp_type.name) == input_stamp) break change_to(stamp_type) + +/obj/item/stamp/chameleon/broken/Initialize() + . = ..() + START_PROCESSING(SSobj, src) + +/obj/item/stamp/chameleon/broken/Destroy() + STOP_PROCESSING(SSobj, src) + return ..() + +/obj/item/stamp/chameleon/broken/process() + change_to(pick(stamp_types)) diff --git a/code/modules/uplink/uplink_items.dm b/code/modules/uplink/uplink_items.dm index d6866009748..f9da798e688 100644 --- a/code/modules/uplink/uplink_items.dm +++ b/code/modules/uplink/uplink_items.dm @@ -714,10 +714,6 @@ GLOBAL_LIST_EMPTY(uplink_items) // Global list so we only initialize this once. exclude_modes = list(/datum/game_mode/nuclear) player_minimum = 20 -/datum/uplink_item/stealthy_tools/chameleon/nuke - cost = 6 - include_modes = list(/datum/game_mode/nuclear) - /datum/uplink_item/stealthy_tools/syndigaloshes name = "No-Slip Chameleon Shoes" desc = "These shoes will allow the wearer to run on wet floors and slippery objects without falling down. \ @@ -727,6 +723,12 @@ GLOBAL_LIST_EMPTY(uplink_items) // Global list so we only initialize this once. exclude_modes = list(/datum/game_mode/nuclear) player_minimum = 20 +/datum/uplink_item/stealthy_tools/syndigaloshes/nuke + item = /obj/item/clothing/shoes/chameleon + cost = 4 + exclude_modes = list() + include_modes = list(/datum/game_mode/nuclear) + /datum/uplink_item/stealthy_tools/frame name = "F.R.A.M.E. PDA Cartridge" desc = "When inserted into a personal digital assistant, this cartridge gives you five PDA viruses which \ @@ -736,15 +738,6 @@ GLOBAL_LIST_EMPTY(uplink_items) // Global list so we only initialize this once. item = /obj/item/cartridge/virus/frame cost = 4 -/datum/uplink_item/stealthy_tools/syndigaloshes/nuke - name = "Stealthy 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. The manufacturer claims they are much more stealthy than the normal brand." - item = /obj/item/clothing/shoes/chameleon - cost = 4 - exclude_modes = list() - include_modes = list(/datum/game_mode/nuclear) - /datum/uplink_item/stealthy_tools/agent_card name = "Agent Identification Card" desc = "Agent cards prevent artificial intelligences from tracking the wearer, and can copy access \ @@ -1328,6 +1321,27 @@ GLOBAL_LIST_EMPTY(uplink_items) // Global list so we only initialize this once. cost = 20 cant_discount = TRUE +/datum/uplink_item/badass/costumes + surplus = 0 + include_modes = list(/datum/game_mode/nuclear) + cost = 4 + cant_discount = TRUE + +/datum/uplink_item/badass/costumes/centcom_official + name = "Centcom Official Costume" + desc = "Ask the crew to \"inspect\" their nuclear disk and weapons system, and then when they decline, pull out a fully automatic rifle and gun down the Captain. Radio headset does not include key. No gun included." + item = /obj/item/storage/box/syndie_kit/centcom_costume + +/datum/uplink_item/badass/costumes/clown + name = "Clown Costume" + desc = "Nothing is more terrifying than clowns with fully automatic weaponry." + item = /obj/item/storage/backpack/duffelbag/clown/syndie + +/datum/uplink_item/badass/costumes/obvious_chameleon + name = "Broken Chameleon Kit" + desc = "A set of items that contain chameleon technology allowing you to disguise as pretty much anything on the station, and more! Please note that this kit did NOT pass quality control." + item = /obj/item/storage/box/syndie_kit/chameleon/broken + /datum/uplink_item/badass/bundle name = "Syndicate Bundle" desc = "Syndicate Bundles are specialized groups of items that arrive in a plain box. \