diff options
Diffstat (limited to 'src/loader.c')
-rw-r--r-- | src/loader.c | 64 |
1 files changed, 52 insertions, 12 deletions
diff --git a/src/loader.c b/src/loader.c index f780ae9..fdf2a6e 100644 --- a/src/loader.c +++ b/src/loader.c @@ -6,25 +6,64 @@ int loadSprite(SDL_Renderer *rend, char *giffilepath, int frames, sprite_t *sprite); int loadSurface(SDL_Renderer *rend, char *giffilepath, SDL_Surface **surf); -int loadStyleRes(SDL_Renderer *rend, gameIni_t *gIni, char data_basepath[], gameRess_t *gRess) { +int loadLevel(char data_basepath[], char packId[], char levelId[], gameIni_t *gIni) { + int res; + char filepath[MAX_PATH_LEN]; + + SDL_strlcpy(gIni->data_basepath, data_basepath, MAX_PATH_LEN); + + SDL_snprintf(filepath, MAX_PATH_LEN, "%s/level/%s/levelpack.ini", data_basepath, packId); + res=loadIni(ini_levelpack, filepath, gIni); + if (res!=0) return res; + + SDL_strlcpy(gIni->levelPack.id, packId, MAX_NAMELEN); + + SDL_snprintf(filepath, MAX_PATH_LEN, "%s/level/%s/%s.ini", gIni->data_basepath, packId, levelId); + res=loadIni(ini_level, filepath, gIni); + if (res!=0) return res; + + // Check if we found a "style =" line in level ini file + MPL_CHECK( + gIni->level.style[0] != '\0', + { return 10; }, + SDL_LOG_PRIORITY_CRITICAL, + "No valid style detected in level ini file" + ); + + // Loading style ini file + SDL_snprintf(filepath, MAX_PATH_LEN, "%s/style/%s/%s.ini", gIni->data_basepath, gIni->level.style, gIni->level.style); + res=loadIni(ini_style, filepath, gIni); + if (res!=0) return res; + + + return 0; +} + + +void unloadLevel(gameIni_t *gIni, gameRess_t *gRess) { + //FIXME Not yet implemented +} + +/* Load all textures needed for style from gIni */ +int loadStyleRes(SDL_Renderer *rend, gameIni_t *gIni, gameRess_t *gRess) { int i, res; char filepath[MAX_PATH_LEN+1]; char *stylename=gIni->level.style; for(i=0; i < gIni->style.tiles; i++) { - (void) SDL_snprintf(filepath, MAX_PATH_LEN, "%s/style/%s/%s_%d.gif", data_basepath, stylename, stylename, i); + (void) SDL_snprintf(filepath, MAX_PATH_LEN, "%s/style/%s/%s_%d.gif", gIni->data_basepath, stylename, stylename, i); res=loadSurface(rend,filepath,&gRess->tiles[i]); if (res != 0) return res; } for(i=0; i < gIni->style.objectCount; i++) { - (void) SDL_snprintf(filepath, MAX_PATH_LEN, "%s/style/%s/%so_%d.gif", data_basepath, stylename, stylename, i); + (void) SDL_snprintf(filepath, MAX_PATH_LEN, "%s/style/%s/%so_%d.gif", gIni->data_basepath, stylename, stylename, i); res=loadSprite(rend,filepath,gIni->style.frames[i],&gRess->objects[i]); if (res != 0) return res; /* Some object types needs a mask */ if ( gIni->style.type[i] >= 5 && gIni->style.type[i] <= 8 ) { - (void) SDL_snprintf(filepath, MAX_PATH_LEN, "%s/style/%s/%som_%d.gif", data_basepath, stylename, stylename, i); + (void) SDL_snprintf(filepath, MAX_PATH_LEN, "%s/style/%s/%som_%d.gif", gIni->data_basepath, stylename, stylename, i); res=loadSurface(rend,filepath,&gRess->objectMasks[i]); if (res != 0) return res; } @@ -46,7 +85,8 @@ void unloadStyleRes(gameRess_t *gRess) { } } -int loadMiscRes(SDL_Renderer *rend, char data_basepath[], gameRess_t *gRess) { +/* Load all misc textures (lemmings, fonts, cursor...) */ +int loadMiscRes(SDL_Renderer *rend, gameIni_t *gIni, gameRess_t *gRess) { int lemmanim_frames[MAX_LEMMANIM_COUNT] = {8,4,8,8,10,16,16,16,14,8,16,16,8,16,32,24,4}; int lemmanim_hasmask[6] = {6,10,11,13,14,15}; @@ -56,38 +96,38 @@ int loadMiscRes(SDL_Renderer *rend, char data_basepath[], gameRess_t *gRess) { int i,ii,res; for(i=0; i<MAX_LEMMANIM_COUNT; i++) { - (void) SDL_snprintf(filepath, MAX_PATH_LEN, "%s/misc/lemm_%d.gif", data_basepath, i); + (void) SDL_snprintf(filepath, MAX_PATH_LEN, "%s/misc/lemm_%d.gif", gIni->data_basepath, i); res=loadSprite(rend,filepath,lemmanim_frames[i],&gRess->lemmingAnims[i]); if (res != 0) return res; } for(ii=0; ii<6; ii++) { i=lemmanim_hasmask[ii]; - (void) SDL_snprintf(filepath, MAX_PATH_LEN, "%s/misc/mask_%d.gif", data_basepath, i); + (void) SDL_snprintf(filepath, MAX_PATH_LEN, "%s/misc/mask_%d.gif", gIni->data_basepath, i); res=loadSurface(rend,filepath,&gRess->lemmingMasks[i]); if (res != 0) return res; } for(ii=0; ii<3; ii++) { i=lemmanim_hasimask[ii]; - (void) SDL_snprintf(filepath, MAX_PATH_LEN, "%s/misc/imask_%d.gif", data_basepath, i); + (void) SDL_snprintf(filepath, MAX_PATH_LEN, "%s/misc/imask_%d.gif", gIni->data_basepath, i); res=loadSurface(rend,filepath,&gRess->lemmingIMasks[i]); if (res != 0) return res; } - (void) SDL_snprintf(filepath, MAX_PATH_LEN, "%s/misc/cursor.gif", data_basepath); + (void) SDL_snprintf(filepath, MAX_PATH_LEN, "%s/misc/cursor.gif", gIni->data_basepath); res=loadSprite(rend,filepath,8,&gRess->cursor); if (res != 0) return res; - (void) SDL_snprintf(filepath, MAX_PATH_LEN, "%s/misc/countdown.gif", data_basepath); + (void) SDL_snprintf(filepath, MAX_PATH_LEN, "%s/misc/countdown.gif", gIni->data_basepath); res=loadSprite(rend,filepath,5,&gRess->countdown); if (res != 0) return res; - (void) SDL_snprintf(filepath, MAX_PATH_LEN, "%s/misc/lemmfont.gif", data_basepath); + (void) SDL_snprintf(filepath, MAX_PATH_LEN, "%s/misc/lemmfont.gif", gIni->data_basepath); res=loadSprite(rend,filepath,94,&gRess->font1); if (res != 0) return res; - (void) SDL_snprintf(filepath, MAX_PATH_LEN, "%s/misc/lemmfont2.gif", data_basepath); + (void) SDL_snprintf(filepath, MAX_PATH_LEN, "%s/misc/lemmfont2.gif", gIni->data_basepath); res=loadSprite(rend,filepath,94,&gRess->font2); if (res != 0) return res; |