diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index 4152a1dd2e9..0f447c8e3d9 100644 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -35,8 +35,9 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee /obj/item/grenade/smokebomb, /obj/item/grenade/smokebomb, /obj/item/grenade/smokebomb, - /obj/item/pen/reagent/paralysis, + /obj/item/storage/box/syndie_kit/special_pens, /obj/item/grenade/chem_grenade/incendiary) + cost = 20 containertype = /obj/structure/closet/crate containername = "crate" diff --git a/code/datums/uplink/stealthy and inconspicuous weapons.dm b/code/datums/uplink/stealthy and inconspicuous weapons.dm index a785a4b2405..e6b8eb14f52 100644 --- a/code/datums/uplink/stealthy and inconspicuous weapons.dm +++ b/code/datums/uplink/stealthy and inconspicuous weapons.dm @@ -24,8 +24,14 @@ item_cost = 4 path = /obj/item/cartridge/syndicate +/datum/uplink_item/item/stealthy_weapons/pens + name = "Pen-jector Kit" + desc = "A kit that contains four differently coloured pens. A red poison pen, a blue pacifying pen, a green pen containing healing chemicals, and a yellow hyperzine pen." + item_cost = 6 + path = /obj/item/storage/box/syndie_kit/special_pens + /datum/uplink_item/item/stealthy_weapons/parapen - name = "Paralysis Pen" + name = "Paralysis pen" item_cost = 6 path = /obj/item/pen/reagent/paralysis @@ -37,4 +43,4 @@ /datum/uplink_item/item/stealthy_weapons/sleepy_ring name = "Sleepy Ring" item_cost = 7 - path = /obj/item/clothing/ring/reagent/sleepy \ No newline at end of file + path = /obj/item/clothing/ring/reagent/sleepy diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm index 41a466f479d..1c1e5dace5e 100644 --- a/code/game/objects/items/weapons/storage/uplink_kits.dm +++ b/code/game/objects/items/weapons/storage/uplink_kits.dm @@ -11,7 +11,10 @@ if("stealth") new /obj/item/gun/energy/crossbow(src) - new /obj/item/pen/reagent/paralysis(src) + new /obj/item/pen/reagent/healing(src) + new /obj/item/pen/reagent/pacifier(src) + new /obj/item/pen/reagent/hyperzine(src) + new /obj/item/pen/reagent/poison(src) new /obj/item/device/chameleon(src) return @@ -136,6 +139,16 @@ /obj/item/hand_labeler = 1 ) +/obj/item/storage/box/syndie_kit/special_pens + name = "box (P)" + starts_with = list( + /obj/item/pen/reagent/healing = 1, + /obj/item/pen/reagent/pacifier = 1, + /obj/item/pen/reagent/hyperzine = 1, + /obj/item/pen/reagent/poison = 1 + + ) + /obj/item/storage/box/syndie_kit/spy name = "spy kit" desc = "For when you want to conduct voyeurism from afar." diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm index 46705b242c9..de391574ac7 100644 --- a/code/modules/paperwork/pen.dm +++ b/code/modules/paperwork/pen.dm @@ -1,267 +1,299 @@ -/* Pens! - * Contains: - * Pens - * PDA Pens - * Sleepy Pens - * Coloured Pens - * Parapens - * Fountain Pens - */ - - -/* - * Pens - */ -/obj/item/pen - desc = "An instrument for writing or drawing with ink. This one is in black, in a classic, grey casing. Stylish, classic and professional." - name = "pen" - icon = 'icons/obj/bureaucracy.dmi' - icon_state = "pen" - item_state = "pen" - slot_flags = SLOT_BELT | SLOT_EARS - throwforce = 0 - w_class = 1.0 - throw_speed = 7 - throw_range = 15 - matter = list(DEFAULT_WALL_MATERIAL = 10) - var/colour = "black" //what colour the ink is! - drop_sound = 'sound/items/drop/accessory.ogg' - -/obj/item/pen/ispen() - return TRUE - -/* - * PDA Pens - */ - -/obj/item/pen/black - desc = "An instrument for writing or drawing with ink. This one is in black, in a sleek, black casing. Stylish, classic and professional." - icon_state = "pen_black" - -/obj/item/pen/silver - desc = "An instrument for writing or drawing with ink. This one is in black, in a shiny, silver casing. Stylish, classic and professional." - icon_state = "pen_silver" - -/obj/item/pen/white - desc = "An instrument for writing or drawing with ink. This one is in black, in a sterile, white casing. Stylish, classic and professional." - icon_state = "pen_white" - -/* - * Coloured Pens - */ - -/obj/item/pen/blue - desc = "An instrument for writing or drawing with ink. This one is in blue. Ironically used mostly by white-collar workers." - icon_state = "pen_blue" - colour = "blue" - -/obj/item/pen/red - desc = "An instrument for writing or drawing with ink. This one is in red. Favored by teachers and creeps who like to pretend to write in blood." - icon_state = "pen_red" - colour = "red" - -/obj/item/pen/invisible - desc = "An instrument for writing or drawing with ink. This one has invisible ink." - icon_state = "pen" - colour = "white" - -/obj/item/pen/multi - desc = "An instrument for writing or drawing with ink. This one comes with with multiple colors! Push down all three simultaneously to rule the universe." - icon_state = "pen_multi" - var/selectedColor = 1 - var/colors = list("black","blue","red") - -/obj/item/pen/multi/attack_self(mob/user) - if(++selectedColor > 3) - selectedColor = 1 - - colour = colors[selectedColor] - - if(colour == "black") - icon_state = "pen" - else - icon_state = "pen_[colour]" - - to_chat(user, "Changed color to '[colour].'") - -/obj/item/pen/attack(mob/M as mob, mob/user as mob, var/target_zone) - if(!ismob(M)) - return - to_chat(user, "You stab [M] with \the [src].") -// to_chat(M, "\red You feel a tiny prick!" //That's a whole lot of meta!) - M.attack_log += text("\[[time_stamp()]\] Has been stabbed with [name] by [user.name] ([user.ckey])") - user.attack_log += text("\[[time_stamp()]\] Used the [name] to stab [M.name] ([M.ckey])") - msg_admin_attack("[user.name] ([user.ckey]) Used the [name] to stab [M.name] ([M.ckey]) (JMP)",ckey=key_name(user),ckey_target=key_name(M)) - return - -/obj/item/pen/attack_self(var/mob/user) - playsound(loc, 'sound/items/penclick.ogg', 50, 1) - -/* - * Fountain Pens - */ - -/obj/item/pen/fountain - name = "fountain pen" - desc = "A traditional fountain pen. Guaranteed never to leak." - icon_state = "pen_fountain" - throwforce = 1 //pointy - colour = "#1c1713" //dark ashy brownish - var/cursive = TRUE - -/obj/item/pen/fountain/attack_self(var/mob/user) - playsound(loc, 'sound/items/penclick.ogg', 50, 1) - to_chat(user, span("notice", "You snap the nib into position to write [cursive ? "normally" : "in cursive"].")) - cursive = !cursive - -/* - * PDA Fountain Pens - */ -/obj/item/pen/fountain/black - desc = "It's an expensive Sleek Black fountain pen. Guaranteed never to leak." - icon_state = "pen_fountain-b" - -/obj/item/pen/fountain/silver - desc = "It's an expensive Shiny Silver fountain pen. Guaranteed never to leak." - icon_state = "pen_fountain-s" - -/obj/item/pen/fountain/white - desc = "It's an expensive Sterile White fountain pen. Guaranteed never to leak." - icon_state = "pen_fountain-w" - -/obj/item/pen/fountain/head - name = "command fountain pen" - desc = "It's an expensive Command Navy Blue fountain pen, embellished with silver. Guaranteed never to leak." - icon_state = "pen_fountain-nb" - -/obj/item/pen/fountain/captain - name = "captain's fountain pen" - desc = "It's an expensive Command Navy Blue fountain pen, embellished with ornate gold detailing. Guaranteed never to leak." - icon_state = "pen_fountain-nbc" - -/* - * Reagent pens - */ - -/obj/item/pen/reagent - flags = OPENCONTAINER - slot_flags = SLOT_BELT - origin_tech = list(TECH_MATERIAL = 2, TECH_ILLEGAL = 5) - -/obj/item/pen/reagent/New() - ..() - create_reagents(30) - -/obj/item/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, reagents.get_temperature(), trans) - -/* - * Sleepy Pens - */ -/obj/item/pen/reagent/sleepy - desc = "It's a black ink pen with a sharp point and a carefully engraved \"Waffle Co.\"" - origin_tech = list(TECH_MATERIAL = 2, TECH_ILLEGAL = 5) - -/obj/item/pen/reagent/sleepy/New() - ..() - 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/pen/reagent/paralysis - origin_tech = list(TECH_MATERIAL = 2, TECH_ILLEGAL = 5) - -/obj/item/pen/reagent/paralysis/New() - ..() - reagents.add_reagent("dextrotoxin", 10) -/* - * Chameleon pen - */ -/obj/item/pen/chameleon - var/signature = "" - -/obj/item/pen/chameleon/attack_self(mob/user as mob) - signature = sanitize(input("Enter new signature. Leave blank for 'Anonymous'", "New Signature", signature)) - -/obj/item/pen/proc/get_signature(var/mob/user) - if (user) - if (user.mind && user.mind.signature) - return user.mind.signature - else if (user.real_name) - return "[user.real_name]" - - return "Anonymous" - -/obj/item/pen/chameleon/get_signature(var/mob/user) - return signature ? "[signature]" : "Anonymous" - -/obj/item/pen/chameleon/verb/set_colour() - set name = "Change Pen Colour" - set category = "Object" - - var/list/possible_colours = list ("Yellow", "Green", "Pink", "Blue", "Orange", "Cyan", "Red", "Invisible", "Black") - var/selected_type = input("Pick new colour.", "Pen Colour", null, null) as null|anything in possible_colours - - if(selected_type) - switch(selected_type) - if("Yellow") - colour = COLOR_YELLOW - if("Green") - colour = COLOR_LIME - if("Pink") - colour = COLOR_PINK - if("Blue") - colour = COLOR_BLUE - if("Orange") - colour = COLOR_ORANGE - if("Cyan") - colour = COLOR_CYAN - if("Red") - colour = COLOR_RED - if("Invisible") - colour = COLOR_WHITE - else - colour = COLOR_BLACK - to_chat(usr, "You select the [lowertext(selected_type)] ink container.") - - -/* - * Crayons - */ - -/obj/item/pen/crayon - name = "crayon" - desc = "A colourful crayon. Please refrain from eating it or putting it in your nose." - icon = 'icons/obj/crayons.dmi' - icon_state = "crayonred" - drop_sound = 'sound/items/drop/gloves.ogg' - w_class = 1.0 - attack_verb = list("attacked", "coloured") - colour = "#FF0000" //RGB - var/shadeColour = "#220000" //RGB - var/instant = 0 - var/colourName = "red" //for updateIcon purposes - var/chem_volume = 10 //crayon dust - var/dust = "crayon_dust" - -/obj/item/pen/crayon/New() - name = "[colourName] crayon" - ..() - -/obj/item/pen/crayon/Initialize() - . = ..() - create_reagents(chem_volume) - reagents.add_reagent(dust,chem_volume) \ No newline at end of file +/* Pens! + * Contains: + * Pens + * PDA Pens + * Sleepy Pens + * Coloured Pens + * Parapens + * Fountain Pens + */ + + +/* + * Pens + */ +/obj/item/pen + desc = "An instrument for writing or drawing with ink. This one is in black, in a classic, grey casing. Stylish, classic and professional." + name = "pen" + icon = 'icons/obj/bureaucracy.dmi' + icon_state = "pen" + item_state = "pen" + slot_flags = SLOT_BELT | SLOT_EARS + throwforce = 0 + w_class = 1.0 + throw_speed = 7 + throw_range = 15 + matter = list(DEFAULT_WALL_MATERIAL = 10) + var/colour = "black" //what colour the ink is! + drop_sound = 'sound/items/drop/accessory.ogg' + +/obj/item/pen/ispen() + return TRUE + +/* + * PDA Pens + */ + +/obj/item/pen/black + desc = "An instrument for writing or drawing with ink. This one is in black, in a sleek, black casing. Stylish, classic and professional." + icon_state = "pen_black" + +/obj/item/pen/silver + desc = "An instrument for writing or drawing with ink. This one is in black, in a shiny, silver casing. Stylish, classic and professional." + icon_state = "pen_silver" + +/obj/item/pen/white + desc = "An instrument for writing or drawing with ink. This one is in black, in a sterile, white casing. Stylish, classic and professional." + icon_state = "pen_white" + +/* + * Coloured Pens + */ + +/obj/item/pen/blue + desc = "An instrument for writing or drawing with ink. This one is in blue. Ironically used mostly by white-collar workers." + icon_state = "pen_blue" + colour = "blue" + +/obj/item/pen/red + desc = "An instrument for writing or drawing with ink. This one is in red. Favored by teachers and creeps who like to pretend to write in blood." + icon_state = "pen_red" + colour = "red" + +/obj/item/pen/yellow + desc = "An instrument for writing or drawing with ink. Favored by artists who like to draw using bright colors." + icon_state = "pen_yellow" + colour = "yellow" + +/obj/item/pen/green + desc = "An instrument for writing or drawing with ink. This one is in green. Favored by students who like to have their notes extra organized with colors." + icon_state = "pen_green" + colour = "green" + +/obj/item/pen/invisible + desc = "An instrument for writing or drawing with ink. This one has invisible ink." + icon_state = "pen" + colour = "white" + +/obj/item/pen/multi + desc = "An instrument for writing or drawing with ink. This one comes with with multiple colors! Push down all three simultaneously to rule the universe." + icon_state = "pen_multi" + var/selectedColor = 1 + var/colors = list("black", "blue", "red", "green", "yellow") + +/obj/item/pen/multi/attack_self(mob/user) + if(++selectedColor > 3) + selectedColor = 1 + + colour = colors[selectedColor] + + if(colour == "black") + icon_state = "pen" + else + icon_state = "pen_[colour]" + + to_chat(user, "Changed color to '[colour].'") + +/obj/item/pen/attack(mob/M as mob, mob/user as mob, var/target_zone) + if(!ismob(M)) + return + to_chat(user, "You stab [M] with \the [src].") +// to_chat(M, "\red You feel a tiny prick!" //That's a whole lot of meta!) + M.attack_log += text("\[[time_stamp()]\] Has been stabbed with [name] by [user.name] ([user.ckey])") + user.attack_log += text("\[[time_stamp()]\] Used the [name] to stab [M.name] ([M.ckey])") + msg_admin_attack("[user.name] ([user.ckey]) Used the [name] to stab [M.name] ([M.ckey]) (JMP)",ckey=key_name(user),ckey_target=key_name(M)) + return + +/obj/item/pen/attack_self(var/mob/user) + playsound(loc, 'sound/items/penclick.ogg', 50, 1) + +/* + * Fountain Pens + */ + +/obj/item/pen/fountain + name = "fountain pen" + desc = "A traditional fountain pen. Guaranteed never to leak." + icon_state = "pen_fountain" + throwforce = 1 //pointy + colour = "#1c1713" //dark ashy brownish + var/cursive = TRUE + +/obj/item/pen/fountain/attack_self(var/mob/user) + playsound(loc, 'sound/items/penclick.ogg', 50, 1) + to_chat(user, span("notice", "You snap the nib into position to write [cursive ? "normally" : "in cursive"].")) + cursive = !cursive + +/* + * PDA Fountain Pens + */ +/obj/item/pen/fountain/black + desc = "It's an expensive Sleek Black fountain pen. Guaranteed never to leak." + icon_state = "pen_fountain-b" + +/obj/item/pen/fountain/silver + desc = "It's an expensive Shiny Silver fountain pen. Guaranteed never to leak." + icon_state = "pen_fountain-s" + +/obj/item/pen/fountain/white + desc = "It's an expensive Sterile White fountain pen. Guaranteed never to leak." + icon_state = "pen_fountain-w" + +/obj/item/pen/fountain/head + name = "command fountain pen" + desc = "It's an expensive Command Navy Blue fountain pen, embellished with silver. Guaranteed never to leak." + icon_state = "pen_fountain-nb" + +/obj/item/pen/fountain/captain + name = "captain's fountain pen" + desc = "It's an expensive Command Navy Blue fountain pen, embellished with ornate gold detailing. Guaranteed never to leak." + icon_state = "pen_fountain-nbc" + +/* + * Reagent pens + */ + +/obj/item/pen/reagent + flags = OPENCONTAINER + slot_flags = SLOT_BELT + origin_tech = list(TECH_MATERIAL = 2, TECH_ILLEGAL = 5) + var/list/pen_reagents = list() + +/obj/item/pen/reagent/New() + ..() + create_reagents(30) + for (var/i in pen_reagents) + reagents.add_reagent(i, pen_reagents[i]) + +/obj/item/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, reagents.get_temperature(), trans) + +/* + * Sleepy Pens + */ +/obj/item/pen/reagent/sleepy + desc = "It's a black ink pen with a sharp point and a carefully engraved \"Waffle Co.\"" + origin_tech = list(TECH_MATERIAL = 2, TECH_ILLEGAL = 5) + pen_reagents = list("chloralhydrate" = 22) + + +/* + * Parapens + */ +/obj/item/pen/reagent/paralysis + origin_tech = list(TECH_MATERIAL = 2, TECH_ILLEGAL = 5) + pen_reagents = list("dextrotoxin" = 10) + +/obj/item/pen/reagent/healing + origin_tech = list(TECH_MATERIAL = 2, TECH_ILLEGAL = 5) + pen_reagents = list("tricordrazine" = 10, "dermaline" = 5, "bicaridine" = 5) + icon_state = "pen_green" + colour = "green" + +/obj/item/pen/reagent/pacifier + origin_tech = list(TECH_MATERIAL = 2, TECH_ILLEGAL = 5) + pen_reagents = list("wulumunusha" = 2, "paxazide" = 15, "cryptobiolin" = 10) + icon_state = "pen_blue" + colour = "blue" + +/obj/item/pen/reagent/hyperzine + origin_tech = list(TECH_MATERIAL = 2, TECH_ILLEGAL = 5) + pen_reagents = list("hyperzine" = 10) + icon_state = "pen_yellow" + colour = "yellow" + +/obj/item/pen/reagent/poison + origin_tech = list(TECH_MATERIAL = 2, TECH_ILLEGAL = 5) + pen_reagents = list("cyanide" = 1, "lexorin" = 20) + icon_state = "pen_red" + colour = "red" + +/* + * Chameleon pen + */ +/obj/item/pen/chameleon + var/signature = "" + +/obj/item/pen/chameleon/attack_self(mob/user as mob) + signature = sanitize(input("Enter new signature. Leave blank for 'Anonymous'", "New Signature", signature)) + +/obj/item/pen/proc/get_signature(var/mob/user) + if (user) + if (user.mind && user.mind.signature) + return user.mind.signature + else if (user.real_name) + return "[user.real_name]" + + return "Anonymous" + +/obj/item/pen/chameleon/get_signature(var/mob/user) + return signature ? "[signature]" : "Anonymous" + +/obj/item/pen/chameleon/verb/set_colour() + set name = "Change Pen Colour" + set category = "Object" + + var/list/possible_colours = list ("Yellow", "Green", "Pink", "Blue", "Orange", "Cyan", "Red", "Invisible", "Black") + var/selected_type = input("Pick new colour.", "Pen Colour", null, null) as null|anything in possible_colours + + if(selected_type) + switch(selected_type) + if("Yellow") + colour = COLOR_YELLOW + if("Green") + colour = COLOR_LIME + if("Pink") + colour = COLOR_PINK + if("Blue") + colour = COLOR_BLUE + if("Orange") + colour = COLOR_ORANGE + if("Cyan") + colour = COLOR_CYAN + if("Red") + colour = COLOR_RED + if("Invisible") + colour = COLOR_WHITE + else + colour = COLOR_BLACK + to_chat(usr, "You select the [lowertext(selected_type)] ink container.") + + +/* + * Crayons + */ + +/obj/item/pen/crayon + name = "crayon" + desc = "A colourful crayon. Please refrain from eating it or putting it in your nose." + icon = 'icons/obj/crayons.dmi' + icon_state = "crayonred" + drop_sound = 'sound/items/drop/gloves.ogg' + w_class = 1.0 + attack_verb = list("attacked", "coloured") + colour = "#FF0000" //RGB + var/shadeColour = "#220000" //RGB + var/instant = 0 + var/colourName = "red" //for updateIcon purposes + var/chem_volume = 10 //crayon dust + var/dust = "crayon_dust" + +/obj/item/pen/crayon/New() + name = "[colourName] crayon" + ..() + +/obj/item/pen/crayon/Initialize() + . = ..() + create_reagents(chem_volume) + reagents.add_reagent(dust,chem_volume) diff --git a/html/changelogs/Sindorman-pens.yml b/html/changelogs/Sindorman-pens.yml new file mode 100644 index 00000000000..d00e6a45315 --- /dev/null +++ b/html/changelogs/Sindorman-pens.yml @@ -0,0 +1,44 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +# balance +# admin +# backend +# security +# refactor +################################# + +# Your name. +author: PoZe + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - rscadd: "Added yellow and green pens" + - tweak: "Multi-color pens now also have yellow and green." + - rscadd: "Added 4 special pens. Red pen - poison pen, blue pen - pacifier pen, green pen - healing pen, yellow pen - hyperzine pen." + - tweak: "Added 4 special pens kit to traitor uplink, random kit and special ops cargo." diff --git a/icons/obj/bureaucracy.dmi b/icons/obj/bureaucracy.dmi index 9543ca4b57f..8278f7e0b3c 100644 Binary files a/icons/obj/bureaucracy.dmi and b/icons/obj/bureaucracy.dmi differ