diff --git a/code/datums/outfits/outfit.dm b/code/datums/outfits/outfit.dm
index bb69a51178..ef7e9ea8ee 100644
--- a/code/datums/outfits/outfit.dm
+++ b/code/datums/outfits/outfit.dm
@@ -182,6 +182,8 @@ var/list/outfits_decls_by_type_
pda.ownjob = assignment
pda.ownrank = rank
pda.name = "PDA-[H.real_name] ([assignment])"
+ if(H.client.prefs.ringtone) // if null we use the job default
+ pda.ttone = H.client.prefs.ringtone
return pda
/decl/hierarchy/outfit/dd_SortValue()
diff --git a/code/modules/client/preference_setup/general/04_equipment.dm b/code/modules/client/preference_setup/general/04_equipment.dm
index f0d058e4f8..af786e7d64 100644
--- a/code/modules/client/preference_setup/general/04_equipment.dm
+++ b/code/modules/client/preference_setup/general/04_equipment.dm
@@ -12,6 +12,7 @@
S["backbag"] >> pref.backbag
S["pdachoice"] >> pref.pdachoice
S["communicator_visibility"] >> pref.communicator_visibility
+ S["ringtone"] >> pref.ringtone
/datum/category_item/player_setup_item/general/equipment/save_character(var/savefile/S)
S["all_underwear"] << pref.all_underwear
@@ -19,6 +20,7 @@
S["backbag"] << pref.backbag
S["pdachoice"] << pref.pdachoice
S["communicator_visibility"] << pref.communicator_visibility
+ S["ringtone"] << pref.ringtone
// Moved from /datum/preferences/proc/copy_to()
/datum/category_item/player_setup_item/general/equipment/copy_to_mob(var/mob/living/carbon/human/character)
@@ -73,6 +75,7 @@
pref.all_underwear_metadata -= underwear_metadata
pref.backbag = sanitize_integer(pref.backbag, 1, backbaglist.len, initial(pref.backbag))
pref.pdachoice = sanitize_integer(pref.pdachoice, 1, pdachoicelist.len, initial(pref.pdachoice))
+ pref.ringtone = sanitize(pref.ringtone, 20)
/datum/category_item/player_setup_item/general/equipment/content()
. = list()
@@ -89,6 +92,7 @@
. += "Backpack Type: [backbaglist[pref.backbag]]
"
. += "PDA Type: [pdachoicelist[pref.pdachoice]]
"
. += "Communicator Visibility: [(pref.communicator_visibility) ? "Yes" : "No"]
"
+ . += "Ringtone (leave blank for job default): [pref.ringtone]
"
return jointext(.,null)
@@ -146,6 +150,9 @@
if(CanUseTopic(user))
pref.communicator_visibility = !pref.communicator_visibility
return TOPIC_REFRESH
-
+ else if(href_list["set_ringtone"])
+ if(CanUseTopic(user))
+ pref.ringtone = sanitize(input(user, "Please enter a new ringtone.", "Character Preference") as null|text, 20)
+ return TOPIC_REFRESH
return ..()
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index ec19b0e0ab..ef79eccdfa 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -160,6 +160,9 @@ var/list/preferences_datums = list()
// Communicator identity data
var/communicator_visibility = 0
+ /// Default ringtone for character; if blank, use job default.
+ var/ringtone = null
+
var/datum/category_collection/player_setup_collection/player_setup
var/datum/browser/panel
diff --git a/code/modules/pda/pda.dm b/code/modules/pda/pda.dm
index 50d7cca9e7..41b50f72ac 100644
--- a/code/modules/pda/pda.dm
+++ b/code/modules/pda/pda.dm
@@ -33,12 +33,25 @@ var/global/list/obj/item/device/pda/PDAs = list()
"slip" = 'sound/misc/slip.ogg',
"honk" = 'sound/items/bikehorn.ogg',
"SKREE" = 'sound/voice/shriek1.ogg',
- // "holy" = 'sound/items/PDA/ambicha4-short.ogg',
"xeno" = 'sound/voice/hiss1.ogg',
- "dust" = 'sound/effects/supermatter.ogg',
"spark" = 'sound/effects/sparks4.ogg',
"rad" = 'sound/items/geiger/high1.ogg',
- "servo" = 'sound/machines/rig/rigservo.ogg')
+ "servo" = 'sound/machines/rig/rigservo.ogg',
+ "bwoink" = 'sound/effects/adminhelp.ogg',
+ "buh-boop" = 'sound/misc/buh-boop.ogg',
+ "trombone" = 'sound/misc/sadtrombone.ogg',
+ "whistle" = 'sound/misc/boatswain.ogg',
+ "chirp" = 'sound/misc/nymphchirp.ogg',
+ "slurp" = 'sound/items/drink.ogg',
+ "pwing" = 'sound/items/nif_tone_good.ogg',
+ "clack" = 'sound/items/storage/toolbox.ogg',
+ "bzzt" = 'sound/misc/null.ogg', //vibrate mode
+ "chimes" = 'sound/misc/notice3.ogg',
+ "prbt" = 'sound/voice/prbt.ogg',
+ "bark" = 'sound/voice/bark2.ogg',
+ "bork" = 'sound/voice/bork.ogg',
+ "roark" = 'sound/voice/prbt.ogg',
+ "chitter" = 'sound/voice/moth/moth_chitter.ogg')
var/hidden = 0 // Is the PDA hidden from the PDA list?
var/touch_silent = 0 //If 1, no beeps on interacting.
diff --git a/sound/misc/buh-boop.ogg b/sound/misc/buh-boop.ogg
new file mode 100644
index 0000000000..f76ab04e33
Binary files /dev/null and b/sound/misc/buh-boop.ogg differ