diff --git a/credits.toml b/credits.toml index 87dff1d..72f9a2a 100644 --- a/credits.toml +++ b/credits.toml @@ -59,4 +59,30 @@ link = "https://www.kenney.nl/" credit = "Game icons" link = "https://opengameart.org/content/game-icons" +[[people]] +name = "section31" +[[people.credits]] +credit = "Sewer Nightclub" +link = "https://opengameart.org/content/sewer-nightclub" + +[[people]] +name = "Alexandr Zhelanov" +[[people.credits]] +credit = "Cyber Implant In My Butt" +link = "https://opengameart.org/content/cyber-implant-in-my-butt" + +[[people]] +name = "Matthew Pablo" +[[people.credits]] +credit = "Red Doors v2.0" +link = "https://opengameart.org/content/red-doors-v20" +[[people.credits]] +credit = "Thrust Sequence" +link = "https://opengameart.org/content/thrust-sequence" +[[people.credits]] +credit = "Space Dimensions (8bit/Retro Version)" +link = "https://opengameart.org/content/space-dimensions-8bitretro-version" + + + diff --git a/godot/project.godot b/godot/project.godot index 1dd9f8b..e7b95b2 100644 --- a/godot/project.godot +++ b/godot/project.godot @@ -24,6 +24,7 @@ CliParserGlobal="*uid://c52o7xa0fnr53" GameSettingsGlobal="*uid://bjr15hjiojecw" AnnouncerGlobal="*uid://5gey4i80mmsa" StandaloneReplayGlobal="*uid://djmb2jqcpkuep" +MusicManagerGlobal="*uid://c2q1twneefbjb" [display] diff --git a/godot/raw_assets/music/Red Doors 2.0 (GameClosure Edition).mp3 b/godot/raw_assets/music/Red Doors 2.0 (GameClosure Edition).mp3 new file mode 100644 index 0000000..ad8b57e Binary files /dev/null and b/godot/raw_assets/music/Red Doors 2.0 (GameClosure Edition).mp3 differ diff --git a/godot/raw_assets/music/Red Doors 2.0 (GameClosure Edition).mp3.import b/godot/raw_assets/music/Red Doors 2.0 (GameClosure Edition).mp3.import new file mode 100644 index 0000000..a6fdf7d --- /dev/null +++ b/godot/raw_assets/music/Red Doors 2.0 (GameClosure Edition).mp3.import @@ -0,0 +1,19 @@ +[remap] + +importer="mp3" +type="AudioStreamMP3" +uid="uid://dkgm7o8u0w550" +path="res://.godot/imported/Red Doors 2.0 (GameClosure Edition).mp3-95b4082934392fbc576f9bf3a6e9eafe.mp3str" + +[deps] + +source_file="res://raw_assets/music/Red Doors 2.0 (GameClosure Edition).mp3" +dest_files=["res://.godot/imported/Red Doors 2.0 (GameClosure Edition).mp3-95b4082934392fbc576f9bf3a6e9eafe.mp3str"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/godot/raw_assets/music/S31-Sewer Nightclub.ogg b/godot/raw_assets/music/S31-Sewer Nightclub.ogg new file mode 100644 index 0000000..3019701 Binary files /dev/null and b/godot/raw_assets/music/S31-Sewer Nightclub.ogg differ diff --git a/godot/raw_assets/music/S31-Sewer Nightclub.ogg.import b/godot/raw_assets/music/S31-Sewer Nightclub.ogg.import new file mode 100644 index 0000000..da25dab --- /dev/null +++ b/godot/raw_assets/music/S31-Sewer Nightclub.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://cnvikognjv8go" +path="res://.godot/imported/S31-Sewer Nightclub.ogg-377cb00f9a5b1b0ffa58a20d2c68ef8e.oggvorbisstr" + +[deps] + +source_file="res://raw_assets/music/S31-Sewer Nightclub.ogg" +dest_files=["res://.godot/imported/S31-Sewer Nightclub.ogg-377cb00f9a5b1b0ffa58a20d2c68ef8e.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/godot/raw_assets/music/Thrust Sequence.mp3 b/godot/raw_assets/music/Thrust Sequence.mp3 new file mode 100644 index 0000000..bbedb21 Binary files /dev/null and b/godot/raw_assets/music/Thrust Sequence.mp3 differ diff --git a/godot/raw_assets/music/Thrust Sequence.mp3.import b/godot/raw_assets/music/Thrust Sequence.mp3.import new file mode 100644 index 0000000..7d742f8 --- /dev/null +++ b/godot/raw_assets/music/Thrust Sequence.mp3.import @@ -0,0 +1,19 @@ +[remap] + +importer="mp3" +type="AudioStreamMP3" +uid="uid://dai8by348wqss" +path="res://.godot/imported/Thrust Sequence.mp3-66527297e2eda55683d766578b64502c.mp3str" + +[deps] + +source_file="res://raw_assets/music/Thrust Sequence.mp3" +dest_files=["res://.godot/imported/Thrust Sequence.mp3-66527297e2eda55683d766578b64502c.mp3str"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/godot/raw_assets/music/cyber_implant_in_my_butt.ogg b/godot/raw_assets/music/cyber_implant_in_my_butt.ogg new file mode 100644 index 0000000..6e4b14a Binary files /dev/null and b/godot/raw_assets/music/cyber_implant_in_my_butt.ogg differ diff --git a/godot/raw_assets/music/cyber_implant_in_my_butt.ogg.import b/godot/raw_assets/music/cyber_implant_in_my_butt.ogg.import new file mode 100644 index 0000000..ad5f9e9 --- /dev/null +++ b/godot/raw_assets/music/cyber_implant_in_my_butt.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://c1q565bmxqy4q" +path="res://.godot/imported/cyber_implant_in_my_butt.ogg-9923ee8228149321edae0e811aa330ff.oggvorbisstr" + +[deps] + +source_file="res://raw_assets/music/cyber_implant_in_my_butt.ogg" +dest_files=["res://.godot/imported/cyber_implant_in_my_butt.ogg-9923ee8228149321edae0e811aa330ff.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/godot/raw_assets/music/n-Dimensions (Main Theme - Retro Ver.mp3 b/godot/raw_assets/music/n-Dimensions (Main Theme - Retro Ver.mp3 new file mode 100644 index 0000000..8b11a5b Binary files /dev/null and b/godot/raw_assets/music/n-Dimensions (Main Theme - Retro Ver.mp3 differ diff --git a/godot/raw_assets/music/n-Dimensions (Main Theme - Retro Ver.mp3.import b/godot/raw_assets/music/n-Dimensions (Main Theme - Retro Ver.mp3.import new file mode 100644 index 0000000..f3918ac --- /dev/null +++ b/godot/raw_assets/music/n-Dimensions (Main Theme - Retro Ver.mp3.import @@ -0,0 +1,19 @@ +[remap] + +importer="mp3" +type="AudioStreamMP3" +uid="uid://d3tpaim4ia0xr" +path="res://.godot/imported/n-Dimensions (Main Theme - Retro Ver.mp3-4639c477544a2dfc07354bab284a7098.mp3str" + +[deps] + +source_file="res://raw_assets/music/n-Dimensions (Main Theme - Retro Ver.mp3" +dest_files=["res://.godot/imported/n-Dimensions (Main Theme - Retro Ver.mp3-4639c477544a2dfc07354bab284a7098.mp3str"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/godot/scenes/misc/music_manager_global.tscn b/godot/scenes/misc/music_manager_global.tscn new file mode 100644 index 0000000..1ba5068 --- /dev/null +++ b/godot/scenes/misc/music_manager_global.tscn @@ -0,0 +1,12 @@ +[gd_scene format=3 uid="uid://c2q1twneefbjb"] + +[ext_resource type="AudioStream" uid="uid://cnvikognjv8go" path="res://raw_assets/music/S31-Sewer Nightclub.ogg" id="1_xy4vl"] +[ext_resource type="AudioStream" uid="uid://c1q565bmxqy4q" path="res://raw_assets/music/cyber_implant_in_my_butt.ogg" id="2_t25pm"] + +[node name="music_manager_global" type="MusicManager" unique_id=86652643 node_paths=PackedStringArray("player")] +player = NodePath("audio_stream_player") +main_menu_songs = Array[AudioStream]([ExtResource("1_xy4vl"), ExtResource("2_t25pm")]) + +[node name="audio_stream_player" type="AudioStreamPlayer" parent="." unique_id=1469531096] +bus = &"Music" +playback_type = 1 diff --git a/rust/src/bgm.rs b/rust/src/bgm.rs new file mode 100644 index 0000000..da065c5 --- /dev/null +++ b/rust/src/bgm.rs @@ -0,0 +1,54 @@ +use godot::{ + classes::{AudioStream, AudioStreamPlayer}, + prelude::*, + tools::get_autoload_by_name, +}; + +pub const MUSIC_MANAGER_GLOBAL: &str = "MusicManagerGlobal"; + +#[derive(Debug, PartialEq, PartialOrd, Clone, Copy)] +pub enum Music { + MainMenu, + Map(u8), +} + +#[derive(GodotClass)] +#[class(base=Node3D, init)] +pub struct MusicManager { + #[export] + player: Option>, + #[export] + main_menu_songs: Array>, + + currently_playing: Option, + + base: Base, +} + +impl MusicManager { + pub fn singleton() -> Gd { + get_autoload_by_name::(MUSIC_MANAGER_GLOBAL) + } + + pub fn play(&mut self, music: Option) { + if self.currently_playing == music { + return; + } + self.currently_playing = music; + if let Some(player) = &mut self.player { + match music { + Some(music) => { + let songs = match music { + Music::MainMenu => self.main_menu_songs.clone(), + Music::Map(_) => self.main_menu_songs.clone(), + }; + if let Some(song) = songs.pick_random() { + player.set_stream(&song); + player.play(); + } + } + None => player.stop(), + } + } + } +} diff --git a/rust/src/game_settings.rs b/rust/src/game_settings.rs index 3b3b451..4ef8d72 100644 --- a/rust/src/game_settings.rs +++ b/rust/src/game_settings.rs @@ -103,7 +103,7 @@ impl VolumeSettings { } pub fn music(&self) -> f32 { - (self.music_volume / 10_000.) as f32 + (self.music_volume / 100.) as f32 } pub fn announcer(&self) -> f32 { diff --git a/rust/src/lib.rs b/rust/src/lib.rs index c96d962..d2ed3f1 100644 --- a/rust/src/lib.rs +++ b/rust/src/lib.rs @@ -1,6 +1,7 @@ use godot::prelude::*; pub mod announcer; +pub mod bgm; pub mod chat; pub mod cli_parser; pub mod credits; diff --git a/rust/src/ui/main_menu.rs b/rust/src/ui/main_menu.rs index bcf0a0e..013399c 100644 --- a/rust/src/ui/main_menu.rs +++ b/rust/src/ui/main_menu.rs @@ -10,6 +10,7 @@ use godot::{ }; use crate::{ + bgm::{Music, MusicManager}, game_manager::GameManager, game_settings::{GameSettingsManager, RecentServer}, net::network_manager::NetworkManager, @@ -104,6 +105,10 @@ impl INode3D for MainMenu { .connect_other(self, Self::on_open_replay); } self.hide_popup(); + + MusicManager::singleton() + .bind_mut() + .play(Some(Music::MainMenu)); } fn process(&mut self, _delta: f64) {