From d18afddf1b1cfa3e55d0411d5d38d824a0cdaefe Mon Sep 17 00:00:00 2001 From: TheBrokenRail Date: Sun, 12 Sep 2021 16:38:41 -0400 Subject: [PATCH] Prevent random.burp Sound From Crashing Game --- VERSION | 2 +- docs/CHANGELOG.md | 5 +++++ images/start.png | Bin 31453 -> 31440 bytes media-layer/core/src/audio/api.cpp | 28 +++++++++++++++++++--------- media-layer/core/src/audio/file.cpp | 2 +- media-layer/core/src/media.c | 7 +++++++ mods/src/sound/repository.cpp | 20 ++++++++++++++++++++ mods/src/sound/sound.cpp | 23 +++++++++++++++-------- mods/src/sound/sound.h | 2 ++ symbols/include/symbols/minecraft.h | 3 +++ 10 files changed, 73 insertions(+), 19 deletions(-) diff --git a/VERSION b/VERSION index ccbccc3d..c043eea7 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.2.0 +2.2.1 diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index fef2fc49..5018b78e 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -1,5 +1,10 @@ # Changelog +**2.2.1** +* Prevent `random.burp` Sound From Crashing Game +* Always Cleanup Media Layer, Even On Crash +* Resolve All Sounds On Startup + **2.2.0** * Sound Support * Split Off "Allow Joining Survival Servers" From Game-Mode Mod diff --git a/images/start.png b/images/start.png index 189cbc74dc49c85c9fc2d71fba62d4286e6aec0f..d3e926e0be631faac0e5203834ce64bb7087335b 100644 GIT binary patch literal 31440 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 G`2PW8S(V}d literal 31453 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ᦪR7NbrvR;yf4<#xZv{cjEi1&SY#!z8|mi#vm+ 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

