LoadedSpriteBank *GraphicsManager::loadBankForAnim(int ID) { // Check if already exist LoadedSpriteBanks::iterator it; for (it = _allLoadedBanks.begin(); it != _allLoadedBanks.end(); ++it) { if ((*it)->ID == ID) { return (*it); } } // Else create a new sprite bank LoadedSpriteBank *returnMe = new LoadedSpriteBank; if (checkNew(returnMe)) { returnMe->ID = ID; if (loadSpriteBank(ID, returnMe->bank, false)) { returnMe->timesUsed = 0; debugC(3, kSludgeDebugDataLoad, "loadBankForAnim: New sprite bank created OK"); _allLoadedBanks.push_back(returnMe); return returnMe; } else { debugC(3, kSludgeDebugDataLoad, "loadBankForAnim: I guess I couldn't load the sprites..."); return nullptr; } } else return nullptr; }
/** * Load Animation */ void AnimationManager::loadAnim(const Common::String &animName) { clearAnim(); Common::String filename = animName + ".ANI"; Common::File f; if (!f.open(filename)) error("Failed to open %s", filename.c_str()); int filesize = f.size(); int nbytes = filesize - 115; char header[10]; char dummyBuf[15]; char filename1[15]; char filename2[15]; char filename3[15]; char filename4[15]; char filename5[15]; char filename6[15]; f.read(header, 10); f.read(dummyBuf, 15); f.read(filename1, 15); f.read(filename2, 15); f.read(filename3, 15); f.read(filename4, 15); f.read(filename5, 15); f.read(filename6, 15); if (READ_BE_UINT32(header) != MKTAG('A', 'N', 'I', 'S')) error("Invalid animation File: %s", filename.c_str()); const char *files[6] = { &filename1[0], &filename2[0], &filename3[0], &filename4[0], &filename5[0], &filename6[0] }; for (int idx = 0; idx <= 5; ++idx) { if (files[idx][0]) { if (!f.exists(files[idx])) error("Missing file %s in animation File: %s", files[idx], filename.c_str()); if (loadSpriteBank(idx + 1, files[idx])) error("Invalid sprite bank in animation File: %s", filename.c_str()); } } byte *data = _vm->_globals->allocMemory(nbytes + 1); f.read(data, nbytes); f.close(); for (int idx = 1; idx <= 20; ++idx) searchAnim(data, idx, nbytes); _vm->_globals->freeMemory(data); }
bool loadFont (int filenum, const char * charOrder, int h) { int a=0; uint32_t c; delete [] fontOrderString; fontOrderString = copyString(charOrder); forgetSpriteBank (theFont); loadedFontNum = filenum; fontTableSize = 0; while (charOrder[a]) { c = u8_nextchar(charOrder, &a); if (c > fontTableSize) fontTableSize = c; } fontTableSize++; delete [] fontTable; fontTable = new uint32_t [fontTableSize]; if (! checkNew (fontTable)) return false; for (a = 0; a < fontTableSize; a ++) { fontTable[a] = 0; } a=0; int i=0; while (charOrder[a]) { c = u8_nextchar(charOrder, &a); fontTable[c] = i; i++; } if (! loadSpriteBank (filenum, theFont, true)) { fatal ("Can't load font"); return false; } numFontColours = theFont.myPalette.total; fontHeight = h; return true; }