#include "../stdafx.h" #include "../CGameInfo.h" #include "CDefHandler.h" #include "CCreatureHandler.h" #include "CLodHandler.h" #include #include #include #include int CCreature::getQuantityID(int quantity) { if (quantity<5) return 0; if (quantity<10) return 1; if (quantity<20) return 2; if (quantity<50) return 3; if (quantity<100) return 4; if (quantity<250) return 5; if (quantity<500) return 5; if (quantity<1000) return 6; if (quantity<4000) return 7; return 8; } void CCreatureHandler::loadCreatures() { std::string buf = CGameInfo::mainObj->bitmaph->getTextFile("ZCRTRAIT.TXT"); int andame = buf.size(); int i=0; //buf iterator int hmcr=0; for(i; i> tempi >> temps; if (tempi>=creatures.size()) break; boost::assign::insert(nameToID)(temps,tempi); creatures[tempi].nameRef=temps; } ifs.close(); ifs.clear(); for(int i=1;i<=10;i++) levelCreatures.insert(std::pair >(i,std::vector())); ifs.open("config/monsters.txt"); { while(!ifs.eof()) { int id, lvl; ifs >> id >> lvl; if(lvl>0) { creatures[id].level = lvl; levelCreatures[lvl].push_back(&(creatures[id])); } } } //loading 32x32px imgs CDefHandler *smi = CGI->spriteh->giveDef("CPRSMALL.DEF"); smi->notFreeImgs = true; for (int i=0; iourImages.size(); i++) { boost::assign::insert(smallImgs)(i-2,smi->ourImages[i].bitmap); } delete smi; smi = CGI->spriteh->giveDef("TWCRPORT.DEF"); smi->notFreeImgs = true; for (int i=0; iourImages.size(); i++) { boost::assign::insert(bigImgs)(i-2,smi->ourImages[i].bitmap); } delete smi; } void CCreatureHandler::loadAnimationInfo() { //std::string buf = CGameInfo::mainObj->bitmaph->getTextFile("CRANIM.TXT"); //int andame = buf.size(); //int i=0; //buf iterator //hmcr=0; //for(i; ispriteh->giveDef(defName); else creatures[s].battleAnimation = NULL; i+=2; } } int CCreatureAnimation::getType() const { return type; } void CCreatureAnimation::setType(int type) { this->type = type; curFrame = 0; } CCreatureAnimation::CCreatureAnimation(std::string name) { //load main file std::string data2 = CGI->spriteh->getTextFile(name); FDef = new unsigned char[data2.size()]; for(int g=0; g=amp/2) { ret = ret-amp; } return ret; } int CCreatureAnimation::nextFrame(SDL_Surface *dest, int x, int y) { if(dest->format->BytesPerPixel<3) return -1; //not enough depth int SIndex = curFrame++; //TODO: finish if(curFrame>=frames) curFrame = 0; long BaseOffset, SpriteWidth, SpriteHeight, //format sprite'a LeftMargin, RightMargin, TopMargin,BottomMargin, i, add, FullHeight,FullWidth, TotalRowLength, // dlugosc przeczytanego segmentu NextSpriteOffset, RowAdd; std::ifstream Fdef; unsigned char SegmentType, SegmentLength, BL, BR; unsigned char * TempDef; //memory std::string FTemp; i=BaseOffset=SEntries[SIndex].offset; int prSize=readNormalNr(i,4,FDef);i+=4; int defType2 = readNormalNr(i,4,FDef);i+=4; FullWidth = readNormalNr(i,4,FDef);i+=4; FullHeight = readNormalNr(i,4,FDef);i+=4; SpriteWidth = readNormalNr(i,4,FDef);i+=4; SpriteHeight = readNormalNr(i,4,FDef);i+=4; LeftMargin = readNormalNr(i,4,FDef);i+=4; TopMargin = readNormalNr(i,4,FDef);i+=4; RightMargin = FullWidth - SpriteWidth - LeftMargin; BottomMargin = FullHeight - SpriteHeight - TopMargin; BMPHeader tb; tb.x = FullWidth; tb.y = FullHeight; tb.dataSize2 = tb.dataSize1 = tb.x*tb.y; tb.fullSize = tb.dataSize1+436; tb._h3=tb.fullSize-36; //add = (int)(4*(((float)1) - ((int)(((int)((float)FullWidth/(float)4))-((float)FullWidth/(float)4))))); add = 4 - FullWidth%4; /*if (add==4) add=0;*/ //moved to defcompression dependent block //ret = SDL_CreateRGBSurface(SDL_SWSURFACE, FullWidth, FullHeight, 8, 0, 0, 0, 0); //int tempee2 = readNormalNr(0,4,((unsigned char *)tempee.c_str())); int BaseOffsetor = BaseOffset = i; if (defType2==1) //as it should be allways in creature animations { if (add==4) add=0; ////////was 3 if (TopMargin>0) { for (int i=0;i0) { for (int j=0;j=SpriteWidth) break; } BaseOffset+=SegmentLength+1;//// TotalRowLength+=SegmentLength+1; } else { for (int k=0;k0) { for (int j=0;j0) { for (int j=0;j0) { for (int i=0;ih && j+xw && i+y>=0 && j+x>=0) { unsigned char coln = FTemp[i*(FullWidth+add)+j]; //number of color from palette if(coln==0) continue; unsigned char* ptr = ((unsigned char*)dest->pixels + dest->format->BytesPerPixel * ((i + y)*dest->w + j + x)); if(coln>7 || coln == 5) //normal or yellow border { *ptr = palette[coln].B; *(ptr+1) = palette[coln].G; *(ptr+2) = palette[coln].R; } else if(coln<5) //shadow { *ptr = ((*ptr) * (palette[coln].G + 50)) /200; *(ptr+1) = ((*(ptr+1)) * (palette[coln].G + 50)) /200 ; *(ptr+2) = ((*(ptr+2)) * (palette[coln].G + 50)) /200 ; } else if(coln == 6) //yellow border shadowed { *ptr = ((*ptr) + palette[coln-1].B) / 2; *(ptr+1) = ((*(ptr+1)) + palette[coln-1].G) / 2; *(ptr+2) = ((*(ptr+2)) + palette[coln-1].R) / 2; } } } } SDL_UpdateRect(dest, x, y, FullWidth+add, FullHeight); return 0; }