~qv0!6Z3{W3jPbRQqKrW99TTcz4LV zA*L}C&Z_iig%bi+vvn9Ut?)XB2>5r5?z>?7GA*ac{8Kd=1}hstY!zAQ4H?Z1SB*cW zR+7}qHL_`nCv}IpaanMUgl(v>5GVHlez7}SMKva&FSA>a z)niRA)69NP2}7bSfM%B8y1y?HzJkqOI?uc?gTDice>KU%G<_b+LK@vpd(Xl`Y`xgHIe9)P^oP&@y^-TgQNyU?>$=g70ePaff z)$6Ei`G| zx6Me|?>13=ojz7+E)NV3qnrM)#gH&6%`~c$SAFh98!LKto7V^gSxM_BbTzWP@LNN# zuK`XNsKh^6qXc7(mY$E&*=604|JvHP#K936(e>NlK-KsP=vrU{f08@w^Q+h;YLn9z zT2CvQb z>4}rIS=xBCjOQE;f?9OryN~CsM()YCB6P2Nx#+JKEUEKBrC~{5@x~4aif{*1Wk? z?ex|Qf-(w{E^Gdht}86W%5${;rWMxXA*;|s5BYrzESUYq@i#PYk~M&M)PJ`7B(0wS z1up9b`TMXZ{6f0*w{^*ve!bdmzh0t$!}Mt8LXb)}wEvvx1t9GTeT_35nQ*=iOpH3hWa z2oz{Oo#tcf;>9Y&+*+Xw!aDV?8YuThR;od#{t{y0C2JRb_W{e(3dt_^rd#ktOo9Q+$4I_=ht+jeQBzegI%|}q z{w?aXnc%`Ob=29vZawp2`K+g=saufPqeV5&%>-mmk0?mNG*G4PYKluN6U7Ta> ZdGYyjv7up=9s8f@UpCf8T)Or6{{ReOSTO(q diff --git a/media-layer/core/src/audio/api.cpp b/media-layer/core/src/audio/api.cpp index 9d1f5db6..1aceb04a 100644 --- a/media-layer/core/src/audio/api.cpp +++ b/media-layer/core/src/audio/api.cpp @@ -43,17 +43,27 @@ void media_audio_update(float volume, float x, float y, float z, float yaw) { std::vector::iterator it = get_sources().begin(); while (it != get_sources().end()) { ALuint source = *it; + bool remove = false; // Check - ALint source_state; - alGetSourcei(source, AL_SOURCE_STATE, &source_state); - AL_ERROR_CHECK(); - if (source_state != AL_PLAYING) { - // Finished - it = get_sources().erase(it); - alDeleteSources(1, &source); + if (source && alIsSource(source)) { + // Is Valid Source + ALint source_state; + alGetSourcei(source, AL_SOURCE_STATE, &source_state); AL_ERROR_CHECK(); + if (source_state != AL_PLAYING) { + // Finished Playing + remove = true; + alDeleteSources(1, &source); + AL_ERROR_CHECK(); + } + } else { + // Not A Source + remove = true; + } + // Remove If Needed + if (remove) { + it = get_sources().erase(it); } else { - // Still Playing ++it; } } @@ -62,7 +72,7 @@ void media_audio_update(float volume, float x, float y, float z, float yaw) { void media_audio_play(const char *source, const char *name, float x, float y, float z, float pitch, float volume, int is_ui) { // Load Sound ALuint buffer = _media_audio_get_buffer(source, name); - if (buffer) { + if (volume > 0.0f && buffer) { // Create Source ALuint al_source; alGenSources(1, &al_source); diff --git a/media-layer/core/src/audio/file.cpp b/media-layer/core/src/audio/file.cpp index 9bbba331..f3bad107 100644 --- a/media-layer/core/src/audio/file.cpp +++ b/media-layer/core/src/audio/file.cpp @@ -224,7 +224,7 @@ ALuint _media_audio_get_buffer(const char *source, const char *name) { return _media_audio_get_buffer(source, name); } } else { - return 0; + ERR("%s", "Audio Engine Isn't Loaded"); } } diff --git a/media-layer/core/src/media.c b/media-layer/core/src/media.c index e9898ea6..3fa4889f 100644 --- a/media-layer/core/src/media.c +++ b/media-layer/core/src/media.c @@ -310,6 +310,9 @@ void media_cleanup() { if (is_running) { // GLFW And Audio Are Disabled In Headless Mode #ifndef MCPI_HEADLESS_MODE + // Ignore GLFW Errors During Termination + glfwSetErrorCallback(NULL); + // Terminate GLFW glfwDestroyWindow(glfw_window); glfwTerminate(); @@ -322,6 +325,10 @@ void media_cleanup() { is_running = 0; } } +// Always Cleanup Media Layer +__attribute__((destructor)) static void always_cleanup() { + media_cleanup(); +} // Store Cursor State static int cursor_grabbed = 0; diff --git a/mods/src/sound/repository.cpp b/mods/src/sound/repository.cpp index 55f1c7fe..fdc0cf5b 100644 --- a/mods/src/sound/repository.cpp +++ b/mods/src/sound/repository.cpp @@ -5,6 +5,7 @@ #include #include +#include #include "sound.h" @@ -314,6 +315,12 @@ static std::unordered_map> repository = { { "PCM_fuse" } + }, + { + "random.burp", + { + "PCM_burp" + } } } }; @@ -333,3 +340,16 @@ std::string _sound_pick(std::string sound) { ERR("Invalid Sound: %s", sound.c_str()); } } + +// Resolve All Sounds +void _sound_resolve_all() { + std::string source = _sound_get_source_file(); + if (source.size() > 0) { + for (auto it : repository) { + for (std::string name : it.second) { + // Zero Volume Prevents An OpenAL Source From Being Allocated While Still Resolving The Sound + media_audio_play(source.c_str(), name.c_str(), 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f); + } + } + } +} diff --git a/mods/src/sound/sound.cpp b/mods/src/sound/sound.cpp index 3060e0b2..a438d2d7 100644 --- a/mods/src/sound/sound.cpp +++ b/mods/src/sound/sound.cpp @@ -11,7 +11,7 @@ // Resolve Source File Path #define SOURCE_FILE_BASE "data/libminecraftpe.so" -static std::string get_source_file() { +std::string _sound_get_source_file() { static bool source_loaded = false; static std::string source; @@ -56,24 +56,20 @@ static std::string get_source_file() { source_loaded = true; // Return - return get_source_file(); + return _sound_get_source_file(); } } -// Resolve On Startup -__attribute__((constructor)) static void resolve_source_file() { - get_source_file(); -} // Play Sound // The pitch value is unsued because it causes glitchy sounds, it is seemingly unused in MCPE as well. static void SoundEngine_playUI_injection(__attribute__((unused)) unsigned char *sound_engine, std::string const& name, __attribute__((unused)) float pitch, float volume) { - std::string source = get_source_file(); + std::string source = _sound_get_source_file(); if (source.size() > 0) { media_audio_play(source.c_str(), _sound_pick(name).c_str(), 0.0f, 0.0f, 0.0f, 1.0f, volume, 1); } } static void SoundEngine_play_injection(__attribute__((unused)) unsigned char *sound_engine, std::string const& name, float x, float y, float z, __attribute__((unused)) float pitch, float volume) { - std::string source = get_source_file(); + std::string source = _sound_get_source_file(); if (source.size() > 0) { media_audio_play(source.c_str(), _sound_pick(name).c_str(), x, y, z, 1.0f, volume, 0); } @@ -108,6 +104,16 @@ static void SoundEngine_update_injection(unsigned char *sound_engine, unsigned c media_audio_update(volume, x, y, z, yaw); } +// Resolve All Sounds On Init +// SoundEngine::init Is Called After The Audio Engine Has Been Loaded +static void SoundEngine_init_injection(unsigned char *sound_engine, unsigned char *minecraft, unsigned char *options) { + // Call Original Method + (*SoundEngine_init)(sound_engine, minecraft, options); + + // Resolve Sounds + _sound_resolve_all(); +} + // Init void init_sound() { // Implement Sound Engine @@ -115,5 +121,6 @@ void init_sound() { overwrite_calls((void *) SoundEngine_playUI, (void *) SoundEngine_playUI_injection); overwrite_calls((void *) SoundEngine_play, (void *) SoundEngine_play_injection); overwrite_calls((void *) SoundEngine_update, (void *) SoundEngine_update_injection); + overwrite_calls((void *) SoundEngine_init, (void *) SoundEngine_init_injection); } } diff --git a/mods/src/sound/sound.h b/mods/src/sound/sound.h index f20c1bfa..66c0f992 100644 --- a/mods/src/sound/sound.h +++ b/mods/src/sound/sound.h @@ -2,4 +2,6 @@ #include +__attribute__((visibility("internal"))) std::string _sound_get_source_file(); +__attribute__((visibility("internal"))) void _sound_resolve_all(); __attribute__((visibility("internal"))) std::string _sound_pick(std::string sound); diff --git a/symbols/include/symbols/minecraft.h b/symbols/include/symbols/minecraft.h index 5e27d2d2..97ec0aeb 100644 --- a/symbols/include/symbols/minecraft.h +++ b/symbols/include/symbols/minecraft.h @@ -499,6 +499,9 @@ static Tesselator_color_t Tesselator_color = (Tesselator_color_t) 0x52a48; // SoundEngine +typedef void (*SoundEngine_init_t)(unsigned char *sound_engine, unsigned char *minecraft, unsigned char *options); +static SoundEngine_init_t SoundEngine_init = (SoundEngine_init_t) 0x67760; + typedef void (*SoundEngine_enable_t)(unsigned char *sound_engine, bool state); static SoundEngine_enable_t SoundEngine_enable = (SoundEngine_enable_t) 0x6776c;