diff --git a/src/lephisto.c b/src/lephisto.c index 3d6e900..95865f2 100644 --- a/src/lephisto.c +++ b/src/lephisto.c @@ -160,8 +160,12 @@ int main(int argc, char** argv) { if(ai_init()) WARN("Error initializing AI"); - /* Misc openGL init stuff. */ - nebu_init(); /* Init the nebulae. */ + /* Misc graphics init stuff. */ + if(nebu_init() != 0) { /* Init the nebulae. */ + /* An error happened. */ + ERR("Unable to init the Nebulae subsystem!"); + /* Weirdness will accur. */ + } gl_fontInit(NULL, NULL, FONT_SIZE); /* Init default font size. */ gl_fontInit(&gl_smallFont, NULL, FONT_SIZE_SMALL); /* Small font. */ gui_init(); /* Init the GUI crap. */ diff --git a/src/nebulae.c b/src/nebulae.c index dfd5754..5c0d056 100644 --- a/src/nebulae.c +++ b/src/nebulae.c @@ -51,18 +51,19 @@ static int nebu_npuffs = 0; static int nebu_checkCompat(const char* file); static void nebu_loadTexture(SDL_Surface* sur, int w, int h, GLuint tex); -static void nebu_generate(void); +static int nebu_generate(void); static void nebu_generatePuffs(void); -static void saveNebulae(float* map, const uint32_t w, const uint32_t h, +static int saveNebulae(float* map, const uint32_t w, const uint32_t h, const char* file); static SDL_Surface* loadNebulae(const char* file); static SDL_Surface* nebu_surfaceFromNebulaeMap(float* map, const int w, const int h); /* Initialize the nebulae. */ -void nebu_init(void) { +int nebu_init(void) { int i; char nebu_file[PATH_MAX]; SDL_Surface* nebu_sur; + int ret; /* Special code to regenerate the nebulae. */ if((nebu_w == -9) && (nebu_h == -9)) @@ -85,9 +86,11 @@ void nebu_init(void) { LOG("No nebulae found, generating (this may take a while)."); /* So we generate and reload. */ - nebu_generate(); - nebu_init(); - return; + ret = nebu_generate(); + if(ret != 0) /* An error has happened - break recursivity. */ + return ret; + + return nebu_init(); } /* Load the file. */ @@ -101,6 +104,7 @@ void nebu_init(void) { } DEBUG("Loaded %d Nebulae Layers", NEBULAE_Z); + return 0; } /* Load sur into tex, check for expected size of w and h. */ @@ -412,11 +416,12 @@ void nebu_forceGenerate(void) { } /* Generate the nebulae. */ -static void nebu_generate(void) { +static int nebu_generate(void) { int i; float* nebu; char nebu_file[PATH_MAX]; int w, h; + int ret; w = SCREEN_W; h = SCREEN_H; @@ -428,11 +433,13 @@ static void nebu_generate(void) { /* Save each nebulae as an image. */ for(i = 0; i < NEBULAE_Z; i++) { snprintf(nebu_file, PATH_MAX, NEBULAE_PATH_BG, w, h, i); - saveNebulae(&nebu[i*w*h], w, h, nebu_file); + ret = saveNebulae(&nebu[i*w*h], w, h, nebu_file); + if(ret != 0) break; /* An error has happened. */ } /* Cleanup. */ free(nebu); + return ret; } /* Generate the nebulae puffs. */ @@ -463,21 +470,25 @@ static int nebu_checkCompat(const char* file) { } /* Save a nebulae. */ -static void saveNebulae(float* map, const uint32_t w, const uint32_t h, +static int saveNebulae(float* map, const uint32_t w, const uint32_t h, const char* file) { char file_path[PATH_MAX]; SDL_Surface* sur; + int ret; /* Fix surface. */ sur = nebu_surfaceFromNebulaeMap(map, w, h); /* Save. */ + ret = 0; snprintf(file_path, PATH_MAX, "%s%s", lfile_basePath(), file); - SDL_savePNG(sur, file_path); + ret = SDL_savePNG(sur, file_path); /* Cleanup. */ SDL_FreeSurface(sur); + + return ret; } /* Load the nebulae from file. */ diff --git a/src/nebulae.h b/src/nebulae.h index c752db4..a17ec25 100644 --- a/src/nebulae.h +++ b/src/nebulae.h @@ -1,7 +1,7 @@ #pragma once /* Init/Exit. */ -void nebu_init(void); +int nebu_init(void); void nebu_exit(void); /* Render. */