From 60cb5a829b54732176936e21511aa5372ae46fab Mon Sep 17 00:00:00 2001 From: untodesu Date: Thu, 27 Mar 2025 13:28:09 +0500 Subject: Allow game to not die when sound is not available --- game/client/main.cc | 60 +++++++++++++++++++++++++++++++++-------------------- 1 file changed, 37 insertions(+), 23 deletions(-) (limited to 'game/client/main.cc') diff --git a/game/client/main.cc b/game/client/main.cc index 86e9783..e7fdc3b 100644 --- a/game/client/main.cc +++ b/game/client/main.cc @@ -252,29 +252,41 @@ int main(int argc, char **argv) glfwSetWindowIcon(globals::window, 1, &icon_image); } - if(!saladLoadALdefault()) { - spdlog::critical("salad: failed to load function pointers"); - std::terminate(); - } - - globals::sound_dev = alcOpenDevice(nullptr); - - if(globals::sound_dev == nullptr) { - spdlog::critical("openal: alcOpenDevice failed"); - std::terminate(); + if(cmdline::contains("nosound")) { + spdlog::warn("client: sound disabled [per command line]"); + globals::sound_dev = nullptr; + globals::sound_ctx = nullptr; } - - spdlog::info("sound: {}", reinterpret_cast(alcGetString(globals::sound_dev, ALC_DEVICE_SPECIFIER))); - - globals::sound_ctx = alcCreateContext(globals::sound_dev, nullptr); - - if(globals::sound_ctx == nullptr) { - spdlog::critical("openal: alcCreateContext failed"); - std::terminate(); + else { + if(!saladLoadALdefault()) { + spdlog::warn("client: sound disabled [openal loading failed]"); + globals::sound_dev = nullptr; + globals::sound_ctx = nullptr; + } + else { + globals::sound_dev = alcOpenDevice(nullptr); + + if(globals::sound_dev == nullptr) { + spdlog::warn("client: sound disabled [no device]"); + globals::sound_ctx = nullptr; + } + else { + spdlog::info("sound: {}", reinterpret_cast(alcGetString(globals::sound_dev, ALC_DEVICE_SPECIFIER))); + + globals::sound_ctx = alcCreateContext(globals::sound_dev, nullptr); + + if(globals::sound_ctx == nullptr) { + spdlog::warn("client: sound disabled [context creation failed]"); + alcCloseDevice(globals::sound_dev); + globals::sound_dev = nullptr; + } + else { + alcMakeContextCurrent(globals::sound_ctx); + } + } + } } - alcMakeContextCurrent(globals::sound_ctx); - splash::init_client(); window_title::update(); @@ -417,9 +429,11 @@ int main(int argc, char **argv) ImGui_ImplGlfw_Shutdown(); ImGui::DestroyContext(); - alcMakeContextCurrent(nullptr); - alcDestroyContext(globals::sound_ctx); - alcCloseDevice(globals::sound_dev); + if(globals::sound_ctx){ + alcMakeContextCurrent(nullptr); + alcDestroyContext(globals::sound_ctx); + alcCloseDevice(globals::sound_dev); + } glfwDestroyWindow(globals::window); glfwTerminate(); -- cgit