diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm
index 914196ad451..70222991646 100644
--- a/code/__DEFINES/misc.dm
+++ b/code/__DEFINES/misc.dm
@@ -8,7 +8,7 @@
//You can use these defines to get the typepath of the currently running proc/verb (yes procs + verbs are objects)
/* eg:
/mob/living/carbon/human/death()
- world << THIS_PROC_TYPE_STR //You can only output the string versions
+ to_chat(world, THIS_PROC_TYPE_STR) //You can only output the string versions
Will print: "/mob/living/carbon/human/death" (you can optionally embed it in a string with () (eg: the _WITH_ARGS defines) to make it look nicer)
*/
#define THIS_PROC_TYPE .....
diff --git a/code/__HELPERS/_logging.dm b/code/__HELPERS/_logging.dm
index 2dd2e42129e..05b6aa1a15a 100644
--- a/code/__HELPERS/_logging.dm
+++ b/code/__HELPERS/_logging.dm
@@ -1,3 +1,10 @@
+//wrapper macros for easier grepping
+#define DIRECT_OUTPUT(A, B) A << B
+#define SEND_IMAGE(target, image) DIRECT_OUTPUT(target, image)
+#define SEND_SOUND(target, sound) DIRECT_OUTPUT(target, sound)
+#define SEND_TEXT(target, text) DIRECT_OUTPUT(target, text)
+#define WRITE_FILE(file, text) DIRECT_OUTPUT(file, text)
+
//print a warning message to world.log
#define WARNING(MSG) warning("[MSG] in [__FILE__] at line [__LINE__] src: [src] usr: [usr].")
/proc/warning(msg)
@@ -20,13 +27,13 @@
/proc/log_admin(text)
GLOB.admin_log.Add(text)
if (config.log_admin)
- GLOB.world_game_log << "\[[time_stamp()]]ADMIN: [text]"
+ WRITE_FILE(GLOB.world_game_log, "\[[time_stamp()]]ADMIN: [text]")
//Items using this proc are stripped from public logs - use with caution
/proc/log_admin_private(text)
GLOB.admin_log.Add(text)
if (config.log_admin)
- GLOB.world_game_log << "\[[time_stamp()]]ADMINPRIVATE: [text]"
+ WRITE_FILE(GLOB.world_game_log, "\[[time_stamp()]]ADMINPRIVATE: [text]")
/proc/log_adminsay(text)
if (config.log_adminchat)
@@ -38,65 +45,65 @@
/proc/log_game(text)
if (config.log_game)
- GLOB.world_game_log << "\[[time_stamp()]]GAME: [text]"
+ WRITE_FILE(GLOB.world_game_log, "\[[time_stamp()]]GAME: [text]")
/proc/log_vote(text)
if (config.log_vote)
- GLOB.world_game_log << "\[[time_stamp()]]VOTE: [text]"
+ WRITE_FILE(GLOB.world_game_log, "\[[time_stamp()]]VOTE: [text]")
/proc/log_access(text)
if (config.log_access)
- GLOB.world_game_log << "\[[time_stamp()]]ACCESS: [text]"
+ WRITE_FILE(GLOB.world_game_log, "\[[time_stamp()]]ACCESS: [text]")
/proc/log_say(text)
if (config.log_say)
- GLOB.world_game_log << "\[[time_stamp()]]SAY: [text]"
+ WRITE_FILE(GLOB.world_game_log, "\[[time_stamp()]]SAY: [text]")
/proc/log_prayer(text)
if (config.log_prayer)
- GLOB.world_game_log << "\[[time_stamp()]]PRAY: [text]"
+ WRITE_FILE(GLOB.world_game_log, "\[[time_stamp()]]PRAY: [text]")
/proc/log_law(text)
if (config.log_law)
- GLOB.world_game_log << "\[[time_stamp()]]LAW: [text]"
+ WRITE_FILE(GLOB.world_game_log, "\[[time_stamp()]]LAW: [text]")
/proc/log_ooc(text)
if (config.log_ooc)
- GLOB.world_game_log << "\[[time_stamp()]]OOC: [text]"
+ WRITE_FILE(GLOB.world_game_log, "\[[time_stamp()]]OOC: [text]")
/proc/log_whisper(text)
if (config.log_whisper)
- GLOB.world_game_log << "\[[time_stamp()]]WHISPER: [text]"
+ WRITE_FILE(GLOB.world_game_log, "\[[time_stamp()]]WHISPER: [text]")
/proc/log_emote(text)
if (config.log_emote)
- GLOB.world_game_log << "\[[time_stamp()]]EMOTE: [text]"
+ WRITE_FILE(GLOB.world_game_log, "\[[time_stamp()]]EMOTE: [text]")
/proc/log_attack(text)
if (config.log_attack)
- GLOB.world_attack_log << "\[[time_stamp()]]ATTACK: [text]"
+ WRITE_FILE(GLOB.world_attack_log, "\[[time_stamp()]]ATTACK: [text]")
/proc/log_pda(text)
if (config.log_pda)
- GLOB.world_game_log << "\[[time_stamp()]]PDA: [text]"
+ WRITE_FILE(GLOB.world_game_log, "\[[time_stamp()]]PDA: [text]")
/proc/log_comment(text)
if (config.log_pda)
//reusing the PDA option because I really don't think news comments are worth a config option
- GLOB.world_game_log << "\[[time_stamp()]]COMMENT: [text]"
+ WRITE_FILE(GLOB.world_game_log, "\[[time_stamp()]]COMMENT: [text]")
/proc/log_chat(text)
if (config.log_pda)
- GLOB.world_game_log << "\[[time_stamp()]]CHAT: [text]"
+ WRITE_FILE(GLOB.world_game_log, "\[[time_stamp()]]CHAT: [text]")
/proc/log_sql(text)
if(config.sql_enabled)
- GLOB.world_game_log << "\[[time_stamp()]]SQL: [text]"
+ WRITE_FILE(GLOB.world_game_log, "\[[time_stamp()]]SQL: [text]")
//This replaces world.log so it displays both in DD and the file
/proc/log_world(text)
- GLOB.world_runtime_log << text
- world.log << text
+ WRITE_FILE(GLOB.world_runtime_log, text)
+ SEND_TEXT(world.log, text)
// Helper procs for building detailed log lines
diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm
index d150e86f452..9b1507771a1 100644
--- a/code/__HELPERS/game.dm
+++ b/code/__HELPERS/game.dm
@@ -418,7 +418,7 @@
/proc/showCandidatePollWindow(mob/M, poll_time, Question, list/candidates, ignore_category, time_passed, flashwindow = TRUE)
set waitfor = 0
- M << 'sound/misc/notice2.ogg' //Alerting them to their consideration
+ SEND_SOUND(M, 'sound/misc/notice2.ogg') //Alerting them to their consideration
if(flashwindow)
window_flash(M.client)
switch(ignore_category ? askuser(M,Question,"Please answer in [poll_time/10] seconds!","Yes","No","Never for this round", StealFocus=0, Timeout=poll_time) : askuser(M,Question,"Please answer in [poll_time/10] seconds!","Yes","No", StealFocus=0, Timeout=poll_time))
@@ -426,7 +426,7 @@
to_chat(M, "Choice registered: Yes.")
if(time_passed + poll_time <= world.time)
to_chat(M, "Sorry, you answered too late to be considered!")
- M << 'sound/machines/buzz-sigh.ogg'
+ SEND_SOUND(M, 'sound/machines/buzz-sigh.ogg')
candidates -= M
else
candidates += M
diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm
index 1258849b34c..719ddad65b9 100644
--- a/code/__HELPERS/mobs.dm
+++ b/code/__HELPERS/mobs.dm
@@ -1,6 +1,3 @@
-//wrapper macro for sending images that makes grepping easy
-#define SEND_IMAGE(target, image) target << image
-
/proc/random_blood_type()
return pick(4;"O-", 36;"O+", 3;"A-", 28;"A+", 1;"B-", 20;"B+", 1;"AB-", 5;"AB+")
diff --git a/code/__HELPERS/priority_announce.dm b/code/__HELPERS/priority_announce.dm
index 70bb8b2db64..a617437ac32 100644
--- a/code/__HELPERS/priority_announce.dm
+++ b/code/__HELPERS/priority_announce.dm
@@ -24,11 +24,12 @@
announcement += "
[html_encode(text)]
"
announcement += "
"
+ var/s = sound(sound)
for(var/mob/M in GLOB.player_list)
if(!isnewplayer(M) && M.can_hear())
to_chat(M, announcement)
if(M.client.prefs.toggles & SOUND_ANNOUNCEMENTS)
- M << sound(sound)
+ SEND_SOUND(M, s)
/proc/print_command_report(text = "", title = null, announce=TRUE)
if(!title)
@@ -55,6 +56,6 @@
to_chat(M, "[title]
[message]
")
if(M.client.prefs.toggles & SOUND_ANNOUNCEMENTS)
if(alert)
- M << sound('sound/misc/notice1.ogg')
+ SEND_SOUND(M, sound('sound/misc/notice1.ogg'))
else
- M << sound('sound/misc/notice2.ogg')
+ SEND_SOUND(M, sound('sound/misc/notice2.ogg'))
diff --git a/code/__HELPERS/text.dm b/code/__HELPERS/text.dm
index cd5d0c6af5f..60c95f47409 100644
--- a/code/__HELPERS/text.dm
+++ b/code/__HELPERS/text.dm
@@ -553,7 +553,7 @@ GLOBAL_LIST_INIT(binary, list("0","1"))
var/list/tosend = list()
tosend["data"] = finalized
- log << json_encode(tosend)
+ WRITE_FILE(log, json_encode(tosend))
//Used for applying byonds text macros to strings that are loaded at runtime
/proc/apply_text_macros(string)
diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm
index c32c481291b..abf2c1f937e 100644
--- a/code/controllers/configuration.dm
+++ b/code/controllers/configuration.dm
@@ -275,7 +275,7 @@
if(M.config_tag)
if(!(M.config_tag in modes)) // ensure each mode is added only once
- GLOB.config_error_log << "Adding game mode [M.name] ([M.config_tag]) to configuration."
+ WRITE_FILE(GLOB.config_error_log, "Adding game mode [M.name] ([M.config_tag]) to configuration.")
modes += M.config_tag
mode_names[M.config_tag] = M.name
probabilities[M.config_tag] = M.probability
@@ -548,7 +548,7 @@
if("irc_announce_new_game")
irc_announce_new_game = TRUE
else
- GLOB.config_error_log << "Unknown setting in configuration: '[name]'"
+ WRITE_FILE(GLOB.config_error_log, "Unknown setting in configuration: '[name]'")
else if(type == "game_options")
switch(name)
@@ -611,13 +611,13 @@
if(mode_name in modes)
continuous[mode_name] = 1
else
- GLOB.config_error_log << "Unknown continuous configuration definition: [mode_name]."
+ WRITE_FILE(GLOB.config_error_log, "Unknown continuous configuration definition: [mode_name].")
if("midround_antag")
var/mode_name = lowertext(value)
if(mode_name in modes)
midround_antag[mode_name] = 1
else
- GLOB.config_error_log << "Unknown midround antagonist configuration definition: [mode_name]."
+ WRITE_FILE(GLOB.config_error_log, "Unknown midround antagonist configuration definition: [mode_name].")
if("midround_antag_time_check")
midround_antag_time_check = text2num(value)
if("midround_antag_life_check")
@@ -633,9 +633,9 @@
if(mode_name in modes)
min_pop[mode_name] = text2num(mode_value)
else
- GLOB.config_error_log << "Unknown minimum population configuration definition: [mode_name]."
+ WRITE_FILE(GLOB.config_error_log, "Unknown minimum population configuration definition: [mode_name].")
else
- GLOB.config_error_log << "Incorrect minimum population configuration definition: [mode_name] [mode_value]."
+ WRITE_FILE(GLOB.config_error_log, "Incorrect minimum population configuration definition: [mode_name] [mode_value].")
if("max_pop")
var/pop_pos = findtext(value, " ")
var/mode_name = null
@@ -647,9 +647,9 @@
if(mode_name in modes)
max_pop[mode_name] = text2num(mode_value)
else
- GLOB.config_error_log << "Unknown maximum population configuration definition: [mode_name]."
+ WRITE_FILE(GLOB.config_error_log, "Unknown maximum population configuration definition: [mode_name].")
else
- GLOB.config_error_log << "Incorrect maximum population configuration definition: [mode_name] [mode_value]."
+ WRITE_FILE(GLOB.config_error_log, "Incorrect maximum population configuration definition: [mode_name] [mode_value].")
if("shuttle_refuel_delay")
shuttle_refuel_delay = text2num(value)
if("show_game_type_odds")
@@ -677,9 +677,9 @@
if(prob_name in modes)
probabilities[prob_name] = text2num(prob_value)
else
- GLOB.config_error_log << "Unknown game mode probability configuration definition: [prob_name]."
+ WRITE_FILE(GLOB.config_error_log, "Unknown game mode probability configuration definition: [prob_name].")
else
- GLOB.config_error_log << "Incorrect probability configuration definition: [prob_name] [prob_value]."
+ WRITE_FILE(GLOB.config_error_log, "Incorrect probability configuration definition: [prob_name] [prob_value].")
if("protect_roles_from_antagonist")
protect_roles_from_antagonist = 1
@@ -726,7 +726,7 @@
// Value is in the form "LAWID,NUMBER"
var/list/L = splittext(value, ",")
if(L.len != 2)
- GLOB.config_error_log << "Invalid LAW_WEIGHT: " + t
+ WRITE_FILE(GLOB.config_error_log, "Invalid LAW_WEIGHT: " + t)
continue
var/lawid = L[1]
var/weight = text2num(L[2])
@@ -781,7 +781,7 @@
if("mice_roundstart")
mice_roundstart = text2num(value)
else
- GLOB.config_error_log << "Unknown setting in configuration: '[name]'"
+ WRITE_FILE(GLOB.config_error_log, "Unknown setting in configuration: '[name]'")
else if(type == "policies")
policies[name] = value
@@ -839,7 +839,7 @@
if ("disabled")
currentmap = null
else
- GLOB.config_error_log << "Unknown command in map vote config: '[command]'"
+ WRITE_FILE(GLOB.config_error_log, "Unknown command in map vote config: '[command]'")
/datum/configuration/proc/loadsql(filename)
@@ -883,7 +883,7 @@
if("feedback_tableprefix")
global.sqlfdbktableprefix = value
else
- GLOB.config_error_log << "Unknown setting in configuration: '[name]'"
+ WRITE_FILE(GLOB.config_error_log, "Unknown setting in configuration: '[name]'")
/datum/configuration/proc/pick_mode(mode_name)
// I wish I didn't have to instance the game modes in order to look up
diff --git a/code/controllers/subsystem/pai.dm b/code/controllers/subsystem/pai.dm
index e5e83c85fc8..2a1a04e21d7 100644
--- a/code/controllers/subsystem/pai.dm
+++ b/code/controllers/subsystem/pai.dm
@@ -149,7 +149,6 @@ SUBSYSTEM_DEF(pai)
continue
if(!(ROLE_PAI in G.client.prefs.be_special))
continue
- //G << 'sound/misc/server-ready.ogg' //Alerting them to their consideration
to_chat(G, "[user] is requesting a pAI personality! Use the pAI button to submit yourself as one.")
addtimer(CALLBACK(src, .proc/spam_again), spam_delay)
var/list/available = list()
diff --git a/code/controllers/subsystem/persistence.dm b/code/controllers/subsystem/persistence.dm
index f4eebe95be0..a0dc7c526dd 100644
--- a/code/controllers/subsystem/persistence.dm
+++ b/code/controllers/subsystem/persistence.dm
@@ -49,7 +49,7 @@ SUBSYSTEM_DEF(persistence)
satchel_string = pick_n_take(expanded_old_satchels)
old_secret_satchels = jointext(expanded_old_satchels,"#")
- secret_satchels[SSmapping.config.map_name] << old_secret_satchels
+ WRITE_FILE(secret_satchels[SSmapping.config.map_name], old_secret_satchels)
var/list/chosen_satchel = splittext(satchel_string,"|")
if(!chosen_satchel || isemptylist(chosen_satchel) || chosen_satchel.len != 3) //Malformed
@@ -171,7 +171,7 @@ SUBSYSTEM_DEF(persistence)
if(isemptylist(savable_obj))
continue
old_secret_satchels += "[F.x]|[F.y]|[pick(savable_obj)]#"
- secret_satchels[SSmapping.config.map_name] << old_secret_satchels
+ WRITE_FILE(secret_satchels[SSmapping.config.map_name], old_secret_satchels)
/datum/controller/subsystem/persistence/proc/CollectChiselMessages()
var/savefile/chisel_messages_sav = new /savefile("data/npc_saves/ChiselMessages.sav")
@@ -181,14 +181,14 @@ SUBSYSTEM_DEF(persistence)
log_world("Saved [saved_messages.len] engraved messages on map [SSmapping.config.map_name]")
- chisel_messages_sav[SSmapping.config.map_name] << json_encode(saved_messages)
+ WRITE_FILE(chisel_messages_sav[SSmapping.config.map_name], json_encode(saved_messages))
/datum/controller/subsystem/persistence/proc/SaveChiselMessage(obj/structure/chisel_message/M)
saved_messages += list(M.pack()) // dm eats one list
/datum/controller/subsystem/persistence/proc/CollectTrophies()
- trophy_sav << json_encode(saved_trophies)
+ WRITE_FILE(trophy_sav, json_encode(saved_trophies))
/datum/controller/subsystem/persistence/proc/SaveTrophy(obj/structure/displaycase/trophy/T)
if(!T.added_roundstart && T.showpiece)
diff --git a/code/controllers/subsystem/shuttle.dm b/code/controllers/subsystem/shuttle.dm
index 16212ed4f04..4642e234ef7 100644
--- a/code/controllers/subsystem/shuttle.dm
+++ b/code/controllers/subsystem/shuttle.dm
@@ -99,8 +99,6 @@ SUBSYSTEM_DEF(shuttle)
T.color = "#00ffff"
#endif
- //world.log << "[transit_turfs.len] transit turfs registered"
-
/datum/controller/subsystem/shuttle/fire()
for(var/thing in mobile)
if(!thing)
diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm
index 9e55928f98f..dfaa1c4d8c2 100755
--- a/code/controllers/subsystem/ticker.dm
+++ b/code/controllers/subsystem/ticker.dm
@@ -220,7 +220,7 @@ SUBSYSTEM_DEF(ticker)
round_start_time = world.time
to_chat(world, "Welcome to [station_name()], enjoy your stay!")
- world << sound('sound/ai/welcome.ogg')
+ SEND_SOUND(world, sound('sound/ai/welcome.ogg'))
current_state = GAME_STATE_PLAYING
Master.SetRunLevel(RUNLEVEL_GAME)
@@ -295,7 +295,7 @@ SUBSYSTEM_DEF(ticker)
if("nuclear emergency") //Nuke wasn't on station when it blew up
flick("intro_nuke",cinematic)
sleep(35)
- world << sound('sound/effects/explosionfar.ogg')
+ SEND_SOUND(world, sound('sound/effects/explosionfar.ogg'))
station_explosion_detonation(bomb)
flick("station_intact_fade_red",cinematic)
cinematic.icon_state = "summary_nukefail"
@@ -303,12 +303,12 @@ SUBSYSTEM_DEF(ticker)
cinematic.icon_state = null
flick("intro_cult",cinematic)
sleep(25)
- world << sound('sound/magic/enter_blood.ogg')
+ SEND_SOUND(world, sound('sound/magic/enter_blood.ogg'))
sleep(28)
- world << sound('sound/machines/terminal_off.ogg')
+ SEND_SOUND(world, sound('sound/machines/terminal_off.ogg'))
sleep(20)
flick("station_corrupted",cinematic)
- world << sound('sound/effects/ghost.ogg')
+ SEND_SOUND(world, sound('sound/effects/ghost.ogg'))
actually_blew_up = FALSE
if("gang war") //Gang Domination (just show the override screen)
cinematic.icon_state = "intro_malf_still"
@@ -318,19 +318,19 @@ SUBSYSTEM_DEF(ticker)
if("fake") //The round isn't over, we're just freaking people out for fun
flick("intro_nuke",cinematic)
sleep(35)
- world << sound('sound/items/bikehorn.ogg')
+ SEND_SOUND(world, sound('sound/items/bikehorn.ogg'))
flick("summary_selfdes",cinematic)
actually_blew_up = FALSE
else
flick("intro_nuke",cinematic)
sleep(35)
- world << sound('sound/effects/explosionfar.ogg')
+ SEND_SOUND(world, sound('sound/effects/explosionfar.ogg'))
station_explosion_detonation(bomb)
if(NUKE_MISS_STATION || NUKE_SYNDICATE_BASE) //nuke was nowhere nearby //TODO: a really distant explosion animation
sleep(50)
- world << sound('sound/effects/explosionfar.ogg')
+ SEND_SOUND(world, sound('sound/effects/explosionfar.ogg'))
station_explosion_detonation(bomb)
actually_blew_up = station_missed == NUKE_SYNDICATE_BASE //don't kill everyone on station if it detonated off station
else //station was destroyed
@@ -341,42 +341,42 @@ SUBSYSTEM_DEF(ticker)
flick("intro_nuke",cinematic)
sleep(35)
flick("station_explode_fade_red",cinematic)
- world << sound('sound/effects/explosionfar.ogg')
+ SEND_SOUND(world, sound('sound/effects/explosionfar.ogg'))
station_explosion_detonation(bomb)
cinematic.icon_state = "summary_nukewin"
if("AI malfunction") //Malf (screen,explosion,summary)
flick("intro_malf",cinematic)
sleep(76)
flick("station_explode_fade_red",cinematic)
- world << sound('sound/effects/explosionfar.ogg')
+ SEND_SOUND(world, sound('sound/effects/explosionfar.ogg'))
station_explosion_detonation(bomb) //TODO: If we ever decide to actually detonate the vault bomb
cinematic.icon_state = "summary_malf"
if("blob") //Station nuked (nuke,explosion,summary)
flick("intro_nuke",cinematic)
sleep(35)
flick("station_explode_fade_red",cinematic)
- world << sound('sound/effects/explosionfar.ogg')
+ SEND_SOUND(world, sound('sound/effects/explosionfar.ogg'))
station_explosion_detonation(bomb) //TODO: no idea what this case could be
cinematic.icon_state = "summary_selfdes"
if("cult") //Station nuked (nuke,explosion,summary)
flick("intro_nuke",cinematic)
sleep(35)
flick("station_explode_fade_red",cinematic)
- world << sound('sound/effects/explosionfar.ogg')
+ SEND_SOUND(world, sound('sound/effects/explosionfar.ogg'))
station_explosion_detonation(bomb) //TODO: no idea what this case could be
cinematic.icon_state = "summary_cult"
if("no_core") //Nuke failed to detonate as it had no core
flick("intro_nuke",cinematic)
sleep(35)
flick("station_intact",cinematic)
- world << sound('sound/ambience/signal.ogg')
+ SEND_SOUND(world, sound('sound/ambience/signal.ogg'))
addtimer(CALLBACK(src, .proc/finish_cinematic, null, FALSE), 100)
return //Faster exit, since nothing happened
else //Station nuked (nuke,explosion,summary)
flick("intro_nuke",cinematic)
sleep(35)
flick("station_explode_fade_red", cinematic)
- world << sound('sound/effects/explosionfar.ogg')
+ SEND_SOUND(world, sound('sound/effects/explosionfar.ogg'))
station_explosion_detonation(bomb)
cinematic.icon_state = "summary_selfdes"
//If its actually the end of the round, wait for it to end.
@@ -631,7 +631,7 @@ SUBSYSTEM_DEF(ticker)
if(living_player_count() < config.hard_popcap)
if(next_in_line && next_in_line.client)
to_chat(next_in_line, "A slot has opened! You have approximately 20 seconds to join. \>\>Join Game\<\<")
- next_in_line << sound('sound/misc/notice1.ogg')
+ SEND_SOUND(next_in_line, sound('sound/misc/notice1.ogg'))
next_in_line.LateChoices()
return
queued_players -= next_in_line //Client disconnected, remove he
@@ -790,7 +790,7 @@ SUBSYSTEM_DEF(ticker)
/datum/controller/subsystem/ticker/proc/save_mode(the_mode)
var/F = file("data/mode.txt")
fdel(F)
- F << the_mode
+ WRITE_FILE(F, the_mode)
/datum/controller/subsystem/ticker/proc/SetRoundEndSound(the_sound)
set waitfor = FALSE
@@ -844,4 +844,4 @@ SUBSYSTEM_DEF(ticker)
'sound/roundend/disappointed.ogg'\
)
- world << sound(round_end_sound)
+ SEND_SOUND(world, sound(round_end_sound))
diff --git a/code/controllers/subsystem/title.dm b/code/controllers/subsystem/title.dm
index 6c5466d8d9f..a0bcb5feec9 100644
--- a/code/controllers/subsystem/title.dm
+++ b/code/controllers/subsystem/title.dm
@@ -53,7 +53,7 @@ SUBSYSTEM_DEF(title)
/datum/controller/subsystem/title/Shutdown()
if(file_path)
var/F = file("data/previous_title.dat")
- F << file_path
+ WRITE_FILE(F, file_path)
for(var/thing in GLOB.clients)
if(!thing)
diff --git a/code/datums/antagonists/devil.dm b/code/datums/antagonists/devil.dm
index c8f00d19956..077fb94e523 100644
--- a/code/datums/antagonists/devil.dm
+++ b/code/datums/antagonists/devil.dm
@@ -280,7 +280,7 @@ GLOBAL_LIST_INIT(devil_suffix, list(" the Red", " the Soulless", " the Master",
if(!D)
return
to_chat(world, "\"SLOTH, WRATH, GLUTTONY, ACEDIA, ENVY, GREED, PRIDE! FIRES OF HELL AWAKEN!!\"")
- world << 'sound/hallucinations/veryfar_noise.ogg'
+ SEND_SOUND(world, sound('sound/hallucinations/veryfar_noise.ogg'))
give_appropriate_spells()
D.convert_to_archdevil()
if(istype(D.loc, /obj/effect/dummy/slaughter/))
diff --git a/code/datums/antagonists/ninja.dm b/code/datums/antagonists/ninja.dm
index 69487406872..4efb17f1540 100644
--- a/code/datums/antagonists/ninja.dm
+++ b/code/datums/antagonists/ninja.dm
@@ -141,7 +141,7 @@
/datum/antagonist/ninja/greet()
- owner.current << sound('sound/effects/ninja_greeting.ogg')
+ SEND_SOUND(owner.current, sound('sound/effects/ninja_greeting.ogg'))
to_chat(owner.current, "I am an elite mercenary assassin of the mighty Spider Clan. A SPACE NINJA!")
to_chat(owner.current, "Surprise is my weapon. Shadows are my armor. Without them, I am nothing. (//initialize your suit by right clicking on it, to use abilities like stealth)!")
to_chat(owner.current, "Officially, [helping_station?"Nanotrasen":"The Syndicate"] are my employer.")
diff --git a/code/datums/status_effects/buffs.dm b/code/datums/status_effects/buffs.dm
index 485ca00515b..c15ede7b3e3 100644
--- a/code/datums/status_effects/buffs.dm
+++ b/code/datums/status_effects/buffs.dm
@@ -37,7 +37,7 @@
icon_state = "shadow_mend"
/datum/status_effect/void_price/tick()
- owner << sound('sound/magic/summon_karp.ogg', volume = 25)
+ SEND_SOUND(owner, sound('sound/magic/summon_karp.ogg', volume = 25))
owner.adjustBruteLoss(3)
@@ -247,7 +247,7 @@
for(var/datum/mind/B in SSticker.mode.cult)
if(isliving(B.current))
var/mob/living/M = B.current
- M << 'sound/hallucinations/veryfar_noise.ogg'
+ SEND_SOUND(M, sound('sound/hallucinations/veryfar_noise.ogg'))
to_chat(M, "The Cult's Master, [owner], has fallen in \the [A]!")
/datum/status_effect/cult_master/tick()
diff --git a/code/datums/weather/weather.dm b/code/datums/weather/weather.dm
index 7b43bf6396c..f4f2fc089c0 100644
--- a/code/datums/weather/weather.dm
+++ b/code/datums/weather/weather.dm
@@ -69,7 +69,7 @@
if(telegraph_message)
to_chat(M, telegraph_message)
if(telegraph_sound)
- M << sound(telegraph_sound)
+ SEND_SOUND(M, sound(telegraph_sound))
addtimer(CALLBACK(src, .proc/start), telegraph_duration)
/datum/weather/proc/start()
@@ -83,7 +83,7 @@
if(weather_message)
to_chat(M, weather_message)
if(weather_sound)
- M << sound(weather_sound)
+ SEND_SOUND(M, sound(weather_sound))
START_PROCESSING(SSweather, src)
addtimer(CALLBACK(src, .proc/wind_down), weather_duration)
@@ -98,7 +98,7 @@
if(end_message)
to_chat(M, end_message)
if(end_sound)
- M << sound(end_sound)
+ SEND_SOUND(M, sound(end_sound))
STOP_PROCESSING(SSweather, src)
addtimer(CALLBACK(src, .proc/end), end_duration)
diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm
index 1b8d25aa510..218cb59f415 100644
--- a/code/game/area/areas.dm
+++ b/code/game/area/areas.dm
@@ -439,7 +439,7 @@ GLOBAL_LIST_EMPTY(teleportlocs)
// Ambience goes down here -- make sure to list each area separately for ease of adding things in later, thanks! Note: areas adjacent to each other should have the same sounds to prevent cutoff when possible.- LastyScratch
if(L.client && !L.client.ambience_playing && L.client.prefs.toggles & SOUND_SHIP_AMBIENCE)
L.client.ambience_playing = 1
- L << sound('sound/ambience/shipambience.ogg', repeat = 1, wait = 0, volume = 35, channel = CHANNEL_BUZZ)
+ SEND_SOUND(L, sound('sound/ambience/shipambience.ogg', repeat = 1, wait = 0, volume = 35, channel = CHANNEL_BUZZ))
if(!(L.client && (L.client.prefs.toggles & SOUND_AMBIENCE)))
return //General ambience check is below the ship ambience so one can play without the other
@@ -448,7 +448,7 @@ GLOBAL_LIST_EMPTY(teleportlocs)
var/sound = pick(ambientsounds)
if(!L.client.played)
- L << sound(sound, repeat = 0, wait = 0, volume = 25, channel = CHANNEL_AMBIENCE)
+ SEND_SOUND(L, sound(sound, repeat = 0, wait = 0, volume = 25, channel = CHANNEL_AMBIENCE))
L.client.played = 1
sleep(600) //ewww - this is very very bad
if(L.&& L.client)
diff --git a/code/game/gamemodes/antag_spawner.dm b/code/game/gamemodes/antag_spawner.dm
index 8da7cb31690..8a6d0063b9e 100644
--- a/code/game/gamemodes/antag_spawner.dm
+++ b/code/game/gamemodes/antag_spawner.dm
@@ -110,7 +110,7 @@
SSticker.mode.apprentices += M.mind
M.mind.special_role = "apprentice"
SSticker.mode.update_wiz_icons_added(M.mind)
- M << sound('sound/effects/magic.ogg')
+ SEND_SOUND(M, sound('sound/effects/magic.ogg'))
var/newname = copytext(sanitize(input(M, "You are [wizard_name]'s apprentice. Would you like to change your name to something else?", "Name change", randomname) as null|text),1,MAX_NAME_LEN)
if (!newname)
newname = randomname
diff --git a/code/game/gamemodes/blob/powers.dm b/code/game/gamemodes/blob/powers.dm
index deef4367e09..f6bf8539e0e 100644
--- a/code/game/gamemodes/blob/powers.dm
+++ b/code/game/gamemodes/blob/powers.dm
@@ -171,8 +171,8 @@
if(candidates.len) //if we got at least one candidate, they're a blobbernaut now.
var/client/C = pick(candidates)
blobber.key = C.key
- blobber << 'sound/effects/blobattack.ogg'
- blobber << 'sound/effects/attackblob.ogg'
+ SEND_SOUND(blobber, sound('sound/effects/blobattack.ogg'))
+ SEND_SOUND(blobber, sound('sound/effects/attackblob.ogg'))
to_chat(blobber, "You are a blobbernaut!")
to_chat(blobber, "You are powerful, hard to kill, and slowly regenerate near nodes and cores, but will slowly die if not near the blob or if the factory that made you is killed.")
to_chat(blobber, "You can communicate with other blobbernauts and GLOB.overminds via :b")
diff --git a/code/game/gamemodes/blob/theblob.dm b/code/game/gamemodes/blob/theblob.dm
index 0c216f1c381..9bce7319f8c 100644
--- a/code/game/gamemodes/blob/theblob.dm
+++ b/code/game/gamemodes/blob/theblob.dm
@@ -235,7 +235,7 @@
if(istype(I, /obj/item/device/analyzer))
user.changeNext_move(CLICK_CD_MELEE)
to_chat(user, "The analyzer beeps once, then reports:
")
- user << 'sound/machines/ping.ogg'
+ SEND_SOUND(user, sound('sound/machines/ping.ogg'))
chemeffectreport(user)
typereport(user)
else
diff --git a/code/game/gamemodes/changeling/powers/shriek.dm b/code/game/gamemodes/changeling/powers/shriek.dm
index 099d991062a..7afce8aa27b 100644
--- a/code/game/gamemodes/changeling/powers/shriek.dm
+++ b/code/game/gamemodes/changeling/powers/shriek.dm
@@ -16,10 +16,10 @@
C.confused += 25
C.Jitter(50)
else
- C << sound('sound/effects/screech.ogg')
+ SEND_SOUND(C, sound('sound/effects/screech.ogg'))
if(issilicon(M))
- M << sound('sound/weapons/flash.ogg')
+ SEND_SOUND(M, sound('sound/weapons/flash.ogg'))
M.Knockdown(rand(100,200))
for(var/obj/machinery/light/L in range(4, user))
diff --git a/code/game/gamemodes/clock_cult/clock_scripture.dm b/code/game/gamemodes/clock_cult/clock_scripture.dm
index 4a1ca367ce3..382aaec10d6 100644
--- a/code/game/gamemodes/clock_cult/clock_scripture.dm
+++ b/code/game/gamemodes/clock_cult/clock_scripture.dm
@@ -150,7 +150,7 @@ Judgement: 12 servants, 5 caches, 300 CV, and any existing AIs are converted or
if(prob(ratvarian_prob))
message = text2ratvar(message)
to_chat(invoker, "\"[message]\"")
- invoker << 'sound/magic/clockwork/invoke_general.ogg'
+ SEND_SOUND(invoker, sound('sound/magic/clockwork/invoke_general.ogg'))
return TRUE
/datum/clockwork_scripture/proc/check_offstation_penalty()
diff --git a/code/game/gamemodes/cult/cult_comms.dm b/code/game/gamemodes/cult/cult_comms.dm
index a7fb90d2533..647b47e7fa1 100644
--- a/code/game/gamemodes/cult/cult_comms.dm
+++ b/code/game/gamemodes/cult/cult_comms.dm
@@ -103,13 +103,13 @@
if(B.current)
B.current.update_action_buttons_icon()
if(!B.current.incapacitated())
- B.current << 'sound/hallucinations/im_here1.ogg'
+ SEND_SOUND(B.current, 'sound/hallucinations/im_here1.ogg')
to_chat(B.current, "Acolyte [Nominee] has asserted that they are worthy of leading the cult. A vote will be called shortly.")
sleep(100)
var/list/asked_cultists = list()
for(var/datum/mind/B in SSticker.mode.cult)
if(B.current && B.current != Nominee && !B.current.incapacitated())
- B.current << 'sound/magic/exit_blood.ogg'
+ SEND_SOUND(B.current, 'sound/magic/exit_blood.ogg')
asked_cultists += B.current
var/list/yes_voters = pollCandidates("[Nominee] seeks to lead your cult, do you support [Nominee.p_them()]?", poll_time = 300, group = asked_cultists)
if(QDELETED(Nominee) || Nominee.incapacitated())
@@ -280,7 +280,7 @@
for(var/datum/mind/B in SSticker.mode.cult)
if(B.current && B.current.stat != DEAD && B.current.client)
to_chat(B.current, "Master [ranged_ability_user] has marked [GLOB.blood_target] in the [A.name] as the cult's top priority, get there immediately!")
- B.current << pick(sound('sound/hallucinations/over_here2.ogg',0,1,75), sound('sound/hallucinations/over_here3.ogg',0,1,75))
+ SEND_SOUND(B.current, sound(pick('sound/hallucinations/over_here2.ogg','sound/hallucinations/over_here3.ogg'),0,1,75))
B.current.client.images += GLOB.blood_target_image
attached_action.owner.update_action_buttons_icon()
remove_ranged_ability("The marking rite is complete! It will last for 90 seconds.")
@@ -324,7 +324,7 @@
return FALSE
if(cooldown > world.time)
if(!PM.active)
- owner << "You need to wait [round((cooldown - world.time) * 0.1)] seconds before you can pulse again!"
+ to_chat(owner, "You need to wait [round((cooldown - world.time) * 0.1)] seconds before you can pulse again!")
return FALSE
return ..()
@@ -367,7 +367,7 @@
if(!attached_action.throwing)
attached_action.throwing = TRUE
attached_action.throwee = target
- ranged_ability_user << 'sound/weapons/thudswoosh.ogg'
+ SEND_SOUND(ranged_ability_user, sound('sound/weapons/thudswoosh.ogg'))
to_chat(ranged_ability_user,"You reach through the veil with your mind's eye and seize [target]!")
return
else
diff --git a/code/game/gamemodes/cult/supply.dm b/code/game/gamemodes/cult/supply.dm
index 71b8c941b15..23270c3d6c4 100644
--- a/code/game/gamemodes/cult/supply.dm
+++ b/code/game/gamemodes/cult/supply.dm
@@ -29,7 +29,6 @@
return 0
/obj/item/weapon/paper/talisman/supply/Topic(href, href_list)
- world.log << "[usr], [href], [href_list]"
if(QDELETED(src) || usr.incapacitated() || !in_range(src, usr))
return
diff --git a/code/game/gamemodes/cult/talisman.dm b/code/game/gamemodes/cult/talisman.dm
index e8b77c1172e..c5b94d983fc 100644
--- a/code/game/gamemodes/cult/talisman.dm
+++ b/code/game/gamemodes/cult/talisman.dm
@@ -270,7 +270,7 @@
if(target.use(25))
new /obj/structure/constructshell(T)
to_chat(user, "The talisman clings to the metal and twists it into a construct shell!")
- user << sound('sound/effects/magic.ogg',0,1,25)
+ SEND_SOUND(user, sound('sound/effects/magic.ogg',0,1,25))
invoke(user, 1)
qdel(src)
else
@@ -281,7 +281,7 @@
new /obj/item/stack/sheet/runed_metal(T,quantity)
target.use(quantity)
to_chat(user, "The talisman clings to the plasteel, transforming it into runed metal!")
- user << sound('sound/effects/magic.ogg',0,1,25)
+ SEND_SOUND(user, sound('sound/effects/magic.ogg',0,1,25))
invoke(user, 1)
if(uses <= 0)
qdel(src)
diff --git a/code/game/gamemodes/malfunction/Malf_Modules.dm b/code/game/gamemodes/malfunction/Malf_Modules.dm
index 8c8108962e1..5bc162ee8f9 100644
--- a/code/game/gamemodes/malfunction/Malf_Modules.dm
+++ b/code/game/gamemodes/malfunction/Malf_Modules.dm
@@ -375,8 +375,7 @@ GLOBAL_LIST_INIT(blacklisted_malf_machines, typecacheof(list(
minor_announce("[key] SECONDS UNTIL DOOMSDAY DEVICE ACTIVATION!", "ERROR ER0RR $R0RRO$!R41.%%!!(%$^^__+ @#F0E4", TRUE)
/obj/machinery/doomsday_device/proc/detonate(z_level = ZLEVEL_STATION)
- for(var/mob/M in GLOB.player_list)
- M << 'sound/machines/alarm.ogg'
+ sound_to_playing_players('sound/machines/alarm.ogg')
sleep(100)
for(var/mob/living/L in GLOB.mob_list)
var/turf/T = get_turf(L)
diff --git a/code/game/gamemodes/miniantags/morph/morph.dm b/code/game/gamemodes/miniantags/morph/morph.dm
index dcd2ef2673e..af27833d15e 100644
--- a/code/game/gamemodes/miniantags/morph/morph.dm
+++ b/code/game/gamemodes/miniantags/morph/morph.dm
@@ -224,7 +224,7 @@
player_mind.special_role = "Morph"
SSticker.mode.traitors |= player_mind
to_chat(S, S.playstyle_string)
- S << 'sound/magic/mutate.ogg'
+ SEND_SOUND(S, sound('sound/magic/mutate.ogg'))
message_admins("[key_name_admin(S)] has been made into a morph by an event.")
log_game("[key_name(S)] was spawned as a morph by an event.")
spawned_mobs += S
diff --git a/code/game/gamemodes/miniantags/revenant/revenant.dm b/code/game/gamemodes/miniantags/revenant/revenant.dm
index afbc597c299..e16c21e2e28 100644
--- a/code/game/gamemodes/miniantags/revenant/revenant.dm
+++ b/code/game/gamemodes/miniantags/revenant/revenant.dm
@@ -74,7 +74,7 @@
generated_objectives_and_spells = TRUE
mind.remove_all_antag()
mind.wipe_memory()
- src << 'sound/effects/ghost.ogg'
+ SEND_SOUND(src, sound('sound/effects/ghost.ogg'))
var/datum/objective/revenant/objective = new
objective.owner = mind
mind.objectives += objective
diff --git a/code/game/gamemodes/miniantags/slaughter/slaughterevent.dm b/code/game/gamemodes/miniantags/slaughter/slaughterevent.dm
index e9b417de1a9..bcb2218fe69 100644
--- a/code/game/gamemodes/miniantags/slaughter/slaughterevent.dm
+++ b/code/game/gamemodes/miniantags/slaughter/slaughterevent.dm
@@ -42,7 +42,7 @@
SSticker.mode.traitors |= player_mind
to_chat(S, S.playstyle_string)
to_chat(S, "You are currently not currently in the same plane of existence as the station. Blood Crawl near a blood pool to manifest.")
- S << 'sound/magic/demon_dies.ogg'
+ SEND_SOUND(S, 'sound/magic/demon_dies.ogg')
message_admins("[key_name_admin(S)] has been made into a slaughter demon by an event.")
log_game("[key_name(S)] was spawned as a slaughter demon by an event.")
spawned_mobs += S
diff --git a/code/game/gamemodes/nuclear/nuclearbomb.dm b/code/game/gamemodes/nuclear/nuclearbomb.dm
index 755f6dd0c90..d36cab48811 100644
--- a/code/game/gamemodes/nuclear/nuclearbomb.dm
+++ b/code/game/gamemodes/nuclear/nuclearbomb.dm
@@ -421,8 +421,7 @@
yes_code = FALSE
safety = TRUE
update_icon()
- for(var/mob/M in GLOB.player_list)
- M << 'sound/machines/alarm.ogg'
+ sound_to_playing_players('sound/machines/alarm.ogg')
if(SSticker && SSticker.mode)
SSticker.mode.explosion_in_progress = 1
sleep(100)
diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm
index 5f65c2a96dc..6f1ae8e1dd5 100644
--- a/code/game/gamemodes/wizard/artefact.dm
+++ b/code/game/gamemodes/wizard/artefact.dm
@@ -476,7 +476,7 @@
GiveHint(target)
else if(istype(I, /obj/item/weapon/bikehorn))
to_chat(target, "HONK")
- target << 'sound/items/airhorn.ogg'
+ SEND_SOUND(target, 'sound/items/airhorn.ogg')
target.adjustEarDamage(0,3)
GiveHint(target)
cooldown = world.time +cooldown_time
diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm
index 06c4cce2bce..9fdcea6aaf1 100644
--- a/code/game/machinery/cloning.dm
+++ b/code/game/machinery/cloning.dm
@@ -403,7 +403,7 @@
flash_color(mob_occupant, flash_color="#960000", flash_time=100)
to_chat(mob_occupant, "Agony blazes across your consciousness as your body is torn apart.
Is this what dying is like? Yes it is.")
playsound(src.loc, 'sound/machines/warning-buzzer.ogg', 50, 0)
- mob_occupant << sound('sound/hallucinations/veryfar_noise.ogg',0,1,50)
+ SEND_SOUND(mob_occupant, sound('sound/hallucinations/veryfar_noise.ogg',0,1,50))
QDEL_IN(mob_occupant, 40)
/obj/machinery/clonepod/relaymove(mob/user)
diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm
index ce6430d75c4..75a73a50678 100755
--- a/code/game/machinery/computer/communications.dm
+++ b/code/game/machinery/computer/communications.dm
@@ -89,7 +89,7 @@
playsound(src, 'sound/machines/terminal_alert.ogg', 25, 0)
if(prob(25))
for(var/mob/living/silicon/ai/AI in active_ais())
- AI << sound('sound/machines/terminal_alert.ogg', volume = 10) //Very quiet for balance reasons
+ SEND_SOUND(AI, sound('sound/machines/terminal_alert.ogg', volume = 10)) //Very quiet for balance reasons
if("logout")
authenticated = 0
playsound(src, 'sound/machines/terminal_off.ogg', 50, 0)
diff --git a/code/game/machinery/computer/pod.dm b/code/game/machinery/computer/pod.dm
index 4e6e85eecca..2023de1cd90 100644
--- a/code/game/machinery/computer/pod.dm
+++ b/code/game/machinery/computer/pod.dm
@@ -21,7 +21,7 @@
return
if(!connected)
- viewers(null, null) << "Cannot locate mass driver connector. Cancelling firing sequence!"
+ say("Cannot locate mass driver connector. Cancelling firing sequence!")
return
for(var/obj/machinery/door/poddoor/M in range(range, src))
diff --git a/code/game/machinery/doors/airlock_types.dm b/code/game/machinery/doors/airlock_types.dm
index a3f2424a9a2..a0086b7258f 100644
--- a/code/game/machinery/doors/airlock_types.dm
+++ b/code/game/machinery/doors/airlock_types.dm
@@ -390,7 +390,7 @@
new /obj/effect/temp_visual/cult/sac(loc)
var/atom/throwtarget
throwtarget = get_edge_target_turf(src, get_dir(src, get_step_away(L, src)))
- L << pick(sound('sound/hallucinations/turn_around1.ogg',0,1,50), sound('sound/hallucinations/turn_around2.ogg',0,1,50))
+ SEND_SOUND(L, sound(pick('sound/hallucinations/turn_around1.ogg','sound/hallucinations/turn_around2.ogg'),0,1,50))
flash_color(L, flash_color="#960000", flash_time=20)
L.Knockdown(40)
L.throw_at(throwtarget, 5, 1,src)
diff --git a/code/game/mecha/equipment/mecha_equipment.dm b/code/game/mecha/equipment/mecha_equipment.dm
index 4fdf06b530d..f51e1be8bb9 100644
--- a/code/game/mecha/equipment/mecha_equipment.dm
+++ b/code/game/mecha/equipment/mecha_equipment.dm
@@ -37,10 +37,7 @@
src.update_chassis_page()
chassis.occupant_message("The [src] is destroyed!")
chassis.log_append_to_last("[src] is destroyed.",1)
- if(istype(src, /obj/item/mecha_parts/mecha_equipment/weapon))
- chassis.occupant << sound('sound/mecha/weapdestr.ogg',volume=50)
- else
- chassis.occupant << sound('sound/mecha/critdestr.ogg',volume=50)
+ SEND_SOUND(chassis.occupant, sound(istype(src, /obj/item/mecha_parts/mecha_equipment/weapon) ? 'sound/mecha/weapdestr.ogg' : 'sound/mecha/critdestr.ogg', volume=50))
chassis = null
return ..()
diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm
index 5564cd2c0ad..cd385d3de35 100644
--- a/code/game/mecha/mecha.dm
+++ b/code/game/mecha/mecha.dm
@@ -596,7 +596,7 @@
/obj/mecha/proc/setInternalDamage(int_dam_flag)
internal_damage |= int_dam_flag
log_append_to_last("Internal damage of type [int_dam_flag].",1)
- occupant << sound('sound/machines/warning-buzzer.ogg',wait=0)
+ SEND_SOUND(occupant, sound('sound/machines/warning-buzzer.ogg',wait=0))
diag_hud_set_mechstat()
return
@@ -707,7 +707,7 @@
icon_state = initial(icon_state)
playsound(src, 'sound/machines/windowdoor.ogg', 50, 1)
if(!internal_damage)
- occupant << sound('sound/mecha/nominal.ogg',volume=50)
+ SEND_SOUND(occupant, sound('sound/mecha/nominal.ogg',volume=50))
AI.cancel_camera()
AI.controlled_mech = src
AI.remote_control = src
@@ -860,7 +860,7 @@
setDir(dir_in)
playsound(src, 'sound/machines/windowdoor.ogg', 50, 1)
if(!internal_damage)
- occupant << sound('sound/mecha/nominal.ogg',volume=50)
+ SEND_SOUND(occupant, sound('sound/mecha/nominal.ogg',volume=50))
return 1
else
return 0
@@ -914,7 +914,7 @@
setDir(dir_in)
log_message("[mmi_as_oc] moved in as pilot.")
if(!internal_damage)
- occupant << sound('sound/mecha/nominal.ogg',volume=50)
+ SEND_SOUND(occupant, sound('sound/mecha/nominal.ogg',volume=50))
GrantActions(brainmob)
return TRUE
diff --git a/code/game/mecha/mecha_actions.dm b/code/game/mecha/mecha_actions.dm
index 050498d8f1a..4102ba914b1 100644
--- a/code/game/mecha/mecha_actions.dm
+++ b/code/game/mecha/mecha_actions.dm
@@ -242,7 +242,7 @@
chassis.occupant_message("Zoom mode [chassis.zoom_mode?"en":"dis"]abled.")
if(chassis.zoom_mode)
owner.client.change_view(12)
- owner << sound('sound/mecha/imag_enh.ogg',volume=50)
+ SEND_SOUND(owner, sound('sound/mecha/imag_enh.ogg',volume=50))
else
owner.client.change_view(world.view) //world.view - default mob view size
UpdateButtonIcon()
diff --git a/code/game/objects/effects/mines.dm b/code/game/objects/effects/mines.dm
index 005d9c7595b..f9718d2208f 100644
--- a/code/game/objects/effects/mines.dm
+++ b/code/game/objects/effects/mines.dm
@@ -121,7 +121,7 @@
if(!victim.client || !istype(victim))
return
to_chat(victim, "RIP AND TEAR")
- victim << 'sound/misc/e1m1.ogg'
+ SEND_SOUND(victim, sound('sound/misc/e1m1.ogg'))
var/old_color = victim.client.color
var/red_splash = list(1,0,0,0.8,0.2,0, 0.8,0,0.2,0.1,0,0)
var/pure_red = list(0,0,0,0,0,0,0,0,0,1,0,0)
diff --git a/code/game/sound.dm b/code/game/sound.dm
index a9de293df6f..5303e01e4dd 100644
--- a/code/game/sound.dm
+++ b/code/game/sound.dm
@@ -78,7 +78,7 @@
S.y = 1
S.falloff = (falloff ? falloff : FALLOFF_SOUNDS)
- src << S
+ SEND_SOUND(src, S)
/proc/sound_to_playing_players(sound, volume = 100, vary)
sound = get_sfx(sound)
@@ -94,13 +94,13 @@
next_channel = 1
/mob/proc/stop_sound_channel(chan)
- src << sound(null, repeat = 0, wait = 0, channel = chan)
+ SEND_SOUND(src, sound(null, repeat = 0, wait = 0, channel = chan))
/client/proc/playtitlemusic()
UNTIL(SSticker.login_music) //wait for SSticker init to set the login music
if(prefs && (prefs.toggles & SOUND_LOBBY))
- src << sound(SSticker.login_music, repeat = 0, wait = 0, volume = 85, channel = CHANNEL_LOBBYMUSIC) // MAD JAMS
+ SEND_SOUND(src, sound(SSticker.login_music, repeat = 0, wait = 0, volume = 85, channel = CHANNEL_LOBBYMUSIC) // MAD JAMS)
/proc/get_rand_frequency()
return rand(32000, 55000) //Frequency stuff only works with 45kbps oggs.
@@ -145,7 +145,3 @@
if ("can_open")
soundin = pick('sound/effects/can_open1.ogg', 'sound/effects/can_open2.ogg', 'sound/effects/can_open3.ogg')
return soundin
-
-/proc/playsound_global(file, repeat = 0, wait, channel, volume)
- for(var/V in GLOB.clients)
- V << sound(file, repeat, wait, channel, volume)
diff --git a/code/modules/admin/NewBan.dm b/code/modules/admin/NewBan.dm
index 1ff23609233..5ea980a91d6 100644
--- a/code/modules/admin/NewBan.dm
+++ b/code/modules/admin/NewBan.dm
@@ -109,14 +109,14 @@ GLOBAL_PROTECT(Banlist)
else
GLOB.Banlist.dir.Add("[ckey][computerid]")
GLOB.Banlist.cd = "/base/[ckey][computerid]"
- GLOB.Banlist["key"] << ckey
- GLOB.Banlist["id"] << computerid
- GLOB.Banlist["ip"] << address
- GLOB.Banlist["reason"] << reason
- GLOB.Banlist["bannedby"] << bannedby
- GLOB.Banlist["temp"] << temp
+ WRITE_FILE(GLOB.Banlist["key"], ckey)
+ WRITE_FILE(GLOB.Banlist["id"], computerid)
+ WRITE_FILE(GLOB.Banlist["ip"], address)
+ WRITE_FILE(GLOB.Banlist["reason"], reason)
+ WRITE_FILE(GLOB.Banlist["bannedby"], bannedby)
+ WRITE_FILE(GLOB.Banlist["temp"], temp)
if (temp)
- GLOB.Banlist["minutes"] << bantimestamp
+ WRITE_FILE(GLOB.Banlist["minutes"], bantimestamp)
if(!temp)
create_message("note", ckey, bannedby, "Permanently banned - [reason]", null, null, 0, 0)
else
@@ -211,17 +211,17 @@ GLOBAL_PROTECT(Banlist)
GLOB.Banlist.cd = "/base"
GLOB.Banlist.dir.Add("trash[i]trashid[i]")
GLOB.Banlist.cd = "/base/trash[i]trashid[i]"
- GLOB.Banlist["key"] << "trash[i]"
+ WRITE_FILE(GLOB.Banlist["key"], "trash[i]")
else
GLOB.Banlist.cd = "/base"
GLOB.Banlist.dir.Add("[last]trashid[i]")
GLOB.Banlist.cd = "/base/[last]trashid[i]"
- GLOB.Banlist["key"] << last
- GLOB.Banlist["id"] << "trashid[i]"
- GLOB.Banlist["reason"] << "Trashban[i]."
- GLOB.Banlist["temp"] << a
- GLOB.Banlist["minutes"] << GLOB.CMinutes + rand(1,2000)
- GLOB.Banlist["bannedby"] << "trashmin"
+ WRITE_FILE(GLOB.Banlist["key"], last)
+ WRITE_FILE(GLOB.Banlist["id"], "trashid[i]")
+ WRITE_FILE(GLOB.Banlist["reason"], "Trashban[i].")
+ WRITE_FILE(GLOB.Banlist["temp"], a)
+ WRITE_FILE(GLOB.Banlist["minutes"], GLOB.CMinutes + rand(1,2000))
+ WRITE_FILE(GLOB.Banlist["bannedby"], "trashmin")
last = "trash[i]"
GLOB.Banlist.cd = "/base"
diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm
index 7c20421d3c5..5943e753a04 100644
--- a/code/modules/admin/admin.dm
+++ b/code/modules/admin/admin.dm
@@ -595,7 +595,7 @@
log_admin("[key_name(usr)] delayed the round start.")
else
to_chat(world, "The game will start in [newtime] seconds.")
- world << 'sound/ai/attention.ogg'
+ SEND_SOUND(world, sound('sound/ai/attention.ogg'))
log_admin("[key_name(usr)] set the pre-game delay to [newtime] seconds.")
SSblackbox.add_details("admin_verb","Delay Game Start") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
diff --git a/code/modules/admin/admin_investigate.dm b/code/modules/admin/admin_investigate.dm
index 2ca0593e8dd..4b06260c460 100644
--- a/code/modules/admin/admin_investigate.dm
+++ b/code/modules/admin/admin_investigate.dm
@@ -2,7 +2,7 @@
if(!message || !subject)
return
var/F = file("[GLOB.log_directory]/[subject].html")
- F << "[time_stamp()] \ref[src] ([x],[y],[z]) || [src] [message]
"
+ WRITE_FILE(F, "[time_stamp()] \ref[src] ([x],[y],[z]) || [src] [message]
")
/client/proc/investigate_show(subject in list("hrefs","notes, memos, watchlist", INVESTIGATE_PORTAL, INVESTIGATE_SINGULO, INVESTIGATE_WIRES, INVESTIGATE_TELESCI, INVESTIGATE_GRAVITY, INVESTIGATE_RECORDS, INVESTIGATE_CARGO, INVESTIGATE_SUPERMATTER, INVESTIGATE_ATMOS, INVESTIGATE_EXPERIMENTOR, INVESTIGATE_BOTANY, INVESTIGATE_HALLUCINATIONS) )
diff --git a/code/modules/admin/admin_ranks.dm b/code/modules/admin/admin_ranks.dm
index 73c2d8067e6..828fbb2e91a 100644
--- a/code/modules/admin/admin_ranks.dm
+++ b/code/modules/admin/admin_ranks.dm
@@ -142,7 +142,7 @@ GLOBAL_PROTECT(admin_ranks)
else
if(!SSdbcore.Connect())
log_world("Failed to connect to database in load_admin_ranks(). Reverting to legacy system.")
- GLOB.world_game_log << "Failed to connect to database in load_admin_ranks(). Reverting to legacy system."
+ WRITE_FILE(GLOB.world_game_log, "Failed to connect to database in load_admin_ranks(). Reverting to legacy system.")
config.admin_legacy_system = 1
load_admin_ranks()
return
@@ -220,7 +220,7 @@ GLOBAL_PROTECT(admin_ranks)
else
if(!SSdbcore.Connect())
log_world("Failed to connect to database in load_admins(). Reverting to legacy system.")
- GLOB.world_game_log << "Failed to connect to database in load_admins(). Reverting to legacy system."
+ WRITE_FILE(GLOB.world_game_log, "Failed to connect to database in load_admins(). Reverting to legacy system.")
config.admin_legacy_system = 1
load_admins()
return
diff --git a/code/modules/admin/secrets.dm b/code/modules/admin/secrets.dm
index c3185c7b210..04a4b7877a1 100644
--- a/code/modules/admin/secrets.dm
+++ b/code/modules/admin/secrets.dm
@@ -390,7 +390,7 @@
SSblackbox.add_details("admin_secrets_fun_used","Chinese Cartoons")
message_admins("[key_name_admin(usr)] made everything kawaii.")
for(var/mob/living/carbon/human/H in GLOB.mob_list)
- H << sound('sound/ai/animes.ogg')
+ SEND_SOUND(H, sound('sound/ai/animes.ogg'))
if(H.dna.species.id == "human")
if(H.dna.features["tail_human"] == "None" || H.dna.features["ears"] == "None")
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm
index 9d92efebd25..0f0ec0a79c1 100644
--- a/code/modules/admin/topic.dm
+++ b/code/modules/admin/topic.dm
@@ -506,10 +506,10 @@
ban_unban_log_save("[key_name(usr)] edited [banned_key]'s ban. Reason: [reason] Duration: [duration]")
message_admins("[key_name_admin(usr)] edited [banned_key]'s ban. Reason: [reason] Duration: [duration]")
GLOB.Banlist.cd = "/base/[banfolder]"
- GLOB.Banlist["reason"] << reason
- GLOB.Banlist["temp"] << temp
- GLOB.Banlist["minutes"] << minutes
- GLOB.Banlist["bannedby"] << usr.ckey
+ WRITE_FILE(GLOB.Banlist["reason"], reason)
+ WRITE_FILE(GLOB.Banlist["temp"], temp)
+ WRITE_FILE(GLOB.Banlist["minutes"], minutes)
+ WRITE_FILE(GLOB.Banlist["bannedby"], usr.ckey)
GLOB.Banlist.cd = "/base"
SSblackbox.inc("ban_edit",1)
unbanpanel()
@@ -1691,7 +1691,7 @@
message_admins("[key_name(H)] got their cookie, spawned by [key_name(src.owner)].")
SSblackbox.inc("admin_cookies_spawned",1)
to_chat(H, "Your prayers have been answered!! You received the best cookie!")
- H << 'sound/effects/pray_chaplain.ogg'
+ SEND_SOUND(H, sound('sound/effects/pray_chaplain.ogg'))
else if(href_list["adminsmite"])
if(!check_rights(R_ADMIN|R_FUN))
diff --git a/code/modules/admin/verbs/BrokenInhands.dm b/code/modules/admin/verbs/BrokenInhands.dm
index 8b509e288d3..99bdcd7fa67 100644
--- a/code/modules/admin/verbs/BrokenInhands.dm
+++ b/code/modules/admin/verbs/BrokenInhands.dm
@@ -28,7 +28,7 @@
if(text)
var/F = file("broken_icons.txt")
fdel(F)
- F << text
+ WRITE_FILE(F, text)
to_chat(world, "Completely successfully and written to [F]")
diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm
index 44755c46fc2..b19c736e148 100644
--- a/code/modules/admin/verbs/adminhelp.dm
+++ b/code/modules/admin/verbs/adminhelp.dm
@@ -259,7 +259,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new)
//send this msg to all admins
for(var/client/X in GLOB.admins)
if(X.prefs.toggles & SOUND_ADMINHELP)
- X << 'sound/effects/adminhelp.ogg'
+ SEND_SOUND(X, sound('sound/effects/adminhelp.ogg'))
window_flash(X, ignorepref = TRUE)
to_chat(X, admin_msg)
@@ -347,7 +347,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new)
if(initiator)
initiator.giveadminhelpverb()
- initiator << 'sound/effects/adminhelp.ogg'
+ SEND_SOUND(initiator, sound('sound/effects/adminhelp.ogg'))
to_chat(initiator, "- AdminHelp Rejected! -")
to_chat(initiator, "Your admin help was rejected. The adminhelp verb has been returned to you so that you may try again.")
diff --git a/code/modules/admin/verbs/adminpm.dm b/code/modules/admin/verbs/adminpm.dm
index 31fb08da362..db290214631 100644
--- a/code/modules/admin/verbs/adminpm.dm
+++ b/code/modules/admin/verbs/adminpm.dm
@@ -167,7 +167,7 @@
//play the recieving admin the adminhelp sound (if they have them enabled)
if(recipient.prefs.toggles & SOUND_ADMINHELP)
- recipient << 'sound/effects/adminhelp.ogg'
+ SEND_SOUND(recipient, sound('sound/effects/adminhelp.ogg'))
else
if(holder) //sender is an admin but recipient is not. Do BIG RED TEXT
@@ -182,7 +182,7 @@
admin_ticket_log(recipient, "PM From [key_name_admin(src)]: [keywordparsedmsg]")
//always play non-admin recipients the adminhelp sound
- recipient << 'sound/effects/adminhelp.ogg'
+ SEND_SOUND(recipient, sound('sound/effects/adminhelp.ogg'))
//AdminPM popup for ApocStation and anybody else who wants to use it. Set it with POPUP_ADMIN_PM in config.txt ~Carn
if(config.popup_admin_pm)
@@ -301,7 +301,7 @@
window_flash(C, ignorepref = TRUE)
//always play non-admin recipients the adminhelp sound
- C << 'sound/effects/adminhelp.ogg'
+ SEND_SOUND(C, 'sound/effects/adminhelp.ogg')
C.ircreplyamount = IRCREPLYCOUNT
diff --git a/code/modules/admin/verbs/playsound.dm b/code/modules/admin/verbs/playsound.dm
index eb4c3a5f10f..2bac326710d 100644
--- a/code/modules/admin/verbs/playsound.dm
+++ b/code/modules/admin/verbs/playsound.dm
@@ -30,7 +30,7 @@
for(var/mob/M in GLOB.player_list)
if(M.client.prefs.toggles & SOUND_MIDI)
- M << admin_sound
+ SEND_SOUND(M, admin_sound)
SSblackbox.add_details("admin_verb","Play Global Sound") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
@@ -68,5 +68,5 @@
message_admins("[key_name_admin(src)] stopped all currently playing sounds.")
for(var/mob/M in GLOB.player_list)
if(M.client)
- M << sound(null)
+ SEND_SOUND(M, sound(null))
SSblackbox.add_details("admin_verb","Stop All Playing Sounds") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
diff --git a/code/modules/admin/verbs/pray.dm b/code/modules/admin/verbs/pray.dm
index da31cee913f..12f5dc7bdce 100644
--- a/code/modules/admin/verbs/pray.dm
+++ b/code/modules/admin/verbs/pray.dm
@@ -40,7 +40,7 @@
to_chat(C, msg)
if(C.prefs.toggles & SOUND_PRAYERS)
if(usr.job == "Chaplain")
- C << 'sound/effects/pray.ogg'
+ SEND_SOUND(C, sound('sound/effects/pray.ogg'))
to_chat(usr, "Your prayers have been received by the gods.")
SSblackbox.add_details("admin_verb","Prayer") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm
index 18db4166182..f7672d7953f 100644
--- a/code/modules/client/client_procs.dm
+++ b/code/modules/client/client_procs.dm
@@ -73,7 +73,7 @@
return
//Logs all hrefs
- GLOB.world_href_log << "[time_stamp(show_ds = TRUE)] [src] (usr:[usr]) || [hsrc ? "[hsrc] " : ""][href]
"
+ WRITE_FILE(GLOB.world_href_log, "[time_stamp(show_ds = TRUE)] [src] (usr:[usr]) || [hsrc ? "[hsrc] " : ""][href]
")
// Admin PM
if(href_list["priv_msg"])
diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm
index 5853852e441..8922d9951fd 100644
--- a/code/modules/client/preferences_savefile.dm
+++ b/code/modules/client/preferences_savefile.dm
@@ -193,34 +193,34 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
return 0
S.cd = "/"
- S["version"] << SAVEFILE_VERSION_MAX //updates (or failing that the sanity checks) will ensure data is not invalid at load. Assume up-to-date
+ WRITE_FILE(S["version"] , SAVEFILE_VERSION_MAX) //updates (or failing that the sanity checks) will ensure data is not invalid at load. Assume up-to-date
//general preferences
- S["ooccolor"] << ooccolor
- S["lastchangelog"] << lastchangelog
- S["UI_style"] << UI_style
- S["hotkeys"] << hotkeys
- S["tgui_fancy"] << tgui_fancy
- S["tgui_lock"] << tgui_lock
- S["windowflash"] << windowflashing
- S["be_special"] << be_special
- S["default_slot"] << default_slot
- S["toggles"] << toggles
- S["chat_toggles"] << chat_toggles
- S["ghost_form"] << ghost_form
- S["ghost_orbit"] << ghost_orbit
- S["ghost_accs"] << ghost_accs
- S["ghost_others"] << ghost_others
- S["preferred_map"] << preferred_map
- S["ignoring"] << ignoring
- S["ghost_hud"] << ghost_hud
- S["inquisitive_ghost"] << inquisitive_ghost
- S["uses_glasses_colour"]<< uses_glasses_colour
- S["clientfps"] << clientfps
- S["parallax"] << parallax
- S["menuoptions"] << menuoptions
- S["enable_tips"] << enable_tips
- S["tip_delay"] << tip_delay
+ WRITE_FILE(S["ooccolor"], ooccolor)
+ WRITE_FILE(S["lastchangelog"], lastchangelog)
+ WRITE_FILE(S["UI_style"], UI_style)
+ WRITE_FILE(S["hotkeys"], hotkeys)
+ WRITE_FILE(S["tgui_fancy"], tgui_fancy)
+ WRITE_FILE(S["tgui_lock"], tgui_lock)
+ WRITE_FILE(S["windowflash"], windowflashing)
+ WRITE_FILE(S["be_special"], be_special)
+ WRITE_FILE(S["default_slot"], default_slot)
+ WRITE_FILE(S["toggles"], toggles)
+ WRITE_FILE(S["chat_toggles"], chat_toggles)
+ WRITE_FILE(S["ghost_form"], ghost_form)
+ WRITE_FILE(S["ghost_orbit"], ghost_orbit)
+ WRITE_FILE(S["ghost_accs"], ghost_accs)
+ WRITE_FILE(S["ghost_others"], ghost_others)
+ WRITE_FILE(S["preferred_map"], preferred_map)
+ WRITE_FILE(S["ignoring"], ignoring)
+ WRITE_FILE(S["ghost_hud"], ghost_hud)
+ WRITE_FILE(S["inquisitive_ghost"], inquisitive_ghost)
+ WRITE_FILE(S["uses_glasses_colour"], uses_glasses_colour)
+ WRITE_FILE(S["clientfps"], clientfps)
+ WRITE_FILE(S["parallax"], parallax)
+ WRITE_FILE(S["menuoptions"], menuoptions)
+ WRITE_FILE(S["enable_tips"], enable_tips)
+ WRITE_FILE(S["tip_delay"], tip_delay)
return 1
@@ -238,7 +238,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
slot = sanitize_integer(slot, 1, max_save_slots, initial(default_slot))
if(slot != default_slot)
default_slot = slot
- S["default_slot"] << slot
+ WRITE_FILE(S["default_slot"] , slot)
S.cd = "/character[slot]"
var/needs_update = savefile_needs_update(S)
@@ -257,7 +257,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
pref_species = new rando_race()
if(!S["features["mcolor"]"] || S["features["mcolor"]"] == "#000")
- S["features["mcolor"]"] << "#FFF"
+ WRITE_FILE(S["features["mcolor"]"] , "#FFF")
//Character
S["OOC_Notes"] >> metadata
@@ -375,56 +375,56 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
return 0
S.cd = "/character[default_slot]"
- S["version"] << SAVEFILE_VERSION_MAX //load_character will sanitize any bad data, so assume up-to-date.
+ WRITE_FILE(S["version"] , SAVEFILE_VERSION_MAX) //load_character will sanitize any bad data, so assume up-to-date.)
//Character
- S["OOC_Notes"] << metadata
- S["real_name"] << real_name
- S["name_is_always_random"] << be_random_name
- S["body_is_always_random"] << be_random_body
- S["gender"] << gender
- S["age"] << age
- S["hair_color"] << hair_color
- S["facial_hair_color"] << facial_hair_color
- S["eye_color"] << eye_color
- S["skin_tone"] << skin_tone
- S["hair_style_name"] << hair_style
- S["facial_style_name"] << facial_hair_style
- S["underwear"] << underwear
- S["undershirt"] << undershirt
- S["socks"] << socks
- S["backbag"] << backbag
- S["uplink_loc"] << uplink_spawn_loc
- S["species"] << pref_species.id
- S["feature_mcolor"] << features["mcolor"]
- S["feature_lizard_tail"] << features["tail_lizard"]
- S["feature_human_tail"] << features["tail_human"]
- S["feature_lizard_snout"] << features["snout"]
- S["feature_lizard_horns"] << features["horns"]
- S["feature_human_ears"] << features["ears"]
- S["feature_lizard_frills"] << features["frills"]
- S["feature_lizard_spines"] << features["spines"]
- S["feature_lizard_body_markings"] << features["body_markings"]
- S["feature_lizard_legs"] << features["legs"]
- S["clown_name"] << custom_names["clown"]
- S["mime_name"] << custom_names["mime"]
- S["ai_name"] << custom_names["ai"]
- S["cyborg_name"] << custom_names["cyborg"]
- S["religion_name"] << custom_names["religion"]
- S["deity_name"] << custom_names["deity"]
- S["prefered_security_department"] << prefered_security_department
+ WRITE_FILE(S["OOC_Notes"] , metadata)
+ WRITE_FILE(S["real_name"] , real_name)
+ WRITE_FILE(S["name_is_always_random"] , be_random_name)
+ WRITE_FILE(S["body_is_always_random"] , be_random_body)
+ WRITE_FILE(S["gender"] , gender)
+ WRITE_FILE(S["age"] , age)
+ WRITE_FILE(S["hair_color"] , hair_color)
+ WRITE_FILE(S["facial_hair_color"] , facial_hair_color)
+ WRITE_FILE(S["eye_color"] , eye_color)
+ WRITE_FILE(S["skin_tone"] , skin_tone)
+ WRITE_FILE(S["hair_style_name"] , hair_style)
+ WRITE_FILE(S["facial_style_name"] , facial_hair_style)
+ WRITE_FILE(S["underwear"] , underwear)
+ WRITE_FILE(S["undershirt"] , undershirt)
+ WRITE_FILE(S["socks"] , socks)
+ WRITE_FILE(S["backbag"] , backbag)
+ WRITE_FILE(S["uplink_loc"] , uplink_spawn_loc)
+ WRITE_FILE(S["species"] , pref_species.id)
+ WRITE_FILE(S["feature_mcolor"] , features["mcolor"])
+ WRITE_FILE(S["feature_lizard_tail"] , features["tail_lizard"])
+ WRITE_FILE(S["feature_human_tail"] , features["tail_human"])
+ WRITE_FILE(S["feature_lizard_snout"] , features["snout"])
+ WRITE_FILE(S["feature_lizard_horns"] , features["horns"])
+ WRITE_FILE(S["feature_human_ears"] , features["ears"])
+ WRITE_FILE(S["feature_lizard_frills"] , features["frills"])
+ WRITE_FILE(S["feature_lizard_spines"] , features["spines"])
+ WRITE_FILE(S["feature_lizard_body_markings"] , features["body_markings"])
+ WRITE_FILE(S["feature_lizard_legs"] , features["legs"])
+ WRITE_FILE(S["clown_name"] , custom_names["clown"])
+ WRITE_FILE(S["mime_name"] , custom_names["mime"])
+ WRITE_FILE(S["ai_name"] , custom_names["ai"])
+ WRITE_FILE(S["cyborg_name"] , custom_names["cyborg"])
+ WRITE_FILE(S["religion_name"] , custom_names["religion"])
+ WRITE_FILE(S["deity_name"] , custom_names["deity"])
+ WRITE_FILE(S["prefered_security_department"] , prefered_security_department)
//Jobs
- S["joblessrole"] << joblessrole
- S["job_civilian_high"] << job_civilian_high
- S["job_civilian_med"] << job_civilian_med
- S["job_civilian_low"] << job_civilian_low
- S["job_medsci_high"] << job_medsci_high
- S["job_medsci_med"] << job_medsci_med
- S["job_medsci_low"] << job_medsci_low
- S["job_engsec_high"] << job_engsec_high
- S["job_engsec_med"] << job_engsec_med
- S["job_engsec_low"] << job_engsec_low
+ WRITE_FILE(S["joblessrole"] , joblessrole)
+ WRITE_FILE(S["job_civilian_high"] , job_civilian_high)
+ WRITE_FILE(S["job_civilian_med"] , job_civilian_med)
+ WRITE_FILE(S["job_civilian_low"] , job_civilian_low)
+ WRITE_FILE(S["job_medsci_high"] , job_medsci_high)
+ WRITE_FILE(S["job_medsci_med"] , job_medsci_med)
+ WRITE_FILE(S["job_medsci_low"] , job_medsci_low)
+ WRITE_FILE(S["job_engsec_high"] , job_engsec_high)
+ WRITE_FILE(S["job_engsec_med"] , job_engsec_med)
+ WRITE_FILE(S["job_engsec_low"] , job_engsec_low)
return 1
@@ -444,4 +444,4 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
var/savefile/S = new /savefile(path)
S.ImportText("/",file("[path].txt"))
-#endif
\ No newline at end of file
+#endif
diff --git a/code/modules/client/preferences_toggles.dm b/code/modules/client/preferences_toggles.dm
index d56b6e06199..1d04964a8b9 100644
--- a/code/modules/client/preferences_toggles.dm
+++ b/code/modules/client/preferences_toggles.dm
@@ -229,7 +229,7 @@ TOGGLE_CHECKBOX(/datum/verbs/menu/Settings/Sound, toggleprayersounds)()
set name = "Stop Sounds"
set category = "Preferences"
set desc = "Stop Current Sounds"
- usr << sound(null)
+ SEND_SOUND(usr, sound(null))
SSblackbox.add_details("preferences_verb","Stop Self Sounds") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
diff --git a/code/modules/detectivework/detective_work.dm b/code/modules/detectivework/detective_work.dm
index 8b0b903dc52..5b92b1e88f8 100644
--- a/code/modules/detectivework/detective_work.dm
+++ b/code/modules/detectivework/detective_work.dm
@@ -17,19 +17,16 @@
if(M.wear_suit)
fibertext = "Material from \a [M.wear_suit]."
if(prob(10*item_multiplier) && !(fibertext in suit_fibers))
- //world.log << "Added fibertext: [fibertext]"
suit_fibers += fibertext
if(!(M.wear_suit.body_parts_covered & CHEST))
if(M.w_uniform)
fibertext = "Fibers from \a [M.w_uniform]."
if(prob(12*item_multiplier) && !(fibertext in suit_fibers)) //Wearing a suit means less of the uniform exposed.
- //world.log << "Added fibertext: [fibertext]"
suit_fibers += fibertext
if(!(M.wear_suit.body_parts_covered & HANDS))
if(M.gloves)
fibertext = "Material from a pair of [M.gloves.name]."
if(prob(20*item_multiplier) && !(fibertext in suit_fibers))
- //world.log << "Added fibertext: [fibertext]"
suit_fibers += fibertext
else if(M.w_uniform)
fibertext = "Fibers from \a [M.w_uniform]."
@@ -39,12 +36,10 @@
if(M.gloves)
fibertext = "Material from a pair of [M.gloves.name]."
if(prob(20*item_multiplier) && !(fibertext in suit_fibers))
- //world.log << "Added fibertext: [fibertext]"
suit_fibers += "Material from a pair of [M.gloves.name]."
else if(M.gloves)
fibertext = "Material from a pair of [M.gloves.name]."
if(prob(20*item_multiplier) && !(fibertext in suit_fibers))
- //world.log << "Added fibertext: [fibertext]"
suit_fibers += "Material from a pair of [M.gloves.name]."
diff --git a/code/modules/error_handler/error_handler.dm b/code/modules/error_handler/error_handler.dm
index e2cce14db39..93605ea78ae 100644
--- a/code/modules/error_handler/error_handler.dm
+++ b/code/modules/error_handler/error_handler.dm
@@ -55,7 +55,7 @@ GLOBAL_VAR_INIT(total_runtimes_skipped, 0)
var/skipcount = abs(error_cooldown[erroruid]) - 1
error_cooldown[erroruid] = 0
if(skipcount > 0)
- world.log << "\[[time_stamp()]] Skipped [skipcount] runtimes in [E.file],[E.line]."
+ SEND_TEXT(world.log, "\[[time_stamp()]] Skipped [skipcount] runtimes in [E.file],[E.line].")
GLOB.error_cache.log_error(E, skip_count = skipcount)
error_last_seen[erroruid] = world.time
@@ -92,9 +92,9 @@ GLOBAL_VAR_INIT(total_runtimes_skipped, 0)
if(GLOB.error_cache)
GLOB.error_cache.log_error(E, desclines)
- world.log << "\[[time_stamp()]] Runtime in [E.file],[E.line]: [E]"
+ SEND_TEXT(world.log, "\[[time_stamp()]] Runtime in [E.file],[E.line]: [E]")
for(var/line in desclines)
- world.log << line
+ SEND_TEXT(world.log, line)
/* This logs the runtime in the old format */
diff --git a/code/modules/events/holiday/halloween.dm b/code/modules/events/holiday/halloween.dm
index 2bedd05866c..7b44e63eeb7 100644
--- a/code/modules/events/holiday/halloween.dm
+++ b/code/modules/events/holiday/halloween.dm
@@ -70,7 +70,7 @@
if(!H.client || !istype(H))
return
to_chat(H, "Honk...")
- H << 'sound/spookoween/scary_clown_appear.ogg'
+ SEND_SOUND(H, sound('sound/spookoween/scary_clown_appear.ogg'))
var/turf/T = get_turf(H)
if(T)
new /obj/effect/hallucination/simple/clown(T, H, 50)
diff --git a/code/modules/events/portal_storm.dm b/code/modules/events/portal_storm.dm
index 888b87cc026..9658d8b144e 100644
--- a/code/modules/events/portal_storm.dm
+++ b/code/modules/events/portal_storm.dm
@@ -68,11 +68,11 @@
/datum/round_event/portal_storm/announce()
set waitfor = 0
- playsound_global('sound/magic/lightning_chargeup.ogg', repeat=0, channel=1, volume=100)
+ sound_to_playing_players('sound/magic/lightning_chargeup.ogg')
sleep(80)
priority_announce("Massive bluespace anomaly detected en route to [station_name()]. Brace for impact.")
sleep(20)
- playsound_global('sound/magic/lightningbolt.ogg', repeat=0, channel=1, volume=100)
+ sound_to_playing_players('sound/magic/lightningbolt.ogg')
/datum/round_event/portal_storm/tick()
spawn_effects()
diff --git a/code/modules/events/wizard/fakeexplosion.dm b/code/modules/events/wizard/fakeexplosion.dm
index f6ffab2da8f..3dee4a1f49f 100644
--- a/code/modules/events/wizard/fakeexplosion.dm
+++ b/code/modules/events/wizard/fakeexplosion.dm
@@ -6,6 +6,5 @@
earliest_start = 0
/datum/round_event/wizard/fake_explosion/start()
- for(var/mob/M in GLOB.player_list)
- M << 'sound/machines/alarm.ogg'
+ sound_to_playing_players('sound/machines/alarm.ogg')
addtimer(CALLBACK(SSticker, /datum/controller/subsystem/ticker/.proc/station_explosion_cinematic, 1, "fake"), 100) //:o)
\ No newline at end of file
diff --git a/code/modules/events/wizard/imposter.dm b/code/modules/events/wizard/imposter.dm
index ffec648771d..1ba052c4c0b 100644
--- a/code/modules/events/wizard/imposter.dm
+++ b/code/modules/events/wizard/imposter.dm
@@ -55,4 +55,4 @@
I.log_message("Is an imposter!", INDIVIDUAL_ATTACK_LOG)
to_chat(I, "You are an imposter! Trick and confuse the crew to misdirect malice from your handsome original!")
- I << sound('sound/effects/magic.ogg')
+ SEND_SOUND(I, sound('sound/effects/magic.ogg'))
diff --git a/code/modules/goonchat/browserOutput.dm b/code/modules/goonchat/browserOutput.dm
index 2e0ba2a2a4b..5f667a64bb8 100644
--- a/code/modules/goonchat/browserOutput.dm
+++ b/code/modules/goonchat/browserOutput.dm
@@ -100,7 +100,7 @@ GLOBAL_DATUM_INIT(iconCache, /savefile, new("data/iconCache.sav")) //Cache of ic
sendClientData()
//do not convert to to_chat()
- owner << {"If you can see this, update byond."}
+ SEND_TEXT(owner, "If you can see this, update byond.")
pingLoop()
@@ -172,7 +172,7 @@ GLOBAL_DATUM_INIT(iconCache, /savefile, new("data/iconCache.sav")) //Cache of ic
/proc/icon2base64(icon/icon, iconKey = "misc")
if (!isicon(icon))
return FALSE
- GLOB.iconCache[iconKey] << icon
+ WRITE_FILE(GLOB.iconCache[iconKey], icon)
var/iconData = GLOB.iconCache.ExportText(iconKey)
var/list/partial = splittext(iconData, "{")
return replacetext(copytext(partial[2], 3, -5), "\n", "")
@@ -224,7 +224,6 @@ GLOBAL_DATUM_INIT(iconCache, /savefile, new("data/iconCache.sav")) //Cache of ic
//Ok so I did my best but I accept that some calls to this will be for shit like sound and images
//It stands that we PROBABLY don't want to output those to the browser output so just handle them here
if (istype(message, /image) || istype(message, /sound) || istype(target, /savefile))
- target << message
CRASH("Invalid message! [message]")
if(!istext(message))
@@ -255,7 +254,7 @@ GLOBAL_DATUM_INIT(iconCache, /savefile, new("data/iconCache.sav")) //Cache of ic
continue
//Send it to the old style output window.
- C << original_message
+ SEND_TEXT(C, original_message)
if(!C.chatOutput || C.chatOutput.broken) // A player who hasn't updated his skin file.
continue
diff --git a/code/modules/goonchat/jsErrorHandler.dm b/code/modules/goonchat/jsErrorHandler.dm
index 67ea5faca38..ce257ce660f 100644
--- a/code/modules/goonchat/jsErrorHandler.dm
+++ b/code/modules/goonchat/jsErrorHandler.dm
@@ -32,7 +32,7 @@
CRASH("Debug Error Handling encountered an error! This is highly ironic! File: '[fileName]' has exceeded the filesize limit of: [src.logFileLimit] bytes")
message = "\[[time2text(world.realtime, "YYYY-MM-DD hh:mm:ss")]\] Client: \[[C && C.key ? C.key : "Unknown Client"]\] triggered: [message]"
- logFile << message
+ WRITE_FILE(logFile, message)
return 1
/datum/debugFileOutput/proc/clear(fileName)
diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm
index 744ea44187c..c6e4056090e 100644
--- a/code/modules/mob/dead/observer/observer.dm
+++ b/code/modules/mob/dead/observer/observer.dm
@@ -351,7 +351,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
source.plane = old_plane
to_chat(src, "(Click to re-enter)")
if(sound)
- src << sound(sound)
+ SEND_SOUND(src, sound(sound))
/mob/dead/observer/proc/dead_tele()
set category = "Ghost"
diff --git a/code/modules/mob/living/carbon/alien/special/alien_embryo.dm b/code/modules/mob/living/carbon/alien/special/alien_embryo.dm
index 86ea3d64e9e..01626c56940 100644
--- a/code/modules/mob/living/carbon/alien/special/alien_embryo.dm
+++ b/code/modules/mob/living/carbon/alien/special/alien_embryo.dm
@@ -87,7 +87,7 @@
var/atom/xeno_loc = get_turf(owner)
var/mob/living/carbon/alien/larva/new_xeno = new(xeno_loc)
new_xeno.key = ghost.key
- new_xeno << sound('sound/voice/hiss5.ogg',0,0,0,100) //To get the player's attention
+ SEND_SOUND(new_xeno, sound('sound/voice/hiss5.ogg',0,0,0,100)) //To get the player's attention
new_xeno.canmove = 0 //so we don't move during the bursting animation
new_xeno.notransform = 1
new_xeno.invisibility = INVISIBILITY_MAXIMUM
diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm
index 34b8e1e6290..f6c91075953 100644
--- a/code/modules/mob/living/carbon/carbon_defense.dm
+++ b/code/modules/mob/living/carbon/carbon_defense.dm
@@ -334,7 +334,7 @@
// you need earmuffs, inacusiate, or replacement
else if(ears.ear_damage >= 5)
to_chat(src, "Your ears start to ring!")
- src << sound('sound/weapons/flash_ring.ogg',0,1,0,250)
+ SEND_SOUND(src, sound('sound/weapons/flash_ring.ogg',0,1,0,250))
return effect_amount //how soundbanged we are
diff --git a/code/modules/mob/living/carbon/human/interactive.dm b/code/modules/mob/living/carbon/human/interactive.dm
index e439f8ef9e2..2ed81b9f886 100644
--- a/code/modules/mob/living/carbon/human/interactive.dm
+++ b/code/modules/mob/living/carbon/human/interactive.dm
@@ -97,7 +97,7 @@
if(voice_saved)
return
var/savefile/S = new /savefile("data/npc_saves/snpc.sav")
- S["knownStrings"] << knownStrings
+ WRITE_FILE(S["knownStrings"], knownStrings)
//botPool funcs
/mob/living/carbon/human/interactive/proc/takeDelegate(mob/living/carbon/human/interactive/from,doReset=TRUE)
diff --git a/code/modules/mob/living/carbon/monkey/punpun.dm b/code/modules/mob/living/carbon/monkey/punpun.dm
index 901f2ceabc0..b56028634f6 100644
--- a/code/modules/mob/living/carbon/monkey/punpun.dm
+++ b/code/modules/mob/living/carbon/monkey/punpun.dm
@@ -51,23 +51,23 @@
/mob/living/carbon/monkey/punpun/proc/Write_Memory(dead, gibbed)
var/savefile/S = new /savefile("data/npc_saves/Punpun.sav")
if(gibbed)
- S["ancestor_name"] << null
- S["ancestor_chain"] << 1
- S["relic_hat"] << null
- S["relic_mask"] << null
+ WRITE_FILE(S["ancestor_name"], null)
+ WRITE_FILE(S["ancestor_chain"], 1)
+ WRITE_FILE(S["relic_hat"], null)
+ WRITE_FILE(S["relic_mask"], null)
return
if(dead)
- S["ancestor_name"] << ancestor_name
- S["ancestor_chain"] << ancestor_chain + 1
+ WRITE_FILE(S["ancestor_name"], ancestor_name)
+ WRITE_FILE(S["ancestor_chain"], ancestor_chain + 1)
if(!ancestor_name) //new monkey name this round
- S["ancestor_name"] << name
+ WRITE_FILE(S["ancestor_name"], name)
if(head)
- S["relic_hat"] << head.type
+ WRITE_FILE(S["relic_hat"], head.type)
else
- S["relic_hat"] << null
+ WRITE_FILE(S["relic_hat"], null)
if(wear_mask)
- S["relic_mask"] << wear_mask.type
+ WRITE_FILE(S["relic_mask"], wear_mask.type)
else
- S["relic_mask"] << null
+ WRITE_FILE(S["relic_mask"], null)
if(!dead)
memory_saved = 1
diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm
index 0c693b47494..578eaec93ea 100644
--- a/code/modules/mob/living/living_defense.dm
+++ b/code/modules/mob/living/living_defense.dm
@@ -316,7 +316,7 @@
GLOB.cult_narsie.souls += 1
if((GLOB.cult_narsie.souls == GLOB.cult_narsie.soul_goal) && (GLOB.cult_narsie.resolved == FALSE))
GLOB.cult_narsie.resolved = TRUE
- world << sound('sound/machines/alarm.ogg')
+ sound_to_playing_players('sound/machines/alarm.ogg')
addtimer(CALLBACK(GLOBAL_PROC, .proc/cult_ending_helper, 1), 120)
addtimer(CALLBACK(GLOBAL_PROC, .proc/ending_helper), 270)
if(client)
diff --git a/code/modules/mob/living/silicon/ai/say.dm b/code/modules/mob/living/silicon/ai/say.dm
index 2e800f7de05..f0e079b5943 100644
--- a/code/modules/mob/living/silicon/ai/say.dm
+++ b/code/modules/mob/living/silicon/ai/say.dm
@@ -163,9 +163,9 @@
if(M.client && M.can_hear() && (M.client.prefs.toggles & SOUND_ANNOUNCEMENTS))
var/turf/T = get_turf(M)
if(T.z == z_level)
- M << voice
+ SEND_SOUND(M, voice)
else
- only_listener << voice
+ SEND_SOUND(only_listener, voice)
return 1
return 0
diff --git a/code/modules/mob/living/silicon/pai/personality.dm b/code/modules/mob/living/silicon/pai/personality.dm
index a3f4f7d8871..605d865e7e7 100644
--- a/code/modules/mob/living/silicon/pai/personality.dm
+++ b/code/modules/mob/living/silicon/pai/personality.dm
@@ -17,12 +17,12 @@
var/savefile/F = new /savefile(src.savefile_path(user))
- F["name"] << src.name
- F["description"] << src.description
- F["role"] << src.role
- F["comments"] << src.comments
+ WRITE_FILE(F["name"], name)
+ WRITE_FILE(F["description"], description)
+ WRITE_FILE(F["role"], role)
+ WRITE_FILE(F["comments"], comments)
- F["version"] << 1
+ WRITE_FILE(F["version"], 1)
return 1
diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm
index 18e4d2c6afa..53a8a7a0197 100644
--- a/code/modules/mob/living/simple_animal/friendly/cat.dm
+++ b/code/modules/mob/living/simple_animal/friendly/cat.dm
@@ -129,7 +129,7 @@
family[C.type] += 1
else
family[C.type] = 1
- S["family"] << family
+ WRITE_FILE(S["family"], family)
memory_saved = 1
/mob/living/simple_animal/pet/cat/Runtime/proc/Deploy_The_Cats()
diff --git a/code/modules/mob/living/simple_animal/friendly/dog.dm b/code/modules/mob/living/simple_animal/friendly/dog.dm
index 4bb7304323c..0d45479e2bc 100644
--- a/code/modules/mob/living/simple_animal/friendly/dog.dm
+++ b/code/modules/mob/living/simple_animal/friendly/dog.dm
@@ -343,14 +343,14 @@
/mob/living/simple_animal/pet/dog/corgi/Ian/proc/Write_Memory(dead)
var/savefile/S = new /savefile("data/npc_saves/Ian.sav")
if(!dead)
- S["age"] << age + 1
+ WRITE_FILE(S["age"], age + 1)
if((age + 1) > record_age)
- S["record_age"] << record_age + 1
+ WRITE_FILE(S["record_age"], record_age + 1)
if(inventory_head)
- S["saved_head"] << inventory_head.type
+ WRITE_FILE(S["saved_head"], inventory_head.type)
else
- S["age"] << 0
- S["saved_head"] << null
+ WRITE_FILE(S["age"], 0)
+ WRITE_FILE(S["saved_head"], null)
memory_saved = 1
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm
index 6cebdd9500f..6b528651f40 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm
@@ -283,7 +283,7 @@ Difficulty: Very Hard
for(var/obj/O in (contents-component_parts))
stored_items += O.type
- S["stored_items"] << stored_items
+ WRITE_FILE(S["stored_items"], stored_items)
memory_saved = TRUE
/obj/machinery/smartfridge/black_box/proc/ReadMemory()
diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm
index 105b2396f13..02ee566ed2a 100644
--- a/code/modules/mob/living/simple_animal/parrot.dm
+++ b/code/modules/mob/living/simple_animal/parrot.dm
@@ -935,10 +935,10 @@
/mob/living/simple_animal/parrot/Poly/proc/Write_Memory()
var/savefile/S = new /savefile("data/npc_saves/Poly.sav")
if(islist(speech_buffer))
- S["phrases"] << speech_buffer
- S["roundssurvived"] << rounds_survived
- S["longestsurvival"] << longest_survival
- S["longestdeathstreak"] << longest_deathstreak
+ WRITE_FILE(S["phrases"], speech_buffer)
+ WRITE_FILE(S["roundssurvived"], rounds_survived)
+ WRITE_FILE(S["longestsurvival"], longest_survival)
+ WRITE_FILE(S["longestdeathstreak"], longest_deathstreak)
memory_saved = 1
/mob/living/simple_animal/parrot/Poly/ghost
diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm
index 46f5db920bc..999779c7e3d 100644
--- a/code/modules/mob/mob_helpers.dm
+++ b/code/modules/mob/mob_helpers.dm
@@ -387,7 +387,7 @@ It's fairly easy to fix if dealing with single letters but not so much with comp
if(O.client)
to_chat(O, "[message][(enter_link) ? " [enter_link]" : ""]")
if(ghost_sound)
- O << sound(ghost_sound)
+ SEND_SOUND(O, sound(ghost_sound))
if(flashwindow)
window_flash(O.client)
if(source)
diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm
index 28882a0c7e8..8655057a69f 100644
--- a/code/modules/power/apc.dm
+++ b/code/modules/power/apc.dm
@@ -895,7 +895,7 @@
transfer_in_progress = TRUE
user.visible_message("[user] slots [card] into [src]...", "Transfer process initiated. Sending request for AI approval...")
playsound(src, 'sound/machines/click.ogg', 50, 1)
- occupier << sound('sound/misc/notice2.ogg') //To alert the AI that someone's trying to card them if they're tabbed out
+ SEND_SOUND(occupier, sound('sound/misc/notice2.ogg')) //To alert the AI that someone's trying to card them if they're tabbed out
if(alert(occupier, "[user] is attempting to transfer you to \a [card.name]. Do you consent to this?", "APC Transfer", "Yes - Transfer Me", "No - Keep Me Here") == "No - Keep Me Here")
to_chat(user, "AI denied transfer request. Process terminated.")
playsound(src, 'sound/machines/buzz-sigh.ogg', 50, 1)
@@ -989,9 +989,6 @@
else
main_status = 2
- //if(debug)
- // world.log << "Status: [main_status] - Excess: [excess] - Last Equip: [lastused_equip] - Last Light: [lastused_light] - Longterm: [longtermpower]"
-
if(cell && !shorted)
// draw power from cell as before to power the area
var/cellused = min(cell.charge, GLOB.CELLRATE * lastused_total) // clamp deduction to a max, amount left in cell
diff --git a/code/modules/power/power.dm b/code/modules/power/power.dm
index b0d07e88d55..f130e7be11c 100644
--- a/code/modules/power/power.dm
+++ b/code/modules/power/power.dm
@@ -216,7 +216,6 @@
//remove the old powernet and replace it with a new one throughout the network.
/proc/propagate_network(obj/O, datum/powernet/PN)
- //world.log << "propagating new network"
var/list/worklist = list()
var/list/found_machines = list()
var/index = 1
diff --git a/code/modules/power/singularity/narsie.dm b/code/modules/power/singularity/narsie.dm
index 90c33bb6b3f..df969d869eb 100644
--- a/code/modules/power/singularity/narsie.dm
+++ b/code/modules/power/singularity/narsie.dm
@@ -71,7 +71,7 @@
sleep(1150)
if(resolved == FALSE)
resolved = TRUE
- world << sound('sound/machines/alarm.ogg')
+ sound_to_playing_players('sound/machines/alarm.ogg')
addtimer(CALLBACK(GLOBAL_PROC, .proc/cult_ending_helper), 120)
addtimer(CALLBACK(GLOBAL_PROC, .proc/ending_helper), 220)
diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm
index 816cd978743..f635d8e2279 100644
--- a/code/modules/power/supermatter/supermatter.dm
+++ b/code/modules/power/supermatter/supermatter.dm
@@ -219,7 +219,7 @@
var/turf/T = get_turf(src)
for(var/mob/M in GLOB.mob_list)
if(M.z == z)
- M << 'sound/magic/charge.ogg'
+ SEND_SOUND(M, 'sound/magic/charge.ogg')
to_chat(M, "You feel reality distort for a moment...")
if(combined_gas > MOLE_PENALTY_THRESHOLD)
investigate_log("has collapsed into a singularity.", INVESTIGATE_SUPERMATTER)
@@ -457,7 +457,7 @@
visible_message("[src] is consumed by the singularity!")
for(var/mob/M in GLOB.mob_list)
if(M.z == z)
- M << 'sound/effects/supermatter.ogg' //everyone goan know bout this
+ SEND_SOUND(M, 'sound/effects/supermatter.ogg') //everyone goan know bout this
to_chat(M, "A horrible screeching fills your ears, and a wave of dread washes over you...")
qdel(src)
return gain
diff --git a/code/modules/spells/spell_types/knock.dm b/code/modules/spells/spell_types/knock.dm
index 6fda1702a64..7179bed0318 100644
--- a/code/modules/spells/spell_types/knock.dm
+++ b/code/modules/spells/spell_types/knock.dm
@@ -13,7 +13,7 @@
action_icon_state = "knock"
/obj/effect/proc_holder/spell/aoe_turf/knock/cast(list/targets,mob/user = usr)
- user << sound('sound/magic/knock.ogg')
+ SEND_SOUND(user, sound('sound/magic/knock.ogg'))
for(var/turf/T in targets)
for(var/obj/machinery/door/door in T.contents)
INVOKE_ASYNC(src, .proc/open_door, door)
diff --git a/code/modules/spells/spell_types/mind_transfer.dm b/code/modules/spells/spell_types/mind_transfer.dm
index 06347b849a2..8a646d792fe 100644
--- a/code/modules/spells/spell_types/mind_transfer.dm
+++ b/code/modules/spells/spell_types/mind_transfer.dm
@@ -75,5 +75,5 @@ Also, you never added distance checking after target is selected. I've went ahea
//Here we knock both mobs out for a time.
caster.Unconscious(unconscious_amount_caster)
victim.Unconscious(unconscious_amount_victim)
- caster << sound('sound/magic/mandswap.ogg')
- victim << sound('sound/magic/mandswap.ogg')// only the caster and victim hear the sounds, that way no one knows for sure if the swap happened
+ SEND_SOUND(caster, sound('sound/magic/mandswap.ogg'))
+ SEND_SOUND(victim, sound('sound/magic/mandswap.ogg'))// only the caster and victim hear the sounds, that way no one knows for sure if the swap happened
diff --git a/code/modules/vehicles/bicycle.dm b/code/modules/vehicles/bicycle.dm
index 2d9b3c82584..cd93196b69d 100644
--- a/code/modules/vehicles/bicycle.dm
+++ b/code/modules/vehicles/bicycle.dm
@@ -13,7 +13,7 @@
/obj/vehicle/bicycle/buckle_mob(mob/living/M, force = 0, check_loc = 1)
if(prob(easter_egg_chance) || (SSevents.holidays && SSevents.holidays[APRIL_FOOLS]))
- M << sound(pick(bike_music), repeat = 1, wait = 0, volume = 80, channel = CHANNEL_BICYCLE)
+ SEND_SOUND(M, sound(pick(bike_music), repeat = 1, wait = 0, volume = 80, channel = CHANNEL_BICYCLE))
. = ..()
/obj/vehicle/bicycle/unbuckle_mob(mob/living/buckled_mob,force = 0)