diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm
index af75bdb538e..7e80ebcc381 100644
--- a/code/datums/uplink_item.dm
+++ b/code/datums/uplink_item.dm
@@ -260,9 +260,9 @@ var/list/uplink_items = list()
gamemodes = list("nuclear emergency")
/datum/uplink_item/dangerous/emp
- name = "5 EMP Grenades"
- desc = "A box that contains 5 EMP grenades. Useful to disrupt communication and silicon lifeforms."
- item = /obj/item/weapon/storage/box/emps
+ name = "EMP Kit"
+ desc = "A box that contains two EMP grenades, an EMP implant and a short ranged recharging device disguised as a flashlight. Useful to disrupt communication and silicon lifeforms."
+ item = /obj/item/weapon/storage/box/syndie_kit/emp
cost = 5
/datum/uplink_item/dangerous/syndicate_minibomb
@@ -473,6 +473,12 @@ var/list/uplink_items = list()
cost = 9
gamemodes = list("nuclear emergency")
+/datum/uplink_item/badass/syndiecigs
+ name = "Syndicate Smokes"
+ desc = "Strong flavor, dense smoke, infused with Doctor's Delight."
+ item = /obj/item/weapon/storage/fancy/cigarettes/cigpack_syndicate
+ cost = 4
+
/datum/uplink_item/device_tools/space_suit
name = "Space Suit"
desc = "The red and black syndicate space suit is less encumbering than Nanotrasen variants, fits inside bags, and has a weapon slot. Nanotrasen crewmembers are trained to report red space suit sightings."
@@ -485,6 +491,7 @@ var/list/uplink_items = list()
item = /obj/item/clothing/glasses/thermal/syndi
cost = 6
+/*
/datum/uplink_item/device_tools/surveillance
name = "Camera Surveillance Kit"
desc = "This kit contains 5 Camera bugs and one mobile receiver. Attach camera bugs to a camera to enable remote viewing."
@@ -496,6 +503,7 @@ var/list/uplink_items = list()
desc = "This is a Camera bug resupply giving you 5 more camera bugs."
item = /obj/item/weapon/storage/box/surveillance
cost = 4
+*/ //commented out until porting over TG's camera bug
/datum/uplink_item/device_tools/binary
name = "Binary Translator Key"
@@ -504,10 +512,10 @@ var/list/uplink_items = list()
cost = 5
/datum/uplink_item/device_tools/cipherkey
- name = "Centcomm Encryption Key"
- desc = "A key, that when inserted into a radio headset, allows you to listen to and talk on all known radio channels."
- item = /obj/item/device/encryptionkey/syndicate/hacked
- cost = 4
+ name = "Syndicate Encryption Key"
+ desc = "A key, that when inserted into a radio headset, allows you to listen to all station department channels as well as talk on an encrypted Syndicate channel."
+ item = /obj/item/device/encryptionkey/syndicate
+ cost = 5
/datum/uplink_item/device_tools/hacked_module
name = "Hacked AI Upload Module"
@@ -622,7 +630,7 @@ var/list/uplink_items = list()
/datum/uplink_item/badass/bundle
name = "Syndicate Bundle"
- desc = "Syndicate Bundles are specialised groups of items that arrive in a plain box. These items are collectively worth more than 10 telecrystals, but you do not know which specialisation you will receive."
+ desc = "Syndicate Bundles are specialised groups of items that arrive in a plain box. These items are collectively worth more than 20 telecrystals, but you do not know which specialisation you will receive."
item = /obj/item/weapon/storage/box/syndicate
cost = 20
excludefrom = list("nuclear emergency")
diff --git a/code/game/jobs/job/science.dm b/code/game/jobs/job/science.dm
index 8c4b6c47ab0..ae02acbf195 100644
--- a/code/game/jobs/job/science.dm
+++ b/code/game/jobs/job/science.dm
@@ -9,11 +9,11 @@
idtype = /obj/item/weapon/card/id/silver
req_admin_notify = 1
access = list(access_rd, access_heads, access_tox, access_genetics, access_morgue,
- access_tox_storage, access_teleporter, access_sec_doors,
+ access_tox_storage, access_tech_storage, access_teleporter, access_sec_doors,
access_research, access_robotics, access_xenobiology, access_ai_upload,
access_RC_announce, access_keycard_auth, access_tcomsat, access_gateway, access_xenoarch)
minimal_access = list(access_eva, access_rd, access_heads, access_tox, access_genetics, access_morgue,
- access_tox_storage, access_teleporter, access_sec_doors,
+ access_tox_storage, access_tech_storage, access_teleporter, access_sec_doors,
access_research, access_robotics, access_xenobiology, access_ai_upload,
access_RC_announce, access_keycard_auth, access_tcomsat, access_gateway, access_xenoarch, access_maint_tunnels)
minimal_player_age = 21
diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm
index 6f302888a5d..103ec0d7d0d 100644
--- a/code/game/machinery/autolathe.dm
+++ b/code/game/machinery/autolathe.dm
@@ -38,6 +38,7 @@ var/global/list/autolathe_recipes = list( \
new /obj/item/device/radio/off(), \
new /obj/item/device/assembly/infra(), \
new /obj/item/device/assembly/timer(), \
+ new /obj/item/device/assembly/prox_sensor(), \
new /obj/item/device/assembly/voice(), \
new /obj/item/weapon/light/tube(), \
new /obj/item/weapon/light/bulb(), \
@@ -45,10 +46,7 @@ var/global/list/autolathe_recipes = list( \
new /obj/item/weapon/rcd_ammo(), \
new /obj/item/ammo_casing/shotgun/beanbag(), \
new /obj/item/weapon/storage/box/blanks(), \
- new /obj/item/weapon/storage/box/gauge(), \
- new /obj/item/ammo_casing/shotgun/incendiary(), \
new /obj/item/ammo_box/c38(), \
- new /obj/item/ammo_box/a357(), \
new /obj/item/clothing/ears/earmuffs/tribblemuffs(), \
new /obj/item/clothing/gloves/furgloves(), \
new /obj/item/clothing/head/furcap(), \
@@ -64,6 +62,10 @@ var/global/list/autolathe_recipes_hidden = list( \
new /obj/item/weapon/weldingtool/largetank(), \
new /obj/item/weapon/handcuffs(), \
new /obj/item/weapon/hatchet(), \
+ new /obj/item/ammo_box/a357(), \
+ new /obj/item/ammo_casing/shotgun(), \
+ new /obj/item/ammo_casing/shotgun/buck(), \
+ new /obj/item/ammo_casing/shotgun/incendiary(), \
/*new /obj/item/ammo_casing/shotgun/dart(), \
new /obj/item/weapon/shield/riot(), */ \
)
@@ -107,7 +109,7 @@ var/global/list/autolathe_recipes_hidden = list( \
SetLuminosity(2)
else
SetLuminosity(0)
-
+
/obj/machinery/autolathe/New()
..()
component_parts = list()
@@ -122,7 +124,7 @@ var/global/list/autolathe_recipes_hidden = list( \
wires = new(src)
src.L = autolathe_recipes
src.LL = autolathe_recipes_hidden
-
+
/obj/machinery/autolathe/proc/wires_win(mob/user as mob)
var/dat as text
dat += "Autolathe Wires:
"
@@ -180,36 +182,36 @@ var/global/list/autolathe_recipes_hidden = list( \
/obj/machinery/autolathe/interact(mob/user as mob)
if(..())
return
-
+
if (src.shocked)
src.shock(user,50)
-
+
if (src.panel_open)
wires_win(user,50)
return
-
+
if (src.disabled)
user << "\red You press the button, but nothing happens."
return
-
+
regular_win(user)
return
/obj/machinery/autolathe/attackby(var/obj/item/O as obj, var/mob/user as mob)
if (stat)
return 1
-
+
if (busy)
user << "\red The autolathe is busy. Please wait for completion of previous operation."
return 1
-
+
if (istype(O, /obj/item/weapon/screwdriver))
default_deconstruction_screwdriver(user, "autolathe_t", "autolathe", O)
return 1
-
+
if(exchange_parts(user, O))
- return
-
+ return
+
if (panel_open)
//Don't eat multitools or wirecutters used on an open lathe.
if(istype(O, /obj/item/device/multitool) || istype(O, /obj/item/weapon/wirecutters))
@@ -304,7 +306,7 @@ var/global/list/autolathe_recipes_hidden = list( \
usr.set_machine(src)
src.add_fingerprint(usr)
if (!busy)
- if(href_list["make"])
+ if(href_list["make"])
var/coeff = 2 ** prod_coeff
var/turf/T = get_step(src.loc, get_dir(src,usr))
@@ -355,7 +357,7 @@ var/global/list/autolathe_recipes_hidden = list( \
src.m_amount -= template.m_amt*multiplier
src.g_amount -= template.g_amt*multiplier
src.f_amount -= template.f_amt*multiplier
- var/obj/new_item = new template.type(T)
+ var/obj/new_item = new template.type(T)
var/obj/item/stack/S = new_item
S.amount = multiplier
else
@@ -364,16 +366,16 @@ var/global/list/autolathe_recipes_hidden = list( \
src.f_amount -= template.f_amt/coeff
var/obj/item/new_item = new template.type(T)
new_item.m_amt /= coeff
- new_item.g_amt /= coeff
- new_item.f_amt /= coeff
+ new_item.g_amt /= coeff
+ new_item.f_amt /= coeff
if(src.m_amount < 0)
src.m_amount = 0
if(src.g_amount < 0)
src.g_amount = 0
if(src.f_amount < 0)
src.f_amount = 0
- busy = 0
-
+ busy = 0
+
if(href_list["act"])
var/temp_wire = href_list["wire"]
if(href_list["act"] == "pulse")
@@ -422,8 +424,8 @@ var/global/list/autolathe_recipes_hidden = list( \
max_g_amount = tot_rating
max_f_amount = tot_rating
for(var/obj/item/weapon/stock_parts/manipulator/M in component_parts)
- prod_coeff += M.rating - 1
-
+ prod_coeff += M.rating - 1
+
/obj/machinery/autolathe/RefreshParts()
..()
var/tot_rating = 0
diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm
index ec22d2312c8..fb960fa6021 100755
--- a/code/game/objects/items/devices/PDA/PDA.dm
+++ b/code/game/objects/items/devices/PDA/PDA.dm
@@ -219,7 +219,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
return
var/selected = plist[c]
aiPDA.create_message(user, selected)
-
+
/mob/living/silicon/ai/proc/cmd_show_message_log(mob/user as mob)
if(user.stat == 2)
user << "You can't do that because you are dead!"
@@ -247,7 +247,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
return
var/selected = plist[c]
create_message(usr, selected)
-
+
/obj/item/device/pda/ai/verb/cmd_show_message_log()
set category = "AI IM"
set name = "Show Message Log"
@@ -918,18 +918,18 @@ var/global/list/obj/item/device/pda/PDAs = list()
useMS.send_pda_message("[P.owner]","[owner]","[t]")
tnote.Add(list(list("sent" = 1, "owner" = "[P.owner]", "job" = "[P.ownjob]", "message" = "[t]", "target" = "\ref[P]")))
P.tnote.Add(list(list("sent" = 0, "owner" = "[owner]", "job" = "[ownjob]", "message" = "[t]", "target" = "\ref[src]")))
- for(var/mob/M in player_list)
+/* for(var/mob/M in player_list)
if(M.stat == DEAD && M.client && (M.client.prefs.toggles & CHAT_GHOSTEARS)) // src.client is so that ghosts don't have to listen to mice
if(istype(M, /mob/new_player))
continue
- M.show_message("PDA Message - [owner] -> [P.owner]: [t]")
+ M.show_message("PDA Message - [owner] -> [P.owner]: [t]") */
investigate_log("PDA Message - [U.key] - [owner] -> [P.owner]: [t]", "pda")
if(!conversations.Find("\ref[P]"))
conversations.Add("\ref[P]")
if(!P.conversations.Find("\ref[src]"))
P.conversations.Add("\ref[src]")
-
+/*
if (prob(15)) //Give the AI a chance of intercepting the message
var/who = src.owner
if(prob(50))
@@ -938,7 +938,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
// Allows other AIs to intercept the message but the AI won't intercept their own message.
if(ai.aiPDA != P && ai.aiPDA != src)
ai.show_message("Intercepted message from [who]: [t]")
-
+*/
if (!P.silent)
playsound(P.loc, 'sound/machines/twobeep.ogg', 50, 1)
diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm
index 74b7913bc1f..00d8bb8f9f2 100644
--- a/code/game/objects/items/devices/flashlight.dm
+++ b/code/game/objects/items/devices/flashlight.dm
@@ -193,4 +193,47 @@
icon_state = initial(icon_state)
/obj/item/device/flashlight/slime/attack_self(mob/user)
- return //Bio-luminescence does not toggle.
\ No newline at end of file
+ return //Bio-luminescence does not toggle.
+
+/obj/item/device/flashlight/emp
+ origin_tech = "magnets=4;syndicate=5"
+
+ var/emp_max_charges = 4
+ var/emp_cur_charges = 4
+ var/charge_tick = 0
+
+
+/obj/item/device/flashlight/emp/New()
+ ..()
+ processing_objects.Add(src)
+
+/obj/item/device/flashlight/emp/Destroy()
+ processing_objects.Remove(src)
+ ..()
+
+/obj/item/device/flashlight/emp/process()
+ charge_tick++
+ if(charge_tick < 10) return 0
+ charge_tick = 0
+ emp_cur_charges = min(emp_cur_charges+1, emp_max_charges)
+ return 1
+
+/obj/item/device/flashlight/emp/attack(mob/living/M as mob, mob/living/user as mob)
+ if(on && user.zone_sel.selecting == "eyes") // call original attack proc only if aiming at the eyes
+ ..()
+ return
+
+/obj/item/device/flashlight/emp/afterattack(atom/A as mob|obj, mob/user, proximity)
+ if(!proximity) return
+ if (emp_cur_charges > 0)
+ emp_cur_charges -= 1
+ A.visible_message("[user] blinks \the [src] at \the [A].", \
+ "[user] blinks \the [src] at \the [A].")
+ if(ismob(A))
+ var/mob/M = A
+ add_logs(user, M, "attacked", object="EMP-light")
+ user << "\The [src] now has [emp_cur_charges] charge\s."
+ A.emp_act(1)
+ else
+ user << "\The [src] needs time to recharge!"
+ return
\ No newline at end of file
diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm
index a8e4df397af..a6f18c378e7 100644
--- a/code/game/objects/items/toys.dm
+++ b/code/game/objects/items/toys.dm
@@ -409,9 +409,9 @@
/obj/item/weapon/twohanded/dualsaber/toy/IsShield()
return 0
-/*
+
/obj/item/weapon/twohanded/dualsaber/toy/IsReflect()//Stops Toy Dualsabers from reflecting energy projectiles
- return 0 */ //uncomment this once reflecting is ported
+ return 0
/obj/item/toy/katana
name = "replica katana"
diff --git a/code/game/objects/items/weapons/cigs_lighters.dm b/code/game/objects/items/weapons/cigs_lighters.dm
index 57c4217568e..c0b22fb4ede 100644
--- a/code/game/objects/items/weapons/cigs_lighters.dm
+++ b/code/game/objects/items/weapons/cigs_lighters.dm
@@ -326,6 +326,18 @@ CIGARETTE PACKETS ARE IN FANCY.DM
return
if(location)
location.hotspot_expose(700, 5)
+ if(reagents && reagents.total_volume) // check if it has any reagents at all
+ if(iscarbon(loc) && (src == loc:wear_mask)) // if it's in the human/monkey mouth, transfer reagents to the mob
+ if(istype(loc, /mob/living/carbon/human))
+ var/mob/living/carbon/human/H = loc
+ if(H.species.flags & IS_SYNTHETIC)
+ return
+ var/mob/living/carbon/C = loc
+ if(prob(15)) // so it's not an instarape in case of acid
+ reagents.reaction(C, INGEST)
+ reagents.trans_to(C, REAGENTS_METABOLISM)
+ else // else just remove some of the reagents
+ reagents.remove_any(REAGENTS_METABOLISM)
return
/obj/item/clothing/mask/cigarette/pipe/attack_self(mob/user as mob) //Refills the pipe. Can be changed to an attackby later, if loose tobacco is added to vendors or something.
diff --git a/code/game/objects/items/weapons/dna_injector.dm b/code/game/objects/items/weapons/dna_injector.dm
index cfa5372ea6e..b15f656a69d 100644
--- a/code/game/objects/items/weapons/dna_injector.dm
+++ b/code/game/objects/items/weapons/dna_injector.dm
@@ -267,6 +267,11 @@
block = TELEBLOCK
..()
+/obj/item/weapon/dnainjector/telemut/darkbundle
+ name = "DNA injector"
+ desc = "Good. Let the hate flow through you."
+
+
/obj/item/weapon/dnainjector/antitele
name = "DNA-Injector (Anti-Tele.)"
desc = "Will make you not able to control your mind."
diff --git a/code/game/objects/items/weapons/implants/implant.dm b/code/game/objects/items/weapons/implants/implant.dm
index cb07e4acd89..e7a2a10575d 100644
--- a/code/game/objects/items/weapons/implants/implant.dm
+++ b/code/game/objects/items/weapons/implants/implant.dm
@@ -567,3 +567,28 @@ the implant may become unstable and either pre-maturely inject the subject or si
name = "cortical stack"
desc = "A fist-sized mass of biocircuits and chips."
icon_state = "implant_evil"
+
+
+/obj/item/weapon/implant/emp
+ name = "emp implant"
+ desc = "Triggers an EMP."
+
+ var/activation_emote = "chuckle"
+ var/uses = 2
+
+/obj/item/weapon/implant/emp/New()
+ activation_emote = pick("blink", "blink_r", "eyebrow", "chuckle", "twitch_s", "frown", "nod", "blush", "giggle", "grin", "groan", "smile", "pale", "sniff", "whimper", "wink")
+ ..()
+ return
+
+/obj/item/weapon/implant/emp/trigger(emote, mob/living/carbon/source as mob)
+ if (src.uses < 1) return 0
+ if (emote == src.activation_emote)
+ src.uses--
+ empulse(source, 3, 5)
+ return
+
+/obj/item/weapon/implant/emp/implanted(mob/living/carbon/source)
+ source.mind.store_memory("EMP implant can be activated [uses] time\s by using the [src.activation_emote] emote, say *[src.activation_emote] to attempt to activate.", 0, 0)
+ source << "The implanted EMP implant can be activated [uses] time\s by using the [src.activation_emote] emote, say *[src.activation_emote] to attempt to activate."
+ return 1
\ No newline at end of file
diff --git a/code/game/objects/items/weapons/implants/implanter.dm b/code/game/objects/items/weapons/implants/implanter.dm
index 9a36fe31b83..22041ccd51b 100644
--- a/code/game/objects/items/weapons/implants/implanter.dm
+++ b/code/game/objects/items/weapons/implants/implanter.dm
@@ -170,3 +170,12 @@
..()
update()
return
+
+/obj/item/weapon/implanter/emp
+ name = "implanter-EMP"
+
+ New()
+ src.imp = new /obj/item/weapon/implant/emp(src)
+ ..()
+ update()
+ return
\ No newline at end of file
diff --git a/code/game/objects/items/weapons/storage/fancy.dm b/code/game/objects/items/weapons/storage/fancy.dm
index e3ea4d5481f..a2eb8018ab0 100644
--- a/code/game/objects/items/weapons/storage/fancy.dm
+++ b/code/game/objects/items/weapons/storage/fancy.dm
@@ -214,6 +214,17 @@
var/new_name = pick("evil", "suspicious", "ominous", "donk-flavored", "robust", "sneaky")
name = "[new_name] cigarette packet"
+/obj/item/weapon/storage/fancy/cigarettes/cigpack_syndicate
+ name = "cigarette packet"
+ desc = "An obscure brand of cigarettes."
+ icon_state = "syndiepacket"
+ item_state = "syndiepacket"
+
+/obj/item/weapon/storage/fancy/cigarettes/cigpack_syndicate/New()
+ ..()
+ for(var/i = 1 to storage_slots)
+ reagents.add_reagent("doctorsdelight",15)
+
/*
* Vial Box
*/
diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm
index ccbafe8f8bd..439f27c1135 100644
--- a/code/game/objects/items/weapons/storage/uplink_kits.dm
+++ b/code/game/objects/items/weapons/storage/uplink_kits.dm
@@ -1,11 +1,12 @@
/obj/item/weapon/storage/box/syndicate/
New()
..()
- switch (pickweight(list("bloodyspai" = 1, "stealth" = 1, "screwed" = 1, "guns" = 1, "murder" = 1, "freedom" = 1, "hacker" = 1, "lordsingulo" = 1, "smoothoperator" = 1)))
+ switch (pickweight(list("bloodyspai" = 1, "stealth" = 1, "bond" = 1, "screwed" = 1, "guns" = 1, "murder" = 1, "implant" = 1, "hacker" = 1, "lordsingulo" = 1, "darklord" = 1)))
if("bloodyspai")
new /obj/item/clothing/under/chameleon(src)
new /obj/item/clothing/mask/gas/voice(src)
new /obj/item/weapon/card/id/syndicate(src)
+ new /obj/item/weapon/card/id/syndicate(src)
new /obj/item/clothing/shoes/syndigaloshes(src)
return
@@ -15,12 +16,20 @@
new /obj/item/device/chameleon(src)
return
+ if("bond")
+ new /obj/item/weapon/gun/projectile/automatic/pistol(src)
+ new /obj/item/weapon/silencer(src)
+ new /obj/item/ammo_box/magazine/m10mm(src)
+ new /obj/item/ammo_box/magazine/m10mm(src)
+ new /obj/item/clothing/under/chameleon(src)
+ new /obj/item/weapon/card/id/syndicate(src)
+
if("screwed")
- new /obj/effect/spawner/newbomb/timer/syndicate(src)
- new /obj/effect/spawner/newbomb/timer/syndicate(src)
+ new /obj/item/device/radio/beacon/syndicate/bomb(src)
+ new /obj/item/weapon/grenade/syndieminibomb(src)
new /obj/item/device/powersink(src)
- new /obj/item/clothing/suit/space/syndicate(src)
- new /obj/item/clothing/head/helmet/space/syndicate(src)
+ new /obj/item/clothing/suit/space/syndicate/black/red(src)
+ new /obj/item/clothing/head/helmet/space/syndicate/black/red(src)
return
if("guns")
@@ -37,11 +46,18 @@
new /obj/item/clothing/shoes/syndigaloshes(src)
return
- if("freedom")
+ if("implant")
var/obj/item/weapon/implanter/O = new /obj/item/weapon/implanter(src)
O.imp = new /obj/item/weapon/implant/freedom(O)
var/obj/item/weapon/implanter/U = new /obj/item/weapon/implanter(src)
U.imp = new /obj/item/weapon/implant/uplink(U)
+ var/obj/item/weapon/implanter/C = new /obj/item/weapon/implanter(src)
+ C.imp = new /obj/item/weapon/implant/emp(C)
+ var/obj/item/weapon/implanter/K = new /obj/item/weapon/implanter(src)
+ K.imp = new /obj/item/weapon/implant/adrenalin(K)
+ var/obj/item/weapon/implanter/S = new /obj/item/weapon/implanter(src)
+ S.imp = new /obj/item/weapon/implant/explosive(S)
+ S.name += " (explosive)"
return
if("hacker")
@@ -52,19 +68,18 @@
if("lordsingulo")
new /obj/item/device/radio/beacon/syndicate(src)
- new /obj/item/clothing/suit/space/syndicate(src)
- new /obj/item/clothing/head/helmet/space/syndicate(src)
+ new /obj/item/clothing/suit/space/syndicate/black/red(src)
+ new /obj/item/clothing/head/helmet/space/syndicate/black/red(src)
new /obj/item/weapon/card/emag(src)
return
- if("smoothoperator")
- new /obj/item/weapon/gun/projectile/automatic/pistol(src)
- new /obj/item/weapon/silencer(src)
- new /obj/item/weapon/soap/syndie(src)
- new /obj/item/weapon/storage/bag/trash(src)
- new /obj/item/bodybag(src)
- new /obj/item/clothing/under/suit_jacket(src)
- new /obj/item/clothing/shoes/laceup(src)
+ if("darklord")
+ new /obj/item/weapon/melee/energy/sword(src)
+ new /obj/item/weapon/melee/energy/sword(src)
+ new /obj/item/weapon/dnainjector/telemut/darkbundle(src)
+ new /obj/item/clothing/head/chaplain_hood(src)
+ new /obj/item/clothing/suit/chaplain_hoodie(src)
+ new /obj/item/weapon/card/id/syndicate(src)
return
/obj/item/weapon/storage/box/syndie_kit
@@ -165,4 +180,14 @@
new /obj/item/ammo_casing/shotgun/fakebeanbag(src)
new /obj/item/ammo_casing/shotgun/fakebeanbag(src)
new /obj/item/ammo_casing/shotgun/fakebeanbag(src)
- new /obj/item/ammo_casing/shotgun/fakebeanbag(src)
\ No newline at end of file
+ new /obj/item/ammo_casing/shotgun/fakebeanbag(src)
+
+/obj/item/weapon/storage/box/syndie_kit/emp
+ name = "boxed EMP kit"
+
+ New()
+ ..()
+ new /obj/item/weapon/grenade/empgrenade(src)
+ new /obj/item/weapon/grenade/empgrenade(src)
+ new /obj/item/weapon/implanter/emp/(src)
+ new /obj/item/device/flashlight/emp/(src)
\ No newline at end of file
diff --git a/code/modules/events/tgevents/vent_clog.dm b/code/modules/events/tgevents/vent_clog.dm
index d12631be36a..e1b908cc844 100755
--- a/code/modules/events/tgevents/vent_clog.dm
+++ b/code/modules/events/tgevents/vent_clog.dm
@@ -24,7 +24,7 @@
var/list/gunk = list("water","carbon","flour","radium","toxin","cleaner","nutriment","condensedcapsaicin","psilocybin","lube",
"plantbgone","banana","anti_toxin","space_drugs","hyperzine","holywater","ethanol","hot_coco","pacid",
"blood","stoxin","fluorine","ryetalyn","mutagen","oxycodone","fuel","cryptobiolin",
- "impedrezene","mindbreaker","nanites","xenomicrobes","lipozine","frostoil","alchdranine","beepskysmash",
+ "impedrezene","mindbreaker","nanites","xenomicrobes","lipozine","frostoil","doctorsdelight","beepskysmash",
"tricordrazine", "amatoxin", "adminordrazine", "neurotoxin", "zombiepowder", "synaptizine")
var/datum/reagents/R = new/datum/reagents(50)
R.my_atom = vent
diff --git a/code/modules/mob/living/simple_animal/hostile/mushroom.dm b/code/modules/mob/living/simple_animal/hostile/mushroom.dm
index 3a0ea6876e8..e2d8bcd485c 100644
--- a/code/modules/mob/living/simple_animal/hostile/mushroom.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mushroom.dm
@@ -153,6 +153,6 @@
for(counter=0, counter<=powerlevel, counter++)
var/obj/item/weapon/reagent_containers/food/snacks/hugemushroomslice/S = new /obj/item/weapon/reagent_containers/food/snacks/hugemushroomslice(src.loc)
S.reagents.add_reagent("mushroomhallucinogen", powerlevel)
- S.reagents.add_reagent("alchdranine", powerlevel)
+ S.reagents.add_reagent("doctorsdelight", powerlevel)
S.reagents.add_reagent("synaptizine", powerlevel)
del(src)
\ No newline at end of file
diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm
index e5b5d921d4f..78d402b6360 100644
--- a/code/modules/reagents/Chemistry-Reagents.dm
+++ b/code/modules/reagents/Chemistry-Reagents.dm
@@ -1717,8 +1717,6 @@ datum
description = "Alchdranine is an extremely strange chemical substance that can be used to treat almost any injury with a high level of effectiveness "
reagent_state = LIQUID
color = "#07a4d1" // rgb: 7, 164, 209
- toxod = OVERDOSE/3
- burnod = OVERDOSE/3
on_mob_life(var/mob/living/M as mob, var/alien)
if(M.stat == 2.0)
@@ -1913,6 +1911,21 @@ datum
..()
return
+ inacusiate
+ name = "Inacusiate"
+ id = "inacusiate"
+ description = "Heals ear damage."
+ reagent_state = LIQUID
+ color = "#6600FF" // rgb: 100, 165, 255
+ toxod = OVERDOSE
+ scannable = 1
+
+ on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ M.ear_damage = 0
+ M.ear_deaf = 0
+ ..()
+ return
peridaxon
name = "Peridaxon"
@@ -1986,9 +1999,9 @@ datum
if(!M) M = holder.my_atom
if(M.bodytemperature < 170)
M.adjustCloneLoss(-1)
- M.adjustOxyLoss(-2)
- M.heal_organ_damage(2,2)
- M.adjustToxLoss(-2)
+ M.adjustOxyLoss(-3)
+ M.heal_organ_damage(3,3)
+ M.adjustToxLoss(-3)
..()
return
@@ -2003,7 +2016,11 @@ datum
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
if(M.bodytemperature < 170)
- M.adjustCloneLoss(-4)
+ M.adjustCloneLoss(-3)
+ M.adjustOxyLoss(-3)
+ M.heal_organ_damage(3,3)
+ M.adjustToxLoss(-3)
+ M.status_flags &= ~DISFIGURED
..()
return
@@ -2272,6 +2289,7 @@ datum
M.drowsyness = 0
M.stuttering = 0
M.confused = 0
+ M.reagents.remove_all_type(/datum/reagent/ethanol, 1*REM, 0, 1)
..()
return
@@ -2309,9 +2327,9 @@ datum
M.sleeping += 1
if(51 to INFINITY)
M.sleeping += 1
- M:toxloss += (data - 50)
+ M.adjustToxLoss((data - 50)*REM)
+ holder.remove_reagent(src.id, 0.5 * REAGENTS_METABOLISM)
..()
-
return
beer2 //copypasta of chloral hydrate, disguised as normal beer for use by emagged brobots
@@ -2515,27 +2533,37 @@ datum
return
else if ( mouth_covered ) // Reduced effects if partially protected
victim << "\red Your [safe_thing] protect you from most of the pepperspray!"
- victim.eye_blurry = max(M.eye_blurry, 15)
- victim.eye_blind = max(M.eye_blind, 5)
- victim.Stun(5)
- victim.Weaken(5)
- //victim.Paralyse(10)
- //victim.drop_item()
+ if(prob(5))
+ victim.emote("scream")
+ victim.eye_blurry = max(M.eye_blurry, 3)
+ victim.eye_blind = max(M.eye_blind, 1)
+ victim.confused = max(M.confused, 3)
+ victim.damageoverlaytemp = 60
+ victim.Weaken(3)
+ victim.drop_item()
return
else if ( eyes_covered ) // Eye cover is better than mouth cover
victim << "\red Your [safe_thing] protects your eyes from the pepperspray!"
- victim.emote("scream")
- victim.eye_blurry = max(M.eye_blurry, 5)
+ victim.eye_blurry = max(M.eye_blurry, 3)
+ victim.damageoverlaytemp = 30
return
else // Oh dear :D
- victim.emote("scream")
+ if(prob(5))
+ victim.emote("scream")
victim << "\red You're sprayed directly in the eyes with pepperspray!"
- victim.eye_blurry = max(M.eye_blurry, 25)
- victim.eye_blind = max(M.eye_blind, 10)
- victim.Stun(5)
+ victim.eye_blurry = max(M.eye_blurry, 5)
+ victim.eye_blind = max(M.eye_blind, 2)
+ victim.confused = max(M.confused, 6)
+ victim.damageoverlaytemp = 75
victim.Weaken(5)
- //victim.Paralyse(10)
- //victim.drop_item()
+ victim.drop_item()
+
+ on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ if(prob(5))
+ M.visible_message("[M] [pick("dry heaves!","coughs!","splutters!")]")
+ ..()
+ return
frostoil
name = "Frost Oil"
@@ -2917,7 +2945,7 @@ datum
on_mob_life(var/mob/living/M as mob)
..()
- if(M.getToxLoss() && prob(20)) M.adjustToxLoss(-1*REM)
+ if(M.getOxyLoss() && prob(30)) M.adjustOxyLoss(-1*REM)
return
tomatojuice
@@ -2967,15 +2995,16 @@ datum
id = "doctorsdelight"
description = "A gulp a day keeps the MediBot away. That's probably for the best."
reagent_state = LIQUID
- nutriment_factor = 1 * FOOD_METABOLISM
- color = "#664300" // rgb: 102, 67, 0
+ color = "#FF8CFF" // rgb: 255, 140, 255
on_mob_life(var/mob/living/M as mob)
- M:nutrition += nutriment_factor
- holder.remove_reagent(src.id, FOOD_METABOLISM)
if(!M) M = holder.my_atom
- if(M:getToxLoss() && prob(80)) M:adjustToxLoss(-1)
-
+ if(M.getOxyLoss() && prob(80)) M.adjustOxyLoss(-2)
+ if(M.getBruteLoss() && prob(80)) M.heal_organ_damage(2,0)
+ if(M.getFireLoss() && prob(80)) M.heal_organ_damage(0,2)
+ if(M.getToxLoss() && prob(80)) M.adjustToxLoss(-2)
+ if(M.dizziness !=0) M.dizziness = max(0,M.dizziness-15)
+ if(M.confused !=0) M.confused = max(0,M.confused - 5)
..()
return
@@ -3014,11 +3043,31 @@ datum
description = "The raw essence of a banana."
color = "#863333" // rgb: 175, 175, 0
+ on_mob_life(var/mob/living/M as mob)
+ M.nutrition += nutriment_factor
+ if(istype(M, /mob/living/carbon/human) && M.job in list("Clown"))
+ if(!M) M = holder.my_atom
+ M.heal_organ_damage(1,1)
+ M.nutrition += nutriment_factor
+ ..()
+ return
+ ..()
+
nothing
name = "Nothing"
id = "nothing"
description = "Absolutely nothing."
+ on_mob_life(var/mob/living/M as mob)
+ M.nutrition += nutriment_factor
+ if(istype(M, /mob/living/carbon/human) && M.job in list("Mime"))
+ if(!M) M = holder.my_atom
+ M.heal_organ_damage(1,1)
+ M.nutrition += nutriment_factor
+ ..()
+ return
+ ..()
+
potato_juice
name = "Potato Juice"
id = "potato"
@@ -3938,6 +3987,16 @@ datum
nutriment_factor = 1 * FOOD_METABOLISM
color = "#664300" // rgb: 102, 67, 0
+ on_mob_life(var/mob/living/M as mob)
+ M.nutrition += nutriment_factor
+ if(istype(M, /mob/living/carbon/human) && M.job in list("Clown"))
+ if(!M) M = holder.my_atom
+ M.heal_organ_damage(1,1)
+ M.nutrition += nutriment_factor
+ ..()
+ return
+ ..()
+
silencer
name = "Silencer"
id = "silencer"
@@ -3945,6 +4004,16 @@ datum
nutriment_factor = 1 * FOOD_METABOLISM
color = "#664300" // rgb: 102, 67, 0
+ on_mob_life(var/mob/living/M as mob)
+ M.nutrition += nutriment_factor
+ if(istype(M, /mob/living/carbon/human) && M.job in list("Mime"))
+ if(!M) M = holder.my_atom
+ M.heal_organ_damage(1,1)
+ M.nutrition += nutriment_factor
+ ..()
+ return
+ ..()
+
changelingsting
name = "Changeling Sting"
id = "changelingsting"
diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm
index a5e0dd5c9dd..42578ff4704 100644
--- a/code/modules/reagents/Chemistry-Recipes.dm
+++ b/code/modules/reagents/Chemistry-Recipes.dm
@@ -319,6 +319,13 @@ datum
required_reagents = list("carbon" = 1, "hydrogen" = 1, "anti_toxin" = 1)
result_amount = 2
+ inacusiate
+ name = "inacusiate"
+ id = "inacusiate"
+ result = "inacusiate"
+ required_reagents = list("water" = 1, "carbon" = 1, "anti_toxin" = 1)
+ result_amount = 2
+
ethylredoxrazine
name = "Ethylredoxrazine"
id = "ethylredoxrazine"
@@ -1769,7 +1776,7 @@ datum
name = "The Doctor's Delight"
id = "doctordelight"
result = "doctorsdelight"
- required_reagents = list("limejuice" = 1, "tomatojuice" = 1, "orangejuice" = 1, "cream" = 1)
+ required_reagents = list("limejuice" = 1, "tomatojuice" = 1, "orangejuice" = 1, "cream" = 1, "tricordrazine" = 1)
result_amount = 5
irish_cream
diff --git a/code/modules/reagents/reagent_containers/borghydro.dm b/code/modules/reagents/reagent_containers/borghydro.dm
index 8ce9b636b01..31d68ef7b15 100644
--- a/code/modules/reagents/reagent_containers/borghydro.dm
+++ b/code/modules/reagents/reagent_containers/borghydro.dm
@@ -15,14 +15,14 @@
var/recharge_time = 5 //Time it takes for shots to recharge (in seconds)
var/list/datum/reagents/reagent_list = list()
- var/list/reagent_ids = list("tricordrazine", "inaprovaline", "spaceacillin")
+ var/list/reagent_ids = list("doctorsdelight", "inaprovaline", "spaceacillin")
//var/list/reagent_ids = list("dexalin", "kelotane", "bicaridine", "anti_toxin", "inaprovaline", "spaceacillin")
/obj/item/weapon/reagent_containers/borghypo/surgeon
reagent_ids = list("bicaridine", "inaprovaline", "dexalin")
/obj/item/weapon/reagent_containers/borghypo/crisis
- reagent_ids = list("tricordrazine", "inaprovaline", "tramadol")
+ reagent_ids = list("doctorsdelight", "inaprovaline", "tramadol")
/obj/item/weapon/reagent_containers/borghypo/New()
..()
diff --git a/code/modules/reagents/reagent_containers/food/snacks.dm b/code/modules/reagents/reagent_containers/food/snacks.dm
index 8aef347ed27..4709ada53d8 100644
--- a/code/modules/reagents/reagent_containers/food/snacks.dm
+++ b/code/modules/reagents/reagent_containers/food/snacks.dm
@@ -1276,7 +1276,7 @@
New()
..()
reagents.add_reagent("nutriment", 4)
- reagents.add_reagent("alchdranine", 5)
+ reagents.add_reagent("doctorsdelight", 5)
bitesize = 3
/obj/item/weapon/reagent_containers/food/snacks/loadedbakedpotato
@@ -2205,7 +2205,7 @@
New()
..()
reagents.add_reagent("nutriment", 8)
- reagents.add_reagent("alchdranine", 5)
+ reagents.add_reagent("doctorsdelight", 5)
bitesize = 3
/obj/item/weapon/reagent_containers/food/snacks/appletart
diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm
index f6d26605818..b2147e6a047 100644
--- a/code/modules/reagents/reagent_containers/hypospray.dm
+++ b/code/modules/reagents/reagent_containers/hypospray.dm
@@ -20,7 +20,7 @@
/obj/item/weapon/reagent_containers/hypospray/New() //comment this to make hypos start off empty
..()
- reagents.add_reagent("tricordrazine", 30)
+ reagents.add_reagent("doctorsdelight", 30)
return
/obj/item/weapon/reagent_containers/hypospray/attack(mob/M as mob, mob/user as mob)
@@ -64,7 +64,7 @@
/obj/item/weapon/reagent_containers/hypospray/combat/New()
..()
- reagents.remove_reagent("tricordrazine", 30)
+ reagents.remove_reagent("doctorsdelight", 30)
reagents.add_reagent("synaptizine", 30)
@@ -76,10 +76,11 @@
amount_per_transfer_from_this = 5
possible_transfer_amounts = list(5)
volume = 5
+ var/emagged = 0
/obj/item/weapon/reagent_containers/hypospray/autoinjector/New()
..()
- reagents.remove_reagent("tricordrazine", 30)
+ reagents.remove_reagent("doctorsdelight", 30)
reagents.add_reagent("tramadol", 4)
reagents.add_reagent("hyperzine", 1)
update_icon()
@@ -87,8 +88,9 @@
/obj/item/weapon/reagent_containers/hypospray/autoinjector/attack(mob/M as mob, mob/user as mob)
..()
- if(reagents.total_volume <= 0) //Prevents autoinjectors to be refilled.
- flags &= ~OPENCONTAINER
+ if(!emagged)
+ if(reagents.total_volume <= 0) //Prevents autoinjectors to be refilled.
+ flags &= ~OPENCONTAINER
update_icon()
return
@@ -105,6 +107,13 @@
else
usr << "\blue It is spent."
+/obj/item/weapon/reagent_containers/hypospray/autoinjector/attackby(var/obj/item/weapon/D as obj, var/mob/user as mob)
+ if(istype(D, /obj/item/weapon/card/emag) && !emagged)
+ emagged = 1
+ user << "You bypass the electronic child-safety lock on the reagent storage."
+ else
+ ..()
+ return
/obj/item/weapon/reagent_containers/hypospray/hyperzine
name = "emergency stimulant autoinjector"
diff --git a/code/modules/research/research.dm b/code/modules/research/research.dm
index b09f6f154f1..46fec8bde4c 100644
--- a/code/modules/research/research.dm
+++ b/code/modules/research/research.dm
@@ -207,7 +207,7 @@ datum/tech/bluespace
name = "'Blue-space' Research"
desc = "Research into the sub-reality known as 'blue-space'"
id = "bluespace"
- max_level=4
+ max_level=6
datum/tech/biotech
name = "Biological Technology"
diff --git a/icons/obj/cigarettes.dmi b/icons/obj/cigarettes.dmi
index a2b7d416055..406085c01e7 100644
Binary files a/icons/obj/cigarettes.dmi and b/icons/obj/cigarettes.dmi differ