diff --git a/code/__DEFINES/flags.dm b/code/__DEFINES/flags.dm
index ffd3acfb82ca..38d0138139ff 100644
--- a/code/__DEFINES/flags.dm
+++ b/code/__DEFINES/flags.dm
@@ -211,3 +211,5 @@ var/global/list/bitflags = list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204
#define ALCOHOL_TOLERANCE_EPILEPSY (1<<0)
#define WATER_CHOKE_EPILEPSY (1<<1)
+
+#define STANDARD_PDA_RINGTONE (1<<0)
diff --git a/code/__DEFINES/pda.dm b/code/__DEFINES/pda.dm
new file mode 100644
index 000000000000..40c0a022d9ac
--- /dev/null
+++ b/code/__DEFINES/pda.dm
@@ -0,0 +1,3 @@
+#define MAX_CUSTOM_RINGTONE_LENGTH 150
+
+#define CUSTOM_RINGTONE_NAME "My Ringtone"
diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm
index bfb64cd83e61..a6aa0a86735e 100644
--- a/code/__HELPERS/global_lists.dm
+++ b/code/__HELPERS/global_lists.dm
@@ -287,6 +287,10 @@
for(var/pool in L)
LAZYADD(virus_types_by_pool[pool], e)
+ global.ringtones_by_names = list()
+ for(var/datum/ringtone/Ring as anything in subtypesof(/datum/ringtone))
+ global.ringtones_by_names["[initial(Ring.name)]"] = new Ring
+
/proc/init_joblist() // Moved here because we need to load map config to edit jobs, called from SSjobs
//List of job. I can't believe this was calculated multiple times per tick!
for(var/T in (subtypesof(/datum/job) - list(/datum/job/ai,/datum/job/cyborg)))
diff --git a/code/controllers/subsystem/jobs.dm b/code/controllers/subsystem/jobs.dm
index dc7ae8b47f1d..1921233f1d05 100644
--- a/code/controllers/subsystem/jobs.dm
+++ b/code/controllers/subsystem/jobs.dm
@@ -619,6 +619,10 @@ SUBSYSTEM_DEF(job)
pda.owner_fingerprints += C.fingerprint_hash //save fingerprints in pda from ID card
MA.owner_PDA = pda //add PDA in /datum/money_account
+ var/chosen_ringtone = H.client?.prefs.chosen_ringtone
+ if(chosen_ringtone)
+ pda.set_ringtone(chosen_ringtone, H.client?.prefs.custom_melody)
+
return TRUE
/datum/controller/subsystem/job/proc/LoadJobs(jobsfile)
diff --git a/code/datums/music_player.dm b/code/datums/music_player.dm
index 6cd888a21627..1e3ed0bd3c07 100644
--- a/code/datums/music_player.dm
+++ b/code/datums/music_player.dm
@@ -276,7 +276,6 @@ var/global/datum/notes_storage/note_cache_storage = new
var/sound/S = global.note_cache_storage.instrument_sound_notes["[sound_path]/[current_note]"]
if(!S)
S = global.note_cache_storage.instrument_sound_notes["[sound_path]/[current_note]"] = sound("[sound_path]/[current_note].ogg")
-
playsound(instrument, S, VOL_EFFECTS_INSTRUMENT, volume, FALSE, null, null, falloff = 5)
var/pause_time = COUNT_PAUSE(song_tempo)
diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm
index 7ba3be1a7124..ce34416ce86c 100644
--- a/code/game/objects/items/devices/PDA/PDA.dm
+++ b/code/game/objects/items/devices/PDA/PDA.dm
@@ -81,6 +81,8 @@
item_action_types = list(/datum/action/item_action/hands_free/toggle_pda_light)
+ var/datum/music_player/chiptune_player
+
/datum/action/item_action/hands_free/toggle_pda_light
name = "Toggle light"
@@ -97,6 +99,10 @@
if(default_pen)
pen = new default_pen(src)
+ chiptune_player = new(src, "sound/musical_instruments/pda")
+
+ set_ringtone(pick(ringtones_by_names))
+
/obj/item/device/pda/Destroy()
var/datum/money_account/MA = get_account(owner_account)
if(MA)
@@ -110,8 +116,14 @@
else
QDEL_NULL(id)
QDEL_NULL(pen)
+
+ QDEL_NULL(chiptune_player)
+
return ..()
+/obj/item/device/pda/unable_to_play(mob/living/user)
+ return FALSE
+
/obj/item/device/pda/examine(mob/user)
..()
if(src in user)
@@ -796,6 +808,7 @@
if(mode in safe_pages)
mode = 0 //for safety
ui_interact(user) //NanoUI requires this proc
+ stop_ringtone()
return
/obj/item/device/pda/Topic(href, href_list)
@@ -944,6 +957,8 @@
toff = !toff
if("Toggle Ringer")//If viewing texts then erase them, if not then toggle silent status
message_silent = !message_silent
+ if(message_silent)
+ stop_ringtone()
if("Clear")//Clears messages
if(href_list["option"] == "All")
tnote.Cut()
@@ -961,20 +976,27 @@
mode=2
if("Ringtone")
- var/t = sanitize(input(U, "Please enter new ringtone", name, input_default(ttone)) as text, 20)
- if (t && Adjacent(U))
- if(src.hidden_uplink && hidden_uplink.check_trigger(U, lowertext(t), lowertext(lock_code)))
- to_chat(U, "The PDA softly beeps.")
- ui.close()
- else
- ttone = t
- else
- ui.close()
- return 0
- if("Message")
+ stop_ringtone()
+ var/list/chose_ringtone = global.ringtones_by_names + CUSTOM_RINGTONE_NAME
+ var/Tone = input(U, "Выберите рингтон", name) as null|anything in chose_ringtone
+ if(Tone && Adjacent(U))
+ var/t
+ if(Tone == CUSTOM_RINGTONE_NAME)
+ t = sanitize(input(U, "Введите новый рингтон") as message|null, MAX_CUSTOM_RINGTONE_LENGTH, extra = FALSE, ascii_only = TRUE)
+ if (!t || !Adjacent(U))
+ return
+ if(src.hidden_uplink && hidden_uplink.check_trigger(U, lowertext(t), lowertext(lock_code)))
+ to_chat(U, "The PDA softly beeps.")
+ ui.close()
+ else
+
+ set_ringtone(Tone, t)
+ play_ringtone(ignore_presence = TRUE)
+ if("Message")
var/obj/item/device/pda/P = locate(href_list["target"])
create_message(U, P, !href_list["notap"])
+ stop_ringtone()
if(mode == 2)
if(href_list["target"] in conversations) // Need to make sure the message went through, if not welp.
active_conversation = href_list["target"]
@@ -1564,7 +1586,7 @@
nanomanager.update_user_uis(U, src) // Update the sending user's PDA UI so that they can see the new message
if (!P.message_silent)
- playsound(P, 'sound/machines/twobeep.ogg', VOL_EFFECTS_MASTER)
+ P.play_ringtone()
P.audible_message("[bicon(P)] *[P.ttone]*", hearing_distance = 3)
//Search for holder of the PDA.
@@ -1947,4 +1969,37 @@
return FALSE
return TRUE
+/obj/item/device/pda/proc/play_ringtone(ignore_presence = FALSE)
+ if(!ignore_presence)
+ var/mob/user = usr
+ if(nanomanager.get_open_ui(user, src, "main"))
+ return
+
+ if(chiptune_player.playing)
+ return
+
+ chiptune_player.playing = TRUE
+ INVOKE_ASYNC(chiptune_player, TYPE_PROC_REF(/datum/music_player, playsong), null)
+
+/obj/item/device/pda/proc/stop_ringtone()
+ chiptune_player.playing = FALSE
+
+/obj/item/device/pda/proc/set_ringtone(ringtone, melody = null)
+ if(!ringtone)
+ return
+ stop_ringtone()
+
+ if(ringtone == CUSTOM_RINGTONE_NAME)
+ if(!melody)
+ return
+
+ chiptune_player.repeat = 1
+ chiptune_player.parse_song_text(melody)
+ else
+ var/datum/ringtone/Ring = global.ringtones_by_names[ringtone]
+ if(!Ring)
+ return
+ chiptune_player.repeat = Ring.replays
+ chiptune_player.parse_song_text(Ring.melody)
+
#undef TRANSCATION_COOLDOWN
diff --git a/code/game/objects/items/devices/PDA/Ringtones.dm b/code/game/objects/items/devices/PDA/Ringtones.dm
new file mode 100644
index 000000000000..4fe1409a0040
--- /dev/null
+++ b/code/game/objects/items/devices/PDA/Ringtones.dm
@@ -0,0 +1,46 @@
+var/global/list/datum/ringtone/ringtones_by_names
+
+/datum/ringtone
+ var/name = "Ringtone"
+ var/melody = "E7,E7,E7" //Не забудьте заменить отступы на новую строку на \n при вставке своих мелодий!
+ var/replays = 1
+
+/datum/ringtone/thinktronic
+ name = "Thinktronic"
+ melody = "BPM: 188\nE6/2,D6/1.8,F#5,G#5,C#6/2,B5/1.8,D5,E5\nB5/2,A5/1.8,C#5/0.9,E5/0.8,A5/0.7,,,,,,"
+ replays = 1
+
+/datum/ringtone/thinktronic2
+ name = "Thinktronic 2"
+ melody = "BPM: 167\nC6,G5/2,G/2,A5,G, ,B5,C6,"
+ replays = 0
+
+/datum/ringtone/flipflap
+ name = "Flip-Flap"
+ melody = "BPM: 188\nC5,Eb5,F5,G5/2,C6,C/1.8,G,F,E,C5,E,F,G/2,Ab5\nA/1.8,G,F,E"
+ replays = 0
+
+/datum/ringtone/ring1
+ name = "Ring 1"
+ melody = "BPM: 251\nB5/3,G5/3,B/3,G/3,B/3,G/3,B/3,G/3,B/3,G/3"
+ replays = 1
+
+/datum/ringtone/ring2
+ name = "Ring 2"
+ melody = "BPM: 251\nA5/3,G5/3,A/3,G/3,A/3,G/3,A/3,G/3,A/3,G/3"
+ replays = 1
+
+/datum/ringtone/ring3
+ name = "Ring 3"
+ melody = "BPM: 251\nD5/3,C5/3,D/3,C/3,D/3,C/3,D/3,C/3,D/3,C/3"
+ replays = 1
+
+/datum/ringtone/ring4
+ name = "Ring 4"
+ melody = "BPM: 251\nE5/3,G5/3,E/3,G/3,E/3,G/3,E/3,G/3,E/3,G/3"
+ replays = 1
+
+/datum/ringtone/ring5
+ name = "Ring 5"
+ melody = "BPM: 251\nF5/3,B#5/3,F/3,B/3,F/3,B/3,F/3,B/3,F/3,B/3"
+ replays = 1
diff --git a/code/game/sound.dm b/code/game/sound.dm
index 6d398e5739f7..39b127d2e516 100644
--- a/code/game/sound.dm
+++ b/code/game/sound.dm
@@ -101,7 +101,7 @@ voluminosity = if FALSE, removes the difference between left and right ear.
S.volume -= max(distance - world.view, 0) * 2 //multiplicative falloff to add on top of natural audio falloff.
- if (S.volume <= 0) // no volume means no sound, early check to save on atmos calls
+ if (S.volume <= 0) // no volume means no sound, early check to save on atmos calls
return
//sound volume falloff with pressure
diff --git a/code/modules/client/character_menu/general.dm b/code/modules/client/character_menu/general.dm
index bdd3bb353e98..8d6af5e6deec 100644
--- a/code/modules/client/character_menu/general.dm
+++ b/code/modules/client/character_menu/general.dm
@@ -135,7 +135,8 @@
. += "Undershirt: [undershirt_t[undershirt]]
"
. += "Socks: [socks_t[socks]]
"
. += "Backpack Type: [backbaglist[backbag]]
"
- . += "Using skirt uniform: [use_skirt ? "Yes" : "No"]"
+ . += "Using skirt uniform: [use_skirt ? "Yes" : "No"]
"
+ . += "PDA Ringtone: [chosen_ringtone]"
. += ""
. += ""
@@ -256,6 +257,8 @@
backbag = rand(1, backbaglist.len)
if("use_skirt")
use_skirt = pick(TRUE, FALSE)
+ if("ringtone")
+ chosen_ringtone = pick(global.ringtones_by_names)
if("all")
randomize_appearance_for() //no params needed
if("input")
@@ -456,6 +459,19 @@
if(new_backbag)
backbag = backbaglist.Find(new_backbag)
+ if("ringtone")
+ var/list/pref_ringtones = global.ringtones_by_names + CUSTOM_RINGTONE_NAME
+ var/Tone = input(user, "Выберите рингтон:", "Character Preference", chosen_ringtone) as null|anything in pref_ringtones
+ if(!Tone)
+ return
+ if(Tone == CUSTOM_RINGTONE_NAME)
+ var/t = sanitize(input(user, "Введите новый рингтон") as message|null, MAX_CUSTOM_RINGTONE_LENGTH, extra = FALSE, ascii_only = TRUE)
+ if (!t)
+ return
+ custom_melody = t
+
+ chosen_ringtone = Tone
+
if("use_skirt")
use_skirt = !use_skirt
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index 0386693b93c7..c026adaf4d87 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -178,6 +178,9 @@ var/global/list/preferences_datums = list()
var/gear_tab = "General"
var/list/custom_items = list()
+ var/chosen_ringtone = "Flip-Flap"
+ var/custom_melody = "E7,E7,E7"
+
/datum/preferences/New(client/C)
parent = C
UI_style = global.available_ui_styles[1]
diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm
index cc97581a705d..8e11fe09656f 100644
--- a/code/modules/client/preferences_savefile.dm
+++ b/code/modules/client/preferences_savefile.dm
@@ -579,6 +579,8 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
S["socks"] >> socks
S["backbag"] >> backbag
S["use_skirt"] >> use_skirt
+ S["pda_ringtone"] >> chosen_ringtone
+ S["pda_custom_melody"] >> custom_melody
//Load prefs
S["alternate_option"] >> alternate_option
@@ -661,6 +663,9 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
undershirt = sanitize_integer(undershirt, 1, undershirt_t.len, initial(undershirt))
socks = sanitize_integer(socks, 1, socks_t.len, initial(socks))
backbag = sanitize_integer(backbag, 1, backbaglist.len, initial(backbag))
+ var/list/pref_ringtones = global.ringtones_by_names + CUSTOM_RINGTONE_NAME
+ chosen_ringtone = sanitize_inlist(chosen_ringtone, pref_ringtones, initial(chosen_ringtone))
+ custom_melody = sanitize(custom_melody, MAX_CUSTOM_RINGTONE_LENGTH, extra = FALSE, ascii_only = TRUE)
alternate_option = sanitize_integer(alternate_option, 0, 2, initial(alternate_option))
neuter_gender_voice = sanitize_gender_voice(neuter_gender_voice)
@@ -773,6 +778,8 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
S["socks"] << socks
S["backbag"] << backbag
S["use_skirt"] << use_skirt
+ S["pda_ringtone"] << chosen_ringtone
+ S["pda_custom_melody"] << custom_melody
//Write prefs
S["alternate_option"] << alternate_option
S["job_preferences"] << job_preferences
diff --git a/nano/templates/pda.tmpl b/nano/templates/pda.tmpl
index ce9b663ff75e..7609558f683b 100644
--- a/nano/templates/pda.tmpl
+++ b/nano/templates/pda.tmpl
@@ -223,7 +223,7 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm
{{:helper.link(data.message_silent==1 ? 'Ringer: Off' : 'Ringer: On', data.message_silent==1 ? 'volume-off' : 'volume-on', {'choice' : "Toggle Ringer"}, null, 'fixedLeftWide')}}
{{:helper.link(data.toff==1 ? 'Messenger: Off' : 'Messenger: On',data.toff==1 ? 'close':'check', {'choice' : "Toggle Messenger"}, null, 'fixedLeftWide')}}
- {{:helper.link('Set Ringtone', 'comment', {'choice' : "Ringtone"}, null, 'fixedLeftWide')}}
+ {{:helper.link('Change Ringtone', 'comment', {'choice' : "Ringtone"}, null, 'fixedLeftWide')}}
{{:helper.link('Delete all Conversations', 'trash', {'choice' : "Clear", 'option' : "All"}, null, 'fixedLeftWider')}}
diff --git a/scripts/playsound-checker.py b/scripts/playsound-checker.py
deleted file mode 100644
index 04049d4257fa..000000000000
--- a/scripts/playsound-checker.py
+++ /dev/null
@@ -1,71 +0,0 @@
-import argparse, re, sys
-from os import sep, path, walk
-
-known_volume_channels = [
- "VOL_MUSIC",
- "VOL_AMBIENT",
- "VOL_EFFECTS_MASTER",
- "VOL_EFFECTS_VOICE_ANNOUNCEMENT",
- "VOL_EFFECTS_MISC",
- "VOL_EFFECTS_INSTRUMENT",
- "VOL_NOTIFICATIONS",
- "VOL_ADMIN",
- "VOL_JUKEBOX"
- ]
-
-skip_file_path = "./code/game/sound.dm"
-
-def get_bad_playsounds_in_line(line):
- bad_playsounds = []
- result = re.search('(?:playsound|playsound_local)\(([^,]+),(.pick\(.*?\)|[^,]+),([^,\)]+)', line)
- if(result is None):
- return bad_playsounds
- arg3 = result.group(3).strip()
- if(arg3 not in known_volume_channels):
- bad_playsounds.append(result.group(0))
- return bad_playsounds
-
-def get_bad_args_lines_in_file(file):
- bad_lines = {}
- for line_number, line in enumerate(file, 1):
- bad_playsounds = get_bad_playsounds_in_line(line)
- if len(bad_playsounds):
- bad_lines[line_number] = bad_playsounds
- return bad_lines
-
-def print_bad_playsounds(bad_playsounds_by_path):
- for path, bad_playsounds_by_line in bad_playsounds_by_path.items():
- print('Path: {0}'.format(path))
- for line, bad_playsounds in bad_playsounds_by_line.items():
- print('\tLine: {0}'.format(line))
- for bad_arg in bad_playsounds:
- print('\t\t{0}'.format(bad_arg))
-
-def main():
- opt = argparse.ArgumentParser()
- opt.add_argument('dir', help='The directory to recursively scan for *.dm and *.dmm files with invalid volume_channel argument in playsound and playsound_local procs')
- args = opt.parse_args()
-
- if(not path.isdir(args.dir)):
- print('Not a directory')
- sys.exit(1)
-
- bad_playsounds_by_path = { }
- # This section parses all *.dm and *.dmm files in the given directory, recursively.
- for root, subdirs, files in walk(args.dir):
- for filename in files:
- if filename.endswith('.dm') or filename.endswith('.dmm'):
- file_path = path.join(root, filename)
- if file_path == skip_file_path:
- continue
- with open(file_path, 'rb') as file:
- bad_arg_by_line = get_bad_args_lines_in_file(file)
- if len(bad_arg_by_line) > 0:
- bad_playsounds_by_path[file_path] = bad_arg_by_line
-
- print_bad_playsounds(bad_playsounds_by_path)
- if len(bad_playsounds_by_path) > 0:
- sys.exit(1)
-
-if __name__ == "__main__":
- main()
diff --git a/sound/musical_instruments/pda/A#5.ogg b/sound/musical_instruments/pda/A#5.ogg
new file mode 100644
index 000000000000..1a7a510cecc5
Binary files /dev/null and b/sound/musical_instruments/pda/A#5.ogg differ
diff --git a/sound/musical_instruments/pda/A#6.ogg b/sound/musical_instruments/pda/A#6.ogg
new file mode 100644
index 000000000000..e20b207584b4
Binary files /dev/null and b/sound/musical_instruments/pda/A#6.ogg differ
diff --git a/sound/musical_instruments/pda/A#7.ogg b/sound/musical_instruments/pda/A#7.ogg
new file mode 100644
index 000000000000..90c6007eabc6
Binary files /dev/null and b/sound/musical_instruments/pda/A#7.ogg differ
diff --git a/sound/musical_instruments/pda/Ab5.ogg b/sound/musical_instruments/pda/Ab5.ogg
new file mode 100644
index 000000000000..f569273f76b3
Binary files /dev/null and b/sound/musical_instruments/pda/Ab5.ogg differ
diff --git a/sound/musical_instruments/pda/Ab6.ogg b/sound/musical_instruments/pda/Ab6.ogg
new file mode 100644
index 000000000000..639310dcc48a
Binary files /dev/null and b/sound/musical_instruments/pda/Ab6.ogg differ
diff --git a/sound/musical_instruments/pda/Ab7.ogg b/sound/musical_instruments/pda/Ab7.ogg
new file mode 100644
index 000000000000..3cf8f20e11d6
Binary files /dev/null and b/sound/musical_instruments/pda/Ab7.ogg differ
diff --git a/sound/musical_instruments/pda/An5.ogg b/sound/musical_instruments/pda/An5.ogg
new file mode 100644
index 000000000000..3f4ec70df01d
Binary files /dev/null and b/sound/musical_instruments/pda/An5.ogg differ
diff --git a/sound/musical_instruments/pda/An6.ogg b/sound/musical_instruments/pda/An6.ogg
new file mode 100644
index 000000000000..7fd8ddcd7885
Binary files /dev/null and b/sound/musical_instruments/pda/An6.ogg differ
diff --git a/sound/musical_instruments/pda/An7.ogg b/sound/musical_instruments/pda/An7.ogg
new file mode 100644
index 000000000000..b3b9c6b61804
Binary files /dev/null and b/sound/musical_instruments/pda/An7.ogg differ
diff --git a/sound/musical_instruments/pda/B#5.ogg b/sound/musical_instruments/pda/B#5.ogg
new file mode 100644
index 000000000000..79825de3d1d0
Binary files /dev/null and b/sound/musical_instruments/pda/B#5.ogg differ
diff --git a/sound/musical_instruments/pda/B#6.ogg b/sound/musical_instruments/pda/B#6.ogg
new file mode 100644
index 000000000000..1bf855cb1e70
Binary files /dev/null and b/sound/musical_instruments/pda/B#6.ogg differ
diff --git a/sound/musical_instruments/pda/Bb5.ogg b/sound/musical_instruments/pda/Bb5.ogg
new file mode 100644
index 000000000000..30a3a832e242
Binary files /dev/null and b/sound/musical_instruments/pda/Bb5.ogg differ
diff --git a/sound/musical_instruments/pda/Bb6.ogg b/sound/musical_instruments/pda/Bb6.ogg
new file mode 100644
index 000000000000..72962c423204
Binary files /dev/null and b/sound/musical_instruments/pda/Bb6.ogg differ
diff --git a/sound/musical_instruments/pda/Bb7.ogg b/sound/musical_instruments/pda/Bb7.ogg
new file mode 100644
index 000000000000..147db49f64b3
Binary files /dev/null and b/sound/musical_instruments/pda/Bb7.ogg differ
diff --git a/sound/musical_instruments/pda/Bn5.ogg b/sound/musical_instruments/pda/Bn5.ogg
new file mode 100644
index 000000000000..6c5b59923a86
Binary files /dev/null and b/sound/musical_instruments/pda/Bn5.ogg differ
diff --git a/sound/musical_instruments/pda/Bn6.ogg b/sound/musical_instruments/pda/Bn6.ogg
new file mode 100644
index 000000000000..fa9f2e3f101c
Binary files /dev/null and b/sound/musical_instruments/pda/Bn6.ogg differ
diff --git a/sound/musical_instruments/pda/Bn7.ogg b/sound/musical_instruments/pda/Bn7.ogg
new file mode 100644
index 000000000000..1466fd8ac032
Binary files /dev/null and b/sound/musical_instruments/pda/Bn7.ogg differ
diff --git a/sound/musical_instruments/pda/C#5.ogg b/sound/musical_instruments/pda/C#5.ogg
new file mode 100644
index 000000000000..47b1a8377549
Binary files /dev/null and b/sound/musical_instruments/pda/C#5.ogg differ
diff --git a/sound/musical_instruments/pda/C#6.ogg b/sound/musical_instruments/pda/C#6.ogg
new file mode 100644
index 000000000000..8f722ac7d9da
Binary files /dev/null and b/sound/musical_instruments/pda/C#6.ogg differ
diff --git a/sound/musical_instruments/pda/C#7.ogg b/sound/musical_instruments/pda/C#7.ogg
new file mode 100644
index 000000000000..f948083e40e0
Binary files /dev/null and b/sound/musical_instruments/pda/C#7.ogg differ
diff --git a/sound/musical_instruments/pda/Cb6.ogg b/sound/musical_instruments/pda/Cb6.ogg
new file mode 100644
index 000000000000..4ad99234c5c1
Binary files /dev/null and b/sound/musical_instruments/pda/Cb6.ogg differ
diff --git a/sound/musical_instruments/pda/Cb7.ogg b/sound/musical_instruments/pda/Cb7.ogg
new file mode 100644
index 000000000000..a2a91ff7a28c
Binary files /dev/null and b/sound/musical_instruments/pda/Cb7.ogg differ
diff --git a/sound/musical_instruments/pda/Cn5.ogg b/sound/musical_instruments/pda/Cn5.ogg
new file mode 100644
index 000000000000..007ea6761baf
Binary files /dev/null and b/sound/musical_instruments/pda/Cn5.ogg differ
diff --git a/sound/musical_instruments/pda/Cn6.ogg b/sound/musical_instruments/pda/Cn6.ogg
new file mode 100644
index 000000000000..af08c5cda813
Binary files /dev/null and b/sound/musical_instruments/pda/Cn6.ogg differ
diff --git a/sound/musical_instruments/pda/Cn7.ogg b/sound/musical_instruments/pda/Cn7.ogg
new file mode 100644
index 000000000000..d4dee1ef99c4
Binary files /dev/null and b/sound/musical_instruments/pda/Cn7.ogg differ
diff --git a/sound/musical_instruments/pda/D#5.ogg b/sound/musical_instruments/pda/D#5.ogg
new file mode 100644
index 000000000000..de5f8a695ac3
Binary files /dev/null and b/sound/musical_instruments/pda/D#5.ogg differ
diff --git a/sound/musical_instruments/pda/D#6.ogg b/sound/musical_instruments/pda/D#6.ogg
new file mode 100644
index 000000000000..240cdb69e9aa
Binary files /dev/null and b/sound/musical_instruments/pda/D#6.ogg differ
diff --git a/sound/musical_instruments/pda/D#7.ogg b/sound/musical_instruments/pda/D#7.ogg
new file mode 100644
index 000000000000..56a0296fad49
Binary files /dev/null and b/sound/musical_instruments/pda/D#7.ogg differ
diff --git a/sound/musical_instruments/pda/Db5.ogg b/sound/musical_instruments/pda/Db5.ogg
new file mode 100644
index 000000000000..cca0b8a335b3
Binary files /dev/null and b/sound/musical_instruments/pda/Db5.ogg differ
diff --git a/sound/musical_instruments/pda/Db6.ogg b/sound/musical_instruments/pda/Db6.ogg
new file mode 100644
index 000000000000..9afb09ee30d2
Binary files /dev/null and b/sound/musical_instruments/pda/Db6.ogg differ
diff --git a/sound/musical_instruments/pda/Db7.ogg b/sound/musical_instruments/pda/Db7.ogg
new file mode 100644
index 000000000000..df2ab9e1ea81
Binary files /dev/null and b/sound/musical_instruments/pda/Db7.ogg differ
diff --git a/sound/musical_instruments/pda/Dn5.ogg b/sound/musical_instruments/pda/Dn5.ogg
new file mode 100644
index 000000000000..e575b752013e
Binary files /dev/null and b/sound/musical_instruments/pda/Dn5.ogg differ
diff --git a/sound/musical_instruments/pda/Dn6.ogg b/sound/musical_instruments/pda/Dn6.ogg
new file mode 100644
index 000000000000..39dd91284dee
Binary files /dev/null and b/sound/musical_instruments/pda/Dn6.ogg differ
diff --git a/sound/musical_instruments/pda/Dn7.ogg b/sound/musical_instruments/pda/Dn7.ogg
new file mode 100644
index 000000000000..2c88dbbaa694
Binary files /dev/null and b/sound/musical_instruments/pda/Dn7.ogg differ
diff --git a/sound/musical_instruments/pda/E#5.ogg b/sound/musical_instruments/pda/E#5.ogg
new file mode 100644
index 000000000000..c9e4bef2764b
Binary files /dev/null and b/sound/musical_instruments/pda/E#5.ogg differ
diff --git a/sound/musical_instruments/pda/E#6.ogg b/sound/musical_instruments/pda/E#6.ogg
new file mode 100644
index 000000000000..bbc811cb4e32
Binary files /dev/null and b/sound/musical_instruments/pda/E#6.ogg differ
diff --git a/sound/musical_instruments/pda/E#7.ogg b/sound/musical_instruments/pda/E#7.ogg
new file mode 100644
index 000000000000..84456954914c
Binary files /dev/null and b/sound/musical_instruments/pda/E#7.ogg differ
diff --git a/sound/musical_instruments/pda/Eb5.ogg b/sound/musical_instruments/pda/Eb5.ogg
new file mode 100644
index 000000000000..690def47163b
Binary files /dev/null and b/sound/musical_instruments/pda/Eb5.ogg differ
diff --git a/sound/musical_instruments/pda/Eb6.ogg b/sound/musical_instruments/pda/Eb6.ogg
new file mode 100644
index 000000000000..0acb788bd28e
Binary files /dev/null and b/sound/musical_instruments/pda/Eb6.ogg differ
diff --git a/sound/musical_instruments/pda/Eb7.ogg b/sound/musical_instruments/pda/Eb7.ogg
new file mode 100644
index 000000000000..0dbbcf179ead
Binary files /dev/null and b/sound/musical_instruments/pda/Eb7.ogg differ
diff --git a/sound/musical_instruments/pda/En5.ogg b/sound/musical_instruments/pda/En5.ogg
new file mode 100644
index 000000000000..9a86c3853a9c
Binary files /dev/null and b/sound/musical_instruments/pda/En5.ogg differ
diff --git a/sound/musical_instruments/pda/En6.ogg b/sound/musical_instruments/pda/En6.ogg
new file mode 100644
index 000000000000..f791b9c7fb5c
Binary files /dev/null and b/sound/musical_instruments/pda/En6.ogg differ
diff --git a/sound/musical_instruments/pda/En7.ogg b/sound/musical_instruments/pda/En7.ogg
new file mode 100644
index 000000000000..65313cee1098
Binary files /dev/null and b/sound/musical_instruments/pda/En7.ogg differ
diff --git a/sound/musical_instruments/pda/F#5.ogg b/sound/musical_instruments/pda/F#5.ogg
new file mode 100644
index 000000000000..93ae74b785bd
Binary files /dev/null and b/sound/musical_instruments/pda/F#5.ogg differ
diff --git a/sound/musical_instruments/pda/F#6.ogg b/sound/musical_instruments/pda/F#6.ogg
new file mode 100644
index 000000000000..c085c717866f
Binary files /dev/null and b/sound/musical_instruments/pda/F#6.ogg differ
diff --git a/sound/musical_instruments/pda/F#7.ogg b/sound/musical_instruments/pda/F#7.ogg
new file mode 100644
index 000000000000..1f13bf7def95
Binary files /dev/null and b/sound/musical_instruments/pda/F#7.ogg differ
diff --git a/sound/musical_instruments/pda/Fb5.ogg b/sound/musical_instruments/pda/Fb5.ogg
new file mode 100644
index 000000000000..f42c778bde5b
Binary files /dev/null and b/sound/musical_instruments/pda/Fb5.ogg differ
diff --git a/sound/musical_instruments/pda/Fb6.ogg b/sound/musical_instruments/pda/Fb6.ogg
new file mode 100644
index 000000000000..4146fe614d80
Binary files /dev/null and b/sound/musical_instruments/pda/Fb6.ogg differ
diff --git a/sound/musical_instruments/pda/Fb7.ogg b/sound/musical_instruments/pda/Fb7.ogg
new file mode 100644
index 000000000000..05192b312a15
Binary files /dev/null and b/sound/musical_instruments/pda/Fb7.ogg differ
diff --git a/sound/musical_instruments/pda/Fn5.ogg b/sound/musical_instruments/pda/Fn5.ogg
new file mode 100644
index 000000000000..34efa2399d4a
Binary files /dev/null and b/sound/musical_instruments/pda/Fn5.ogg differ
diff --git a/sound/musical_instruments/pda/Fn6.ogg b/sound/musical_instruments/pda/Fn6.ogg
new file mode 100644
index 000000000000..ea2e76821153
Binary files /dev/null and b/sound/musical_instruments/pda/Fn6.ogg differ
diff --git a/sound/musical_instruments/pda/Fn7.ogg b/sound/musical_instruments/pda/Fn7.ogg
new file mode 100644
index 000000000000..f5c5be0370bb
Binary files /dev/null and b/sound/musical_instruments/pda/Fn7.ogg differ
diff --git a/sound/musical_instruments/pda/G#5.ogg b/sound/musical_instruments/pda/G#5.ogg
new file mode 100644
index 000000000000..6446f15105d1
Binary files /dev/null and b/sound/musical_instruments/pda/G#5.ogg differ
diff --git a/sound/musical_instruments/pda/G#6.ogg b/sound/musical_instruments/pda/G#6.ogg
new file mode 100644
index 000000000000..d1d8ea0d8c86
Binary files /dev/null and b/sound/musical_instruments/pda/G#6.ogg differ
diff --git a/sound/musical_instruments/pda/G#7.ogg b/sound/musical_instruments/pda/G#7.ogg
new file mode 100644
index 000000000000..f6285d2ca582
Binary files /dev/null and b/sound/musical_instruments/pda/G#7.ogg differ
diff --git a/sound/musical_instruments/pda/Gb5.ogg b/sound/musical_instruments/pda/Gb5.ogg
new file mode 100644
index 000000000000..12e54e1bd19b
Binary files /dev/null and b/sound/musical_instruments/pda/Gb5.ogg differ
diff --git a/sound/musical_instruments/pda/Gb6.ogg b/sound/musical_instruments/pda/Gb6.ogg
new file mode 100644
index 000000000000..188d4f1b902a
Binary files /dev/null and b/sound/musical_instruments/pda/Gb6.ogg differ
diff --git a/sound/musical_instruments/pda/Gb7.ogg b/sound/musical_instruments/pda/Gb7.ogg
new file mode 100644
index 000000000000..c1ac3af53a2c
Binary files /dev/null and b/sound/musical_instruments/pda/Gb7.ogg differ
diff --git a/sound/musical_instruments/pda/Gn5.ogg b/sound/musical_instruments/pda/Gn5.ogg
new file mode 100644
index 000000000000..1481a6e95f68
Binary files /dev/null and b/sound/musical_instruments/pda/Gn5.ogg differ
diff --git a/sound/musical_instruments/pda/Gn6.ogg b/sound/musical_instruments/pda/Gn6.ogg
new file mode 100644
index 000000000000..00e12186f30d
Binary files /dev/null and b/sound/musical_instruments/pda/Gn6.ogg differ
diff --git a/sound/musical_instruments/pda/Gn7.ogg b/sound/musical_instruments/pda/Gn7.ogg
new file mode 100644
index 000000000000..b5aef86ed221
Binary files /dev/null and b/sound/musical_instruments/pda/Gn7.ogg differ
diff --git a/taucetistation.dme b/taucetistation.dme
index b62184f0b1f2..c7373fbb8592 100644
--- a/taucetistation.dme
+++ b/taucetistation.dme
@@ -71,6 +71,7 @@
#include "code\__DEFINES\misc.dm"
#include "code\__DEFINES\mob.dm"
#include "code\__DEFINES\objectives.dm"
+#include "code\__DEFINES\pda.dm"
#include "code\__DEFINES\preferences.dm"
#include "code\__DEFINES\qdel.dm"
#include "code\__DEFINES\qualities.dm"
@@ -1050,6 +1051,7 @@
#include "code\game\objects\items\devices\PDA\chatroom.dm"
#include "code\game\objects\items\devices\PDA\PDA.dm"
#include "code\game\objects\items\devices\PDA\radio.dm"
+#include "code\game\objects\items\devices\PDA\Ringtones.dm"
#include "code\game\objects\items\devices\radio\beacon.dm"
#include "code\game\objects\items\devices\radio\electropack.dm"
#include "code\game\objects\items\devices\radio\encryptionkey.dm"
diff --git a/test/run-test.sh b/test/run-test.sh
index 68c067a1464b..5ec2c71d4f63 100644
--- a/test/run-test.sh
+++ b/test/run-test.sh
@@ -243,7 +243,6 @@ function run_code_tests {
run_test "indentation check" "awk -f scripts/indentation.awk **/*.dm"
run_test "check tags" "python2 scripts/tag-matcher.py ."
run_test "check color hex" "python2 scripts/color-hex-checker.py ."
- run_test "check playsound volume_channel argument" "python2 scripts/playsound-checker.py ."
}
function run_map_tests {