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