diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm
index c08eb25d9fb..cd6324bca17 100644
--- a/code/game/objects/items/devices/PDA/PDA.dm
+++ b/code/game/objects/items/devices/PDA/PDA.dm
@@ -25,7 +25,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
//Secondary variables
var/scanmode = 0 //1 is medical scanner, 2 is forensics, 3 is reagent scanner.
- var/fon = 0 //Is the flashlight function on?
+ var/fon = FALSE //Is the flashlight function on?
var/f_lum = 2 //Luminosity for the flashlight function
var/message_silent = 0 //To beep or not to beep, that is the question
var/news_silent = 1 //To beep or not to beep, that is the question. The answer is No.
@@ -43,7 +43,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
var/cart = "" //A place to stick cartridge menu information
var/detonate = 1 // Can the PDA be blown up?
var/hidden = 0 // Is the PDA hidden from the PDA list?
- var/has_pen = 1 // Does the PDA have a pen + penslot?
+ var/has_inserted_item = TRUE // Does the PDA have a pen + penslot?
var/active_conversation = null // New variable that allows us to only view a single conversation.
var/list/conversations = list() // For keeping up with who we have PDA messsages from.
var/new_message = 0 //To remove hackish overlay check
@@ -65,7 +65,13 @@ var/global/list/obj/item/device/pda/PDAs = list()
var/obj/item/device/paicard/pai = null // A slot for a personal AI device
- var/obj/item/pen/pen
+ var/list/contained_item = list(/obj/item/pen,
+ /obj/item/lipstick,
+ /obj/item/device/flashlight/pen,
+ /obj/item/clothing/mask/smokable/cigarette
+ )
+ var/obj/item/inserted_item //Used for pen, crayon, and lipstick insertion/removal
+
var/list/obj/machinery/requests_console/linked_consoles
var/flippable = 1
@@ -75,166 +81,221 @@ var/global/list/obj/item/device/pda/PDAs = list()
/obj/item/device/pda/examine(mob/user)
if(..(user, 1))
to_chat(user, "The time [worldtime2text()] is displayed in the corner of the screen.")
- if (pen)
- to_chat(user, "There is \a [pen] in the pen slot.")
+ if(id)
+ to_chat(user, "There is \a [id] in the ID slot.")
+ if(inserted_item)
+ to_chat(user, "There is \a [inserted_item] in the pen slot.")
-/obj/item/device/pda/medical
- default_cartridge = /obj/item/cartridge/medical
- icon_state = "pda-m"
+/*
+ * Civillian
+ */
-/obj/item/device/pda/viro
- default_cartridge = /obj/item/cartridge/medical
- icon_state = "pda-v"
+/obj/item/device/pda/bar
+ icon_state = "pda-bar"
+ inserted_item = /obj/item/pen/fountain
-/obj/item/device/pda/engineering
- default_cartridge = /obj/item/cartridge/engineering
- icon_state = "pda-e"
-
-/obj/item/device/pda/security
- default_cartridge = /obj/item/cartridge/security
- icon_state = "pda-s"
-
-/obj/item/device/pda/detective
- default_cartridge = /obj/item/cartridge/detective
- icon_state = "pda-det"
-
-/obj/item/device/pda/warden
- default_cartridge = /obj/item/cartridge/security
- icon_state = "pda-warden"
-
-/obj/item/device/pda/janitor
- default_cartridge = /obj/item/cartridge/janitor
- icon_state = "pda-j"
- ttone = "slip"
-
-/obj/item/device/pda/science
- default_cartridge = /obj/item/cartridge/signal/science
- icon_state = "pda-tox"
- ttone = "boom"
-
-/obj/item/device/pda/xenobio
- default_cartridge = /obj/item/cartridge/signal/science
- icon_state = "pda-xenobio"
-
-/obj/item/device/pda/clown
- default_cartridge = /obj/item/cartridge/clown
- icon_state = "pda-clown"
- desc = "A portable microcomputer by Thinktronic Systems, LTD. The surface is coated with polytetrafluoroethylene and banana drippings."
- ttone = "honk"
-
-/obj/item/device/pda/mime
- default_cartridge = /obj/item/cartridge/mime
- icon_state = "pda-mime"
- message_silent = 1
- news_silent = 1
- ttone = "silence"
- newstone = "silence"
-
-/obj/item/device/pda/heads
- default_cartridge = /obj/item/cartridge/head
- icon_state = "pda-h"
- news_silent = 1
-
-/obj/item/device/pda/heads/hop
- default_cartridge = /obj/item/cartridge/hop
- icon_state = "pda-hop"
-
-/obj/item/device/pda/heads/hos
- default_cartridge = /obj/item/cartridge/hos
- icon_state = "pda-hos"
-
-/obj/item/device/pda/heads/ce
- default_cartridge = /obj/item/cartridge/ce
- icon_state = "pda-ce"
-
-/obj/item/device/pda/heads/cmo
- default_cartridge = /obj/item/cartridge/cmo
- icon_state = "pda-cmo"
-
-/obj/item/device/pda/heads/rd
- default_cartridge = /obj/item/cartridge/rd
- icon_state = "pda-rd"
-
-/obj/item/device/pda/captain
- default_cartridge = /obj/item/cartridge/captain
- icon_state = "pda-c"
- detonate = 0
- //toff = 1
-
-/obj/item/device/pda/ert
- default_cartridge = /obj/item/cartridge/captain
- icon_state = "pda-h"
- detonate = 0
- hidden = 1
-
-/obj/item/device/pda/cargo
- default_cartridge = /obj/item/cartridge/quartermaster
- icon_state = "pda-cargo"
-
-/obj/item/device/pda/quartermaster
- default_cartridge = /obj/item/cartridge/quartermaster
- icon_state = "pda-q"
-
-/obj/item/device/pda/shaftminer
- icon_state = "pda-miner"
-
-/obj/item/device/pda/syndicate
- default_cartridge = /obj/item/cartridge/syndicate
- icon_state = "pda-syn"
- name = "Military PDA"
- owner = "John Doe"
- hidden = 1
-
-/obj/item/device/pda/chaplain
- icon_state = "pda-holy"
- ttone = "holy"
-
-/obj/item/device/pda/lawyer
- default_cartridge = /obj/item/cartridge/lawyer
- icon_state = "pda-lawyer"
- ttone = "..."
+/obj/item/device/pda/chef
+ icon_state = "pda-chef"
/obj/item/device/pda/botanist
//default_cartridge = /obj/item/cartridge/botanist
icon_state = "pda-hydro"
-/obj/item/device/pda/roboticist
- icon_state = "pda-robot"
-
/obj/item/device/pda/librarian
icon_state = "pda-libb"
+ inserted_item = /obj/item/pen/fountain
desc = "A portable microcomputer by Thinktronic Systems, LTD. This is model is a WGW-11 series e-reader."
note = "Congratulations, your station has chosen the Thinktronic 5290 WGW-11 Series E-reader and Personal Data Assistant!"
message_silent = 1 //Quiet in the library!
news_silent = 0 // Librarian is above the law! (That and alt job title is reporter)
+/obj/item/device/pda/janitor
+ icon_state = "pda-j"
+ default_cartridge = /obj/item/cartridge/janitor
+ ttone = "slip"
+
+/obj/item/device/pda/chaplain
+ icon_state = "pda-holy"
+ inserted_item = /obj/item/pen/fountain
+ ttone = "holy"
+
+/obj/item/device/pda/heads/hop
+ icon_state = "pda-hop"
+ default_cartridge = /obj/item/cartridge/hop
+
+/*
+ * Engineering
+ */
+
+ /obj/item/device/pda/atmos
+ icon_state = "pda-atmo"
+ default_cartridge = /obj/item/cartridge/atmos
+ inserted_item = /obj/item/pen/silver
+
+/obj/item/device/pda/engineering
+ icon_state = "pda-e"
+ default_cartridge = /obj/item/cartridge/engineering
+ inserted_item = /obj/item/pen/silver
+
+/obj/item/device/pda/heads/ce
+ icon_state = "pda-ce"
+ default_cartridge = /obj/item/cartridge/ce
+
+ /*
+ * Cargo
+ */
+
+ /obj/item/device/pda/cargo
+ icon_state = "pda-cargo"
+ default_cartridge = /obj/item/cartridge/quartermaster
+ inserted_item = /obj/item/pen/silver
+
+/obj/item/device/pda/shaftminer
+ icon_state = "pda-miner"
+ inserted_item = /obj/item/pen/silver
+
+/obj/item/device/pda/quartermaster
+ icon_state = "pda-q"
+ default_cartridge = /obj/item/cartridge/quartermaster
+ inserted_item = /obj/item/pen/fountain
+
+/*
+ * Medical
+ */
+
+/obj/item/device/pda/medical
+ icon_state = "pda-m"
+ default_cartridge = /obj/item/cartridge/medical
+ inserted_item = /obj/item/pen/white
+
+/obj/item/device/pda/viro
+ icon_state = "pda-v"
+ default_cartridge = /obj/item/cartridge/medical
+ inserted_item = /obj/item/pen/white
+
+/obj/item/device/pda/chemist
+ icon_state = "pda-chem"
+ default_cartridge = /obj/item/cartridge/chemistry
+ inserted_item = /obj/item/pen/white
+
+/obj/item/device/pda/psych
+ icon_state = "pda-psych"
+ default_cartridge = /obj/item/cartridge/medical
+ inserted_item = /obj/item/pen/fountain/white
+
+/obj/item/device/pda/paramedic
+ icon_state = "pda-paramedic"
+ default_cartridge = /obj/item/cartridge/medical
+ inserted_item = /obj/item/pen/white
+
+/obj/item/device/pda/heads/cmo
+ icon_state = "pda-cmo"
+ default_cartridge = /obj/item/cartridge/cmo
+
+/*
+ * Science
+ */
+
+/obj/item/device/pda/science
+ icon_state = "pda-tox"
+ default_cartridge = /obj/item/cartridge/signal/science
+ inserted_item = /obj/item/pen/white
+ ttone = "boom"
+
+/obj/item/device/pda/roboticist
+ icon_state = "pda-robot"
+
+/obj/item/device/pda/xenobio
+ icon_state = "pda-xenobio"
+ default_cartridge = /obj/item/cartridge/signal/science
+ inserted_item = /obj/item/pen/white
+
+/obj/item/device/pda/heads/rd
+ icon_state = "pda-rd"
+ default_cartridge = /obj/item/cartridge/rd
+
+/*
+ * Security
+ */
+
+
+/obj/item/device/pda/security
+ icon_state = "pda-s"
+ default_cartridge = /obj/item/cartridge/security
+
+/obj/item/device/pda/detective
+ icon_state = "pda-det"
+ default_cartridge = /obj/item/cartridge/detective
+
+/obj/item/device/pda/warden
+ icon_state = "pda-warden"
+ default_cartridge = /obj/item/cartridge/security
+
+/obj/item/device/pda/heads/hos
+ icon_state = "pda-hos"
+ default_cartridge = /obj/item/cartridge/hos
+
+/*
+ * Captain
+ */
+
+/obj/item/device/pda/heads
+ icon_state = "pda-h"
+ default_cartridge = /obj/item/cartridge/head
+ inserted_item = /obj/item/pen/fountain/head
+ news_silent = 1
+
+/obj/item/device/pda/captain
+ icon_state = "pda-c"
+ default_cartridge = /obj/item/cartridge/captain
+ inserted_item = /obj/item/pen/fountain/captain
+ detonate = 0
+ //toff = 1
+
+/*
+ * Misc
+ */
+
+/obj/item/device/pda/lawyer
+ icon_state = "pda-lawyer"
+ default_cartridge = /obj/item/cartridge/lawyer
+ inserted_item = /obj/item/pen/fountain
+ ttone = "..."
+
+/obj/item/device/pda/syndicate
+ icon_state = "pda-syn"
+ default_cartridge = /obj/item/cartridge/syndicate
+ inserted_item = /obj/item/pen/black
+ name = "Military PDA"
+ owner = "John Doe"
+ hidden = 1
+
+/obj/item/device/pda/clown
+ icon_state = "pda-clown"
+ default_cartridge = /obj/item/cartridge/clown
+ inserted_item = /obj/item/pen/crayon
+ desc = "A portable microcomputer by Thinktronic Systems, LTD. The surface is coated with polytetrafluoroethylene and banana drippings."
+ ttone = "honk"
+
+/obj/item/device/pda/mime
+ icon_state = "pda-mime"
+ default_cartridge = /obj/item/cartridge/mime
+ message_silent = 1
+ news_silent = 1
+ ttone = "silence"
+ newstone = "silence"
+
+/obj/item/device/pda/ert
+ icon_state = "pda-h"
+ default_cartridge = /obj/item/cartridge/captain
+ detonate = 0
+ hidden = 1
+
/obj/item/device/pda/clear
icon_state = "pda-transp"
desc = "A portable microcomputer by Thinktronic Systems, LTD. This is model is a special edition with a transparent case."
note = "Congratulations, you have chosen the Thinktronic 5230 Personal Data Assistant Deluxe Special Max Turbo Limited Edition!"
-/obj/item/device/pda/chef
- icon_state = "pda-chef"
-
-/obj/item/device/pda/bar
- icon_state = "pda-bar"
-
-/obj/item/device/pda/atmos
- default_cartridge = /obj/item/cartridge/atmos
- icon_state = "pda-atmo"
-
-/obj/item/device/pda/chemist
- default_cartridge = /obj/item/cartridge/chemistry
- icon_state = "pda-chem"
-
-/obj/item/device/pda/psych
- default_cartridge = /obj/item/cartridge/medical
- icon_state = "pda-psych"
-
-/obj/item/device/pda/paramedic
- default_cartridge = /obj/item/cartridge/medical
- icon_state = "pda-paramedic"
-
/obj/item/device/pda/merchant
icon_state = "pda-chef"
hidden = 1
@@ -245,7 +306,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
ttone = "data"
newstone = "news"
detonate = 0
- has_pen = 0
+ has_inserted_item = FALSE
/obj/item/device/pda/ai/proc/set_name_and_job(newname as text, newjob as text, newrank as null|text)
@@ -336,9 +397,10 @@ var/global/list/obj/item/device/pda/PDAs = list()
try_sort_pda_list()
if(default_cartridge)
cartridge = new default_cartridge(src)
-
- if (has_pen)
- pen = new /obj/item/pen(src)
+ if(inserted_item)
+ inserted_item = new inserted_item(src)
+ else
+ inserted_item = new /obj/item/pen(src)
/obj/item/device/pda/proc/try_sort_pda_list()
addtimer(CALLBACK(GLOBAL_PROC, /proc/sortTim, PDAs, /proc/cmp_pda), 1 SECOND, TIMER_UNIQUE | TIMER_OVERRIDE | TIMER_NO_HASH_WAIT)
@@ -667,10 +729,10 @@ var/global/list/obj/item/device/pda/PDAs = list()
if("Light")
if(fon)
- fon = 0
+ fon = FALSE
set_light(0)
else
- fon = 1
+ fon = TRUE
set_light(f_lum)
if("Medical Scan")
if(scanmode == 1)
@@ -965,13 +1027,47 @@ var/global/list/obj/item/device/pda/PDAs = list()
qdel(P)
+/obj/item/device/pda/AltClick()
+ ..()
+
+ if(id)
+ remove_id()
+ else
+ remove_pen()
+
+/obj/item/device/pda/CtrlClick()
+ ..()
+
+ if(isturf(loc)) //stops the user from dragging the PDA by ctrl-clicking it.
+ return
+
+ remove_pen()
+
+/obj/item/device/pda/verb/verb_toggle_light()
+ set category = "Object"
+ set name = "Toggle Flashlight"
+
+ toggle_light()
+
+/obj/item/device/pda/proc/toggle_light()
+ if(issilicon(usr))
+ return
+ if(ismob(loc))
+ if(fon)
+ fon = FALSE
+ set_light(0)
+ else if(f_lum)
+ fon = TRUE
+ set_light(f_lum)
+ update_icon()
+
/obj/item/device/pda/proc/remove_id()
if (id)
if (ismob(loc))
var/mob/M = loc
M.put_in_hands(id)
to_chat(usr, "You remove the ID from the [name].")
- playsound(loc, 'sound/machines/id_swipe.ogg', 100, 1)
+ playsound(loc, 'sound/machines/id_swipe.ogg', 50, 1)
else
id.forceMove(get_turf(src))
id = null
@@ -979,7 +1075,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
/obj/item/device/pda/proc/remove_pen(mob/user)
if (!istype(user))
return
- if (!has_pen)
+ if (!has_inserted_item)
to_chat(user, "[src] does not have a pen slot.")
return
@@ -988,14 +1084,14 @@ var/global/list/obj/item/device/pda/PDAs = list()
to_chat(user, "You are too far away from [src].")
if (USE_FAIL_NON_ADV_TOOL_USR)
- if (!pen)
+ if (!inserted_item)
to_chat(user, "[src] does not have a pen in it.")
else
- to_chat(user, "You are unable to figure out the mechanism holding [pen] in-place.")
+ to_chat(user, "You are unable to figure out the mechanism holding \the [inserted_item] in-place.")
if (USE_FAIL_IS_SILICON)
- if (pen)
- to_chat(user, "You do not have hands, how do you propose to remove [pen]?")
+ if (inserted_item)
+ to_chat(user, "You do not have hands, how do you propose to remove \the [inserted_item]?")
else
to_chat(user, "You do not have hands.")
@@ -1003,18 +1099,20 @@ var/global/list/obj/item/device/pda/PDAs = list()
to_chat(user, "You cannot do this in your current state.")
if (USE_SUCCESS)
- if (!pen)
- to_chat(user, "[src] does not have a pen in it.")
+ if (!inserted_item)
+ to_chat(user, "[src] does not have pen in it.")
return
if (loc == user && !user.get_active_hand())
- to_chat(user, "You remove [pen] from [src].")
- user.put_in_hands(pen)
- pen = null
+ to_chat(user, "You remove \the [inserted_item] from [src].")
+ playsound(src.loc, 'sound/weapons/blade_open.ogg', 50, 1)
+ user.put_in_hands(inserted_item)
+ inserted_item = null
else
- to_chat(user, "You remove [pen] from [src], dropping it on the ground. Whoops.")
- pen.forceMove(get_turf(src))
- pen = null
+ to_chat(user, "You remove \the [inserted_item] from [src], dropping it on the ground. Whoops.")
+ playsound(src.loc, 'sound/weapons/blade_open.ogg', 50, 1)
+ inserted_item.forceMove(get_turf(src))
+ inserted_item = null
/obj/item/device/pda/proc/create_message(var/mob/living/U = usr, var/obj/item/device/pda/P, var/tap = 1)
if(tap)
@@ -1235,7 +1333,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
if (cartridge.radio)
cartridge.radio.hostpda = null
to_chat(usr, "You remove \the [cartridge] from the [name].")
- playsound(loc, 'sound/machines/click.ogg', 100, 1)
+ playsound(loc, 'sound/machines/click.ogg', 50, 1)
cartridge = null
/obj/item/device/pda/proc/id_check(mob/user as mob, choice as num)//To check for IDs; 1 for in-pda use, 2 for out of pda use.
@@ -1266,7 +1364,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
cartridge = C
user.drop_from_inventory(cartridge,src)
to_chat(user, "You insert [cartridge] into [src].")
- playsound(loc, 'sound/machines/click.ogg', 100, 1)
+ playsound(loc, 'sound/machines/click.ogg', 50, 1)
SSnanoui.update_uis(src) // update all UIs attached to src
if(cartridge.radio)
cartridge.radio.hostpda = src
@@ -1283,7 +1381,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
if(((src in user.contents) && (C in user.contents)) || (istype(loc, /turf) && in_range(src, user) && (C in user.contents)) )
if(id_check(user, 2))
to_chat(user, "You put the ID into \the [src]'s slot.")
- playsound(loc, 'sound/machines/id_swipe.ogg', 100, 1)
+ playsound(loc, 'sound/machines/id_swipe.ogg', 50, 1)
updateSelfDialog()//Update self dialog on success.
return //Return in case of failed check or when successful.
updateSelfDialog()//For the non-input related code.
@@ -1293,13 +1391,14 @@ var/global/list/obj/item/device/pda/PDAs = list()
pai.update_location()//This notifies the pAI that they've been slotted into a PDA
to_chat(user, "You slot \the [C] into [src].")
SSnanoui.update_uis(src) // update all UIs attached to src
- else if(C.ispen())
- if(pen)
- to_chat(user, "There is already a pen in \the [src].")
+ else if(is_type_in_list(C, contained_item)) //Checks if there is a pen
+ if(inserted_item)
+ to_chat(user, "There is already \a [inserted_item] in \the [src].")
else
user.drop_from_inventory(C,src)
- pen = C
+ inserted_item = C
to_chat(user, "You slide \the [C] into \the [src].")
+ playsound(src.loc, 'sound/weapons/blade_close.ogg', 50, 1)
return
/obj/item/device/pda/proc/update_userinfo(var/obj/item/card/id/idcard, var/mob/living/user)
@@ -1454,7 +1553,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
/obj/item/device/pda/Destroy()
PDAs -= src
QDEL_NULL(id)
- QDEL_NULL(pen)
+ QDEL_NULL(inserted_item)
if (LAZYLEN(linked_consoles))
for(var/A in linked_consoles)
var/obj/machinery/requests_console/B = A
diff --git a/code/game/objects/items/devices/lighting/flashlight.dm b/code/game/objects/items/devices/lighting/flashlight.dm
index 4e5f7401714..b5de521372b 100644
--- a/code/game/objects/items/devices/lighting/flashlight.dm
+++ b/code/game/objects/items/devices/lighting/flashlight.dm
@@ -101,6 +101,7 @@
desc = "A pen-sized light, used by medical staff."
icon_state = "penlight"
item_state = ""
+ drop_sound = 'sound/items/drop/accessory.ogg'
flags = CONDUCT
slot_flags = SLOT_EARS
brightness_on = 2
diff --git a/code/game/objects/items/weapons/material/knives.dm b/code/game/objects/items/weapons/material/knives.dm
index c9b8b78dba8..bd62a540e21 100644
--- a/code/game/objects/items/weapons/material/knives.dm
+++ b/code/game/objects/items/weapons/material/knives.dm
@@ -140,8 +140,9 @@
active = !active
if(active)
to_chat(user, "You flip out \the [src].")
- playsound(user, 'sound/weapons/flipblade.ogg', 15, 1)
+ playsound(user, 'sound/weapons/blade_open.ogg', 15, 1)
else
to_chat(user, "\The [src] can now be concealed.")
+ playsound(user, 'sound/weapons/blade_close.ogg', 15, 1)
update_force()
add_fingerprint(user)
diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm
index 96d82b40592..c5523ea5b78 100644
--- a/code/game/objects/items/weapons/storage/boxes.dm
+++ b/code/game/objects/items/weapons/storage/boxes.dm
@@ -768,3 +768,7 @@
max_storage_space = 20
chewable = FALSE
foldable = null
+
+/obj/item/storage/box/fountainpens
+ name = "box of fountain pens"
+ starts_with = list(/obj/item/pen/fountain = 7)
diff --git a/code/modules/client/preference_setup/loadout/loadout_utility.dm b/code/modules/client/preference_setup/loadout/loadout_utility.dm
index 062fd3db0e0..4ced6091792 100644
--- a/code/modules/client/preference_setup/loadout/loadout_utility.dm
+++ b/code/modules/client/preference_setup/loadout/loadout_utility.dm
@@ -26,6 +26,21 @@
folders["yellow folder"] = /obj/item/folder/yellow
gear_tweaks += new/datum/gear_tweak/path(folders)
+/datum/gear/utility/fountainpen
+ display_name = "fountain pen selection"
+ description = "A selection of fountain pens."
+ path = /obj/item/pen/fountain
+ cost = 1
+
+/datum/gear/utility/fountainpen/New()
+ ..()
+ var/fountainpens = list()
+ fountainpens["black fountain pen"] = /obj/item/pen/fountain/black
+ fountainpens["grey fountain pen"] = /obj/item/pen/fountain
+ fountainpens["silver fountain pen"] = /obj/item/pen/fountain/silver
+ fountainpens["white fountain pen"] = /obj/item/pen/fountain/white
+ gear_tweaks += new/datum/gear_tweak/path(fountainpens)
+
/datum/gear/utility/paicard
display_name = "personal AI device"
path = /obj/item/device/paicard
diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm
index c06dfddc4a7..cfd594752b1 100644
--- a/code/modules/paperwork/paper.dm
+++ b/code/modules/paperwork/paper.dm
@@ -35,6 +35,7 @@
var/const/deffont = "Verdana"
var/const/signfont = "Times New Roman"
var/const/crayonfont = "Comic Sans MS"
+ var/const/fountainfont = "Segoe Script"
drop_sound = 'sound/items/drop/paper.ogg'
@@ -263,7 +264,7 @@
return signfont
-/obj/item/paper/proc/parsepencode(t, obj/item/pen/P, mob/user, iscrayon)
+/obj/item/paper/proc/parsepencode(t, obj/item/pen/P, mob/user, iscrayon, isfountain)
t = replacetext(t, "\[sign\]", "[get_signature(P, user)]")
@@ -289,6 +290,8 @@
if(iscrayon)
t = "[t]"
+ else if(isfountain)
+ t = "[t]"
else
t = "[t]"
@@ -362,7 +365,8 @@
var/obj/item/i = usr.get_active_hand() // Check to see if he still got that darn pen, also check if he's using a crayon or pen.
var/obj/item/clipboard/c
- var/iscrayon = 0
+ var/iscrayon = FALSE
+ var/isfountain = FALSE
if(!i.ispen())
if(usr.back && istype(usr.back,/obj/item/rig))
var/obj/item/rig/r = usr.back
@@ -381,8 +385,10 @@
return
if(istype(i, /obj/item/pen/crayon))
- iscrayon = 1
+ iscrayon = TRUE
+ if(istype(i, /obj/item/pen/fountain))
+ isfountain = TRUE
// if paper is not in usr, then it must be near them, or in a clipboard or folder, which must be in or near usr
if(src.loc != usr && !src.Adjacent(usr) && !((istype(src.loc, /obj/item/clipboard) || istype(src.loc, /obj/item/folder)) && (src.loc.loc == usr || src.loc.Adjacent(usr)) ) )
@@ -390,7 +396,7 @@
var/last_fields_value = fields
- t = parsepencode(t, i, usr, iscrayon) // Encode everything from pencode to html
+ t = parsepencode(t, i, usr, iscrayon, isfountain) // Encode everything from pencode to html
if(fields > 50)//large amount of fields creates a heavy load on the server, see updateinfolinks() and addtofield()
diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm
index b99332810d6..0b73339c76e 100644
--- a/code/modules/paperwork/pen.dm
+++ b/code/modules/paperwork/pen.dm
@@ -1,8 +1,11 @@
/* Pens!
* Contains:
* Pens
+ * PDA Pens
* Sleepy Pens
+ * Coloured Pens
* Parapens
+ * Fountain Pens
*/
@@ -10,7 +13,7 @@
* Pens
*/
/obj/item/pen
- desc = "An instrument for writing or drawing with ink. This one is in black. Stylish, classic and professional."
+ 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"
@@ -27,6 +30,26 @@
/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"
@@ -37,6 +60,11 @@
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"
@@ -56,12 +84,6 @@
to_chat(user, "Changed color to '[colour].'")
-/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/attack(mob/M as mob, mob/user as mob, var/target_zone)
if(!ismob(M))
return
@@ -75,6 +97,44 @@
/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
+
+/obj/item/pen/fountain/attack_self(var/mob/user)
+ return
+/*
+ * 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
*/
@@ -185,6 +245,7 @@
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
diff --git a/code/modules/projectiles/guns/launcher/syringe_gun.dm b/code/modules/projectiles/guns/launcher/syringe_gun.dm
index a4f1857d477..e46c0f70473 100644
--- a/code/modules/projectiles/guns/launcher/syringe_gun.dm
+++ b/code/modules/projectiles/guns/launcher/syringe_gun.dm
@@ -97,9 +97,10 @@
/obj/item/gun/launcher/syringe/attack_self(mob/living/user as mob)
if(next)
user.visible_message("[user] unlatches and carefully relaxes the bolt on [src].", "You unlatch and carefully relax the bolt on [src], unloading the spring.")
+ playsound(src.loc, 'sound/weapons/blade_close.ogg', 50, 1)
next = null
else if(darts.len)
- playsound(src.loc, 'sound/weapons/flipblade.ogg', 50, 1)
+ playsound(src.loc, 'sound/weapons/blade_open.ogg', 50, 1)
user.visible_message("[user] draws back the bolt on [src], clicking it into place.", "You draw back the bolt on the [src], loading the spring!")
next = darts[1]
add_fingerprint(user)
diff --git a/code/modules/projectiles/guns/projectile.dm b/code/modules/projectiles/guns/projectile.dm
index 06681175e36..8191c600586 100644
--- a/code/modules/projectiles/guns/projectile.dm
+++ b/code/modules/projectiles/guns/projectile.dm
@@ -128,7 +128,7 @@
AM.forceMove(src)
ammo_magazine = AM
user.visible_message("[user] inserts [AM] into [src].", "You insert [AM] into [src].")
- playsound(src.loc, 'sound/weapons/flipblade.ogg', 50, 1)
+ playsound(src.loc, 'sound/weapons/blade_open.ogg', 50, 1)
if(SPEEDLOADER)
if(loaded.len >= max_shells)
to_chat(user,"[src] is full!")
diff --git a/code/modules/projectiles/guns/projectile/sniper.dm b/code/modules/projectiles/guns/projectile/sniper.dm
index 46d4be5b9ef..372fa826a5e 100644
--- a/code/modules/projectiles/guns/projectile/sniper.dm
+++ b/code/modules/projectiles/guns/projectile/sniper.dm
@@ -37,9 +37,9 @@
update_held_icon()
/obj/item/gun/projectile/heavysniper/attack_self(mob/user as mob)
- playsound(src.loc, 'sound/weapons/flipblade.ogg', 50, 1)
bolt_open = !bolt_open
if(bolt_open)
+ playsound(src.loc, 'sound/weapons/blade_open.ogg', 50, 1)
if(chambered)
to_chat(user, "You work the bolt open, ejecting [chambered]!")
chambered.forceMove(get_turf(src))
@@ -49,6 +49,7 @@
to_chat(user, "You work the bolt open.")
else
to_chat(user, "You work the bolt closed.")
+ playsound(src.loc, 'sound/weapons/blade_close.ogg', 50, 1)
bolt_open = 0
add_fingerprint(user)
update_icon()
diff --git a/html/changelogs/wezzy_PPAP.yml b/html/changelogs/wezzy_PPAP.yml
new file mode 100644
index 00000000000..3e9762ea10b
--- /dev/null
+++ b/html/changelogs/wezzy_PPAP.yml
@@ -0,0 +1,45 @@
+################################
+# 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:
+ - imageadd: "PDA sprites are on lightmode again."
+ - rscadd: "You can now put pen-shaped things into the PDA pen slot."
+ - rscadd: "New fountain pens! Write like a 19th century person writing a letter like some kind of space hipster!"
+ - tweak: "PDAs now have color coded pens to go with them as well. Some even have fountain pens!"
+ - soundadd: "Pen insertion and removal have new sounds."
diff --git a/icons/obj/bureaucracy.dmi b/icons/obj/bureaucracy.dmi
index 6e56bb30181..9543ca4b57f 100644
Binary files a/icons/obj/bureaucracy.dmi and b/icons/obj/bureaucracy.dmi differ
diff --git a/icons/obj/card.dmi b/icons/obj/card.dmi
index e9a6d36c9c4..278856910b8 100644
Binary files a/icons/obj/card.dmi and b/icons/obj/card.dmi differ
diff --git a/icons/obj/lighting.dmi b/icons/obj/lighting.dmi
index d55ba484bfc..c59e642d019 100644
Binary files a/icons/obj/lighting.dmi and b/icons/obj/lighting.dmi differ
diff --git a/icons/obj/pda.dmi b/icons/obj/pda.dmi
index 165ed828ae4..db98a8f9aec 100644
Binary files a/icons/obj/pda.dmi and b/icons/obj/pda.dmi differ
diff --git a/sound/weapons/blade_close.ogg b/sound/weapons/blade_close.ogg
new file mode 100644
index 00000000000..43d17ce8368
Binary files /dev/null and b/sound/weapons/blade_close.ogg differ
diff --git a/sound/effects/flipblade.ogg b/sound/weapons/blade_open.ogg
similarity index 100%
rename from sound/effects/flipblade.ogg
rename to sound/weapons/blade_open.ogg
diff --git a/sound/weapons/flipblade.ogg b/sound/weapons/flipblade.ogg
deleted file mode 100644
index 09fc995b4fa..00000000000
Binary files a/sound/weapons/flipblade.ogg and /dev/null differ