diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm index cfd394f6202..104b29310c4 100644 --- a/code/datums/uplink_item.dm +++ b/code/datums/uplink_item.dm @@ -144,6 +144,23 @@ var/list/uplink_items = list() cost = 2 job = list("Janitor") +//Medical + + +/datum/uplink_item/jobspecific/rad_laser + name = "Radiation Laser" + desc = "A radiation laser concealed inside of a Health Analyser, After a moderate delay, causes temporary collapse and radiation. Has adjustable controls, but will not function as a regular health analyzer, only appears like one. May not function correctly on radiation resistent humanoids!" + item = /obj/item/device/rad_laser + cost = 3 + job = list( + "Chief Medical Officer", + "Medical Doctor", + //"Geneticist", + //"Psychiatrist", + //"Chemist", + //"Paramedic", + "Virologist" + ) //Assistant diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm index 239d857c6df..77dafd65054 100644 --- a/code/game/machinery/Sleeper.dm +++ b/code/game/machinery/Sleeper.dm @@ -320,13 +320,21 @@ proc/inject_chemical(mob/living/user as mob, chemical, amount) - if(src.occupant && src.occupant.reagents) - if(src.occupant.reagents.get_reagent_amount(chemical) + amount <= 40) - src.occupant.reagents.add_reagent(chemical, amount) - user << "Occupant now has [src.occupant.reagents.get_reagent_amount(chemical)] units of [available_chemicals[chemical]] in his/her bloodstream." + if(src.occupant) + if(src.occupant.reagents) + if(src.occupant.reagents.get_reagent_amount(chemical) + amount <= 40) + src.occupant.reagents.add_reagent(chemical, amount) + user << "Occupant now has [src.occupant.reagents.get_reagent_amount(chemical)] units of [available_chemicals[chemical]] in his/her bloodstream." + return + else + user << "Medical overdose safeties restrict you injecting any more of this chemical." + return + else + user << "The patient rejects the chemicals!" return - user << "There's no occupant in the sleeper or the subject rejects the chemicals!" - return + else + user << "There's no occupant in the sleeper!" + return proc/check(mob/living/user as mob) diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index f29d285bd45..a33f0e29398 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -45,7 +45,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/ammo_casing/shotgun(), \ + 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(), \ @@ -63,6 +63,7 @@ var/global/list/autolathe_recipes_hidden = list( \ new /obj/item/device/radio/electropack(), \ new /obj/item/weapon/weldingtool/largetank(), \ new /obj/item/weapon/handcuffs(), \ + new /obj/item/weapon/hatchet(), \ /*new /obj/item/ammo_casing/shotgun/dart(), \ new /obj/item/weapon/shield/riot(), */ \ ) diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index 60d917d275f..8666269d77a 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -862,7 +862,7 @@ /obj/item/clothing/under/sexyclown = 1,/obj/item/clothing/mask/gas/sexymime = 1,/obj/item/clothing/under/sexymime = 1,/obj/item/clothing/suit/apron/overalls = 1, /obj/item/clothing/head/rabbitears =1) //Pretty much everything that had a chance to spawn. contraband = list(/obj/item/clothing/suit/cardborg = 1,/obj/item/clothing/head/cardborg = 1,/obj/item/clothing/suit/judgerobe = 1,/obj/item/clothing/head/powdered_wig = 1,/obj/item/weapon/gun/magic/wand = 1) - premium = list(/obj/item/clothing/suit/hgpirate = 1, /obj/item/clothing/head/hgpiratecap = 1, /obj/item/clothing/head/helmet/roman = 1, /obj/item/clothing/head/helmet/roman/legionaire = 1, /obj/item/clothing/under/roman = 1, /obj/item/clothing/shoes/roman = 1, /obj/item/weapon/shield/riot/roman = 1) + premium = list(/obj/item/clothing/suit/hgpirate = 1, /obj/item/clothing/head/hgpiratecap = 1, /obj/item/clothing/head/helmet/roman = 1, /obj/item/clothing/head/helmet/roman/legionaire = 1, /obj/item/clothing/under/roman = 1, /obj/item/clothing/shoes/roman = 1) refill_canister = /obj/item/weapon/vending_refill/autodrobe /obj/machinery/vending/dinnerware name = "Dinnerware" diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 37183aa7ff7..a4b8ea018dc 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -1,6 +1,7 @@ /obj/item name = "item" icon = 'icons/obj/items.dmi' + var/discrete = 0 // used in item_attack.dm to make an item not show an attack message to viewers var/icon/blood_overlay = null //this saves our blood splatter overlay, which will be processed not to go over the edges of the sprite var/blood_overlay_color = null var/abstract = 0 diff --git a/code/game/objects/items/devices/traitordevices.dm b/code/game/objects/items/devices/traitordevices.dm index 95bab377c70..d9b0a32728b 100644 --- a/code/game/objects/items/devices/traitordevices.dm +++ b/code/game/objects/items/devices/traitordevices.dm @@ -60,5 +60,92 @@ effective or pretty fucking useless. icon_state = "battererburnt" +/* + The radioactive microlaser, a device disguised as a health analyzer used to irradiate people. + The strength of the radiation is determined by the 'intensity' setting, while the delay between + the scan and the irradiation kicking in is determined by the wavelength. + Each scan will cause the microlaser to have a brief cooldown period. Higher intensity will increase + the cooldown, while higher wavelength will decrease it. + + Wavelength is also slightly increased by the intensity as well. +*/ + +/obj/item/device/rad_laser + name = "Health Analyzer" + icon_state = "health" + item_state = "analyzer" + desc = "A hand-held body scanner able to distinguish vital signs of the subject. A strange microlaser is hooked on to the scanning end." + flags = FPRINT | TABLEPASS | CONDUCT + slot_flags = SLOT_BELT + discrete = 1 // Makes the item not give an attack log message for viewers. + throwforce = 3 + w_class = 1.0 + throw_speed = 5 + throw_range = 10 + m_amt = 200 + origin_tech = "magnets=3;biotech=5;syndicate=3" + var/intensity = 5 // how much damage the radiation does + var/wavelength = 10 // time it takes for the radiation to kick in, in seconds + var/used = 0 // is it cooling down? + +/obj/item/device/rad_laser/attack(mob/living/M as mob, mob/living/user as mob) + if(!used) + ..() + user.visible_message(" [user] has analyzed [M]'s vitals."," You have analyzed [M]'s vitals.") + var/cooldown = round(max(100,(((intensity*8)-(wavelength/2))+(intensity*2))*10)) + used = 1 + icon_state = "health1" + handle_cooldown(cooldown) // splits off to handle the cooldown while handling wavelength + spawn((wavelength+(intensity*4))*10) + if(M) + if(intensity >= 5) + M.apply_effect(round(intensity/1.5), PARALYZE) + M.apply_effect(intensity*10, IRRADIATE) + else + user << "The radioactive microlaser is still recharging." + +/obj/item/device/rad_laser/proc/handle_cooldown(var/cooldown) + spawn(cooldown) + used = 0 + icon_state = "health" + +/obj/item/device/rad_laser/attack_self(mob/user as mob) + ..() + interact(user) + +/obj/item/device/rad_laser/interact(mob/user as mob) + user.set_machine(src) + + var/cooldown = round(max(10,((intensity*8)-(wavelength/2))+(intensity*2))) + var/dat = {" + Radiation Intensity: -- [intensity] ++
+ Radiation Wavelength: -- [(wavelength+(intensity*4))] ++
+ Laser Cooldown: [cooldown] Seconds
+ "} + + var/datum/browser/popup = new(user, "radlaser", "Radioactive Microlaser Interface", 400, 240) + popup.set_content(dat) + popup.open() + +/obj/item/device/rad_laser/Topic(href, href_list) + if(!in_range(src, usr) || issilicon(usr) || !usr.canmove || usr.restrained()) + return 1 + + usr.set_machine(src) + + if(href_list["radint"]) + var/amount = text2num(href_list["radint"]) + amount += intensity + intensity = max(1,(min(10,amount))) + + else if(href_list["radwav"]) + var/amount = text2num(href_list["radwav"]) + amount += wavelength + wavelength = max(1,(min(120,amount))) + + //updateUsrDialog() + interact(usr) + add_fingerprint(usr) + return \ No newline at end of file diff --git a/code/game/objects/items/weapons/handcuffs.dm b/code/game/objects/items/weapons/handcuffs.dm index 6cb81678060..07b506d4d50 100644 --- a/code/game/objects/items/weapons/handcuffs.dm +++ b/code/game/objects/items/weapons/handcuffs.dm @@ -14,64 +14,43 @@ origin_tech = "materials=1" var/dispenser = 0 var/breakouttime = 1200 //Deciseconds = 120s = 2 minutes - var/cuff_sound = 'sound/weapons/handcuffs.ogg' - -/obj/item/weapon/handcuffs/attack(mob/living/carbon/C as mob, mob/user as mob) - if (!istype(user, /mob/living/carbon/human)) - user << "\red You don't have the dexterity to do this!" - return - if ((M_CLUMSY in usr.mutations) && prob(50)) - user << "\red Uh ... how do those things work?!" - place_handcuffs(user, user) - return - if(!C.handcuffed) - if (C == user) - place_handcuffs(user, user) +/obj/item/weapon/handcuffs/attack(mob/living/carbon/C, mob/user) + if(M_CLUMSY in user.mutations && prob(50)) + user << "Uh... how do those things work?!" + if(!C.handcuffed) + user.drop_item() + loc = C + C.handcuffed = src + C.update_inv_handcuffed() return - - //check for an aggressive grab - for (var/obj/item/weapon/grab/G in C.grabbed_by) - if (G.loc == user && G.state >= GRAB_AGGRESSIVE) - place_handcuffs(C, user) + + var/cable = 0 + if(istype(src, /obj/item/weapon/handcuffs/cable)) + cable = 1 + + if(!C.handcuffed) + C.visible_message("[user] is trying to put handcuffs on [C]!", \ + "[user] is trying to put handcuffs on [C]!") + + if(cable) + playsound(loc, 'sound/weapons/cablecuff.ogg', 30, 1, -2) + else + playsound(loc, 'sound/weapons/handcuffs.ogg', 30, 1, -2) + + if(do_mob(user, C, 30)) + if(C.handcuffed) return - user << "\red You need to have a firm grip on [C] before you can put \the [src] on!" + user.drop_item() + loc = C + C.handcuffed = src + C.update_inv_handcuffed() + if(cable) + feedback_add_details("handcuffs","C") + else + feedback_add_details("handcuffs","H") -/obj/item/weapon/handcuffs/proc/place_handcuffs(var/mob/living/carbon/target, var/mob/user) - playsound(src.loc, cuff_sound, 30, 1, -2) - - if (ishuman(target)) - var/mob/living/carbon/human/H = target - H.attack_log += text("\[[time_stamp()]\] Has been handcuffed (attempt) by [user.name] ([user.ckey])") - user.attack_log += text("\[[time_stamp()]\] Attempted to handcuff [H.name] ([H.ckey])") - msg_admin_attack("[key_name(user)] attempted to handcuff [key_name(H)]") - - var/obj/effect/equip_e/human/O = new /obj/effect/equip_e/human( ) - O.source = user - O.target = H - O.item = user.get_active_hand() - O.s_loc = user.loc - O.t_loc = H.loc - O.place = "handcuff" - H.requests += O - spawn( 0 ) - feedback_add_details("handcuffs","H") - O.process() - return - - if (ismonkey(target)) - var/mob/living/carbon/monkey/M = target - var/obj/effect/equip_e/monkey/O = new /obj/effect/equip_e/monkey( ) - O.source = user - O.target = M - O.item = user.get_active_hand() - O.s_loc = user.loc - O.t_loc = M.loc - O.place = "handcuff" - M.requests += O - spawn( 0 ) - O.process() - return + add_logs(user, C, "handcuffed") var/last_chew = 0 /mob/living/carbon/human/RestrainedClickOn(var/atom/A) @@ -105,7 +84,6 @@ var/last_chew = 0 desc = "Looks like some cables tied together. Could be used to tie something up." icon_state = "cuff_red" breakouttime = 300 //Deciseconds = 30s - cuff_sound = 'sound/weapons/cablecuff.ogg' /obj/item/weapon/handcuffs/cable/red icon_state = "cuff_red" @@ -150,17 +128,3 @@ var/last_chew = 0 user << "You wrap the cable restraint around the top of the rod." del(src) -/obj/item/weapon/handcuffs/cyborg - dispenser = 1 - -/obj/item/weapon/handcuffs/cyborg/attack(mob/living/carbon/C as mob, mob/user as mob) - if(!C.handcuffed) - var/turf/p_loc = user.loc - var/turf/p_loc_m = C.loc - playsound(src.loc, cuff_sound, 30, 1, -2) - user.visible_message("\red [user] is trying to put handcuffs on [C]!") - spawn(30) - if(!C) return - if(p_loc == user.loc && p_loc_m == C.loc) - C.handcuffed = new /obj/item/weapon/handcuffs(C) - C.update_inv_handcuffed() diff --git a/code/game/objects/items/weapons/implants/implantcase.dm b/code/game/objects/items/weapons/implants/implantcase.dm index ef323a8e3a2..f1db8bf0097 100644 --- a/code/game/objects/items/weapons/implants/implantcase.dm +++ b/code/game/objects/items/weapons/implants/implantcase.dm @@ -138,3 +138,14 @@ src.imp = new /obj/item/weapon/implant/death_alarm( src ) ..() return + +/obj/item/weapon/implantcase/freedom + name = "Glass Case- 'Freedom'" + desc = "A case containing a freedom implant." + icon = 'icons/obj/items.dmi' + icon_state = "implantcase-b" + + New() + src.imp = new /obj/item/weapon/implant/freedom( src ) + ..() + return \ No newline at end of file diff --git a/code/game/objects/items/weapons/storage/backpack.dm b/code/game/objects/items/weapons/storage/backpack.dm index d6fef14906b..02ef0ef86c9 100644 --- a/code/game/objects/items/weapons/storage/backpack.dm +++ b/code/game/objects/items/weapons/storage/backpack.dm @@ -38,11 +38,6 @@ if(crit_fail) user << "\red The Bluespace generator isn't working." return - if(istype(W, /obj/item/weapon/storage/backpack/holding) && !W.crit_fail) - user << "\red The Bluespace interfaces of the two devices conflict and malfunction." - del(W) - return - //BoH+BoH=Singularity, commented out. if(istype(W, /obj/item/weapon/storage/backpack/holding) && !W.crit_fail) investigate_log("has become a singularity. Caused by [user.key]","singulo") user << "\red The Bluespace interfaces of the two devices catastrophically malfunction!" diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm index ad71f78e41d..77cde4e91f1 100644 --- a/code/game/objects/items/weapons/storage/boxes.dm +++ b/code/game/objects/items/weapons/storage/boxes.dm @@ -167,6 +167,21 @@ new /obj/item/ammo_casing/shotgun/birdshot(src) +/obj/item/weapon/storage/box/gauge + name = "box of 12 gauge slugs" + desc = "It has a picture of a gun and several warning symbols on the front." + m_amt = 50000 + + New() + ..() + new /obj/item/ammo_casing/shotgun(src) + new /obj/item/ammo_casing/shotgun(src) + new /obj/item/ammo_casing/shotgun(src) + new /obj/item/ammo_casing/shotgun(src) + new /obj/item/ammo_casing/shotgun(src) + new /obj/item/ammo_casing/shotgun(src) + new /obj/item/ammo_casing/shotgun(src) + /obj/item/weapon/storage/box/flashbangs name = "box of flashbangs (WARNING)" diff --git a/code/modules/hydroponics/hydro_tools.dm b/code/modules/hydroponics/hydro_tools.dm index 1d977b55310..9764b3a9041 100644 --- a/code/modules/hydroponics/hydro_tools.dm +++ b/code/modules/hydroponics/hydro_tools.dm @@ -319,6 +319,7 @@ throw_range = 4 sharp = 1 edge = 1 + m_amt = 10000 origin_tech = "materials=2;combat=1" attack_verb = list("chopped", "torn", "cut") diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index e08a8dde3e5..03ad70ce3eb 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -239,11 +239,11 @@ emp_act emag.uses-- affecting.sabotaged = 1 return 1 - - if(I.attack_verb.len) - visible_message("\red [src] has been [pick(I.attack_verb)] in the [hit_area] with [I.name] by [user]!") - else - visible_message("\red [src] has been attacked in the [hit_area] with [I.name] by [user]!") + if(! I.discrete) + if(I.attack_verb.len) + visible_message("\red [src] has been [pick(I.attack_verb)] in the [hit_area] with [I.name] by [user]!") + else + visible_message("\red [src] has been attacked in the [hit_area] with [I.name] by [user]!") var/armor = run_armor_check(affecting, "melee", "Your armor has protected your [hit_area].", "Your armor has softened hit to your [hit_area].") var/weapon_sharp = is_sharp(I) diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm index a02afbad524..fafed5a85cd 100644 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ b/code/modules/mob/living/carbon/human/inventory.dm @@ -692,16 +692,6 @@ It can still be worn/put on as normal. slot_to_process = slot_handcuffed if (target.handcuffed) strip_item = target.handcuffed - else if (source != target && ishuman(source)) - //check that we are still grabbing them - var/grabbing = 0 - for (var/obj/item/weapon/grab/G in target.grabbed_by) - if (G.loc == source && G.state >= GRAB_AGGRESSIVE) - grabbing = 1 - if (!grabbing) - slot_to_process = null - source << "\red Your grasp was broken before you could restrain [target]!" - if("legcuff") slot_to_process = slot_legcuffed if (target.legcuffed) diff --git a/code/modules/mob/spirit/viewpoint.dm b/code/modules/mob/spirit/viewpoint.dm index 5e063561297..b4bd911ea1c 100644 --- a/code/modules/mob/spirit/viewpoint.dm +++ b/code/modules/mob/spirit/viewpoint.dm @@ -13,7 +13,7 @@ var/obj/cult_viewpoint/list/cult_viewpoints = list() var/urge = "" var/favor = FAVOR_INDIFFERENT var/cult_name = null - + /obj/cult_viewpoint/New(var/mob/target) owner = target @@ -53,7 +53,7 @@ var/obj/cult_viewpoint/list/cult_viewpoints = list() set desc = "Reach out for your gods presence." set name = "Reach Out" set src in usr - + for(var/mob/spirit/mask/currentMask in spirits) if (currentMask.is_active()) owner << "\red \b You feel the reassuring presence of your god." @@ -61,8 +61,8 @@ var/obj/cult_viewpoint/list/cult_viewpoints = list() return owner << "\b You feel a chilling absence." handle_missing_mask() - - + + /obj/cult_viewpoint/verb/check_favor() set category = "Cult" set desc = "Check your favor with your god." @@ -82,46 +82,46 @@ var/obj/cult_viewpoint/list/cult_viewpoints = list() set desc = "Pray to your god" set name = "Pray to Nar'Sie" set src in usr - + var/input = stripped_input(usr, "Please choose a message to say to your god.", "Pray to Nar'Sie", "") if(!input) return - + cult_log("[key_name(usr,0)](Pray):[input]") owner << "You pray to Nar'Sie: [input]" - + for(var/mob/spirit/spirit in spirits) spirit << "[get_display_name()] prays : [input]" - + // PROCS /obj/cult_viewpoint/proc/set_favor(var/newFavor) favor = newFavor check_favor() - + /obj/cult_viewpoint/proc/set_urge(var/newUrge) if (!newUrge) src.urge = null src.urge = copytext(newUrge, 1, MAX_MESSAGE_LEN) check_urge() - - + + /obj/cult_viewpoint/proc/can_use() if (owner.stat != DEAD) return TRUE return FALSE - + /obj/cult_viewpoint/proc/can_see() return hear(view_range, get_turf(owner)) - - + + /obj/cult_viewpoint/proc/get_cult_name() if (cult_name) return cult_name return "An Unknown Servent" - + /obj/cult_viewpoint/proc/set_cult_name(var/newName) if (!owner) return FALSE @@ -131,47 +131,51 @@ var/obj/cult_viewpoint/list/cult_viewpoints = list() else cult_name = null owner << "\red \b Your god has taken your secret name." - - + + /obj/cult_viewpoint/proc/get_display_name() if (!owner) return if (cult_name) return cult_name return owner.name - + /obj/cult_viewpoint/proc/become_mask() set category = "Cult" set name = "Become Mask" set desc = "Sacrifice your life and become a Mask of Nar'sie." set src in usr - + cult_log("[key_name(usr,0)] has tried to become a Mask of Nar'sie.") - + if (!active_mask()) - var/transformation_type = alert(owner.client, "You are about to become a Mask. Do you want it to be subtle or violent?", "Mask", "Subtle", "Violent") - if(!active_mask()) - cult_log("[key_name(usr,0)] has become a Mask of Nar'sie.") - if (transformation_type=="Subtle") - log_admin("[key_name_admin(owner)] has subtly become a Mask of Nar'sie") - owner.make_into_mask(0,0) - else - log_admin("[key_name_admin(owner)] has violently become a Mask of Nar'sie") - owner.make_into_mask(1,1) + var/confirm = alert(owner.client, "You are about to become a Mask of Nar'sie. This will destroy your body, and you will only be able to guide the other cultists through communication. Are you sure?", "Confirm Your Sacrifice", "Yes", "No") + if(confirm == "Yes") + var/transformation_type = alert(owner.client, "You are about to become a Mask. Do you want it to be subtle or violent?", "Mask", "Subtle", "Violent") + if(!active_mask()) + cult_log("[key_name(usr,0)] has become a Mask of Nar'sie.") + if (transformation_type=="Subtle") + log_admin("[key_name_admin(owner)] has subtly become a Mask of Nar'sie") + owner.make_into_mask(0,0) + else + log_admin("[key_name_admin(owner)] has violently become a Mask of Nar'sie") + owner.make_into_mask(1,1) + else + return else owner << "\b You cannot become a mask of Nar'Sie because a Mask already exists." mask_has_been_found() return - - + + /obj/cult_viewpoint/proc/active_mask() for(var/mob/spirit/mask/currentMask in spirits) if (currentMask.is_active()) return TRUE return FALSE - - + + /obj/cult_viewpoint/proc/handle_missing_mask() if (active_mask()) mask_has_been_found() @@ -183,19 +187,19 @@ var/obj/cult_viewpoint/list/cult_viewpoints = list() for(var/obj/cult_viewpoint/viewpoint in cult_viewpoints) if (viewpoint.verbs.Find(/obj/cult_viewpoint/proc/become_mask)) viewpoint.verbs-=/obj/cult_viewpoint/proc/become_mask - + /obj/cult_viewpoint/proc/mask_is_missing() for(var/obj/cult_viewpoint/viewpoint in cult_viewpoints) if (!viewpoint.verbs.Find(/obj/cult_viewpoint/proc/become_mask)) viewpoint.verbs+=/obj/cult_viewpoint/proc/become_mask - - + + /proc/getCultViewpoint(var/mob/currentMob) for(var/obj/cult_viewpoint/currentView in currentMob) return currentView return FALSE - + #undef FAVOR_PLEASED #undef FAVOR_INDIFFERENT diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm index 5e51469c00c..21011853c10 100644 --- a/code/modules/paperwork/pen.dm +++ b/code/modules/paperwork/pen.dm @@ -87,21 +87,11 @@ /* * Parapens */ - /obj/item/weapon/pen/paralysis +/obj/item/weapon/pen/paralysis flags = FPRINT | TABLEPASS | OPENCONTAINER origin_tech = "materials=2;syndicate=5" -/obj/item/weapon/pen/paralysis/attack(mob/M as mob, mob/user as mob) - if(!ismob(M)) - return - ..() - msg_admin_attack("[user.name] ([user.ckey]) Used the [name] to stab [M.name] ([M.ckey]) (JMP)") - if(reagents.total_volume) - if(M.reagents) reagents.trans_to(M, 50) - return - - /obj/item/weapon/pen/paralysis/New() var/datum/reagents/R = new/datum/reagents(50) reagents = R @@ -111,16 +101,12 @@ ..() return -/obj/item/weapon/pen/paralysis/attackby(var/obj/item/O as obj, var/mob/user as mob) //courtesy of FalseIncarnate! - if (O.is_open_container()) - //Check if container is of the "glass" subtype (includes buckets, beakers, vials) - if(istype(O, /obj/item/weapon/reagent_containers/glass)) - var/obj/item/weapon/reagent_containers/glass/C = O - //Check if container is empty - if(!C.reagents.total_volume) - user << "\red [C] is empty." - return - //Container not empty, transfer contents to tray - var/trans = C.reagents.trans_to(src, C.amount_per_transfer_from_this) - user << "\blue You transfer [trans] units of the solution to [src]." \ No newline at end of file +/obj/item/weapon/pen/paralysis/attack(mob/M as mob, mob/user as mob) + if(!ismob(M)) + return + ..() + msg_admin_attack("[user.name] ([user.ckey]) Used the [name] to stab [M.name] ([M.ckey]) (JMP)") + if(reagents.total_volume) + if(M.reagents) reagents.trans_to(M, 50) //used to be 150 + return \ No newline at end of file diff --git a/code/modules/projectiles/guns/projectile/crossbow.dm b/code/modules/projectiles/guns/projectile/crossbow.dm index 2c8a36ddb5a..17fd65cacee 100644 --- a/code/modules/projectiles/guns/projectile/crossbow.dm +++ b/code/modules/projectiles/guns/projectile/crossbow.dm @@ -206,8 +206,19 @@ icon_state = "crossbow-nocked" return - else - ..() + else if (istype(W,/obj/item/weapon/arrow)) + user.visible_message("\The [src] only takes baguettes.") + return + else if(istype(W,/obj/item/stack/rods)) + user.visible_message("\The [src] only takes baguettes.") + return + + if(istype(W, /obj/item/weapon/cell)) + user.visible_message("The [src] is too simple be adapted with a cell.") + return + + else + ..() /obj/item/weapon/gun/launcher/crossbow/french/increase_tension(var/mob/user as mob) diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index ac73ab9ae59..d06f418c088 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -1442,6 +1442,47 @@ datum/design/noreactbeaker reliability_base = 76 build_path = "/obj/item/weapon/reagent_containers/glass/beaker/noreact" category = "Misc" + +datum/design/implanter + name = "Implanter" + desc = "A basic implanter for injecting implants" + id = "implanter" + req_tech = list("materials" = 2, "biotech" = 3) + build_type = PROTOLATHE + materials = list("$metal" = 50, "$glass" = 50) + build_path = "/obj/item/weapon/implanter" + + +datum/design/implant_free + name = "Freedom Implant" + desc = "Use this to escape from those evil Red Shirts." + id = "implant_free" + req_tech = list("syndicate" = 2, "biotech" = 3) + build_type = PROTOLATHE + materials = list("$metal" = 50, "$glass" = 50) + build_path = "/obj/item/weapon/implantcase/freedom" + +datum/design/implant_chem + name = "Chemical Implant" + desc = "Injects things." + id = "implant_chem" + req_tech = list("materials" = 2, "biotech" = 3) + build_type = PROTOLATHE + materials = list("$metal" = 50, "$glass" = 50) + build_path = "/obj/item/weapon/implantcase/chem" + locked = 1 + +datum/design/implant_loyal + name = "Loyalty Implant" + desc = "Makes you loyal or such." + id = "implant_loyal" + req_tech = list("materials" = 2, "biotech" = 3) + build_type = PROTOLATHE + materials = list("$metal" = 7000, "$glass" = 7000) + build_path = "/obj/item/weapon/implantcase/loyalty" + locked = 1 + + ///////////////////////////////////////// /////////////////Weapons///////////////// ///////////////////////////////////////// @@ -1505,6 +1546,7 @@ datum/design/rapidsyringe build_type = PROTOLATHE materials = list("$metal" = 5000, "$glass" = 1000) build_path = "/obj/item/weapon/gun/syringe/rapidsyringe" + locked = 1 datum/design/largecrossbow name = "Energy Crossbow" @@ -1517,7 +1559,7 @@ datum/design/largecrossbow datum/design/temp_gun name = "Temperature Gun" - desc = "A gun that shoots temperature bullet energythings to change temperature."//Change it if you want + desc = "A gun that shoots temperature bullet energy things to change temperature."//Change it if you want id = "temp_gun" req_tech = list("combat" = 3, "materials" = 4, "powerstorage" = 3, "magnets" = 2) build_type = PROTOLATHE @@ -1534,15 +1576,6 @@ datum/design/flora_gun materials = list("$metal" = 2000, "$glass" = 500, "mutagen" = 50) build_path = "/obj/item/weapon/gun/energy/floragun" -datum/design/portaseed - name = "Portaseeder" - desc = "An advanced hydroponics tool used for harvesting produce and extracting seeds." - id = "portaseed" - req_tech = list("materials" = 2, "biotech" = 3, "powerstorage" = 2) - build_type = PROTOLATHE - materials = list("$metal" = 500, "$glass" = 500) - build_path = "/obj/item/weapon/storage/bag/plants/portaseeder" - datum/design/large_grenade name = "Large Grenade" desc = "A grenade that affects a larger area and use larger containers." @@ -1618,6 +1651,7 @@ datum/design/plasmapistol build_type = PROTOLATHE materials = list("$metal" = 5000, "$glass" = 1000, "$plasma" = 3000) build_path = "/obj/item/weapon/gun/energy/toxgun" + locked = 1 ///////////////////////////////////////// /////////////////Armor/////////////////// @@ -1631,6 +1665,7 @@ datum/design/powerarmor build_type = PROTOLATHE materials = list("$metal" = 7500, "$plasteel" = 4000) build_path = /obj/item/clothing/suit/space/powered + locked = 1 datum/design/powerarmor_helmet name = "Powered armor helmet" @@ -1640,6 +1675,7 @@ datum/design/powerarmor_helmet build_type = PROTOLATHE materials = list("$metal" = 3750, "$glass" = 3750, "$plasteel" = 2000) build_path = /obj/item/clothing/head/space/powered + locked = 1 datum/design/powerarmor_gloves name = "Powered armor gloves" @@ -1649,6 +1685,7 @@ datum/design/powerarmor_gloves build_type = PROTOLATHE materials = list("$metal" = 7500, "$plasteel" = 2000) build_path = /obj/item/clothing/gloves/powered + locked = 1 datum/design/powerarmor_boots name = "Powered armor boots" @@ -1658,6 +1695,7 @@ datum/design/powerarmor_boots build_type = PROTOLATHE materials = list("$metal" = 7500, "$plasteel" = 2000) build_path = /obj/item/clothing/shoes/powered + locked = 1 datum/design/powerarmor_plasma name = "Powered armor miniaturized plasma generator" @@ -1667,6 +1705,7 @@ datum/design/powerarmor_plasma build_type = PROTOLATHE materials = list("$metal" = 7500, "$plasma" = 4000) build_path = /obj/item/powerarmor/power/plasma + locked = 1 datum/design/powerarmor_cell name = "Powered armor powercell interface" @@ -1676,6 +1715,7 @@ datum/design/powerarmor_cell build_type = PROTOLATHE materials = list("$metal" = 7500, "$silver" = 4000) build_path = /obj/item/powerarmor/power/powercell + locked = 1 datum/design/powerarmor_nuclear name = "Powered armor miniaturized nuclear generator" @@ -1685,6 +1725,7 @@ datum/design/powerarmor_nuclear build_type = PROTOLATHE materials = list("$metal" = 7500, "$uranium" = 4000) build_path = /obj/item/powerarmor/power/nuclear + locked = 1 datum/design/powerarmor_reactive name = "Powered armor reactive plating" @@ -1694,6 +1735,7 @@ datum/design/powerarmor_reactive build_type = PROTOLATHE materials = list("$metal" = 7500, "$diamond" = 4000) build_path = /obj/item/powerarmor/reactive + locked = 1 datum/design/powerarmor_servos name = "Powered armor servos" @@ -1703,6 +1745,7 @@ datum/design/powerarmor_servos build_type = PROTOLATHE materials = list("$metal" = 7500, "$plasteel" = 4000) build_path = /obj/item/powerarmor/servos + locked = 1 datum/design/powerarmor_atmoseal name = "Powered armor atmospheric seal" @@ -1712,6 +1755,7 @@ datum/design/powerarmor_atmoseal build_type = PROTOLATHE materials = list("$metal" = 7500, "$plasteel" = 4000) build_path = /obj/item/powerarmor/atmoseal + locked = 1 ///////////////////////////////////////// /////////////////Mining////////////////// @@ -1854,7 +1898,6 @@ datum/design/security_hud build_type = PROTOLATHE materials = list("$metal" = 50, "$glass" = 50) build_path = "/obj/item/clothing/glasses/hud/security" - locked = 1 ///////////////////////////////////////// //////////////////Test/////////////////// diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index 3568d900c8c..6bc69d3fc47 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -391,10 +391,10 @@ won't update every console in existence) but it's more of a hassle to do. Also, new_item.investigate_log("built by [key]","singulo") new_item.reliability = being_built.reliability if(linked_lathe.hacked) being_built.reliability = max((reliability / 2), 0) -/* if(being_built.locked) + if(being_built.locked) var/obj/item/weapon/storage/lockbox/L = new/obj/item/weapon/storage/lockbox(linked_lathe.loc) new_item.loc = L - L.name += " ([new_item.name])"*/ + L.name += " ([new_item.name])" else new_item.loc = linked_lathe.loc linked_lathe.busy = 0 diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi index 7a4fe676021..3c076f84c89 100644 Binary files a/icons/obj/device.dmi and b/icons/obj/device.dmi differ