mirror of
https://github.com/vcmi/vcmi.git
synced 2025-11-27 22:49:25 +02:00
Show message box when H3 data is missing
This commit is contained in:
@@ -261,19 +261,12 @@ int main(int argc, char * argv[])
|
|||||||
if (CResourceHandler::get()->existsResource(ResourceID(filename)))
|
if (CResourceHandler::get()->existsResource(ResourceID(filename)))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
logGlobal->error("Error: %s was not found!", message);
|
handleFatalError(message, false);
|
||||||
return false;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
if (!testFile("DATA/HELP.TXT", "Heroes III data") ||
|
testFile("DATA/HELP.TXT", "VCMI requires Heroes III: Shadow of Death or Heroes III: Complete data files to run!");
|
||||||
!testFile("MODS/VCMI/MOD.JSON", "VCMI data"))
|
testFile("MODS/VCMI/MOD.JSON", "VCMI installation is corrupted! Built-in mod was not found!");
|
||||||
{
|
testFile("DATA/TENTCOLR.TXT", "Heroes III: Restoration of Erathia (including HD Edition) data files are not supported!");
|
||||||
exit(1); // These are unrecoverable errors
|
|
||||||
}
|
|
||||||
|
|
||||||
// these two are optional + some installs have them on CD and not in data directory
|
|
||||||
testFile("VIDEO/GOOD1A.SMK", "campaign movies");
|
|
||||||
testFile("SOUNDS/G1A.WAV", "campaign music"); //technically not a music but voiced intro sounds
|
|
||||||
|
|
||||||
srand ( (unsigned int)time(nullptr) );
|
srand ( (unsigned int)time(nullptr) );
|
||||||
|
|
||||||
@@ -512,12 +505,17 @@ void handleQuit(bool ask)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void handleFatalError(const std::string & message)
|
void handleFatalError(const std::string & message, bool terminate)
|
||||||
{
|
{
|
||||||
logGlobal->error("FATAL ERROR ENCOUTERED, VCMI WILL NOW TERMINATE");
|
logGlobal->error("FATAL ERROR ENCOUTERED, VCMI WILL NOW TERMINATE");
|
||||||
logGlobal->error("Reason: %s", message);
|
logGlobal->error("Reason: %s", message);
|
||||||
|
|
||||||
SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, "Fatal error", message.c_str(), nullptr);
|
std::string messageToShow = "Fatal error! " + message;
|
||||||
|
|
||||||
throw std::runtime_error(message);
|
SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, "Fatal error!", messageToShow.c_str(), nullptr);
|
||||||
|
|
||||||
|
if (terminate)
|
||||||
|
throw std::runtime_error(message);
|
||||||
|
else
|
||||||
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,4 +24,4 @@ void handleQuit(bool ask = true);
|
|||||||
|
|
||||||
/// Notify user about encoutered fatal error and terminate the game
|
/// Notify user about encoutered fatal error and terminate the game
|
||||||
/// TODO: decide on better location for this method
|
/// TODO: decide on better location for this method
|
||||||
[[noreturn]] void handleFatalError(const std::string & message);
|
[[noreturn]] void handleFatalError(const std::string & message, bool terminate);
|
||||||
|
|||||||
@@ -88,7 +88,7 @@ SDL_Surface * CSDL_Ext::newSurface(int w, int h, SDL_Surface * mod) //creates ne
|
|||||||
std::string messagePattern = "Failed to create SDL Surface of size %d x %d, %d bpp. Reason: %s";
|
std::string messagePattern = "Failed to create SDL Surface of size %d x %d, %d bpp. Reason: %s";
|
||||||
std::string message = boost::str(boost::format(messagePattern) % w % h % mod->format->BitsPerPixel % error);
|
std::string message = boost::str(boost::format(messagePattern) % w % h % mod->format->BitsPerPixel % error);
|
||||||
|
|
||||||
handleFatalError(message);
|
handleFatalError(message, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mod->format->palette)
|
if (mod->format->palette)
|
||||||
|
|||||||
@@ -271,7 +271,7 @@ void ScreenHandler::initializeWindow()
|
|||||||
std::string messagePattern = "Failed to create SDL Window of size %d x %d. Reason: %s";
|
std::string messagePattern = "Failed to create SDL Window of size %d x %d. Reason: %s";
|
||||||
std::string message = boost::str(boost::format(messagePattern) % dimensions.x % dimensions.y % error);
|
std::string message = boost::str(boost::format(messagePattern) % dimensions.x % dimensions.y % error);
|
||||||
|
|
||||||
handleFatalError(message);
|
handleFatalError(message, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
//create first available renderer if preferred not set. Use no flags, so HW accelerated will be preferred but SW renderer also will possible
|
//create first available renderer if preferred not set. Use no flags, so HW accelerated will be preferred but SW renderer also will possible
|
||||||
|
|||||||
Reference in New Issue
Block a user