From 590e4ff041eba599d408386c237bbf64bcd784b8 Mon Sep 17 00:00:00 2001 From: Shadowfire Date: Mon, 5 Jul 2021 19:05:10 +0200 Subject: [PATCH 1/2] Casino jukebox update temporary commit to save work --- code/controllers/subsystems/media_tracks.dm | 30 ++++++++++++++++++++- code/game/machinery/jukebox.dm | 30 ++++++++++----------- code/game/machinery/jukebox_ch.dm | 24 +++++------------ 3 files changed, 51 insertions(+), 33 deletions(-) diff --git a/code/controllers/subsystems/media_tracks.dm b/code/controllers/subsystems/media_tracks.dm index 53805bcbec..000c16db4f 100644 --- a/code/controllers/subsystems/media_tracks.dm +++ b/code/controllers/subsystems/media_tracks.dm @@ -9,6 +9,9 @@ SUBSYSTEM_DEF(media_tracks) var/list/jukebox_tracks = list() /// Lobby music tracks var/list/lobby_tracks = list() + /// CHOMPstation edit start: Jack - Injecting casino track into new jukebox subsystem + var/list/casino_tracks = list() + /// CHOMPstation edit end /datum/controller/subsystem/media_tracks/Initialize(timeofday) load_tracks() @@ -53,6 +56,10 @@ SUBSYSTEM_DEF(media_tracks) T.secret = entry["secret"] ? 1 : 0 T.lobby = entry["lobby"] ? 1 : 0 + /// CHOMPstation edit start: Jack - Injecting casino track into new jukebox subsystem + T.casino = entry["casino"] ? 1 : 0 + /// CHOMPstation edit end + all_tracks += T /datum/controller/subsystem/media_tracks/proc/sort_tracks() @@ -61,12 +68,19 @@ SUBSYSTEM_DEF(media_tracks) jukebox_tracks.Cut() lobby_tracks.Cut() + /// CHOMPstation edit start: Jack - Injecting casino track into new jukebox subsystem + casino_tracks.Cut() + /// CHOMPstation edit end for(var/datum/track/T in all_tracks) if(!T.secret) jukebox_tracks += T if(T.lobby) lobby_tracks += T + /// CHOMPstation edit start: Jack - Injecting casino track into new jukebox subsystem + if(T.casino) + casino_tracks += T + /// CHOMPstation edit end /datum/controller/subsystem/media_tracks/proc/manual_track_add() var/client/C = usr.client @@ -94,6 +108,7 @@ SUBSYSTEM_DEF(media_tracks) * "genre": artist of the song, REALLY try to match an existing one (text) * "secret": only on hacked jukeboxes (true/false) * "lobby": plays in the lobby (true/false) + * "casino": plays in the casino (true/false) CHOMPstation casino */ if(islist(json)) @@ -105,7 +120,7 @@ SUBSYSTEM_DEF(media_tracks) if(!songdata["url"] || !songdata["title"] || !songdata["duration"]) to_chat(C, "URL, Title, or Duration was missing from a song. Skipping.") continue - var/datum/track/T = new(songdata["url"], songdata["title"], songdata["duration"], songdata["artist"], songdata["genre"], songdata["secret"], songdata["lobby"]) + var/datum/track/T = new(songdata["url"], songdata["title"], songdata["duration"], songdata["artist"], songdata["genre"], songdata["secret"], songdata["lobby"], songdata["casino"]) all_tracks += T report_progress("New media track added by [C]: [T.title]") @@ -145,10 +160,23 @@ SUBSYSTEM_DEF(media_tracks) else secret = FALSE + /// CHOMPstation edit start: Jack - Injecting casino track into new jukebox subsystem + var/casino = tgui_alert(C, "Optional: Mark track as casino music?", "Track Casino", list("Yes", "Cancel", "No")) + if(casino == "Cancel") + return + else if(secret == "Yes") + secret = TRUE + else + secret = FALSE + /// CHOMPstation edit end + var/datum/track/T = new(url, title, duration, artist, genre) T.secret = secret T.lobby = lobby + /// CHOMPstation edit start: Jack - Injecting casino track into new jukebox subsystem + T.casino = casino + /// CHOMPstation edit end all_tracks += T diff --git a/code/game/machinery/jukebox.dm b/code/game/machinery/jukebox.dm index 06323a4f06..bd11672d1d 100644 --- a/code/game/machinery/jukebox.dm +++ b/code/game/machinery/jukebox.dm @@ -179,7 +179,7 @@ /obj/machinery/media/jukebox/tgui_data(mob/user, datum/tgui/ui, datum/tgui_state/state) var/list/data = ..() - + data["playing"] = playing data["loop_mode"] = loop_mode data["volume"] = volume @@ -331,13 +331,13 @@ /obj/machinery/media/jukebox/ghost name = "ghost jukebox" desc = "A jukebox from the nether-realms! Spooky." - + plane = PLANE_GHOSTS invisibility = INVISIBILITY_OBSERVER alpha = 127 - + icon_state = "jukebox2-virtual" - + density = FALSE hacked = TRUE @@ -348,7 +348,7 @@ // Just junk to make it sneaky - I wish a lot more stuff was on /obj/machinery/media instead of /jukebox so I could use that. /obj/machinery/media/jukebox/ghost/is_incorporeal() - return TRUE + return TRUE /obj/machinery/media/jukebox/ghost/audible_message(message, deaf_message, hearing_distance, radio_message, runemessage) return /obj/machinery/media/jukebox/ghost/visible_message(message, blind_message, list/exclude_mobs, range, runemessage) @@ -360,7 +360,7 @@ /obj/machinery/media/jukebox/ghost/attack_hand(var/mob/user as mob) return /obj/machinery/media/jukebox/ghost/update_use_power(new_use_power) - return + return /obj/machinery/media/jukebox/ghost/power_change() return /obj/machinery/media/jukebox/ghost/emp_act(severity) @@ -368,7 +368,7 @@ /obj/machinery/media/jukebox/ghost/emag_act(remaining_charges, mob/user) return /obj/machinery/media/jukebox/ghost/explode() - return + return /obj/machinery/media/jukebox/ghost/update_icon() if(playing) animate(src, alpha = 200, time = 5, loop = -1) @@ -394,16 +394,16 @@ var/client/C = usr.client if(!check_rights(R_FUN|R_ADMIN)) return - + // Required var/url = input(C, "REQUIRED: Provide URL for track", "Track URL") as text|null if(!url) return - + var/title = input(C, "REQUIRED: Provide title for track", "Track Title") as text|null if(!title) return - + var/duration = input(C, "REQUIRED: Provide duration for track (in deciseconds, aka seconds*10)", "Track Duration") as num|null if(!duration) return @@ -412,12 +412,12 @@ var/artist = input(C, "Optional: Provide artist for track", "Track Artist") as text|null if(isnull(artist)) // Cancel rather than empty string return - + // So they're obvious and grouped var/genre = "! Admin Loaded !" - + custom_tracks += new /datum/track(url, title, duration, artist, genre) - + /obj/machinery/media/jukebox/ghost/proc/manual_track_remove() var/client/C = usr.client if(!check_rights(R_FUN|R_ADMIN)) @@ -426,13 +426,13 @@ var/track = input(C, "Input track title or URL to remove (must be exact)", "Remove Track") as text|null if(!track) return - + for(var/datum/track/T in custom_tracks) if(T.title == track || T.url == track) custom_tracks -= T qdel(T) return - + to_chat(C, "") /obj/machinery/media/jukebox/ghost/vv_get_dropdown() diff --git a/code/game/machinery/jukebox_ch.dm b/code/game/machinery/jukebox_ch.dm index 38776c6653..5974304691 100644 --- a/code/game/machinery/jukebox_ch.dm +++ b/code/game/machinery/jukebox_ch.dm @@ -1,23 +1,13 @@ - +/* /obj/machinery/media/jukebox/casinojukebox name = "space casino jukebox" + desc = "A jukebox to play the tracks on the golden goose, jazzy~" icon = 'icons/obj/casino_ch.dmi' icon_state = "casinojukebox-nopower" state_base = "casinojukebox" -/* Commenting out for now due to conflicts with upstream jukebox changes. -// On initialization, copy our tracks from the global list -/obj/machinery/media/jukebox/casinojukebox/Initialize() - . = ..() - if(LAZYLEN(all_jukebox_tracks)) //Global list has tracks - tracks.Cut() - secret_tracks.Cut() - for(var/datum/track/T in all_jukebox_tracks) //Load them - if(!T.casino) - tracks -= T - secret_tracks -= T - if(T.casino) - tracks |= T - else if(!LAZYLEN(tracks)) //We don't even have default tracks - stat |= BROKEN // No tracks configured this round! -*/ + use_power = USE_POWER_OFF + +/obj/machinery/media/jukebox/casinojukebox/getTracksList() + return SSmedia_tracks.casino_tracks +*/ \ No newline at end of file From b1186e0f25f3de679854dca8b4d7f3146483331c Mon Sep 17 00:00:00 2001 From: Shadowfire Date: Mon, 5 Jul 2021 23:44:03 +0200 Subject: [PATCH 2/2] Actual all jukebox fixing Turns out all jukeboxes were broken and fixed the issues with enabling config path and ensuring the old songs were merged into new system, as well as making a sorting system to ensure casino and non-casino tracks aren't mixed together. --- code/controllers/subsystems/media_tracks.dm | 56 +-- code/game/machinery/jukebox_ch.dm | 5 +- config/jukebox.json | 391 ++++++++++++++++++++ 3 files changed, 421 insertions(+), 31 deletions(-) diff --git a/code/controllers/subsystems/media_tracks.dm b/code/controllers/subsystems/media_tracks.dm index 000c16db4f..d85e4baa9e 100644 --- a/code/controllers/subsystems/media_tracks.dm +++ b/code/controllers/subsystems/media_tracks.dm @@ -2,7 +2,7 @@ SUBSYSTEM_DEF(media_tracks) name = "Media Tracks" flags = SS_NO_FIRE init_order = INIT_ORDER_MEDIA_TRACKS - + /// Every track, including secret var/list/all_tracks = list() /// Non-secret jukebox tracks @@ -21,19 +21,19 @@ SUBSYSTEM_DEF(media_tracks) /datum/controller/subsystem/media_tracks/proc/load_tracks() for(var/filename in config.jukebox_track_files) report_progress("Loading jukebox track: [filename]") - + if(!fexists(filename)) error("File not found: [filename]") continue - + var/list/jsonData = json_decode(file2text(filename)) - + if(!istype(jsonData)) error("Failed to read tracks from [filename], json_decode failed.") continue - + for(var/entry in jsonData) - + // Critical problems that will prevent the track from working if(!istext(entry["url"])) error("Jukebox entry in [filename]: bad or missing 'url'. Tracks must have a URL.") @@ -50,34 +50,34 @@ SUBSYSTEM_DEF(media_tracks) warning("Jukebox entry in [filename], [entry["title"]]: bad or missing 'artist'. Please consider crediting the artist.") if(!istext(entry["genre"])) warning("Jukebox entry in [filename], [entry["title"]]: bad or missing 'genre'. Please consider adding a genre.") - + var/datum/track/T = new(entry["url"], entry["title"], entry["duration"], entry["artist"], entry["genre"]) - + T.secret = entry["secret"] ? 1 : 0 T.lobby = entry["lobby"] ? 1 : 0 - + /// CHOMPstation edit start: Jack - Injecting casino track into new jukebox subsystem T.casino = entry["casino"] ? 1 : 0 /// CHOMPstation edit end - + all_tracks += T /datum/controller/subsystem/media_tracks/proc/sort_tracks() report_progress("Sorting media tracks...") sortTim(all_tracks, /proc/cmp_media_track_asc) - + jukebox_tracks.Cut() lobby_tracks.Cut() /// CHOMPstation edit start: Jack - Injecting casino track into new jukebox subsystem casino_tracks.Cut() /// CHOMPstation edit end - + for(var/datum/track/T in all_tracks) - if(!T.secret) + /// CHOMPstation edit start: Jack - Injecting casino track into new jukebox subsystem + if(!T.secret && !T.casino) jukebox_tracks += T if(T.lobby) lobby_tracks += T - /// CHOMPstation edit start: Jack - Injecting casino track into new jukebox subsystem if(T.casino) casino_tracks += T /// CHOMPstation edit end @@ -86,7 +86,7 @@ SUBSYSTEM_DEF(media_tracks) var/client/C = usr.client if(!check_rights(R_DEBUG|R_FUN)) return - + // Required var/url = input(C, "REQUIRED: Provide URL for track, or paste JSON if you know what you're doing. See code comments.", "Track URL") as message|null if(!url) @@ -110,7 +110,7 @@ SUBSYSTEM_DEF(media_tracks) * "lobby": plays in the lobby (true/false) * "casino": plays in the casino (true/false) CHOMPstation casino */ - + if(islist(json)) for(var/song in json) if(!islist(song)) @@ -119,18 +119,18 @@ SUBSYSTEM_DEF(media_tracks) var/list/songdata = song if(!songdata["url"] || !songdata["title"] || !songdata["duration"]) to_chat(C, "URL, Title, or Duration was missing from a song. Skipping.") - continue + continue var/datum/track/T = new(songdata["url"], songdata["title"], songdata["duration"], songdata["artist"], songdata["genre"], songdata["secret"], songdata["lobby"], songdata["casino"]) all_tracks += T - + report_progress("New media track added by [C]: [T.title]") sort_tracks() return - + var/title = input(C, "REQUIRED: Provide title for track", "Track Title") as text|null if(!title) return - + var/duration = input(C, "REQUIRED: Provide duration for track (in deciseconds, aka seconds*10)", "Track Duration") as num|null if(!duration) return @@ -139,11 +139,11 @@ SUBSYSTEM_DEF(media_tracks) var/artist = input(C, "Optional: Provide artist for track", "Track Artist") as text|null if(isnull(artist)) // Cancel rather than empty string return - + var/genre = input(C, "Optional: Provide genre for track (try to match an existing one)", "Track Genre") as text|null if(isnull(genre)) // Cancel rather than empty string return - + var/secret = tgui_alert(C, "Optional: Mark track as secret?", "Track Secret", list("Yes", "Cancel", "No")) if(secret == "Cancel") return @@ -151,7 +151,7 @@ SUBSYSTEM_DEF(media_tracks) secret = TRUE else secret = FALSE - + var/lobby = tgui_alert(C, "Optional: Mark track as lobby music?", "Track Lobby", list("Yes", "Cancel", "No")) if(lobby == "Cancel") return @@ -171,15 +171,15 @@ SUBSYSTEM_DEF(media_tracks) /// CHOMPstation edit end var/datum/track/T = new(url, title, duration, artist, genre) - + T.secret = secret T.lobby = lobby /// CHOMPstation edit start: Jack - Injecting casino track into new jukebox subsystem T.casino = casino /// CHOMPstation edit end - + all_tracks += T - + report_progress("New media track added by [C]: [title]") sort_tracks() @@ -191,7 +191,7 @@ SUBSYSTEM_DEF(media_tracks) var/track = input(C, "Input track title or URL to remove (must be exact)", "Remove Track") as text|null if(!track) return - + for(var/datum/track/T in all_tracks) if(T.title == track || T.url == track) all_tracks -= T @@ -199,7 +199,7 @@ SUBSYSTEM_DEF(media_tracks) report_progress("Media track removed by [C]: [track]") sort_tracks() return - + to_chat(C, "") /datum/controller/subsystem/media_tracks/vv_get_dropdown() diff --git a/code/game/machinery/jukebox_ch.dm b/code/game/machinery/jukebox_ch.dm index 5974304691..c15ce12aa7 100644 --- a/code/game/machinery/jukebox_ch.dm +++ b/code/game/machinery/jukebox_ch.dm @@ -1,4 +1,4 @@ -/* + /obj/machinery/media/jukebox/casinojukebox name = "space casino jukebox" desc = "A jukebox to play the tracks on the golden goose, jazzy~" @@ -9,5 +9,4 @@ use_power = USE_POWER_OFF /obj/machinery/media/jukebox/casinojukebox/getTracksList() - return SSmedia_tracks.casino_tracks -*/ \ No newline at end of file + return SSmedia_tracks.casino_tracks \ No newline at end of file diff --git a/config/jukebox.json b/config/jukebox.json index 192ab502ed..d6624c2ade 100644 --- a/config/jukebox.json +++ b/config/jukebox.json @@ -3508,5 +3508,396 @@ "lobby": false, "jukebox": true, "genre": "Rock" +}, +{ +"url" : "https://cdn.discordapp.com/attachments/404660884531707906/676726491806957568/Cassette.mp3", +"title" : "Cassette", +"duration" : 2310, +"artist" : "Efence", +"secret": false, +"lobby": false, +"jukebox": true, +"genre": "Ambience" +}, +{ +"url" : "https://cdn.discordapp.com/attachments/676384242426707979/676730040624480264/Glowing_Red_Dust.mp3", +"title" : "Red Glowing Dust", +"duration" : 3370, +"artist" : "Jón Hallur Haraldsson (also known as RealX)", +"secret": false, +"lobby": false, +"jukebox": true, +"genre": "Ambience" +}, +{ + +"url" : "https://cdn.discordapp.com/attachments/676384242426707979/676730820530274323/Stellardrone_-_Eternity.mp3", +"title" : "Eternity", +"duration" : 3810, +"artist" : "Stellardrone", +"secret": false, +"lobby": false, +"jukebox": true, +"genre": "Ambience" +}, +{ +"duration" : 4850, +"url" : "https://cdn.discordapp.com/attachments/612993188655005697/676732888712216596/DJ-ZEK_-_Simulate.mp3", +"title" : "Simulate", +"artist" : "Fawxtrot (now know as DJ Zek)", +"secret": false, +"lobby": false, +"jukebox": true, +"genre": "Ambience" +}, +{ +"duration" : 13720, +"url" : "https://cdn.discordapp.com/attachments/520929567540772873/707899715261562960/FitnessGram_20_Meter_PACER_Test_Full_Length_OFFICIAL_Audio_Version.mp3", +"title" : "The FitnessGram Pacer Test", +"artist" : "The Cooper Institute (FitnessGram)", +"secret": true, +"lobby": false, +"jukebox": true, +"genre": "Ambience" +}, +{ +"duration" : 2040, +"url" : "https://cdn.discordapp.com/attachments/575066308362895444/701639140109844530/Peaceful_Orbits.mp3", +"title" : "Peaceful Orbits", +"artist" : "TeknoAXE", +"secret": false, +"lobby": false, +"jukebox": true, +"genre": "Ambience" +}, +{ +"duration" : 2300, +"url" : "https://cdn.discordapp.com/attachments/575066308362895444/701639311896084511/Passing_Time_in_an_Escape_Pod.mp3", +"title" : "Passing Time in an Escape Pod", +"artist" : "TeknoAXE", +"secret": false, +"lobby": false, +"jukebox": true, +"genre": "Ambience" +}, +{ +"duration" : 2790, +"url" : "https://cdn.discordapp.com/attachments/331435060735508480/613310956927451137/Persona_5_48_-_Beneath_the_Mask_-rain-.mp3", +"title" : "Beneath the Mask -Rain Version-", +"artist" : "Persona 5", +"secret": false, +"lobby": false, +"jukebox": true, +"genre": "Jazz" +}, +{ +"duration" : 2100, +"url" : "https://cdn.discordapp.com/attachments/331037116094087168/543191420370944001/DragonSharkOriginal3.mp3", +"title" : "Terrorbyte/Dragon Shark theme", +"artist" : "RetroSpecter", +"secret": true, +"lobby": false, +"jukebox": true, +"genre": "Rock" +}, +{ +"duration" : 1600, +"url" : "https://cdn.discordapp.com/attachments/528973352728264714/583441087633555456/Prey_-_Everything_is_Going_to_Be_Ok_online-audio-converter.com.mp3", +"title" : "Everything Is Going To Be Ok", +"artist" : "Mick Gordon", +"secret": false, +"lobby": false, +"jukebox": true, +"genre": "Electronic" +}, +{ +"duration" : 2440, +"url" : "https://cdn.discordapp.com/attachments/311691674130710528/463590234978910228/Saga_of_Tanya_the_Evil_-_Jingo_Jungle_Opening_ENGLISH_ver_AmaLee.mp3", +"title" : "Jingo Jungle", +"artist" : "Leeandlie http://bit.ly/Leeandlie", +"secret": true, +"lobby": false, +"jukebox": true, +"genre": "Electronic" +}, +{ +"duration" : 4030, +"url" : "https://cdn.discordapp.com/attachments/311691674130710528/468345155498541066/TheMadnessOfFate.mp3", +"title" : "Madness of Fate", +"artist" : "NIIC the singing dog - http://bit.ly/NIICDOGYT", +"secret": true, +"lobby": false, +"jukebox": true, +"genre": "Electronic" +}, +{ +"duration" : 2350, +"url" : "https://cdn.discordapp.com/attachments/311691674130710528/449909217403469837/Hard_Bass_School_-_narkotik_kal.mp3", +"title" : "Narkotik kal", +"artist" : "Hardbass", +"secret": true, +"lobby": false, +"jukebox": true, +"genre": "Ambience" +}, +{ +"duration" : 2850, +"url" : "https://cdn.discordapp.com/attachments/528973352728264714/613807206047154217/TERRORBYTE_-_HELIOS.mp3", +"title" : "Helios", +"artist" : "TERRORBYTE", +"secret": true, +"lobby": false, +"jukebox": true, +"genre": "Metal" +}, +{ +"duration" : 1110, +"url" : "https://cdn.discordapp.com/attachments/377217220041900034/453308819422838784/System_Of_A_Down_-_Shimmy_11.mp3", +"title" : "Shimmy", +"artist" : "System of a Down", +"secret": false, +"lobby": false, +"jukebox": true, +"genre": "Rock" +}, +{ +"duration" : 1630, +"url" : "https://cdn.discordapp.com/attachments/377217220041900034/453308919067049995/System_Of_A_Down_-_Science_10.mp3", +"title" : "Science", +"artist" : "System of a Down", +"secret": false, +"lobby": false, +"jukebox": true, +"genre": "Rock" +}, +{ +"duration" : 1750, +"url" : "https://cdn.discordapp.com/attachments/377217220041900034/453308944706699284/System_Of_A_Down_-_Deer_Dance_03.mp3", +"title" : "deer dance", +"artist" : "System of a Down", +"secret": false, +"lobby": false, +"jukebox": true, +"genre": "Rock" +}, +{ + "duration" : 1790, + "url" : "https://cdn.discordapp.com/attachments/377217220041900034/453308945411473428/System_Of_A_Down_-_Atwa.mp3", + "title" : "Atwa", +"artist" : "System of a Down", +"secret": false, +"lobby": false, +"jukebox": true, +"genre": "Rock" +}, +{ + "duration" : 2400, + "url" : "https://cdn.discordapp.com/attachments/377217220041900034/453308969772122112/System_Of_A_Down_-_Forest_08.mp3", + "title" : "Forest", +"artist" : "System of a Down", +"secret": false, +"lobby": false, +"jukebox": true, +"genre": "Rock" +}, +{ + "duration" : 2110, + "url" : "https://cdn.discordapp.com/attachments/377217220041900034/453308978089426985/System_Of_A_Down_-_Prison_Song_01.mp3", + "title" : "Prison song", +"artist" : "System of a Down", +"secret": false, +"lobby": false, +"jukebox": true, +"genre": "Rock" +}, +{ + "duration" : 2150, + "url" : "https://cdn.discordapp.com/attachments/377217220041900034/453308978089426985/System_Of_A_Down_-_Prison_Song_01.mp3", + "title" : "SPIDERS!", +"artist" : "System of a Down", +"secret": false, +"lobby": false, +"jukebox": true, +"genre": "Rock" +}, +{ + "duration" : 2320, + "url" : "https://cdn.discordapp.com/attachments/377217220041900034/453309000780611604/System_Of_A_Down_-_Aerials_14.mp3", + "title" : "Aerials", +"artist" : "System of a Down", +"secret": false, +"lobby": false, +"jukebox": true, +"genre": "Rock" +}, +{ + "duration" : 1260, + "url" : "https://cdn.discordapp.com/attachments/377217220041900034/453309015955472394/System_Of_A_Down_-_Jet_Pilot_04.mp3", + "title" : "Jet Pilot", +"artist" : "System of a Down", +"secret": false, +"lobby": false, +"jukebox": true, +"genre": "Rock" +}, +{ + "duration" : 1510, + "url" : "https://cdn.discordapp.com/attachments/377217220041900034/454653832945860608/Skeleton_Man-_The_Axis_of_Awesome.mp3", + "title" : "Skeleton Man", + "artist" : "AoW", +"secret": true, +"lobby": false, +"jukebox": true, +"genre": "Classical and Orchestral" +}, +{ + "duration" : 2770, + "url" : "https://cdn.discordapp.com/attachments/745916615606140938/775593951259918336/Nanook_Rubs_It.mp3", + "title" : "Nanook Rubs It", + "artist" : "Frank Zappa", +"secret": true, +"lobby": false, +"jukebox": true, +"genre": "Country and Western" +}, +{ + "duration" : 3370, + "url" : "https://cdn.discordapp.com/attachments/745916615606140938/775593948307521566/Muffin_Man.mp3", + "title" : "Muffin Man", + "artist" : "Frank Zappa", +"secret": true, +"lobby": false, +"jukebox": true, +"genre": "Folk and Indie" +}, +{ + "duration" : 1760, + "url" : "https://cdn.discordapp.com/attachments/404660884531707906/456271996314058752/Edgar_Rothermich_-01_Theme_from_Silent_Hill_jungle-vibe.com.mp3", + "title" : "Silent Hill", + "artist" : "Akira Yamaoka and Edgar Rothermich", +"secret": false, +"lobby": false, +"jukebox": true, +"genre": "Country and Western" +}, +{ + "duration" : 1910, + "url" : "https://cdn.discordapp.com/attachments/377217220041900034/460490120240300052/Nightcore_-_Tetris.mp3", + "title" : "Tetris Remixed", + "artist" : "nightcore", +"secret": true, +"lobby": false, +"jukebox": true, +"genre": "Electronic" +}, +{ + "duration" : 2030, + "url" : "https://cdn.discordapp.com/attachments/377217220041900034/460490219167154186/VERSACE_2017_-_TIX__The_Pssy_Project.mp3", + "title" : "Versance", + "artist" : "PussyProject", +"secret": true, +"lobby": false, +"jukebox": true, +"genre": "Classical and Orchestral" +}, +{ + "duration" : 2400, + "url" : "https://cdn.discordapp.com/attachments/377217220041900034/460490229523021834/-_.mp3", + "title" : "Russian Techno", + "artist" : "Some russians", +"secret": true, +"lobby": false, +"jukebox": true, +"genre": "Hip-Hop and Rap" +}, +{ + "duration" : 2200, + "url" : "https://cdn.discordapp.com/attachments/377217220041900034/460490231611654144/Rock_Dog_2017_Movie_Official_Lyric_Video_Glorious_by_Adam_Friedman.mp3", + "title" : "Gloriouse", + "artist" : "Rock Dog", +"secret": false, +"lobby": false, +"jukebox": true, +"genre": "Rock" +}, +{ + "duration" : 2580, + "url" : "https://cdn.discordapp.com/attachments/377217220041900034/460490245725487104/Gigi_DAgostino_-_You_Spin_Me_Round__Tecno_Fes_2_.mp3", + "title" : "You spin me around", + "artist" : "Gigi DAgostino", +"secret": false, +"lobby": false, +"jukebox": true, +"genre": "Pop" +}, +{ + "duration" : 2640, + "url" : "https://cdn.discordapp.com/attachments/377217220041900034/460490246610747402/-__Kyary_Pamyu_Pamyu_-.mp3", + "title" : "Pamyu Pamyu", + "artist" : "Kyary", +"secret": false, +"lobby": false, +"jukebox": true, +"genre": "Pop" +}, +{ +"duration" : 1620, +"url" : "https://cdn.discordapp.com/attachments/377217220041900034/457628201200648202/Berserk_-_S3RL_ft_Iceman.mp3", +"title" : "Beserk", +"artist" : "S3RL ft Iceman", +"secret": true, +"lobby": false, +"jukebox": true, +"genre": "Metal" +}, +{ +"duration" : 3510, +"url" : "https://cdn.discordapp.com/attachments/458630047167807488/520025625852117002/Nick_Hakim_-_Pour_Another.mp3", +"title" : "Pour Another", +"artist" : "Nick Hakim", +"secret": false, +"lobby": false, +"jukebox": true, +"genre": "Jazz" +}, +{ + "duration" : 1270, + "url" : "https://cdn.discordapp.com/attachments/526693916859170816/559236326264668190/Ocean_Man.mp3", + "title" : "Ocean Man", + "artist" : "Ween", +"secret": true, +"lobby": false, +"jukebox": true, +"genre": "Classical and Orchestral" +}, +{ +"duration" : 2990, +"url" : "https://cdn.discordapp.com/attachments/458630047167807488/520025672702492682/Nick_Hakim_-_I_Dont_Know.mp3", +"title" : "I dont know", +"artist" : "Nick Hakim", +"secret": false, +"lobby": false, +"jukebox": true, +"genre": "Jazz" +}, +{ +"duration" : 1830, +"url" : "https://cdn.discordapp.com/attachments/404660884531707906/614356720503881728/Underfell_Megalovania.mp3", +"title" : "Underfell", +"artist" : "keno9988iii", +"secret": true, +"lobby": false, +"jukebox": true, +"genre": "Metal" +}, +{ +"duration" : 3730, +"url" : "https://cdn.discordapp.com/attachments/661630061983825938/663112074880352276/Headhunterz_-_Scrap_Attack_HQ.mp3", +"title" : "Scrap Attack", +"artist" : "Headhunterz", +"secret": true, +"lobby": false, +"jukebox": true, +"genre": "Electronic" } ] \ No newline at end of file