mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
Merge branch 'DaforLynx/halloween-soundtrack' into 'master'
Halloween soundtrack with automatic functionality See merge request veloren/veloren!3672
This commit is contained in:
commit
5d5a2d5ff8
304
assets/voxygen/audio/calendar/halloween/soundtrack.ron
Normal file
304
assets/voxygen/audio/calendar/halloween/soundtrack.ron
Normal file
@ -0,0 +1,304 @@
|
|||||||
|
// Times: Some(Day or Night) or None [both]
|
||||||
|
// Weathers: Some(Clear, Cloudy, Rain, or Storm) or None [any weather]
|
||||||
|
// Biomes: Grassland, Forest, Desert, Snowland, Lake, Mountain, Ocean, Jungle, Savannah, Taiga
|
||||||
|
// planned biomes: Swamp
|
||||||
|
// Number after biome indicates weighting; higher numbers are less frequent
|
||||||
|
// Sites: Settlement(Default, Cliff, or Desert), Cave, Dungeon(Old or Gnarling), or Void [none]
|
||||||
|
// Music states: Activity(Explore or Combat)
|
||||||
|
// Combat music is looped. Needs three files: start, loop, and end. Start contains leadup to the loop.
|
||||||
|
// It's recommended to also have appropriate metadata for those who listen via the game files :)
|
||||||
|
|
||||||
|
(
|
||||||
|
tracks:
|
||||||
|
[
|
||||||
|
|
||||||
|
// Overworld exploration tracks
|
||||||
|
|
||||||
|
Individual((
|
||||||
|
title: "Down The Rabbit Hole",
|
||||||
|
path: "voxygen.audio.soundtrack.cave.down_the_rabbit_hole",
|
||||||
|
length: 244.0,
|
||||||
|
timing: None,
|
||||||
|
weather: None,
|
||||||
|
biomes: [],
|
||||||
|
sites: [Void, Settlement(Default), Settlement(CliffTown), Settlement(DesertCity)],
|
||||||
|
music_state: Activity(Explore),
|
||||||
|
artist: "badbbad",
|
||||||
|
)),
|
||||||
|
Individual((
|
||||||
|
title: "Dank Dungeon",
|
||||||
|
path: "voxygen.audio.soundtrack.dungeon.dank_dungeon",
|
||||||
|
length: 130.0,
|
||||||
|
timing: None,
|
||||||
|
weather: None,
|
||||||
|
biomes: [],
|
||||||
|
sites: [Void, Settlement(Default), Settlement(CliffTown), Settlement(DesertCity)],
|
||||||
|
music_state: Activity(Explore),
|
||||||
|
artist: "Aeronic",
|
||||||
|
)),
|
||||||
|
Individual((
|
||||||
|
title: "Ruination",
|
||||||
|
path: "voxygen.audio.soundtrack.dungeon.ruination",
|
||||||
|
length: 135.0,
|
||||||
|
timing: None,
|
||||||
|
weather: None,
|
||||||
|
biomes: [],
|
||||||
|
sites: [Void, Settlement(Default), Settlement(CliffTown), Settlement(DesertCity)],
|
||||||
|
music_state: Activity(Explore),
|
||||||
|
artist: "Aeronic",
|
||||||
|
)),
|
||||||
|
Individual((
|
||||||
|
title: "Moonlit Canopy",
|
||||||
|
path: "voxygen.audio.soundtrack.overworld.moonlit_canopy",
|
||||||
|
length: 170.0,
|
||||||
|
timing: Some(Night),
|
||||||
|
weather: None,
|
||||||
|
biomes: [],
|
||||||
|
sites: [Void, Settlement(Default), Settlement(CliffTown), Settlement(DesertCity)],
|
||||||
|
music_state: Activity(Explore),
|
||||||
|
artist: "GeekyGami",
|
||||||
|
)),
|
||||||
|
Individual((
|
||||||
|
title: "Ethereal Bonds",
|
||||||
|
path: "voxygen.audio.soundtrack.overworld.ethereal_bonds",
|
||||||
|
length: 59.0,
|
||||||
|
timing: None,
|
||||||
|
weather: None,
|
||||||
|
biomes: [],
|
||||||
|
sites: [Void, Settlement(Default), Settlement(CliffTown), Settlement(DesertCity)],
|
||||||
|
music_state: Activity(Explore),
|
||||||
|
artist: "Aeronic",
|
||||||
|
)),
|
||||||
|
Individual((
|
||||||
|
title: "Raising Below Like Thunder",
|
||||||
|
path: "voxygen.audio.soundtrack.overworld.raising_below_like_thunder",
|
||||||
|
length: 120.0,
|
||||||
|
timing: None,
|
||||||
|
weather: None,
|
||||||
|
biomes: [],
|
||||||
|
sites: [Void, Settlement(Default), Settlement(CliffTown), Settlement(DesertCity)],
|
||||||
|
music_state: Activity(Explore),
|
||||||
|
artist: "Rarnage",
|
||||||
|
)),
|
||||||
|
Individual((
|
||||||
|
title: "Into The Dark Forest",
|
||||||
|
path: "voxygen.audio.soundtrack.overworld.into_the_dark_forest",
|
||||||
|
length: 184.0,
|
||||||
|
timing: None,
|
||||||
|
weather: None,
|
||||||
|
biomes: [],
|
||||||
|
sites: [Void, Settlement(Default), Settlement(CliffTown), Settlement(DesertCity)],
|
||||||
|
music_state: Activity(Explore),
|
||||||
|
artist: "Aeronic",
|
||||||
|
)),
|
||||||
|
Individual((
|
||||||
|
title: "Ballerine Macabre",
|
||||||
|
path: "voxygen.audio.soundtrack.overworld.ballerine_macabre",
|
||||||
|
length: 193.0,
|
||||||
|
timing: None,
|
||||||
|
weather: None,
|
||||||
|
biomes: [],
|
||||||
|
sites: [Void, Settlement(Default), Settlement(CliffTown), Settlement(DesertCity)],
|
||||||
|
music_state: Activity(Explore),
|
||||||
|
artist: "GeekyGami",
|
||||||
|
)),
|
||||||
|
|
||||||
|
// Cave music
|
||||||
|
|
||||||
|
Individual((
|
||||||
|
title: "Stars Like Stalactites",
|
||||||
|
path: "voxygen.audio.soundtrack.cave.stars_like_stalactites",
|
||||||
|
length: 130.0,
|
||||||
|
timing: None,
|
||||||
|
weather: None,
|
||||||
|
biomes: [],
|
||||||
|
sites: [Cave],
|
||||||
|
music_state: Activity(Explore),
|
||||||
|
artist: "DragonDee",
|
||||||
|
)),
|
||||||
|
Individual((
|
||||||
|
title: "Cavernous Hollow",
|
||||||
|
path: "voxygen.audio.soundtrack.cave.cavernous_hollow",
|
||||||
|
length: 256.0,
|
||||||
|
timing: None,
|
||||||
|
weather: None,
|
||||||
|
biomes: [],
|
||||||
|
sites: [Cave],
|
||||||
|
music_state: Activity(Explore),
|
||||||
|
artist: "GeekyGami",
|
||||||
|
)),
|
||||||
|
Individual((
|
||||||
|
title: "Saturated Hallows",
|
||||||
|
path: "voxygen.audio.soundtrack.cave.saturated_hallows",
|
||||||
|
length: 227.0,
|
||||||
|
timing: None,
|
||||||
|
weather: None,
|
||||||
|
biomes: [],
|
||||||
|
sites: [Cave],
|
||||||
|
music_state: Activity(Explore),
|
||||||
|
artist: "Flashbang",
|
||||||
|
)),
|
||||||
|
Individual((
|
||||||
|
title: "Mineral Deposits",
|
||||||
|
path: "voxygen.audio.soundtrack.cave.mineral_deposits",
|
||||||
|
length: 148.0,
|
||||||
|
timing: None,
|
||||||
|
weather: None,
|
||||||
|
biomes: [],
|
||||||
|
sites: [Cave],
|
||||||
|
music_state: Activity(Explore),
|
||||||
|
artist: "Aeronic",
|
||||||
|
)),
|
||||||
|
Individual((
|
||||||
|
title: "Down The Rabbit Hole",
|
||||||
|
path: "voxygen.audio.soundtrack.cave.down_the_rabbit_hole",
|
||||||
|
length: 244.0,
|
||||||
|
timing: None,
|
||||||
|
weather: None,
|
||||||
|
biomes: [],
|
||||||
|
sites: [Cave],
|
||||||
|
music_state: Activity(Explore),
|
||||||
|
artist: "badbbad",
|
||||||
|
)),
|
||||||
|
|
||||||
|
// Dungeon music
|
||||||
|
|
||||||
|
Individual((
|
||||||
|
title: "Mysty Temple",
|
||||||
|
path: "voxygen.audio.soundtrack.dungeon.mysty_temple",
|
||||||
|
length: 183.0,
|
||||||
|
timing: None,
|
||||||
|
weather: None,
|
||||||
|
biomes:[],
|
||||||
|
sites: [
|
||||||
|
Dungeon(Old),
|
||||||
|
],
|
||||||
|
music_state: Activity(Explore),
|
||||||
|
artist: "Tiny",
|
||||||
|
)),
|
||||||
|
Individual((
|
||||||
|
title: "Cobbled Halls",
|
||||||
|
path: "voxygen.audio.soundtrack.dungeon.cobbled_halls",
|
||||||
|
length: 240.0,
|
||||||
|
timing: None,
|
||||||
|
weather: None,
|
||||||
|
biomes:[],
|
||||||
|
sites: [
|
||||||
|
Dungeon(Old),
|
||||||
|
],
|
||||||
|
music_state: Activity(Explore),
|
||||||
|
artist: "Crow",
|
||||||
|
)),
|
||||||
|
Individual((
|
||||||
|
title: "Dank Dungeon",
|
||||||
|
path: "voxygen.audio.soundtrack.dungeon.dank_dungeon",
|
||||||
|
length: 130.0,
|
||||||
|
timing: None,
|
||||||
|
weather: None,
|
||||||
|
biomes: [],
|
||||||
|
sites: [
|
||||||
|
Dungeon(Old),
|
||||||
|
],
|
||||||
|
music_state: Activity(Explore),
|
||||||
|
artist: "Aeronic",
|
||||||
|
)),
|
||||||
|
Individual((
|
||||||
|
title: "Ruination",
|
||||||
|
path: "voxygen.audio.soundtrack.dungeon.ruination",
|
||||||
|
length: 135.0,
|
||||||
|
timing: None,
|
||||||
|
weather: None,
|
||||||
|
biomes: [],
|
||||||
|
sites: [
|
||||||
|
Dungeon(Old),
|
||||||
|
],
|
||||||
|
music_state: Activity(Explore),
|
||||||
|
artist: "Aeronic",
|
||||||
|
)),
|
||||||
|
Individual((
|
||||||
|
title: "Vast Onslaught",
|
||||||
|
path: "voxygen.audio.soundtrack.dungeon.vast_onslaught",
|
||||||
|
length: 237.0,
|
||||||
|
timing: None,
|
||||||
|
weather: None,
|
||||||
|
biomes: [],
|
||||||
|
sites: [
|
||||||
|
Dungeon(Old),
|
||||||
|
],
|
||||||
|
music_state: Activity(Explore),
|
||||||
|
artist: "Aeronic",
|
||||||
|
)),
|
||||||
|
Individual((
|
||||||
|
title: "Sacred Temple",
|
||||||
|
path: "voxygen.audio.soundtrack.dungeon.sacred_temple",
|
||||||
|
length: 75.0,
|
||||||
|
timing: None,
|
||||||
|
weather: None,
|
||||||
|
biomes: [],
|
||||||
|
sites: [
|
||||||
|
Dungeon(Old),
|
||||||
|
],
|
||||||
|
music_state: Activity(Explore),
|
||||||
|
artist: "Aeronic",
|
||||||
|
)),
|
||||||
|
Individual((
|
||||||
|
title: "The Undergrowth",
|
||||||
|
path: "voxygen.audio.soundtrack.overworld.the_undergrowth",
|
||||||
|
length: 165.0,
|
||||||
|
timing: None,
|
||||||
|
weather: None,
|
||||||
|
biomes: [],
|
||||||
|
sites: [
|
||||||
|
Dungeon(Gnarling),
|
||||||
|
],
|
||||||
|
music_state: Activity(Explore),
|
||||||
|
artist: "Oolnokk",
|
||||||
|
)),
|
||||||
|
Individual((
|
||||||
|
title: "Jungle Ambient",
|
||||||
|
path: "voxygen.audio.soundtrack.overworld.jungle_ambient",
|
||||||
|
length: 218.0,
|
||||||
|
timing: None,
|
||||||
|
weather: None,
|
||||||
|
biomes: [],
|
||||||
|
sites: [
|
||||||
|
Dungeon(Gnarling),
|
||||||
|
],
|
||||||
|
music_state: Activity(Explore),
|
||||||
|
artist: "badbbad",
|
||||||
|
)),
|
||||||
|
|
||||||
|
// Combat Music
|
||||||
|
|
||||||
|
Segmented(
|
||||||
|
title: "Barred Paths",
|
||||||
|
timing: None,
|
||||||
|
weather: None,
|
||||||
|
biomes: [],
|
||||||
|
sites: [
|
||||||
|
Dungeon(Old),
|
||||||
|
],
|
||||||
|
segments: [
|
||||||
|
("voxygen.audio.soundtrack.combat.barred_paths.barred_paths-start", 56.0, Transition(Explore, Combat(High)), Some(Combat(High))),
|
||||||
|
("voxygen.audio.soundtrack.combat.barred_paths.barred_paths-loop", 54.0, Activity(Combat(High)), None),
|
||||||
|
("voxygen.audio.soundtrack.combat.barred_paths.barred_paths-end", 6.0, Transition(Combat(High), Explore), None),
|
||||||
|
],
|
||||||
|
artist: "DaforLynx",
|
||||||
|
),
|
||||||
|
Segmented(
|
||||||
|
title: "Reversal",
|
||||||
|
timing: None,
|
||||||
|
weather: None,
|
||||||
|
biomes: [],
|
||||||
|
sites: [
|
||||||
|
Dungeon(Old),
|
||||||
|
],
|
||||||
|
segments: [
|
||||||
|
("voxygen.audio.soundtrack.combat.reversal.reversal-start", 60.0, Transition(Explore, Combat(High)), Some(Combat(High))),
|
||||||
|
("voxygen.audio.soundtrack.combat.reversal.reversal-loop", 60.0, Activity(Combat(High)), None),
|
||||||
|
("voxygen.audio.soundtrack.combat.reversal.reversal-end", 4.0, Transition(Combat(High), Explore), None),
|
||||||
|
],
|
||||||
|
artist: "DaforLynx",
|
||||||
|
),
|
||||||
|
]
|
||||||
|
)
|
BIN
assets/voxygen/audio/soundtrack/overworld/ballerine_macabre.ogg
(Stored with Git LFS)
Normal file
BIN
assets/voxygen/audio/soundtrack/overworld/ballerine_macabre.ogg
(Stored with Git LFS)
Normal file
Binary file not shown.
@ -47,6 +47,7 @@ use crate::audio::{AudioFrontend, MusicChannelTag};
|
|||||||
use client::Client;
|
use client::Client;
|
||||||
use common::{
|
use common::{
|
||||||
assets::{self, AssetExt, AssetHandle},
|
assets::{self, AssetExt, AssetHandle},
|
||||||
|
calendar::{Calendar, CalendarEvent},
|
||||||
terrain::{BiomeKind, SiteKindMeta},
|
terrain::{BiomeKind, SiteKindMeta},
|
||||||
weather::WeatherKind,
|
weather::WeatherKind,
|
||||||
};
|
};
|
||||||
@ -204,10 +205,10 @@ impl assets::Asset for MusicTransitionManifest {
|
|||||||
const EXTENSION: &'static str = "ron";
|
const EXTENSION: &'static str = "ron";
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Default for MusicMgr {
|
impl MusicMgr {
|
||||||
fn default() -> Self {
|
pub fn new(calendar: &Calendar) -> Self {
|
||||||
Self {
|
Self {
|
||||||
soundtrack: Self::load_soundtrack_items(),
|
soundtrack: Self::load_soundtrack_items(calendar),
|
||||||
began_playing: Instant::now(),
|
began_playing: Instant::now(),
|
||||||
next_track_change: 0.0,
|
next_track_change: 0.0,
|
||||||
last_track: String::from("None"),
|
last_track: String::from("None"),
|
||||||
@ -218,9 +219,7 @@ impl Default for MusicMgr {
|
|||||||
track_length: 0.0,
|
track_length: 0.0,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
impl MusicMgr {
|
|
||||||
/// Checks whether the previous track has completed. If so, sends a
|
/// Checks whether the previous track has completed. If so, sends a
|
||||||
/// request to play the next (random) track
|
/// request to play the next (random) track
|
||||||
pub fn maintain(&mut self, audio: &mut AudioFrontend, state: &State, client: &Client) {
|
pub fn maintain(&mut self, audio: &mut AudioFrontend, state: &State, client: &Client) {
|
||||||
@ -488,9 +487,26 @@ impl MusicMgr {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn load_soundtrack_items() -> AssetHandle<SoundtrackCollection<SoundtrackItem>> {
|
fn load_soundtrack_items(
|
||||||
|
calendar: &Calendar,
|
||||||
|
) -> AssetHandle<SoundtrackCollection<SoundtrackItem>> {
|
||||||
// Cannot fail: A default value is always provided
|
// Cannot fail: A default value is always provided
|
||||||
SoundtrackCollection::load_expect("voxygen.audio.soundtrack")
|
let mut soundtrack = SoundtrackCollection::load_expect("voxygen.audio.soundtrack");
|
||||||
|
if calendar.events().len() == 0 {
|
||||||
|
soundtrack
|
||||||
|
} else {
|
||||||
|
for event in calendar.events() {
|
||||||
|
match event {
|
||||||
|
CalendarEvent::Halloween => {
|
||||||
|
soundtrack = SoundtrackCollection::load_expect(
|
||||||
|
"voxygen.audio.calendar.halloween.soundtrack",
|
||||||
|
);
|
||||||
|
},
|
||||||
|
_ => soundtrack = SoundtrackCollection::load_expect("voxygen.audio.soundtrack"),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
soundtrack
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
impl assets::Asset for SoundtrackCollection<RawSoundtrackItem> {
|
impl assets::Asset for SoundtrackCollection<RawSoundtrackItem> {
|
||||||
|
@ -30,6 +30,7 @@ use crate::{
|
|||||||
};
|
};
|
||||||
use client::Client;
|
use client::Client;
|
||||||
use common::{
|
use common::{
|
||||||
|
calendar::Calendar,
|
||||||
comp,
|
comp,
|
||||||
outcome::Outcome,
|
outcome::Outcome,
|
||||||
resources::DeltaTime,
|
resources::DeltaTime,
|
||||||
@ -307,6 +308,8 @@ impl Scene {
|
|||||||
_ => CameraMode::ThirdPerson,
|
_ => CameraMode::ThirdPerson,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let calendar = client.state().ecs().read_resource::<Calendar>();
|
||||||
|
|
||||||
Self {
|
Self {
|
||||||
data,
|
data,
|
||||||
globals_bind_group,
|
globals_bind_group,
|
||||||
@ -331,7 +334,7 @@ impl Scene {
|
|||||||
trail_mgr: TrailMgr::default(),
|
trail_mgr: TrailMgr::default(),
|
||||||
figure_mgr: FigureMgr::new(renderer),
|
figure_mgr: FigureMgr::new(renderer),
|
||||||
sfx_mgr: SfxMgr::default(),
|
sfx_mgr: SfxMgr::default(),
|
||||||
music_mgr: MusicMgr::default(),
|
music_mgr: MusicMgr::new(&calendar),
|
||||||
ambient_mgr: AmbientMgr {
|
ambient_mgr: AmbientMgr {
|
||||||
ambience: ambient::load_ambience_items(),
|
ambience: ambient::load_ambience_items(),
|
||||||
},
|
},
|
||||||
|
Loading…
Reference in New Issue
Block a user