From 6fa4084d11c611149a49994728d594675a7ea36f Mon Sep 17 00:00:00 2001 From: iamgoofball Date: Sun, 23 Mar 2014 14:08:23 -0700 Subject: [PATCH] Adds 9 new Chameleon items. Chameleon Glasses, Exosuit, Gloves, Shoes, Hat, Gun, Mask, Backpack, and Gun. The Gun does 1 damage and can disguise as any gun. As long as you don't fire it people won't notice that it shoots 1 damage rubber bullets. These new items come in the Chameleon Kit, which replaces and contains the Chameleon Jumpsuit --- code/game/gamemodes/game_mode.dm | 2 +- .../items/weapons/storage/uplink_kits.dm | 17 + code/modules/clothing/under/chameleon.dm | 433 ++++++++++++++++-- code/modules/projectiles/ammunition/boxes.dm | 14 + .../modules/projectiles/ammunition/bullets.dm | 6 + .../modules/projectiles/projectile/bullets.dm | 5 +- code/modules/research/designs.dm | 6 +- 7 files changed, 437 insertions(+), 46 deletions(-) diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index 26497410fa..22bdac77a9 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -44,7 +44,7 @@ Stealthy and Inconspicuous Weapons; /obj/item/weapon/cartridge/syndicate:3:Detomatix PDA Cartridge; Whitespace:Seperator; Stealth and Camouflage Items; -/obj/item/clothing/under/chameleon:3:Chameleon Jumpsuit; +/obj/item/weapon/storage/box/syndie_kit/chameleon:3:Chameleon Kit; /obj/item/clothing/shoes/syndigaloshes:2:No-Slip Syndicate Shoes; /obj/item/weapon/card/id/syndicate:2:Agent ID card; /obj/item/clothing/mask/gas/voice:4:Voice Changer; diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm index ea7c9bdd90..776062c1b9 100644 --- a/code/game/objects/items/weapons/storage/uplink_kits.dm +++ b/code/game/objects/items/weapons/storage/uplink_kits.dm @@ -117,3 +117,20 @@ new /obj/item/clothing/suit/space/syndicate(src) new /obj/item/clothing/head/helmet/space/syndicate(src) return +/obj/item/weapon/storage/box/syndie_kit/chameleon + name = "Chameleon Kit" + desc = "Comes with all the clothes you need to impersonate most people. Acting lessons sold seperately." + storage_slots = 10 + +/obj/item/weapon/storage/box/syndie_kit/chameleon/New() + ..() + new /obj/item/clothing/under/chameleon(src) + new /obj/item/clothing/head/chameleon(src) + new /obj/item/clothing/suit/chameleon(src) + new /obj/item/clothing/shoes/chameleon(src) + new /obj/item/weapon/storage/backpack/chameleon(src) + new /obj/item/clothing/gloves/chameleon(src) + new /obj/item/clothing/mask/chameleon(src) + new /obj/item/clothing/glasses/chameleon(src) + new /obj/item/weapon/gun/projectile/chameleon(src) + new /obj/item/ammo_magazine/chameleon(src) \ No newline at end of file diff --git a/code/modules/clothing/under/chameleon.dm b/code/modules/clothing/under/chameleon.dm index 46dbba3838..57c16ae5f1 100644 --- a/code/modules/clothing/under/chameleon.dm +++ b/code/modules/clothing/under/chameleon.dm @@ -1,3 +1,7 @@ +//***************** +//**Cham Jumpsuit** +//***************** + /obj/item/clothing/under/chameleon //starts off as black name = "black jumpsuit" @@ -6,58 +10,30 @@ item_color = "black" desc = "It's a plain jumpsuit. It seems to have a small dial on the wrist." origin_tech = "syndicate=3" - siemens_coefficient = 0.8 var/list/clothing_choices = list() New() ..() - for(var/U in typesof(/obj/item/clothing/under/color)-(/obj/item/clothing/under/color)) - var/obj/item/clothing/under/V = new U - src.clothing_choices += V - - for(var/U in typesof(/obj/item/clothing/under/rank)-(/obj/item/clothing/under/rank)) + var/blocked = list(/obj/item/clothing/under/chameleon, /obj/item/clothing/under/cloud, + /obj/item/clothing/under/golem, /obj/item/clothing/under/gimmick)//Prevent infinite loops and bad jumpsuits. + for(var/U in typesof(/obj/item/clothing/under)-blocked) var/obj/item/clothing/under/V = new U src.clothing_choices += V return - - attackby(obj/item/clothing/under/U as obj, mob/user as mob) - ..() - if(istype(U, /obj/item/clothing/under/chameleon)) - user << "\red Nothing happens." - return - if(istype(U, /obj/item/clothing/under)) - if(src.clothing_choices.Find(U)) - user << "\red Pattern is already recognised by the suit." - return - src.clothing_choices += U - user << "\red Pattern absorbed by the suit." - - emp_act(severity) name = "psychedelic" desc = "Groovy!" icon_state = "psyche" item_color = "psyche" - spawn(200) - name = "Black Jumpsuit" - icon_state = "bl_suit" - item_color = "black" - desc = null - ..() - verb/change() - set name = "Change Color" + set name = "Change Jumpsuit Appearance" set category = "Object" set src in usr - if(icon_state == "psyche") - usr << "\red Your suit is malfunctioning" - return - - var/obj/item/clothing/under/A - A = input("Select Colour to change it to", "BOOYEA", A) in clothing_choices + var/obj/item/clothing/suit/A + A = input("Select jumpsuit to change it to", "Chameleon Jumpsuit")as null|anything in clothing_choices if(!A) return @@ -71,12 +47,387 @@ item_color = A.item_color usr.update_inv_w_uniform() //so our overlays update. +//***************** +//**Chameleon Hat** +//***************** +/obj/item/clothing/head/chameleon + name = "grey cap" + icon_state = "greysoft" + item_state = "greysoft" + item_color = "grey" + desc = "It looks like a plain hat, but upon closer inspection, there's an advanced holographic array installed inside. It seems to have a small dial inside." + origin_tech = "syndicate=3" + var/list/clothing_choices = list() -/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 + New() + ..() + var/blocked = list(/obj/item/clothing/head/chameleon, + /obj/item/clothing/head/space/golem, /obj/item/clothing/head/justice,)//Prevent infinite loops and bad hats. + for(var/U in typesof(/obj/item/clothing/head)-blocked) + var/obj/item/clothing/head/V = new U + src.clothing_choices += V + return + + emp_act(severity) //Because we don't have psych for all slots right now but still want a downside to EMP. In this case your cover's blown. + name = "grey cap" + desc = "It's a baseball hat in a tasteful grey colour." + icon_state = "greysoft" + item_color = "grey" + update_icon() + + verb/change() + set name = "Change Hat/Helmet Appearance" + set category = "Object" + set src in usr + + var/obj/item/clothing/suit/A + A = input("Select headwear to change it to", "Chameleon Hat")as null|anything in clothing_choices + if(!A) + 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 + flags_inv = A.flags_inv + usr.update_inv_head() //so our overlays update. + +//****************** +//**Chameleon Suit** +//****************** + +/obj/item/clothing/suit/chameleon + name = "armor" + icon_state = "armor" + item_state = "armor" + desc = "It appears to be a vest of standard armor, except this is embedded with a hidden holographic cloaker, allowing it to change it's appearance, but offering no protection.. It seems to have a small dial inside." + origin_tech = "syndicate=3" + var/list/clothing_choices = list() + + New() + ..() + var/blocked = list(/obj/item/clothing/suit/chameleon, + /obj/item/clothing/suit/golem, /obj/item/clothing/suit/suit, /obj/item/clothing/suit/cyborg_suit, /obj/item/clothing/suit/justice, + /obj/item/clothing/suit/greatcoat)//Prevent infinite loops and bad suits. + for(var/U in typesof(/obj/item/clothing/suit)-blocked) + var/obj/item/clothing/suit/V = new U + src.clothing_choices += V + return + + emp_act(severity) //Because we don't have psych for all slots right now but still want a downside to EMP. In this case your cover's blown. + name = "armor" + desc = "An armored vest that protects against some damage." + icon_state = "armor" + item_color = "armor" + update_icon() + + verb/change() + set name = "Change Exosuit Appearance" + set category = "Object" + set src in usr + + var/obj/item/clothing/suit/A + A = input("Select footwear to change it to", "Chameleon Exosuit")as null|anything in clothing_choices + if(!A) + 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 + flags_inv = A.flags_inv + usr.update_inv_wear_suit() //so our overlays update. + +//******************* +//**Chameleon Shoes** +//******************* +/obj/item/clothing/shoes/chameleon + name = "black shoes" + icon_state = "black" + item_state = "black" + item_color = "black" + desc = "They're comfy black shoes, with clever Syndicate cloaking technology built in. It seems to have a small dial on the back of each shoe." + origin_tech = "syndicate=3" + var/list/clothing_choices = list() + + New() + ..() + var/blocked = list(/obj/item/clothing/shoes/chameleon, + /obj/item/clothing/shoes/golem, /obj/item/clothing/shoes/syndigaloshes, /obj/item/clothing/shoes/cyborg)//prevent infinite loops and bad shoes. + for(var/U in typesof(/obj/item/clothing/shoes)-blocked) + var/obj/item/clothing/shoes/V = new U + src.clothing_choices += V + return + + emp_act(severity) //Because we don't have psych for all slots right now but still want a downside to EMP. In this case your cover's blown. + name = "black shoes" + desc = "A pair of black shoes." + icon_state = "black" + item_state = "black" + item_color = "black" + update_icon() + + verb/change() + set name = "Change Footwear Appearance" + set category = "Object" + set src in usr + + var/obj/item/clothing/shoes/A + A = input("Select footwear to change it to", "Chameleon Shoes")as null|anything in clothing_choices + if(!A) + 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 + usr.update_inv_shoes() //so our overlays update. + +//********************** +//**Chameleon Backpack** +//********************** +/obj/item/weapon/storage/backpack/chameleon + name = "backpack" + icon_state = "backpack" + item_state = "backpack" + desc = "A backpack outfitted with cloaking tech. It seems to have a small dial inside, kept away from the storage." + origin_tech = "syndicate=3" + var/list/clothing_choices = list() + + New() + ..() + var/blocked = list(/obj/item/weapon/storage/backpack/chameleon, /obj/item/weapon/storage/backpack/satchel/withwallet) + for(var/U in typesof(/obj/item/weapon/storage/backpack)-blocked)//Prevent infinite loops and bad backpacks. + var/obj/item/weapon/storage/backpack/V = new U + src.clothing_choices += V + return + + emp_act(severity) //Because we don't have psych for all slots right now but still want a downside to EMP. In this case your cover's blown. + name = "backpack" + desc = "You wear this on your back and put items into it." + icon_state = "backpack" + item_state = "backpack" + update_icon() + + verb/change() + set name = "Change Backpack Appearance" + set category = "Object" + set src in usr + + var/obj/item/weapon/storage/backpack/A + A = input("Select backpack to change it to", "Chameleon Backpack")as null|anything in clothing_choices + if(!A) + 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 + usr.update_inv_back() //so our overlays update. + +//******************** +//**Chameleon Gloves** +//******************** + +/obj/item/clothing/gloves/chameleon + name = "black gloves" + icon_state = "black" + item_state = "bgloves" + item_color = "brown" + desc = "It looks like a pair of gloves, but it seems to have a small dial inside." + origin_tech = "syndicate=3" + var/list/clothing_choices = list() + + New() + ..() + var/blocked = list(/obj/item/clothing/gloves/chameleon)//Prevent infinite loops and bad hats. + for(var/U in typesof(/obj/item/clothing/gloves)-blocked) + var/obj/item/clothing/gloves/V = new U + src.clothing_choices += V + return + + emp_act(severity) //Because we don't have psych for all slots right now but still want a downside to EMP. In this case your cover's blown. + name = "black gloves" + desc = "It looks like a pair of gloves, but it seems to have a small dial inside." + icon_state = "black" + item_color = "brown" + update_icon() + + verb/change() + set name = "Change Gloves Appearance" + set category = "Object" + set src in usr + + var/obj/item/clothing/gloves/A + A = input("Select gloves to change it to", "Chameleon Gloves")as null|anything in clothing_choices + if(!A) + 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 + flags_inv = A.flags_inv + usr.update_inv_gloves() //so our overlays update. + +//****************** +//**Chameleon Mask** +//****************** + +/obj/item/clothing/mask/chameleon + name = "gas mask" + icon_state = "gas_alt" + item_state = "gas_alt" + desc = "It looks like a plain gask mask, but on closer inspection, it seems to have a small dial inside." + origin_tech = "syndicate=3" + var/list/clothing_choices = list() + + New() + ..() + var/blocked = list(/obj/item/clothing/mask/chameleon)//Prevent infinite loops and bad hats. + for(var/U in typesof(/obj/item/clothing/mask)-blocked) + var/obj/item/clothing/mask/V = new U + src.clothing_choices += V + return + + emp_act(severity) //Because we don't have psych for all slots right now but still want a downside to EMP. In this case your cover's blown. + name = "gas mask" + desc = "It's a gas mask." + icon_state = "gas_alt" + update_icon() + + verb/change() + set name = "Change Mask Appearance" + set category = "Object" + set src in usr + + var/obj/item/clothing/mask/A + A = input("Select mask to change it to", "Chameleon Mask")as null|anything in clothing_choices + if(!A) + return + + desc = null + permeability_coefficient = 0.90 + + desc = A.desc + name = A.name + icon_state = A.icon_state + item_state = A.item_state + flags_inv = A.flags_inv + usr.update_inv_wear_mask() //so our overlays update. + +//********************* +//**Chameleon Glasses** +//********************* + +/obj/item/clothing/glasses/chameleon + name = "Optical Meson Scanner" + icon_state = "meson" + item_state = "glasses" + desc = "It looks like a plain set of mesons, but on closer inspection, it seems to have a small dial inside." + origin_tech = "syndicate=3" + var/list/clothing_choices = list() + + New() + ..() + var/blocked = list(/obj/item/clothing/glasses/chameleon)//Prevent infinite loops and bad hats. + for(var/U in typesof(/obj/item/clothing/glasses)-blocked) + var/obj/item/clothing/glasses/V = new U + src.clothing_choices += V + return + + emp_act(severity) //Because we don't have psych for all slots right now but still want a downside to EMP. In this case your cover's blown. + name = "Optical Meson Scanner" + desc = "It's a set of mesons." + icon_state = "meson" + update_icon() + + verb/change() + set name = "Change Glasses Appearance" + set category = "Object" + set src in usr + + var/obj/item/clothing/glasses/A + A = input("Select glasses to change it to", "Chameleon Glasses")as null|anything in clothing_choices + if(!A) + return + + desc = null + permeability_coefficient = 0.90 + + desc = A.desc + name = A.name + icon_state = A.icon_state + item_state = A.item_state + flags_inv = A.flags_inv + usr.update_inv_glasses() //so our overlays update. + +//***************** +//**Chameleon Gun** +//***************** +/obj/item/weapon/gun/projectile/chameleon + name = "desert eagle" + desc = "A fake Desert Eagle with a dial on the side to change the gun's disguise." + icon_state = "deagle" + w_class = 3.0 + max_shells = 7 + caliber = ".45" + origin_tech = "combat=2;materials=2;syndicate=8" + ammo_type = "/obj/item/ammo_casing/chameleon" + var/list/gun_choices = list() + + New() + ..() + var/blocked = list(/obj/item/weapon/gun/projectile/chameleon)//Prevent infinite loops and bad hats. + for(var/U in typesof(/obj/item/weapon/gun/)-blocked) + var/obj/item/weapon/gun/V = new U + src.gun_choices += V + return + + emp_act(severity) //Because we don't have psych for all slots right now but still want a downside to EMP. In this case your cover's blown. + name = "desert eagle" + desc = "It's a desert eagle." + icon_state = "deagle" + update_icon() + + verb/change() + set name = "Change Gun Appearance" + set category = "Object" + set src in usr + + var/obj/item/weapon/gun/A + A = input("Select gun to change it to", "Chameleon Gun")as null|anything in gun_choices + if(!A) + return + + desc = null + permeability_coefficient = 0.90 + + desc = A.desc + name = A.name + icon_state = A.icon_state + item_state = A.item_state + flags_inv = A.flags_inv + usr.update_inv_r_hand() + usr.update_inv_l_hand() //so our overlays update. \ No newline at end of file diff --git a/code/modules/projectiles/ammunition/boxes.dm b/code/modules/projectiles/ammunition/boxes.dm index ecbea58fc2..14622ebb29 100644 --- a/code/modules/projectiles/ammunition/boxes.dm +++ b/code/modules/projectiles/ammunition/boxes.dm @@ -135,4 +135,18 @@ icon_state = "a762" ammo_type = "/obj/item/ammo_casing/a762" max_ammo = 0 + multiple_sprites = 1 + +/obj/item/ammo_magazine/chameleon + name = "magazine (.45)" + icon_state = "45" + ammo_type = "/obj/item/ammo_casing/chameleon" + max_ammo = 7 + multiple_sprites = 1 + +/obj/item/ammo_magazine/chameleon/empty + name = "magazine (.45)" + icon_state = "45" + ammo_type = "/obj/item/ammo_casing/chameleon" + max_ammo = 0 multiple_sprites = 1 \ No newline at end of file diff --git a/code/modules/projectiles/ammunition/bullets.dm b/code/modules/projectiles/ammunition/bullets.dm index 49efd840e6..c600199d43 100644 --- a/code/modules/projectiles/ammunition/bullets.dm +++ b/code/modules/projectiles/ammunition/bullets.dm @@ -105,3 +105,9 @@ icon_state = "rocketshell" projectile_type = "/obj/item/missile" caliber = "rocket" + +/obj/item/ammo_casing/chameleon + name = "chameleon bullets" + desc = "A set of bullets for the Chameleon Gun." + projectile_type = "/obj/item/projectile/bullet/chameleon" + caliber = ".45" diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm index 43cb24d39a..3e92faf4ef 100644 --- a/code/modules/projectiles/projectile/bullets.dm +++ b/code/modules/projectiles/projectile/bullets.dm @@ -58,4 +58,7 @@ embed = 0 /obj/item/projectile/bullet/a762 - damage = 25 \ No newline at end of file + damage = 25 + +/obj/item/projectile/bullet/chameleon + damage = 1 // stop trying to murderbone with a fake gun dumbass!!! \ No newline at end of file diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index 53b45fcbe5..7e64e0cea5 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -1369,13 +1369,13 @@ datum/design/implant_free build_path = "/obj/item/weapon/implant/freedom" datum/design/chameleon - name = "Chameleon Jumpsuit" - desc = "It's a plain jumpsuit. It seems to have a small dial on the wrist." + name = "Chameleon Kit" + desc = "It's a set of clothes with dials on them." id = "chameleon" req_tech = list("syndicate" = 2) build_type = PROTOLATHE materials = list("$metal" = 500) - build_path = "/obj/item/clothing/under/chameleon" + build_path = "/obj/item/weapon/storage/box/syndie_kit/chameleon" datum/design/bluespacebeaker