diff --git a/code/game/objects/items/weapons/storage/business_card.dm b/code/game/objects/items/weapons/storage/business_card.dm index 12b13795b3b..7910cc664b6 100644 --- a/code/game/objects/items/weapons/storage/business_card.dm +++ b/code/game/objects/items/weapons/storage/business_card.dm @@ -2,7 +2,7 @@ name = "business card holder" desc = "A sleek holster for your business card. You wouldn't want it getting damaged in any way." storage_slots = 5 - icon = 'icons/obj/office_supplies.dmi' + icon = 'icons/obj/bureaucracy.dmi' icon_state = "holder" w_class = ITEMSIZE_TINY max_w_class = ITEMSIZE_TINY @@ -10,27 +10,88 @@ /obj/item/storage/business_card_holder/update_icon() cut_overlays() + var/overlay_type if(length(contents)) - var/mutable_appearance/card_overlay = mutable_appearance(icon, "holder-overlay") - card_overlay.appearance_flags = RESET_COLOR + var/obj/O = contents[1] + if(istype(O, /obj/item/paper/business_card/glass)) // Could be better, I guess. But it works well enough. + overlay_type = "glass" + else + overlay_type = "paper" + var/mutable_appearance/card_overlay = mutable_appearance(icon, "holder-overlay_[overlay_type]") + if(O.color) + card_overlay.color = O.color + else + card_overlay.appearance_flags = RESET_COLOR add_overlay(card_overlay) +/obj/item/storage/business_card_holder/wood + icon_state = "holder_wood" + +/obj/item/storage/business_card_holder/leather + icon_state = "holder_leather" + +/obj/item/storage/business_card_holder/plastic + icon_state = "holder_plastic" + + /obj/item/paper/business_card name = "business card" desc = "A small slip of paper, capable of elevating your status on the social hierachy between you and your co-workers, provided you picked the right font." - icon = 'icons/obj/office_supplies.dmi' - icon_state = "generic_card1" + icon_state = "business_card" + var/last_flash = 0 //spam limiter + can_fold = FALSE /obj/item/paper/business_card/attack_self(mob/living/user) - user.examinate(src) + if(last_flash <= world.time - 20) + last_flash = world.time + card_flash(user) // Shamelessly copypasta'd from id_flash from cards_ids.dm + +/obj/item/paper/business_card/proc/card_flash(var/mob/user, var/quality = pick("the tasteful thickness of it", "that subtle off-white coloring", "the carefully curated font", "that watermark", "that bold, contemporary serif"), var/complement = pick("Oh my god.", "Impressive.", "Very nice.", "Nice.", "Jesus.", "Cool.", "How'd they get so tasteful?")) + var/list/card_viewers = viewers(3, user) // or some other distance - this distance could be defined as a var on the ID + var/message = "[user] flashes [user.get_pronoun("his")] [icon2html(src, card_viewers)] [src.name]." + var/blind_message = "You flash your [icon2html(src, card_viewers)] [src.name]." + var/add_text = "Look at [quality]. [complement]" + var/blind_add_text = "You show off [quality]." + if(add_text != "") + message += " [add_text]" + if(blind_add_text != "") + blind_message += " [blind_add_text]" + user.visible_message(message, blind_message) + +/obj/item/paper/business_card/show_content(mob/user, forceshow) + var/datum/browser/paper_win = new(user, name, null, 525, 300, null, TRUE) + paper_win.set_content(get_content(user, can_read(user, forceshow))) + paper_win.add_stylesheet("paper_languages", 'html/browser/paper_languages.css') + paper_win.open() /obj/item/paper/business_card/alt - icon_state = "generic_card2" + icon_state = "business_card-alt" /obj/item/paper/business_card/rounded - icon_state = "rounded_corners" + icon_state = "business_card-rounded" /obj/item/paper/business_card/glass name = "glass business card" desc = "A fancy variant of the classic business card. This one immediately indicates that you're serious about your business, but the contents of the card will seal the deal." - icon_state = "glass_card" \ No newline at end of file + icon_state = "business_card-glass" + drop_sound = 'sound/items/drop/glass_small.ogg' + pickup_sound = 'sound/items/pickup/glass_small.ogg' + build_from_parts = TRUE + paper_like = FALSE + +/obj/item/paper/business_card/glass/card_flash(var/mob/user) + var/quality = pick("the tasteful transparency of it", "that subtle light refraction", "the carefully curated font", "that watermark", "that bold, contemporary serif") + var/complement = pick("Oh my god.", "Impressive.", "Very nice.", "Nice.", "Jesus.", "Cool.", "How'd they get so tasteful?") + return ..(user, quality, complement) + +/obj/item/paper/business_card/glass/b + worn_overlay = "business_card-glass-b" + +/obj/item/paper/business_card/glass/g + worn_overlay = "business_card-glass-g" + +/obj/item/paper/business_card/glass/s + worn_overlay = "business_card-glass-s" + +/obj/item/paper/business_card/glass/w + worn_overlay = "business_card-glass-w" \ No newline at end of file diff --git a/code/modules/client/preference_setup/loadout/loadout_utility.dm b/code/modules/client/preference_setup/loadout/loadout_utility.dm index 2647d8f36f7..05338e51a23 100644 --- a/code/modules/client/preference_setup/loadout/loadout_utility.dm +++ b/code/modules/client/preference_setup/loadout/loadout_utility.dm @@ -107,27 +107,42 @@ /datum/gear/utility/business_card_holder display_name = "business card holder" + description = "Comes in different materials." path = /obj/item/storage/business_card_holder - flags = GEAR_HAS_NAME_SELECTION | GEAR_HAS_DESC_SELECTION | GEAR_HAS_COLOR_SELECTION + flags = GEAR_HAS_NAME_SELECTION | GEAR_HAS_DESC_SELECTION + +/datum/gear/utility/business_card_holder/New() + ..() + var/list/holders = list() + holders["business card holder, metal"] = /obj/item/storage/business_card_holder + holders["business card holder, wood"] = /obj/item/storage/business_card_holder/wood + holders["business card holder, leather"] = /obj/item/storage/business_card_holder/leather + holders["business card holder, plastic"] = /obj/item/storage/business_card_holder/plastic + gear_tweaks += new /datum/gear_tweak/path(holders) /datum/gear/utility/business_card display_name = "business card" + description = "A selection of business cards." // I'm not smart enough to make it spawn inside the holders and carry over the text so we'll have to live with this path = /obj/item/paper/business_card - flags = 0 + flags = GEAR_HAS_COLOR_SELECTION /datum/gear/utility/business_card/New() ..() var/list/cards = list() - cards["business card, divided"] = /obj/item/paper/business_card - cards["business card, plain"] = /obj/item/paper/business_card/alt - cards["business card, rounded"] = /obj/item/paper/business_card/rounded - cards["business card, glass"] = /obj/item/paper/business_card/glass + cards["paper business card, divided"] = /obj/item/paper/business_card + cards["paper business card, plain"] = /obj/item/paper/business_card/alt + cards["paper business card, rounded"] = /obj/item/paper/business_card/rounded + cards["glass business card"] = /obj/item/paper/business_card/glass + cards["glass business card, black flair"] = /obj/item/paper/business_card/glass/b + cards["glass business card, grey flair"] = /obj/item/paper/business_card/glass/g + cards["glass business card, silver flair"] = /obj/item/paper/business_card/glass/s + cards["glass business card, white flair"] = /obj/item/paper/business_card/glass/w gear_tweaks += new /datum/gear_tweak/path(cards) gear_tweaks += new /datum/gear_tweak/paper_data() /datum/gear/utility/pills display_name = "pill bottle selection" - description = "A selection of prescription pill. NOTICE: most of these are considered contraband if possessed without the relevant prescription noted in the medical records." + description = "A selection of prescription pills. NOTICE: most of these are considered contraband if possessed without the relevant prescription noted in the medical records." path = /obj/item/reagent_containers/pill /datum/gear/utility/pills/New() diff --git a/code/modules/paperwork/carbonpaper.dm b/code/modules/paperwork/carbonpaper.dm index 4907fd26d5d..f695c364801 100644 --- a/code/modules/paperwork/carbonpaper.dm +++ b/code/modules/paperwork/carbonpaper.dm @@ -4,7 +4,7 @@ item_state = "paper" var/copied = FALSE var/iscopy = FALSE - + can_fold = FALSE /obj/item/paper/carbon/update_icon() if(iscopy) diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index 8eb03dd49ab..e93f83c89d4 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -31,6 +31,8 @@ var/rigged = 0 var/last_honk = 0 var/old_name // The name of the paper before it was folded into a plane. + var/can_fold = TRUE // If it can be folded into a plane or swan + var/paper_like = TRUE // Is it made of paper and/or burnable material? var/const/deffont = "Verdana" var/const/signfont = "Times New Roman" @@ -90,17 +92,16 @@ /obj/item/paper/examine(mob/user) . = ..() - if (old_name && icon_state == "paper_plane" || icon_state == "paper_swan") + if (old_name && (icon_state == "paper_plane" || icon_state == "paper_swan")) to_chat(user, SPAN_NOTICE("You're going to have to unfold it before you can read it.")) return if(name != initial(name)) to_chat(user,"It's titled '[name]'.") if(in_range(user, src) || isobserver(user) || in_slide_projector(user)) - show_content(usr) + show_content(user) else to_chat(user, SPAN_NOTICE("You have to go closer if you want to read it.")) - /obj/item/paper/proc/show_content(mob/user, forceshow) var/datum/browser/paper_win = new(user, name, null, 450, 500, null, TRUE) paper_win.set_content(get_content(user, can_read(user, forceshow))) @@ -143,7 +144,7 @@ add_fingerprint(usr) /obj/item/paper/attack_self(mob/living/user as mob) - if(user.a_intent == I_HURT) + if(user.a_intent == I_HURT && paper_like) if(icon_state == "scrap") user.show_message(SPAN_WARNING("\The [src] is already crumpled.")) return @@ -155,7 +156,7 @@ throw_range = 4 //you can now make epic paper ball hoops into the disposals (kinda dumb that you could only throw crumpled paper 1 tile) -wezzy return - if (user.a_intent == I_GRAB && icon_state != "scrap" && !istype(src, /obj/item/paper/carbon)) + if (user.a_intent == I_GRAB && icon_state != "scrap" && can_fold) if (icon_state == "paper_plane") user.show_message(SPAN_ALERT("The paper is already folded into a plane.")) return @@ -168,7 +169,7 @@ name = "paper plane" return - if (user.a_intent == I_DISARM && icon_state != "scrap" && !istype(src, /obj/item/paper/carbon)) + if (user.a_intent == I_DISARM && icon_state != "scrap" && can_fold) if (icon_state == "paper_swan") user.show_message(SPAN_ALERT("The paper is already folded into a swan.")) return @@ -180,7 +181,7 @@ name = "origami swan" return - if (user.a_intent == I_HELP && old_name && icon_state == "paper_plane") + if (user.a_intent == I_HELP && old_name && (icon_state == "paper_plane" || icon_state == "paper_swan")) user.visible_message(SPAN_NOTICE("\The [user] unfolds \the [src]."), SPAN_NOTICE("You unfold \the [src]."), "You hear paper rustling.") playsound(src, 'sound/bureaucracy/paperfold.ogg', 50, 1) icon_state = initial(icon_state) @@ -190,15 +191,6 @@ update_icon() return - if (user.a_intent == I_HELP && old_name && icon_state == "paper_swan") - user.visible_message(SPAN_NOTICE("\The [user] unfolds \the [src]."), SPAN_NOTICE("You unfold \the [src]."), "You hear paper rustling.") - playsound(src, 'sound/bureaucracy/paperfold.ogg', 50, 1) - icon_state = initial(icon_state) - name = old_name - old_name = null - update_icon() - return - user.examinate(src) if(rigged && (Holiday == "April Fool's Day")) if(last_honk <= world.time - 20) //Spam limiter. @@ -211,11 +203,11 @@ /obj/item/paper/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob, var/target_zone) if(target_zone == BP_EYES) - user.visible_message(SPAN_NOTICE("You show the paper to [M]."), \ - SPAN_NOTICE("[user] holds up a paper and shows it to [M].")) + user.visible_message(SPAN_NOTICE("You show \the [src] to [M]."), \ + SPAN_NOTICE("[user] holds up \the [src] and shows it to [M].")) M.examinate(src) - else if(target_zone == BP_MOUTH) // lipstick wiping + else if(target_zone == BP_MOUTH && paper_like) // lipstick wiping if(ishuman(M)) var/mob/living/carbon/human/H = M if(H == user) @@ -351,7 +343,7 @@ /obj/item/paper/proc/burnpaper(obj/item/P, mob/user) var/class = "warning" - if(!use_check_and_message(user)) + if(!use_check_and_message(user) && paper_like) if(istype(P, /obj/item/flame/lighter/zippo)) class = "rose" @@ -521,7 +513,7 @@ /obj/item/paper/attackby(var/obj/item/P, mob/user) ..() - if(istype(P, /obj/item/tape_roll)) + if(istype(P, /obj/item/tape_roll) && !istype(src, /obj/item/paper/business_card)) var/obj/item/tape_roll/tape = P tape.stick(src, user) return diff --git a/code/modules/paperwork/paper_bundle.dm b/code/modules/paperwork/paper_bundle.dm index f73cc6bad7d..9fbaffc47e3 100644 --- a/code/modules/paperwork/paper_bundle.dm +++ b/code/modules/paperwork/paper_bundle.dm @@ -122,7 +122,11 @@ var/obj/item/paper/P = W dat += P.get_content(user, P.can_read(user)) - var/datum/browser/paper_win = new(user, name, null, 450, 500, null, TRUE) + var/datum/browser/paper_win + if(istype(pages[page], /obj/item/paper/business_card)) + paper_win = new(user, name, null, 525, 300, null, TRUE) + else + paper_win = new(user, name, null, 450, 500, null, TRUE) paper_win.set_content(dat) paper_win.add_stylesheet("paper_languages", 'html/browser/paper_languages.css') paper_win.open() @@ -169,18 +173,27 @@ if(href_list["next_page"]) if(page != length(pages)) + var/obj/P = pages[page] page++ + var/obj/A = pages[page] playsound(src.loc, /decl/sound_category/page_sound, 50, 1) + if(A.type != P.type) + usr << browse(null, "window=[name]") if(href_list["prev_page"]) if(page > 1) + var/obj/P = pages[page] page-- + var/obj/A = pages[page] playsound(src.loc, /decl/sound_category/page_sound, 50, 1) + if(A.type != P.type) + usr << browse(null, "window=[name]") if(href_list["remove"]) var/obj/item/W = pages[page] usr.put_in_hands(W) pages.Remove(pages[page]) - to_chat(usr, "You remove the [W.name] from the bundle.") + to_chat(usr, SPAN_NOTICE("You remove the [W.name] from the bundle.")) + if(pages.len <= 1) var/obj/item/paper/P = src[1] diff --git a/html/changelogs/wezzy_businesscardbuffs.yml b/html/changelogs/wezzy_businesscardbuffs.yml new file mode 100644 index 00000000000..51d89b3ef62 --- /dev/null +++ b/html/changelogs/wezzy_businesscardbuffs.yml @@ -0,0 +1,42 @@ +################################ +# 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: Wowzewow (Wezzy) + +# 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: "Adds new show-off function to business cards." + - imageadd: "Updates sprites for origami swans and business card related stuff." diff --git a/icons/obj/bureaucracy.dmi b/icons/obj/bureaucracy.dmi index f515e52d799..60d1daeb0d9 100644 Binary files a/icons/obj/bureaucracy.dmi and b/icons/obj/bureaucracy.dmi differ diff --git a/icons/obj/office_supplies.dmi b/icons/obj/office_supplies.dmi deleted file mode 100644 index 4d70073bf39..00000000000 Binary files a/icons/obj/office_supplies.dmi and /dev/null differ diff --git a/icons/obj/storage.dmi b/icons/obj/storage.dmi index 2e5a16d4c75..aa3b668b698 100644 Binary files a/icons/obj/storage.dmi and b/icons/obj/storage.dmi differ