Fixes and replasing simple messegeboxed with crash()

This commit is contained in:
DepressedTWM 2026-05-27 23:47:38 +04:00
parent 50edfe0e12
commit c0c0e4d8ba
2 changed files with 22 additions and 30 deletions

View file

@ -149,10 +149,6 @@ static void mriBindingInit(){
rb_gv_set("BTEST", rb_bool_new(shState->config().editor.battleTest)); rb_gv_set("BTEST", rb_bool_new(shState->config().editor.battleTest));
} }
static void showMsg(const std::string &msg){
shState->eThread().showMessageBox(msg.c_str());
}
static void printP(int argc, VALUE *argv, const char *convMethod, const char *sep){ static void printP(int argc, VALUE *argv, const char *convMethod, const char *sep){
VALUE dispString = rb_str_buf_new(128); VALUE dispString = rb_str_buf_new(128);
ID conv = rb_intern(convMethod); ID conv = rb_intern(convMethod);
@ -165,7 +161,7 @@ static void printP(int argc, VALUE *argv, const char *convMethod, const char *se
rb_str_buf_cat2(dispString, sep); rb_str_buf_cat2(dispString, sep);
} }
showMsg(RSTRING_PTR(dispString)); shState->eThread().showMessageBox(RSTRING_PTR(dispString));
} }
RB_METHOD(mriPrint){ RB_METHOD(mriPrint){
@ -332,14 +328,15 @@ static VALUE evalString(VALUE string, VALUE filename, int *state){
static void runCustomScript(const std::string &filename){ static void runCustomScript(const std::string &filename){
std::string scriptData; std::string scriptData;
char msg[1024];
if (!readFileSDL(filename.c_str(), scriptData)){ if (!readFileSDL(filename.c_str(), scriptData)){
showMsg(std::string("Unable to open '") + filename + "'"); snprintf(msg, sizeof msg, "Unable to open %s", filename);
crash(msg);
return; return;
} }
evalString(newStringUTF8(scriptData.c_str(), scriptData.size()), evalString(newStringUTF8(scriptData.c_str(), scriptData.size()), newStringUTF8(filename.c_str(), filename.size()), NULL);
newStringUTF8(filename.c_str(), filename.size()), NULL);
} }
VALUE kernelLoadDataInt(const char *filename, bool rubyExc); VALUE kernelLoadDataInt(const char *filename, bool rubyExc);
@ -354,14 +351,11 @@ struct BacktraceData{
static void runRMXPScripts(BacktraceData &btData){ static void runRMXPScripts(BacktraceData &btData){
const Config &conf = shState->rtData().config; const Config &conf = shState->rtData().config;
const std::string &scriptPack = conf.game.scripts; const std::string &scriptPack = conf.game.scripts;
char msg[512];
if (scriptPack.empty()){
showMsg("No game scripts specified (missing Game.ini?)");
return;
}
if (!shState->fileSystem().exists(scriptPack.c_str())){ if (!shState->fileSystem().exists(scriptPack.c_str())){
showMsg("Unable to open '" + scriptPack + "'"); snprintf(msg, sizeof msg, "Unable to open '%s'", scriptPack.c_str());
crash(msg);
return; return;
} }
@ -373,12 +367,13 @@ static void runRMXPScripts(BacktraceData &btData){
scriptArray = kernelLoadDataInt(scriptPack.c_str(), false); scriptArray = kernelLoadDataInt(scriptPack.c_str(), false);
printf("[runRMXPScripts] %s\n", scriptPack.c_str()); printf("[runRMXPScripts] %s\n", scriptPack.c_str());
}catch (const Exception &e){ }catch (const Exception &e){
showMsg(std::string("Failed to read script data: ") + e.msg); snprintf(msg, sizeof msg, "Failed to read script data: %s", e.msg);
crash(msg);
return; return;
} }
if (!RB_TYPE_P(scriptArray, RUBY_T_ARRAY)){ if (!RB_TYPE_P(scriptArray, RUBY_T_ARRAY)){
showMsg("Failed to read script data"); crash("Failed to read script data");
return; return;
} }
@ -429,7 +424,7 @@ static void runRMXPScripts(BacktraceData &btData){
if (result != Z_OK){ if (result != Z_OK){
static char buffer[256]; static char buffer[256];
snprintf(buffer, sizeof(buffer), "Error decoding script %ld: '%s'\n", i, RSTRING_PTR(scriptName)); snprintf(buffer, sizeof(buffer), "Error decoding script %ld: '%s'\n", i, RSTRING_PTR(scriptName));
showMsg(buffer); crash(buffer);
break; break;
} }

View file

@ -98,6 +98,7 @@ int rgssThreadFun(void *userdata){
initGLFunctions(); initGLFunctions();
} }
catch (const Exception &exc){ catch (const Exception &exc){
crash(exc.msg.c_str());
rgssThreadError(threadData, exc.msg); rgssThreadError(threadData, exc.msg);
SDL_GL_DestroyContext(glCtx); SDL_GL_DestroyContext(glCtx);
return 0; return 0;
@ -129,7 +130,6 @@ int rgssThreadFun(void *userdata){
crash("Error creating OpenAL context"); crash("Error creating OpenAL context");
rgssThreadError(threadData, "Error creating OpenAL context"); rgssThreadError(threadData, "Error creating OpenAL context");
SDL_GL_DestroyContext(glCtx); SDL_GL_DestroyContext(glCtx);
return 0; return 0;
} }
@ -138,6 +138,7 @@ int rgssThreadFun(void *userdata){
try{ try{
SharedState::initInstance(threadData); SharedState::initInstance(threadData);
}catch (const Exception &exc){ }catch (const Exception &exc){
crash(exc.msg.c_str());
rgssThreadError(threadData, exc.msg); rgssThreadError(threadData, exc.msg);
alcDestroyContext(alcCtx); alcDestroyContext(alcCtx);
SDL_GL_DestroyContext(glCtx); SDL_GL_DestroyContext(glCtx);
@ -160,7 +161,6 @@ int rgssThreadFun(void *userdata){
} }
static void showInitError(const std::string &msg){ static void showInitError(const std::string &msg){
Debug() << msg;
SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, "Error :(", msg.c_str(), 0); SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, "Error :(", msg.c_str(), 0);
} }
@ -194,7 +194,7 @@ static void setGamePathInRegistry() {
long keyCreateError = RegCreateKeyEx(HKEY_CURRENT_USER, TEXT("Software\\OneShot\\"), 0L, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &key, NULL); long keyCreateError = RegCreateKeyEx(HKEY_CURRENT_USER, TEXT("Software\\OneShot\\"), 0L, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &key, NULL);
if (keyCreateError != ERROR_SUCCESS){ if (keyCreateError != ERROR_SUCCESS){
showInitError("Unable to create key in registry."); crash("Unable to create key in registry.");
} }
else { else {
keyOpenError = ERROR_SUCCESS; keyOpenError = ERROR_SUCCESS;
@ -202,7 +202,7 @@ static void setGamePathInRegistry() {
} }
if (keyOpenError != ERROR_SUCCESS){ if (keyOpenError != ERROR_SUCCESS){
showInitError("Unable to open registry."); crash("Unable to open registry.");
} }
else { else {
DWORD dataSize = (strlen(dataDir) + 1) * sizeof(char); DWORD dataSize = (strlen(dataDir) + 1) * sizeof(char);
@ -211,12 +211,11 @@ static void setGamePathInRegistry() {
} }
RegCloseKey(key); RegCloseKey(key);
} }
//SDL_free(dataDir); // not needed in sdl3
} }
#endif #endif
//TODO handle this for Linux/Mac //TODO handle this for Linux/Mac
} }
int main(int argc, char *argv[]){ int main(int argc, char *argv[]){
char msg[512]; char msg[512];
loadLanguageMetadata(); //there will be a segfault on fclose if I don't move it here loadLanguageMetadata(); //there will be a segfault on fclose if I don't move it here
@ -281,7 +280,8 @@ int main(int argc, char *argv[]){
if (!conf.gameFolder.empty()) if (!conf.gameFolder.empty())
if (chdir(conf.gameFolder.c_str()) != 0){ if (chdir(conf.gameFolder.c_str()) != 0){
showInitError(std::string("Unable to switch into gameFolder ") + conf.gameFolder); snprintf(msg, sizeof msg, "Unable to switch into gameFolder %s", conf.gameFolder);
crash(msg);
return 0; return 0;
} }
@ -296,7 +296,6 @@ int main(int argc, char *argv[]){
snprintf(msg, sizeof msg, "Error initializing SDL_ttf: %s", SDL_GetError()); snprintf(msg, sizeof msg, "Error initializing SDL_ttf: %s", SDL_GetError());
crash(msg); crash(msg);
SDL_Quit(); SDL_Quit();
return 0; return 0;
} }
@ -355,8 +354,7 @@ int main(int argc, char *argv[]){
#ifndef STEAM #ifndef STEAM
/* Add controller bindings from embedded controller DB */ /* Add controller bindings from embedded controller DB */
SDL_IOStream *controllerDB = SDL_IOFromConstMem(assets_gamecontrollerdb_txt, SDL_IOStream *controllerDB = SDL_IOFromConstMem(assets_gamecontrollerdb_txt, assets_gamecontrollerdb_txt_len);
assets_gamecontrollerdb_txt_len);
SDL_AddGamepadMappingsFromIO(controllerDB, 1); SDL_AddGamepadMappingsFromIO(controllerDB, 1);
#endif #endif
@ -396,8 +394,7 @@ int main(int argc, char *argv[]){
SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, conf.windowTitle.c_str(), "The RGSS script seems to be stuck and OneShot: Sunshine will now force quit", win); SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, conf.windowTitle.c_str(), "The RGSS script seems to be stuck and OneShot: Sunshine will now force quit", win);
if (!rtData.rgssErrorMsg.empty()){ if (!rtData.rgssErrorMsg.empty()){
Debug() << rtData.rgssErrorMsg; crash(rtData.rgssErrorMsg.c_str());
SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, conf.windowTitle.c_str(), rtData.rgssErrorMsg.c_str(), win);
} }
/* Clean up any remainin events */ /* Clean up any remainin events */