diff --git a/code/game/gamemodes/gameticker.dm b/code/game/gamemodes/gameticker.dm
index 1f7991389b..15e4eb4804 100644
--- a/code/game/gamemodes/gameticker.dm
+++ b/code/game/gamemodes/gameticker.dm
@@ -10,8 +10,6 @@ var/global/datum/controller/gameticker/ticker
var/event_time = null
var/event = 0
- var/login_music // music played in pregame lobby
-
var/list/datum/mind/minds = list()//The people in the game. Used for objective tracking.
var/Bible_icon_state // icon_state the chaplain has chosen for his bible
@@ -34,15 +32,6 @@ var/global/datum/controller/gameticker/ticker
var/round_end_announced = 0 // Spam Prevention. Announce round end only once.
/datum/controller/gameticker/proc/pregame()
- login_music = pick(\
- /*'sound/music/halloween/skeletons.ogg',\
- 'sound/music/halloween/halloween.ogg',\
- 'sound/music/halloween/ghosts.ogg'*/
- 'sound/music/space.ogg',\
- 'sound/music/traitor.ogg',\
- 'sound/music/title2.ogg',\
- 'sound/music/clouds.s3m',\
- 'sound/music/space_oddity.ogg') //Ground Control to Major Tom, this song is cool, what's going on?
do
pregame_timeleft = 180
world << "Welcome to the pre-game lobby!"
diff --git a/code/game/sound.dm b/code/game/sound.dm
index 803a668761..cc925e716e 100644
--- a/code/game/sound.dm
+++ b/code/game/sound.dm
@@ -157,9 +157,11 @@ var/const/FALLOFF_SOUNDS = 0.5
src << S
/client/proc/playtitlemusic()
- if(!ticker || !ticker.login_music) return
+ if(!ticker || !all_lobby_tracks.len || !media) return
if(is_preference_enabled(/datum/client_preference/play_lobby_music))
- src << sound(ticker.login_music, repeat = 0, wait = 0, volume = 85, channel = 1) // MAD JAMS
+ var/datum/track/T = pick(all_lobby_tracks)
+ media.push_music(T.url, world.time, 0.85)
+ to_chat(src,"Lobby music: [T.title] by [T.artist].")
/proc/get_rand_frequency()
return rand(32000, 55000) //Frequency stuff only works with 45kbps oggs.
diff --git a/code/modules/client/preference_setup/global/setting_datums.dm b/code/modules/client/preference_setup/global/setting_datums.dm
index 675cbdf7a7..5bdd7c25d0 100644
--- a/code/modules/client/preference_setup/global/setting_datums.dm
+++ b/code/modules/client/preference_setup/global/setting_datums.dm
@@ -60,10 +60,13 @@ var/list/_client_preferences_by_type
key = "SOUND_LOBBY"
/datum/client_preference/play_lobby_music/toggled(var/mob/preference_mob, var/enabled)
+ if(!preference_mob.client || !preference_mob.client.media)
+ return
+
if(enabled)
- preference_mob << sound(ticker.login_music, repeat = 0, wait = 0, volume = 85, channel = 1)
+ preference_mob.client.playtitlemusic()
else
- preference_mob << sound(null, repeat = 0, wait = 0, volume = 85, channel = 1)
+ preference_mob.client.media.stop_music()
/datum/client_preference/play_ambiance
description ="Play ambience"
diff --git a/code/modules/media/media_tracks.dm b/code/modules/media/media_tracks.dm
index e5accc4497..708e2a811e 100644
--- a/code/modules/media/media_tracks.dm
+++ b/code/modules/media/media_tracks.dm
@@ -9,13 +9,15 @@
var/artist // Song's creator
var/duration // Song length in deciseconds
var/secret // Show up in regular playlist or secret playlist?
+ var/lobby // Be one of the choices for lobby music?
-/datum/track/New(var/url, var/title, var/duration, var/artist = "", var/secret = 0)
+/datum/track/New(var/url, var/title, var/duration, var/artist = "", var/secret = 0, var/lobby = 0)
src.url = url
src.title = title
src.artist = artist
src.duration = duration
src.secret = secret
+ src.lobby = lobby
/datum/track/proc/display()
var str = "\"[title]\""
@@ -29,6 +31,7 @@
// Global list holding all configured jukebox tracks
var/global/list/all_jukebox_tracks = list()
+var/global/list/all_lobby_tracks = list()
// Read the jukebox configuration file on system startup.
/hook/startup/proc/load_jukebox_tracks()
@@ -53,5 +56,8 @@ var/global/list/all_jukebox_tracks = list()
if(istext(entry["artist"]))
T.artist = entry["artist"]
T.secret = entry["secret"] ? 1 : 0
+ T.lobby = entry["lobby"] ? 1 : 0
all_jukebox_tracks += T
+ if(T.lobby)
+ all_lobby_tracks += T
return 1
diff --git a/code/modules/media/mediamanager.dm b/code/modules/media/mediamanager.dm
index bdce57a146..94bf6e79a5 100644
--- a/code/modules/media/mediamanager.dm
+++ b/code/modules/media/mediamanager.dm
@@ -16,16 +16,12 @@
#define MP_DEBUG(x)
#endif
-// Set up player on login to a mob.
-// This means they get a new media manager every time they switch mobs!
-// Is this wasteful? Granted switching mobs doesn't happen very often so maybe its fine.
-// TODO - While this direct override might technically be faster, probably better code to use observer or hooks ~Leshana
-/mob/Login()
+// Set up player on login.
+/client/New()
. = ..()
- ASSERT(src.client)
- src.client.media = new /datum/media_manager(src.client)
- src.client.media.open()
- src.client.media.update_music()
+ media = new /datum/media_manager(src)
+ media.open()
+ media.update_music()
// Stop media when the round ends. I guess so it doesn't play forever or something (for some reason?)
/hook/roundend/proc/stop_all_media()
diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm
index 28be4a02de..782e03a06a 100644
--- a/code/modules/mob/new_player/new_player.dm
+++ b/code/modules/mob/new_player/new_player.dm
@@ -118,8 +118,8 @@
var/mob/observer/dead/observer = new()
spawning = 1
- src << sound(null, repeat = 0, wait = 0, volume = 85, channel = 1) // MAD JAMS cant last forever yo
-
+ if(client.media)
+ client.media.stop_music() // MAD JAMS cant last forever yo
observer.started_as_observer = 1
close_spawn_windows()
@@ -455,7 +455,8 @@
else
client.prefs.copy_to(new_character)
- src << sound(null, repeat = 0, wait = 0, volume = 85, channel = 1) // MAD JAMS cant last forever yo
+ if(client && client.media)
+ client.media.stop_music() // MAD JAMS cant last forever yo
if(mind)
mind.active = 0 //we wish to transfer the key manually