diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index fa408d1b8f..adedddad1b 100644 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -33,7 +33,7 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee /obj/item/weapon/grenade/smokebomb, /obj/item/weapon/grenade/smokebomb, /obj/item/weapon/grenade/smokebomb, - /obj/item/weapon/pen/paralysis, + /obj/item/weapon/pen/reagent/paralysis, /obj/item/weapon/grenade/chem_grenade/incendiary) cost = 20 containertype = /obj/structure/closet/crate diff --git a/code/defines/procs/admin.dm b/code/defines/procs/admin.dm index 6c5f27fa07..bf16c5267d 100644 --- a/code/defines/procs/admin.dm +++ b/code/defines/procs/admin.dm @@ -34,3 +34,14 @@ proc/admin_attacker_log_many_victims(var/mob/attacker, var/list/mob/victims, var for(var/mob/victim in victims) admin_attack_log(attacker, victim, attacker_message, victim_message, admin_message) + +proc/admin_inject_log(mob/attacker, mob/victim, obj/item/weapon, reagents, amount_transferred, violent=0) + if(violent) + violent = "violently " + else + violent = "" + admin_attack_log(attacker, + victim, + "used \the [weapon] to [violent]inject - [reagents] - [amount_transferred]u transferred", + "was [violent]injected with \the [weapon] - [reagents] - [amount_transferred]u transferred", + "used \the [weapon] to [violent]inject [reagents] ([amount_transferred]u transferred) into") diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index a296fb8ecb..755887ad83 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -86,7 +86,7 @@ var/global/list/additional_antag_types = list() new/datum/uplink_item(/obj/item/weapon/soap/syndie, 1, "Subversive Soap", "SP"), new/datum/uplink_item(/obj/item/weapon/cane/concealed, 2, "Concealed Cane Sword", "CC"), new/datum/uplink_item(/obj/item/weapon/cartridge/syndicate, 3, "Detomatix PDA Cartridge", "DC"), - new/datum/uplink_item(/obj/item/weapon/pen/paralysis, 3, "Paralysis Pen", "PP"), + new/datum/uplink_item(/obj/item/weapon/pen/reagent/paralysis, 3, "Paralysis Pen", "PP"), new/datum/uplink_item(/obj/item/weapon/storage/box/syndie_kit/cigarette, 4, "Cigarette Kit", "BH"), new/datum/uplink_item(/obj/item/weapon/storage/box/syndie_kit/toxin, 4, "Random Toxin - Beaker", "RT") ), diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm index 085e23f9b6..b33d72f6fb 100644 --- a/code/game/objects/items/weapons/storage/uplink_kits.dm +++ b/code/game/objects/items/weapons/storage/uplink_kits.dm @@ -11,7 +11,7 @@ if("stealth") new /obj/item/weapon/gun/energy/crossbow(src) - new /obj/item/weapon/pen/paralysis(src) + new /obj/item/weapon/pen/reagent/paralysis(src) new /obj/item/device/chameleon(src) return diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm index 0d052d9114..5f0918238b 100644 --- a/code/modules/paperwork/pen.dm +++ b/code/modules/paperwork/pen.dm @@ -51,66 +51,54 @@ msg_admin_attack("[user.name] ([user.ckey]) Used the [name] to stab [M.name] ([M.ckey]) (JMP)") return +/* + * Reagent pens + */ + +/obj/item/weapon/pen/reagent + flags = OPENCONTAINER + slot_flags = SLOT_BELT + +/obj/item/weapon/pen/reagent/New() + ..() + create_reagents(30) + +/obj/item/weapon/pen/reagent/attack(mob/living/M as mob, mob/user as mob) + + if(!istype(M)) + return + + . = ..() + + if(M.can_inject(user,1)) + if(reagents.total_volume) + if(M.reagents) + var/contained_reagents = reagents.get_reagents() + var/trans = reagents.trans_to_mob(M, 30, CHEM_BLOOD) + admin_inject_log(user, M, src, contained_reagents, trans) /* * Sleepy Pens */ -/obj/item/weapon/pen/sleepypen +/obj/item/weapon/pen/reagent/sleepy desc = "It's a black ink pen with a sharp point and a carefully engraved \"Waffle Co.\"" - flags = OPENCONTAINER - slot_flags = SLOT_BELT origin_tech = "materials=2;syndicate=5" - -/obj/item/weapon/pen/sleepypen/New() - var/datum/reagents/R = new/datum/reagents(30) //Used to be 300 - reagents = R - R.my_atom = src - R.add_reagent("chloralhydrate", 22) //Used to be 100 sleep toxin//30 Chloral seems to be fatal, reducing it to 22./N +/obj/item/weapon/pen/reagent/sleepy/New() ..() - return - - -/obj/item/weapon/pen/sleepypen/attack(mob/M as mob, mob/user as mob) - if(!(istype(M,/mob))) - return - ..() - if(reagents.total_volume) - if(M.reagents) reagents.trans_to_mob(M, 50, CHEM_BLOOD) //used to be 150 - return + reagents.add_reagent("chloralhydrate", 22) //Used to be 100 sleep toxin//30 Chloral seems to be fatal, reducing it to 22./N /* * Parapens */ - /obj/item/weapon/pen/paralysis - flags = OPENCONTAINER - slot_flags = SLOT_BELT + /obj/item/weapon/pen/reagent/paralysis origin_tech = "materials=2;syndicate=5" - -/obj/item/weapon/pen/paralysis/attack(mob/living/M as mob, mob/user as mob) - - if(!(istype(M,/mob))) - return - +/obj/item/weapon/pen/reagent/paralysis/New() ..() - - - if(M.can_inject(user,1)) - if(reagents.total_volume) - if(M.reagents) reagents.trans_to_mob(M, 50, CHEM_BLOOD) - return - - -/obj/item/weapon/pen/paralysis/New() - var/datum/reagents/R = new/datum/reagents(50) - reagents = R - R.my_atom = src - R.add_reagent("zombiepowder", 10) - R.add_reagent("cryptobiolin", 15) - ..() - return + reagents.add_reagent("zombiepowder", 10) + reagents.add_reagent("cryptobiolin", 15) /* * Chameleon pen diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm index c5153510d7..246c7ad97c 100644 --- a/code/modules/reagents/reagent_containers/hypospray.dm +++ b/code/modules/reagents/reagent_containers/hypospray.dm @@ -19,23 +19,22 @@ reagents.add_reagent("tricordrazine", 30) return -/obj/item/weapon/reagent_containers/hypospray/attack(mob/M as mob, mob/user as mob) +/obj/item/weapon/reagent_containers/hypospray/attack(mob/living/M as mob, mob/user as mob) if(!reagents.total_volume) user << "[src] is empty." return if (!istype(M)) return + if(!M.can_inject(user, 1)) + return + user << "You inject [M] with [src]." M << "You feel a tiny prick!" if(M.reagents) - var/contained = reagentlist() - M.attack_log += text("\[[time_stamp()]\] Has been injected with [name] by [user.name] ([user.ckey]). Reagents: [contained]") - user.attack_log += text("\[[time_stamp()]\] Used the [name] to inject [M.name] ([M.key]). Reagents: [contained]") - msg_admin_attack("[user.name] ([user.ckey]) injected [M.name] ([M.key]) with [name]. Reagents: [contained] (INTENT: [uppertext(user.a_intent)]) (JMP)") - var/trans = reagents.trans_to_mob(M, amount_per_transfer_from_this, CHEM_BLOOD) + admin_inject_log(user, M, src, contained, trans) user << "[trans] units injected. [reagents.total_volume] units remaining in \the [src]." return diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm index c7f869802b..a221c31b10 100644 --- a/code/modules/reagents/reagent_containers/syringes.dm +++ b/code/modules/reagents/reagent_containers/syringes.dm @@ -171,16 +171,11 @@ user.visible_message("[user] injects [target] with the syringe!") - if(istype(target, /mob/living)) - var/mob/living/M = target - var/contained = reagentlist() - M.attack_log += text("\[[time_stamp()]\] Has been injected with [name] by [user.name] ([user.ckey]). Reagents: [contained]") - user.attack_log += text("\[[time_stamp()]\] Used the [name] to inject [M.name] ([M.key]). Reagents: [contained]") - msg_admin_attack("[user.name] ([user.ckey]) injected [M.name] ([M.key]) with [name]. Reagents: [contained] (INTENT: [uppertext(user.a_intent)]) (JMP)") - var/trans if(ismob(target)) + var/contained = reagentlist() trans = reagents.trans_to_mob(target, amount_per_transfer_from_this, CHEM_BLOOD) + admin_inject_log(user, target, src, contained, trans) else trans = reagents.trans_to(target, amount_per_transfer_from_this) user << "You inject [trans] units of the solution. The syringe now contains [src.reagents.total_volume] units." @@ -219,10 +214,6 @@ proc/syringestab(mob/living/carbon/target as mob, mob/living/carbon/user as mob) - user.attack_log += "\[[time_stamp()]\] Attacked [target.name] ([target.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])" - target.attack_log += "\[[time_stamp()]\] Attacked by [user.name] ([user.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])" - msg_admin_attack("[user.name] ([user.ckey]) attacked [target.name] ([target.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)]) (JMP)") - if(istype(target, /mob/living/carbon/human)) var/mob/living/carbon/human/H = target @@ -244,6 +235,11 @@ O.show_message(text("\red [user] tries to stab [target] in \the [hit_area] with [src.name], but the attack is deflected by armor!"), 1) user.remove_from_mob(src) qdel(src) + + user.attack_log += "\[[time_stamp()]\] Attacked [target.name] ([target.ckey]) with \the [src] (INTENT: HARM)." + target.attack_log += "\[[time_stamp()]\] Attacked by [user.name] ([user.ckey]) with [src.name] (INTENT: HARM)." + msg_admin_attack("[key_name_admin(user)] attacked [key_name_admin(target)] with [src.name] (INTENT: HARM) (JMP)") + return user.visible_message("[user] stabs [target] in \the [hit_area] with [src.name]!") @@ -255,8 +251,13 @@ user.visible_message("[user] stabs [target] with [src.name]!") target.take_organ_damage(3)// 7 is the same as crowbar punch + + var/syringestab_amount_transferred = rand(0, (reagents.total_volume - 5)) //nerfed by popular demand - reagents.trans_to_mob(target, syringestab_amount_transferred, CHEM_BLOOD) + var/contained_reagents = reagents.get_reagents() + var/trans = reagents.trans_to_mob(target, syringestab_amount_transferred, CHEM_BLOOD) + if(isnull(trans)) trans = 0 + admin_inject_log(user, target, src, contained_reagents, trans, violent=1) break_syringe(target, user) proc/break_syringe(mob/living/carbon/target, mob/living/carbon/user) diff --git a/code/modules/research/xenoarchaeology/finds/finds.dm b/code/modules/research/xenoarchaeology/finds/finds.dm index e4520e1378..84799cc552 100644 --- a/code/modules/research/xenoarchaeology/finds/finds.dm +++ b/code/modules/research/xenoarchaeology/finds/finds.dm @@ -254,7 +254,7 @@ if(prob(75)) new_item = new /obj/item/weapon/pen(src.loc) else - new_item = new /obj/item/weapon/pen/sleepypen(src.loc) + new_item = new /obj/item/weapon/pen/reagent/sleepy(src.loc) if(prob(30)) apply_image_decorations = 1 if(16)