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