diff --git a/code/modules/media/jukebox.dm b/code/modules/media/jukebox.dm
index 60175441358..572788cff59 100644
--- a/code/modules/media/jukebox.dm
+++ b/code/modules/media/jukebox.dm
@@ -29,6 +29,14 @@
length = text2num(json["length"])
+ proc/display()
+ var/str="\"[title]\""
+ if(artist!="")
+ str += ", by [artist]"
+ if(album!="")
+ str += ", from '[album]'"
+ return str
+
var/global/loopModeNames=list(
JUKEMODE_SHUFFLE = "Shuffle",
@@ -39,7 +47,7 @@ var/global/loopModeNames=list(
name = "Jukebox"
desc = "A jukebox used for parties and shit."
icon = 'icons/obj/jukebox.dmi'
- icon_state = "jukebox"
+ icon_state = "jukebox2-unpowered"
density = 1
anchored = 1
@@ -70,19 +78,35 @@ var/global/loopModeNames=list(
"lounge" = "Portishead - Dummy"
)
-/obj/machinery/media/jukebox/attack_ai()
- return
+/obj/machinery/media/jukebox/attack_ai(var/mob/user)
+ attack_hand(user)
/obj/machinery/media/jukebox/attack_paw()
return
+/obj/machinery/media/jukebox/power_change()
+ ..()
+ update_icon()
+
+/obj/machinery/media/jukebox/update_icon()
+ overlays = 0
+ if(stat & (NOPOWER|BROKEN))
+ icon_state = "jukebox2-unpowered"
+ stop_playing()
+ return
+ icon_state = "jukebox2"
+ if(playing)
+ overlays += "jukebox2-running"
+
/obj/machinery/media/jukebox/proc/check_reload()
return world.time > last_reload + JUKEBOX_RELOAD_COOLDOWN
/obj/machinery/media/jukebox/attack_hand(var/mob/user)
+ if(stat & (NOPOWER|BROKEN))
+ return
var/t = "
Jukebox Interface
"
t += "Power: [playing?"On":"Off"]
"
- t += "Play Mode: [loopModeNames[loop_mode]]
"
+ t += "Play Mode: [loopModeNames[loop_mode]]
"
if(playlist == null)
t += "\[DOWNLOADING PLAYLIST, PLEASE WAIT\]"
else
@@ -112,6 +136,7 @@ var/global/loopModeNames=list(
if (href_list["power"])
playing=!playing
update_music()
+ update_icon()
if (href_list["playlist"])
if(!check_reload())
@@ -122,14 +147,16 @@ var/global/loopModeNames=list(
playlist=null
current_song=0
update_music()
+ update_icon()
if (href_list["song"])
current_song=Clamp(text2num(href_list["song"]),1,playlist.len)
update_music()
+ update_icon()
if (href_list["mode"])
- // Theoretically, this should barrel shift.
- loop_mode = (loop_mode % JUKEMODE_COUNT)+1
+ loop_mode = (loop_mode % JUKEMODE_COUNT) + 1
+
return attack_hand(usr)
/obj/machinery/media/jukebox/process()
@@ -170,19 +197,24 @@ var/global/loopModeNames=list(
current_song=current_song
if(JUKEMODE_PLAY_ONCE)
playing=0
+ update_icon()
return
- if(!playing)
- return
update_music()
/obj/machinery/media/jukebox/update_music()
- if(current_song)
+ if(current_song && playing)
var/datum/song_info/song = playlist[current_song]
media_url = song.url
media_start_time = world.time
- visible_message("\icon[src] \The [src] begins to play \"[song.title]\", by [song.artist].","You hear music.")
+ visible_message("\icon[src] \The [src] begins to play [song.display()].","You hear music.")
//visible_message("\icon[src] \The [src] warbles: [song.length/10]s @ [song.url]")
else
media_url=""
media_start_time = 0
- ..()
\ No newline at end of file
+ ..()
+
+/obj/machinery/media/jukebox/proc/stop_playing()
+ current_song=0
+ playing=0
+ update_music()
+ return
diff --git a/icons/obj/jukebox.dmi b/icons/obj/jukebox.dmi
index c896b98bfcc..5889237f24d 100644
Binary files a/icons/obj/jukebox.dmi and b/icons/obj/jukebox.dmi differ