Index: binaries/data/config/default.cfg =================================================================== --- binaries/data/config/default.cfg +++ binaries/data/config/default.cfg @@ -545,6 +545,7 @@ mindistance = 1 maxdistance = 350 maxstereoangle = 0.62 ; About PI/5 radians +definedordertracks = false [sound.notify] nick = true ; Play a sound when someone mentions your name in the lobby or game Index: binaries/data/mods/public/gui/common/music.js =================================================================== --- binaries/data/mods/public/gui/common/music.js +++ binaries/data/mods/public/gui/common/music.js @@ -120,23 +120,23 @@ break; case this.states.PEACE: - this.startPlayList(shuffleArray(this.tracks.PEACE), 3.0, true); + this.startPlayList(this.tracks.PEACE, 3.0, true); break; case this.states.BATTLE: - this.startPlayList(shuffleArray(this.tracks.BATTLE), 2.0, true); + this.startPlayList(this.tracks.BATTLE, 2.0, true); break; case this.states.VICTORY: - this.startPlayList(shuffleArray(this.tracks.VICTORY), 2.0, true); + this.startPlayList(this.tracks.VICTORY, 2.0, true); break; case this.states.DEFEAT: - this.startPlayList(shuffleArray(this.tracks.DEFEAT), 2.0, true); + this.startPlayList(this.tracks.DEFEAT, 2.0, true); break; case this.states.CUSTOM: - this.startPlayList(shuffleArray(this.tracks.CUSTOM), 2.0, true); + this.startPlayList(this.tracks.CUSTOM, 2.0, true); break; default: @@ -151,7 +151,7 @@ for (const musicType of Object.keys(this.MUSIC)) this.tracks[musicType] = []; - for (let music of civMusic) + for (const music of civMusic) { let type; for (let i in this.MUSIC) @@ -167,12 +167,35 @@ continue; } - this.tracks[type].push(music.File); + this.tracks[type].push(music); } + this.setTracksOrder(); + for (const type in this.tracks) + { + this.tracks[type] = this.tracks[type].map(music => music.File); + } this.completeTracks(); }; +Music.prototype.setTracksOrder = function() +{ + if (Engine.ConfigDB_GetValue("user", "sound.definedordertracks") === 'true') + { + for (const musicType of Object.keys(this.MUSIC)) + { + this.tracks[musicType] = this.tracks[musicType].sort((a, b) => +a.Order - +b.Order); + } + } + else + { + for (const musicType of Object.keys(this.MUSIC)) + { + this.tracks[musicType] = shuffleArray(this.tracks[musicType]); + } + } +}; + Music.prototype.startPlayList = function(tracks, fadeInPeriod, isLooping) { Engine.ClearPlaylist(); Index: binaries/data/mods/public/gui/credits/texts/programming.json =================================================================== --- binaries/data/mods/public/gui/credits/texts/programming.json +++ binaries/data/mods/public/gui/credits/texts/programming.json @@ -192,6 +192,7 @@ { "nick": "nani", "name": "S. N." }, { "nick": "nd3c3nt", "name": "Gavin Fowler" }, { "nick": "nephele" }, + { "nick": "Neinea", "name": "Thibault Vallois"}, { "nick": "Nescio" }, { "nick": "niektb", "name": "Niek ten Brinke" }, { "nick": "nikagra", "name": "Mikita Hradovich" }, Index: binaries/data/mods/public/gui/options/options.json =================================================================== --- binaries/data/mods/public/gui/options/options.json +++ binaries/data/mods/public/gui/options/options.json @@ -438,6 +438,12 @@ "label": "New player notification in game setup", "tooltip": "Receive audio notification when a new client joins the game setup.", "config": "sound.notify.gamesetup.join" + }, + { + "type": "boolean", + "label": "Defined tracks order", + "tooltip": "Play music tracks in a defined order", + "config": "sound.definedordertracks" } ] }, Index: binaries/data/mods/public/simulation/data/civs/athen.json =================================================================== --- binaries/data/mods/public/simulation/data/civs/athen.json +++ binaries/data/mods/public/simulation/data/civs/athen.json @@ -4,19 +4,23 @@ "Music": [ { "File": "Harvest_Festival.ogg", - "Type": "peace" + "Type": "peace", + "Order": 3 }, { "File": "Forging_a_City-State.ogg", - "Type": "peace" + "Type": "peace", + "Order": 2 }, { "File": "Highland_Mist.ogg", - "Type": "peace" + "Type": "peace", + "Order": 3 }, { "File": "The_Hellespont.ogg", - "Type": "peace" + "Type": "peace", + "Order": 4 } ], "CivBonuses": [ Index: binaries/data/mods/public/simulation/data/civs/brit.json =================================================================== --- binaries/data/mods/public/simulation/data/civs/brit.json +++ binaries/data/mods/public/simulation/data/civs/brit.json @@ -4,35 +4,43 @@ "Music": [ { "File": "The_Fledgling_Kingdom.ogg", - "Type": "peace" + "Type": "peace", + "Order": 1 }, { "File": "Solstice_Festival.ogg", - "Type": "peace" + "Type": "peace", + "Order": 2 }, { "File": "Whistler.ogg", - "Type": "peace" + "Type": "peace", + "Order": 3 }, { "File": "As_Seasons_Change.ogg", - "Type": "peace" + "Type": "peace", + "Order": 4 }, { "File": "Highland_Mist.ogg", - "Type": "peace" + "Type": "peace", + "Order": 5 }, { "File": "Celtica.ogg", - "Type": "peace" + "Type": "peace", + "Order": 6 }, { "File": "Mountain_Idyll.ogg", - "Type": "peace" + "Type": "peace", + "Order": 7 }, { "File": "Albian_Nocturne.ogg", - "Type": "peace" + "Type": "peace", + "Order": 8 } ], "CivBonuses": [], Index: binaries/data/mods/public/simulation/data/civs/cart.json =================================================================== --- binaries/data/mods/public/simulation/data/civs/cart.json +++ binaries/data/mods/public/simulation/data/civs/cart.json @@ -4,19 +4,23 @@ "Music": [ { "File": "Mediterranean_Waves.ogg", - "Type": "peace" + "Type": "peace", + "Order": 1 }, { "File": "Harsh_Lands_Rugged_People.ogg", - "Type": "peace" + "Type": "peace", + "Order": 2 }, { "File": "Peaks_of_Atlas.ogg", - "Type": "peace" + "Type": "peace", + "Order": 3 }, { "File": "From_Every_Corner.ogg", - "Type": "peace" + "Type": "peace", + "Order": 4 } ], "CivBonuses": [ Index: binaries/data/mods/public/simulation/data/civs/gaul.json =================================================================== --- binaries/data/mods/public/simulation/data/civs/gaul.json +++ binaries/data/mods/public/simulation/data/civs/gaul.json @@ -4,27 +4,33 @@ "Music": [ { "File": "Celtic_Pride.ogg", - "Type": "peace" + "Type": "peace", + "Order": 1 }, { "File": "Cisalpine_Gaul.ogg", - "Type": "peace" + "Type": "peace", + "Order": 2 }, { "File": "Harvest_Festival.ogg", - "Type": "peace" + "Type": "peace", + "Order": 3 }, { "File": "Water's_Edge.ogg", - "Type": "peace" + "Type": "peace", + "Order": 4 }, { "File": "Sunrise.ogg", - "Type": "peace" + "Type": "peace", + "Order": 5 }, { "File": "Harvest_Moon.ogg", - "Type": "peace" + "Type": "peace", + "Order": 6 } ], "CivBonuses": [], Index: binaries/data/mods/public/simulation/data/civs/han.json =================================================================== --- binaries/data/mods/public/simulation/data/civs/han.json +++ binaries/data/mods/public/simulation/data/civs/han.json @@ -4,11 +4,13 @@ "Music": [ { "File": "Red_Dawn.ogg", - "Type": "peace" + "Type": "peace", + "Order": 1 }, { "File": "Hill_of_Sorrows.ogg", - "Type": "peace" + "Type": "peace", + "Order": 2 } ], "CivBonuses": [], Index: binaries/data/mods/public/simulation/data/civs/iber.json =================================================================== --- binaries/data/mods/public/simulation/data/civs/iber.json +++ binaries/data/mods/public/simulation/data/civs/iber.json @@ -4,23 +4,28 @@ "Music": [ { "File": "An_old_Warhorse_goes_to_Pasture.ogg", - "Type": "peace" + "Type": "peace", + "Order": 1 }, { "File": "Celtica.ogg", - "Type": "peace" + "Type": "peace", + "Order": 2 }, { "File": "Harsh_Lands_Rugged_People.ogg", - "Type": "peace" + "Type": "peace", + "Order": 3 }, { "File": "Midwinter.ogg", - "Type": "peace" + "Type": "peace", + "Order": 4 }, { "File": "The_Pillars_of_Hercules.ogg", - "Type": "peace" + "Type": "peace", + "Order": 5 } ], "CivBonuses": [ Index: binaries/data/mods/public/simulation/data/civs/kush.json =================================================================== --- binaries/data/mods/public/simulation/data/civs/kush.json +++ binaries/data/mods/public/simulation/data/civs/kush.json @@ -4,31 +4,38 @@ "Music": [ { "File": "Ammon-Ra.ogg", - "Type": "peace" + "Type": "peace", + "Order": 1 }, { "File": "Sands_of_Time.ogg", - "Type": "peace" + "Type": "peace", + "Order": 2 }, { "File": "Land_between_the_two_Seas.ogg", - "Type": "peace" + "Type": "peace", + "Order": 3 }, { "File": "Valley_of_the_Nile.ogg", - "Type": "peace" + "Type": "peace", + "Order": 4 }, { "File": "Bandit_Country.ogg", - "Type": "peace" + "Type": "peace", + "Order": 5 }, { "File": "Mirage.ogg", - "Type": "peace" + "Type": "peace", + "Order": 6 }, { "File": "Point_of_No_Return.ogg", - "Type": "peace" + "Type": "peace", + "Order": 7 } ], "CivBonuses": [ Index: binaries/data/mods/public/simulation/data/civs/mace.json =================================================================== --- binaries/data/mods/public/simulation/data/civs/mace.json +++ binaries/data/mods/public/simulation/data/civs/mace.json @@ -4,31 +4,38 @@ "Music": [ { "File": "Rise_of_Macedon.ogg", - "Type": "peace" + "Type": "peace", + "Order": 1 }, { "File": "In_the_Shadow_of_Olympus.ogg", - "Type": "peace" + "Type": "peace", + "Order": 2 }, { "File": "Elysian_Fields.ogg", - "Type": "peace" + "Type": "peace", + "Order": 3 }, { "File": "The_Hellespont.ogg", - "Type": "peace" + "Type": "peace", + "Order": 4 }, { "File": "Northern_Frontier.ogg", - "Type": "peace" + "Type": "peace", + "Order": 5 }, { "File": "Upstart_King.ogg", - "Type": "peace" + "Type": "peace", + "Order": 6 }, { "File": "Epitaph.ogg", - "Type": "peace" + "Type": "peace", + "Order": 7 } ], "CivBonuses": [], Index: binaries/data/mods/public/simulation/data/civs/maur.json =================================================================== --- binaries/data/mods/public/simulation/data/civs/maur.json +++ binaries/data/mods/public/simulation/data/civs/maur.json @@ -4,23 +4,28 @@ "Music": [ { "File": "An_old_Warhorse_goes_to_Pasture.ogg", - "Type": "peace" + "Type": "peace", + "Order": 1 }, { "File": "Land_between_the_two_Seas.ogg", - "Type": "peace" + "Type": "peace", + "Order": 2 }, { "File": "Eastern_Dreams.ogg", - "Type": "peace" + "Type": "peace", + "Order": 3 }, { "File": "Karmic_Confluence.ogg", - "Type": "peace" + "Type": "peace", + "Order": 4 }, { "File": "Beyond_The_Indus.ogg", - "Type": "peace" + "Type": "peace", + "Order": 5 } ], "CivBonuses": [], Index: binaries/data/mods/public/simulation/data/civs/pers.json =================================================================== --- binaries/data/mods/public/simulation/data/civs/pers.json +++ binaries/data/mods/public/simulation/data/civs/pers.json @@ -4,19 +4,23 @@ "Music": [ { "File": "Eastern_Dreams.ogg", - "Type": "peace" + "Type": "peace", + "Order": 1 }, { "File": "Valley_of_the_Nile.ogg", - "Type": "peace" + "Type": "peace", + "Order": 2 }, { "File": "Land_between_the_two_Seas.ogg", - "Type": "peace" + "Type": "peace", + "Order": 3 }, { "File": "Sands_of_Time.ogg", - "Type": "peace" + "Type": "peace", + "Order": 4 } ], "CivBonuses": [ Index: binaries/data/mods/public/simulation/data/civs/ptol.json =================================================================== --- binaries/data/mods/public/simulation/data/civs/ptol.json +++ binaries/data/mods/public/simulation/data/civs/ptol.json @@ -4,27 +4,33 @@ "Music": [ { "File": "Ammon-Ra.ogg", - "Type": "peace" + "Type": "peace", + "Order": 1 }, { "File": "Sands_of_Time.ogg", - "Type": "peace" + "Type": "peace", + "Order": 2 }, { "File": "Land_between_the_two_Seas.ogg", - "Type": "peace" + "Type": "peace", + "Order": 3 }, { "File": "Valley_of_the_Nile.ogg", - "Type": "peace" + "Type": "peace", + "Order": 4 }, { "File": "Epitaph.ogg", - "Type": "peace" + "Type": "peace", + "Order": 5 }, { "File": "Along_the_Nile.ogg", - "Type": "peace" + "Type": "peace", + "Order": 6 } ], "CivBonuses": [ Index: binaries/data/mods/public/simulation/data/civs/rome.json =================================================================== --- binaries/data/mods/public/simulation/data/civs/rome.json +++ binaries/data/mods/public/simulation/data/civs/rome.json @@ -4,27 +4,33 @@ "Music": [ { "File": "Juno_Protect_You.ogg", - "Type": "peace" + "Type": "peace", + "Order": 1 }, { "File": "Mediterranean_Waves.ogg", - "Type": "peace" + "Type": "peace", + "Order": 2 }, { "File": "Elysian_Fields.ogg", - "Type": "peace" + "Type": "peace", + "Order": 3 }, { "File": "The_Governor.ogg", - "Type": "peace" + "Type": "peace", + "Order": 4 }, { "File": "Alba_Longa_Burns.ogg", - "Type": "peace" + "Type": "peace", + "Order": 5 }, { "File": "Roman_Ingenuity.ogg", - "Type": "peace" + "Type": "peace", + "Order": 6 } ], "CivBonuses": [ Index: binaries/data/mods/public/simulation/data/civs/sele.json =================================================================== --- binaries/data/mods/public/simulation/data/civs/sele.json +++ binaries/data/mods/public/simulation/data/civs/sele.json @@ -4,27 +4,33 @@ "Music": [ { "File": "Rise_of_Macedon.ogg", - "Type": "peace" + "Type": "peace", + "Order": 1 }, { "File": "In_the_Shadow_of_Olympus.ogg", - "Type": "peace" + "Type": "peace", + "Order": 2 }, { "File": "The_Hellespont.ogg", - "Type": "peace" + "Type": "peace", + "Order": 3 }, { "File": "Cradle_of_Civilization.ogg", - "Type": "peace" + "Type": "peace", + "Order": 4 }, { "File": "Expedition.ogg", - "Type": "peace" + "Type": "peace", + "Order": 5 }, { "File": "Land_Between_Rivers.ogg", - "Type": "peace" + "Type": "peace", + "Order": 6 } ], "CivBonuses": [], Index: binaries/data/mods/public/simulation/data/civs/spart.json =================================================================== --- binaries/data/mods/public/simulation/data/civs/spart.json +++ binaries/data/mods/public/simulation/data/civs/spart.json @@ -4,23 +4,28 @@ "Music": [ { "File": "Helen_Leaves_Sparta.ogg", - "Type": "peace" + "Type": "peace", + "Order": 1 }, { "File": "Peaks_of_Atlas.ogg", - "Type": "peace" + "Type": "peace", + "Order": 2 }, { "File": "Forging_a_City-State.ogg", - "Type": "peace" + "Type": "peace", + "Order": 3 }, { "File": "The_Hellespont.ogg", - "Type": "peace" + "Type": "peace", + "Order": 4 }, { "File": "Only_300_Stood.ogg", - "Type": "peace" + "Type": "peace", + "Order": 5 } ], "CivBonuses": [