diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm index 301cea307d2..4bb61e2c9bc 100644 --- a/code/datums/uplink_item.dm +++ b/code/datums/uplink_item.dm @@ -208,18 +208,24 @@ var/list/uplink_items = list() item = /obj/item/weapon/gun/projectile/revolver cost = 6 +/datum/uplink_item/dangerous/pistol + name = "Stechkin Pistol" + desc = "A small, easily concealable handgun that uses 10mm magazines and is compatible with suppressors." + item = /obj/item/weapon/gun/projectile/automatic/pistol + cost = 4 + /datum/uplink_item/dangerous/smg name = "C-20r Submachine Gun" desc = "A fully-loaded Scarborough Arms-developed submachine gun that fires 12mm automatic rounds with a 20-round magazine." item = /obj/item/weapon/gun/projectile/automatic/c20r - cost = 6 + cost = 7 gamemodes = list("nuclear emergency") /datum/uplink_item/dangerous/machinegun name = "L6 Squad Automatic Weapon" desc = "A traditionally constructed machine gun made by AA-2531. This deadly weapon has a massive 50-round magazine of 7.62×51mm ammunition." item = /obj/item/weapon/gun/projectile/automatic/l6_saw - cost = 10 + cost = 20 gamemodes = list("nuclear emergency") @@ -229,6 +235,12 @@ var/list/uplink_items = list() item = /obj/item/ammo_box/a357 cost = 2 +/datum/uplink_item/dangerous/ammo/pistol + name = "Ammo-10mm" + desc = "An additional 8-round 10mm magazine for use in the Stetchkin pistol." + item = /obj/item/ammo_box/magazine/m10mm + cost = 1 + /datum/uplink_item/ammo/smg name = "Ammo-12mm" desc = "A 20-round 12mm magazine for use in the C-20r submachine gun." @@ -236,19 +248,18 @@ var/list/uplink_items = list() cost = 1 gamemodes = list("nuclear emergency") - /datum/uplink_item/ammo/machinegun name = "Ammo-7.62×51mm" desc = "A 50-round magazine of 7.62×51mm ammunition for use in the L6 SAW machinegun. By the time you need to use this, you'll already be on a pile of corpses." item = /obj/item/ammo_box/magazine/m762 - cost = 3 + cost = 6 gamemodes = list("nuclear emergency") /datum/uplink_item/dangerous/crossbow name = "Energy Crossbow" desc = "A miniature energy crossbow that is small enough both to fit into a pocket and to slip into a backpack unnoticed by observers. Fires bolts tipped with toxin, a poisonous substance that is the product of a living organism. Stuns enemies for a short period of time. Recharges automatically." item = /obj/item/weapon/gun/energy/crossbow - cost = 7 + cost = 5 /datum/uplink_item/dangerous/sword name = "Energy Sword" @@ -257,10 +268,19 @@ var/list/uplink_items = list() cost = 4 /datum/uplink_item/dangerous/manhacks - name = "Manhack Delivery Grenade" - desc = "The manhack grenade is a highly specialized grenades that, once thrown, will deploy a swarm of Viscerators to attack any nearby crewmembers. WARNING: Viscerator progrmaming does not include safeties. They may turn on you!" + name = "Viscerator Delivery Grenade" + desc = "A unique grenade that deploys a swarm of viscerators upon activation, which will chase down and shred any non-operatives in the area." item = /obj/item/weapon/grenade/spawnergrenade/manhacks - cost = 7 + cost = 4 + gamemodes = list("nuclear emergency") + +/datum/uplink_item/dangerous/bioterror + name = "Biohazardous Chemical Sprayer" + desc = "A chemical sprayer that allows a wide dispersal of selected chemicals. Especially tailored by the Tiger Cooperative, the deadly blend it comes stocked with will disorient, damage, and disable your foes... \ + Use with extreme caution, to prevent exposure to yourself and your fellow operatives." + item = /obj/item/weapon/reagent_containers/spray/chemsprayer/bioterror + cost = 10 + gamemodes = list("nuclear emergency") /datum/uplink_item/dangerous/emp name = "5 EMP Grenades" @@ -268,6 +288,12 @@ var/list/uplink_items = list() item = /obj/item/weapon/storage/box/emps cost = 3 +/datum/uplink_item/dangerous/syndicate_minibomb + name = "Syndicate Minibomb" + desc = "The Minibomb is a grenade with a five-second fuse." + item = /obj/item/weapon/grenade/syndieminibomb + cost = 3 + // STEALTHY WEAPONS @@ -298,8 +324,7 @@ var/list/uplink_items = list() name = "Stetchkin Silencer" desc = "Fitted for use on the Stetchkin pistol, this silencer will make its shots quieter when equipped onto it." item = /obj/item/weapon/silencer - cost = 1 - gamemodes = list("nuclear emergency") + cost = 2 // STEALTHY TOOLS @@ -312,6 +337,13 @@ var/list/uplink_items = list() item = /obj/item/clothing/under/chameleon cost = 3 +/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 + /datum/uplink_item/stealthy_tools/syndigolashes name = "No-Slip Syndicate Shoes" desc = "These allow you to run on wet floors. They do not work on lubricated surfaces." @@ -336,6 +368,12 @@ var/list/uplink_items = list() item = /obj/item/device/chameleon cost = 4 +/datum/uplink_item/stealthy_tools/dnascrambler + name = "DNA Scrambler" + desc = "A syringe with one injection that randomizes appearance and name upon use. A cheaper but less versatile alternative to an agent card and voice changer." + item = /obj/item/weapon/dnascrambler + cost = 2 + /datum/uplink_item/stealthy_tools/mindslave name = "Mindslave Implant" desc = "A box containing an implanter filled with a mindslave implant that when injected into another person makes them loyal to you and your cause, unless of course they're already implanted by someone else. Loyalty ends if the implant is no longer in their system." @@ -429,6 +467,12 @@ var/list/uplink_items = list() item = /obj/item/device/radio/beacon/syndicate cost = 7 +/datum/uplink_item/device_tools/pdapinpointer + name = "PDA Pinpointer" + desc = "A pinpointer that tracks any PDA on the station. Useful for locating assassination targets or other high-value targets that you can't find. WARNING: Can only set once." + item = /obj/item/weapon/pinpointer/pdapinpointer + cost = 2 + /datum/uplink_item/device_tools/teleporter name = "Teleporter Circuit Board" desc = "A printed circuit board that completes the teleporter onboard the mothership. Advise you test fire the teleporter before entering it, as malfunctions can occur." @@ -436,6 +480,12 @@ var/list/uplink_items = list() cost = 20 gamemodes = list("nuclear emergency") +/datum/uplink_item/device_tools/shield + name = "Energy Shield" + desc = "An incredibly useful personal shield projector, capable of reflecting energy projectiles and defending against other attacks." + item = /obj/item/weapon/shield/energy + cost = 8 + gamemodes = list("nuclear emergency") // IMPLANTS diff --git a/code/game/gamemodes/nuclear/pinpointer.dm b/code/game/gamemodes/nuclear/pinpointer.dm index baf79eda425..ce93498919c 100644 --- a/code/game/gamemodes/nuclear/pinpointer.dm +++ b/code/game/gamemodes/nuclear/pinpointer.dm @@ -266,4 +266,81 @@ if(16 to INFINITY) icon_state = "pinonfar" - spawn(5) .() \ No newline at end of file + spawn(5) .() + +/obj/item/weapon/pinpointer/pdapinpointer + name = "pda pinpointer" + desc = "A pinpointer that has been illegally modified to track the PDA of a crewmember for malicious reasons." + var/obj/target = null + var/used = 0 + + attack_self() + if(!active) + active = 1 + point_at(target) + usr << "\blue You activate the pinpointer" + else + active = 0 + icon_state = "pinoff" + usr << "\blue You deactivate the pinpointer" + + verb/select_pda() + set category = "Object" + set name = "Select pinpointer target" + set src in view(1) + + if(used) + usr << "Target has already been set!" + return + + var/list/L = list() + L["Cancel"] = "Cancel" + var/length = 1 + for (var/obj/item/device/pda/P in world) + if(P.name != "\improper PDA") + L[text("([length]) [P.name]")] = P + length++ + + var/t = input("Select pinpointer target. WARNING: Can only set once.") as null|anything in L + if(t == "Cancel") + return + target = L[t] + if(!target) + usr << "Failed to locate [target]!" + return + active = 1 + point_at(target) + usr << "You set the pinpointer to locate [target]" + used = 1 + + + examine() + ..() + if (target) + usr << "\blue Tracking [target]" + + proc/point_at(atom/target) + if(!active) + return + if(!target) + icon_state = "pinonnull" + return + + var/turf/T = get_turf(target) + var/turf/L = get_turf(src) + + if(T.z != L.z) + icon_state = "pinonnull" + else + dir = get_dir(L, T) + switch(get_dist(L, T)) + if(-1) + icon_state = "pinondirect" + if(1 to 8) + icon_state = "pinonclose" + if(9 to 16) + icon_state = "pinonmedium" + if(16 to INFINITY) + icon_state = "pinonfar" + spawn(5) + .() \ No newline at end of file diff --git a/code/game/objects/items/weapons/dnascrambler.dm b/code/game/objects/items/weapons/dnascrambler.dm new file mode 100644 index 00000000000..b0e5b0149d9 --- /dev/null +++ b/code/game/objects/items/weapons/dnascrambler.dm @@ -0,0 +1,47 @@ +/obj/item/weapon/dnascrambler + name = "dna scrambler" + desc = "An illegal genetic serum designed to randomize the user's identity." + icon = 'icons/obj/syringe.dmi' + item_state = "syringe_0" + icon_state = "b10" + var/used = null + + update_icon() + if(used) + icon_state = "b0" + else + icon_state = "b10" + + attack(mob/M as mob, mob/user as mob) + if(!M || !user) + return + + if(!ishuman(M) || !ishuman(user)) + return + + if(src.used) + return + + if(M == user) + user.visible_message("\red [user.name] injects \himself with [src]!") + src.injected(user,user) + else + user.visible_message("\red [user.name] is trying to inject [M.name] with [src]!") + if (do_mob(user,M,30)) + user.visible_message("\red [user.name] injects [M.name] with [src].") + src.injected(M, user) + else + user << "\red You failed to inject [M.name]." + + proc/injected(var/mob/living/carbon/target, var/mob/living/carbon/user) + target.generate_name() + target.real_name = target.name + + scramble(1, target, 100) + + log_attack("[key_name(user)] injected [key_name(target)] with the [name]") + log_game("[key_name_admin(user)] injected [key_name_admin(target)] with the [name]") + + src.used = 1 + src.update_icon() + src.name = "used " + src.name \ No newline at end of file diff --git a/code/game/objects/items/weapons/grenades/spawnergrenade.dm b/code/game/objects/items/weapons/grenades/spawnergrenade.dm index 4b2c0374a55..189bd93d649 100644 --- a/code/game/objects/items/weapons/grenades/spawnergrenade.dm +++ b/code/game/objects/items/weapons/grenades/spawnergrenade.dm @@ -35,7 +35,7 @@ /obj/item/weapon/grenade/spawnergrenade/manhacks name = "manhack delivery grenade" spawner_type = /mob/living/simple_animal/hostile/viscerator - deliveryamt = 3 + deliveryamt = 5 origin_tech = "materials=3;magnets=4;syndicate=4" /obj/item/weapon/grenade/spawnergrenade/spesscarp diff --git a/code/game/objects/items/weapons/grenades/syndieminibomb.dm b/code/game/objects/items/weapons/grenades/syndieminibomb.dm new file mode 100644 index 00000000000..7dbb3431e62 --- /dev/null +++ b/code/game/objects/items/weapons/grenades/syndieminibomb.dm @@ -0,0 +1,12 @@ +/obj/item/weapon/grenade/syndieminibomb + desc = "A syndicate manufactured explosive used to sow destruction and chaos" + name = "syndicate minibomb" + icon = 'icons/obj/grenade.dmi' + icon_state = "syndicate" + item_state = "flashbang" + origin_tech = "materials=3;magnets=4;syndicate=4" + +/obj/item/weapon/grenade/syndieminibomb/prime() + update_mob() + explosion(src.loc,1,2,4) + del(src) \ No newline at end of file diff --git a/code/game/objects/structures/crates_lockers/closets/syndicate.dm b/code/game/objects/structures/crates_lockers/closets/syndicate.dm index e26165043b2..97b3b168957 100644 --- a/code/game/objects/structures/crates_lockers/closets/syndicate.dm +++ b/code/game/objects/structures/crates_lockers/closets/syndicate.dm @@ -21,7 +21,6 @@ new /obj/item/weapon/cell/high(src) new /obj/item/weapon/card/id/syndicate(src) new /obj/item/device/multitool(src) - new /obj/item/weapon/shield/energy(src) new /obj/item/clothing/shoes/magboots(src) diff --git a/code/modules/paperwork/stamps.dm b/code/modules/paperwork/stamps.dm index 736c7caf70e..fb2a0751744 100644 --- a/code/modules/paperwork/stamps.dm +++ b/code/modules/paperwork/stamps.dm @@ -70,4 +70,29 @@ _color = "centcom" /obj/item/weapon/stamp/attack_paw(mob/user as mob) - return attack_hand(user) \ No newline at end of file + return attack_hand(user) + +// Syndicate stamp to forge documents. + +/obj/item/weapon/stamp/chameleon/attack_self(mob/user as mob) + + var/list/stamp_types = typesof(/obj/item/weapon/stamp) - src.type // Get all stamp types except our own + var/list/stamps = list() + + // Generate them into a list + for(var/stamp_type in stamp_types) + var/obj/item/weapon/stamp/S = new stamp_type + stamps[capitalize(S.name)] = S + + var/list/show_stamps = list("EXIT" = null) + sortList(stamps) // the list that will be shown to the user to pick from + + var/input_stamp = input(user, "Choose a stamp to disguise as.", "Choose a stamp.") in show_stamps + + if(user && src in user.contents) + + var/obj/item/weapon/stamp/chosen_stamp = stamps[capitalize(input_stamp)] + + if(chosen_stamp) + name = chosen_stamp.name + icon_state = chosen_stamp.icon_state + _color = chosen_stamp._color \ No newline at end of file diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm index fe76ec94809..2a8638010b8 100644 --- a/code/modules/reagents/Chemistry-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents.dm @@ -2276,6 +2276,21 @@ datum ..() return + Spores + name = "Spores" + id = "spores" + description = "A toxic spore cloud which blocks vision when ingested." + reagent_state = LIQUID + color = "#9ACD32" // rgb: 0, 51, 51 + + on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + M.adjustToxLoss(0.5*REM) + ..() + M.damageoverlaytemp = 60 + M.eye_blurry = max(M.eye_blurry, 3) + return + chloralhydrate //Otherwise known as a "Mickey Finn" name = "Chloral Hydrate" id = "chloralhydrate" @@ -2288,10 +2303,10 @@ datum if(!data) data = 1 data++ switch(data) - if(1) + if(1 to 10) M.confused += 2 M.drowsyness += 2 - if(2 to 50) + if(10 to 50) M.sleeping += 1 if(51 to INFINITY) M.sleeping += 1 diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm index d46a3bd24ad..23c26aa1b63 100644 --- a/code/modules/reagents/reagent_containers/spray.dm +++ b/code/modules/reagents/reagent_containers/spray.dm @@ -236,6 +236,14 @@ log_game("[key_name(user)] fired Space lube from a chem sprayer.") return +/obj/item/weapon/reagent_containers/spray/chemsprayer/bioterror/New() + ..() + reagents.add_reagent("spores", 150) + reagents.add_reagent("cryptobiolin", 150) + reagents.add_reagent("mutagen", 150) + reagents.add_reagent("chloralhydrate", 150) + + // Plant-B-Gone /obj/item/weapon/reagent_containers/spray/plantbgone // -- Skie name = "Plant-B-Gone" diff --git a/icons/obj/grenade.dmi b/icons/obj/grenade.dmi index 8e4029c4d3f..80e76f4f58e 100644 Binary files a/icons/obj/grenade.dmi and b/icons/obj/grenade.dmi differ