Graphics.cpp 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469
  1. #include "../stdafx.h"
  2. #include "Graphics.h"
  3. #include "../hch/CDefHandler.h"
  4. #include "../hch/CObjectHandler.h"
  5. #include "../SDL_Extensions.h"
  6. using namespace CSDL_Ext;
  7. Graphics * graphics = NULL;
  8. SDL_Surface * Graphics::drawPrimarySkill(const CGHeroInstance *curh, SDL_Surface *ret, int from, int to)
  9. {
  10. char * buf = new char[10];
  11. for (int i=from;i<to;i++)
  12. {
  13. itoa(curh->primSkills[i],buf,10);
  14. printAtMiddle(buf,84+28*i,68,GEOR13,zwykly,ret);
  15. }
  16. delete[] buf;
  17. return ret;
  18. }
  19. SDL_Surface * Graphics::drawHeroInfoWin(const CGHeroInstance * curh)
  20. {
  21. char * buf = new char[10];
  22. SDL_Surface * ret = SDL_DisplayFormat(hInfo);
  23. blueToPlayersAdv(hInfo,curh->tempOwner,1);
  24. SDL_SetColorKey(ret,SDL_SRCCOLORKEY,SDL_MapRGB(ret->format,0,255,255));
  25. printAt(curh->name,75,15,GEOR13,zwykly,ret);
  26. drawPrimarySkill(curh, ret);
  27. for (std::map<int,std::pair<CCreature*,int> >::const_iterator i=curh->army.slots.begin(); i!=curh->army.slots.end();i++)
  28. {
  29. blitAt(graphics->smallImgs[(*i).second.first->idNumber],slotsPos[(*i).first].first+1,slotsPos[(*i).first].second+1,ret);
  30. itoa((*i).second.second,buf,10);
  31. printAtMiddle(buf,slotsPos[(*i).first].first+17,slotsPos[(*i).first].second+39,GEORM,zwykly,ret);
  32. }
  33. blitAt(graphics->portraitLarge[curh->subID],11,12,ret);
  34. itoa(curh->mana,buf,10);
  35. printAtMiddle(buf,166,109,GEORM,zwykly,ret); //mana points
  36. delete[] buf;
  37. blitAt(morale22->ourImages[curh->getCurrentMorale()+3].bitmap,14,84,ret);
  38. blitAt(luck22->ourImages[curh->getCurrentLuck()+3].bitmap,14,101,ret);
  39. //SDL_SaveBMP(ret,"inf1.bmp");
  40. return ret;
  41. }
  42. SDL_Surface * Graphics::drawTownInfoWin(const CGTownInstance * curh)
  43. {
  44. char * buf = new char[10];
  45. blueToPlayersAdv(tInfo,curh->tempOwner,1);
  46. SDL_Surface * ret = SDL_DisplayFormat(tInfo);
  47. SDL_SetColorKey(ret,SDL_SRCCOLORKEY,SDL_MapRGB(ret->format,0,255,255));
  48. printAt(curh->name,75,15,GEOR13,zwykly,ret);
  49. int pom = curh->fortLevel() - 1; if(pom<0) pom = 3;
  50. blitAt(forts->ourImages[pom].bitmap,115,42,ret);
  51. if((pom=curh->hallLevel())>=0)
  52. blitAt(halls->ourImages[pom].bitmap,77,42,ret);
  53. itoa(curh->dailyIncome(),buf,10);
  54. printAtMiddle(buf,167,70,GEORM,zwykly,ret);
  55. for (std::map<int,std::pair<CCreature*,int> >::const_iterator i=curh->army.slots.begin(); i!=curh->army.slots.end();i++)
  56. {
  57. if(!i->second.first)
  58. continue;
  59. blitAt(graphics->smallImgs[(*i).second.first->idNumber],slotsPos[(*i).first].first+1,slotsPos[(*i).first].second+1,ret);
  60. itoa((*i).second.second,buf,10);
  61. printAtMiddle(buf,slotsPos[(*i).first].first+17,slotsPos[(*i).first].second+39,GEORM,zwykly,ret);
  62. }
  63. //blit town icon
  64. pom = curh->subID*2;
  65. if (!curh->hasFort())
  66. pom += F_NUMBER*2;
  67. if(curh->builded >= MAX_BUILDING_PER_TURN)
  68. pom++;
  69. blitAt(bigTownPic->ourImages[pom].bitmap,13,13,ret);
  70. delete[] buf;
  71. return ret;
  72. }
  73. Graphics::Graphics()
  74. {
  75. artDefs = CDefHandler::giveDef("ARTIFACT.DEF");
  76. hInfo = BitmapHandler::loadBitmap("HEROQVBK.bmp");
  77. SDL_SetColorKey(hInfo,SDL_SRCCOLORKEY,SDL_MapRGB(hInfo->format,0,255,255));
  78. tInfo = BitmapHandler::loadBitmap("TOWNQVBK.bmp");
  79. SDL_SetColorKey(tInfo,SDL_SRCCOLORKEY,SDL_MapRGB(tInfo->format,0,255,255));
  80. slotsPos.push_back(std::pair<int,int>(44,82));
  81. slotsPos.push_back(std::pair<int,int>(80,82));
  82. slotsPos.push_back(std::pair<int,int>(116,82));
  83. slotsPos.push_back(std::pair<int,int>(26,131));
  84. slotsPos.push_back(std::pair<int,int>(62,131));
  85. slotsPos.push_back(std::pair<int,int>(98,131));
  86. slotsPos.push_back(std::pair<int,int>(134,131));
  87. luck22 = CDefHandler::giveDefEss("ILCK22.DEF");
  88. luck30 = CDefHandler::giveDefEss("ILCK30.DEF");
  89. luck42 = CDefHandler::giveDefEss("ILCK42.DEF");
  90. luck82 = CDefHandler::giveDefEss("ILCK82.DEF");
  91. morale22 = CDefHandler::giveDefEss("IMRL22.DEF");
  92. morale30 = CDefHandler::giveDefEss("IMRL30.DEF");
  93. morale42 = CDefHandler::giveDefEss("IMRL42.DEF");
  94. morale82 = CDefHandler::giveDefEss("IMRL82.DEF");
  95. halls = CDefHandler::giveDefEss("ITMTLS.DEF");
  96. forts = CDefHandler::giveDefEss("ITMCLS.DEF");
  97. bigTownPic = CDefHandler::giveDefEss("ITPT.DEF");
  98. std::ifstream ifs;
  99. ifs.open("config/cr_bgs.txt");
  100. while(!ifs.eof())
  101. {
  102. int id;
  103. std::string name;
  104. ifs >> id >> name;
  105. backgrounds[id]=BitmapHandler::loadBitmap(name);
  106. }
  107. ifs.close();
  108. ifs.clear();
  109. //loading 32x32px imgs
  110. CDefHandler *smi = CDefHandler::giveDef("CPRSMALL.DEF");
  111. smi->notFreeImgs = true;
  112. for (int i=0; i<smi->ourImages.size(); i++)
  113. {
  114. smallImgs[i-2] = smi->ourImages[i].bitmap;
  115. }
  116. delete smi;
  117. smi = CDefHandler::giveDef("TWCRPORT.DEF");
  118. smi->notFreeImgs = true;
  119. for (int i=0; i<smi->ourImages.size(); i++)
  120. {
  121. bigImgs[i-2] = smi->ourImages[i].bitmap;
  122. }
  123. delete smi;
  124. std::ifstream of("config/portrety.txt");
  125. for (int j=0;j<HEROES_QUANTITY;j++)
  126. {
  127. int ID;
  128. of>>ID;
  129. std::string path;
  130. of>>path;
  131. portraitSmall.push_back(BitmapHandler::loadBitmap(path));
  132. //if (!heroes[ID]->portraitSmall)
  133. // std::cout<<"Can't read small portrait for "<<ID<<" ("<<path<<")\n";
  134. for(int ff=0; ff<path.size(); ++ff) //size letter is usually third one, but there are exceptions an it should fix the problem
  135. {
  136. if(path[ff]=='S')
  137. {
  138. path[ff]='L';
  139. break;
  140. }
  141. }
  142. portraitLarge.push_back(BitmapHandler::loadBitmap(path));
  143. //if (!heroes[ID]->portraitLarge)
  144. // std::cout<<"Can't read large portrait for "<<ID<<" ("<<path<<")\n";
  145. SDL_SetColorKey(portraitLarge[portraitLarge.size()-1],SDL_SRCCOLORKEY,SDL_MapRGB(portraitLarge[portraitLarge.size()-1]->format,0,255,255));
  146. }
  147. of.close();
  148. pskillsb = CDefHandler::giveDef("PSKILL.DEF");
  149. resources = CDefHandler::giveDef("RESOUR82.DEF");
  150. un44 = CDefHandler::giveDef("UN44.DEF");
  151. smallIcons = CDefHandler::giveDef("ITPA.DEF");
  152. resources32 = CDefHandler::giveDef("RESOURCE.DEF");
  153. loadHeroFlags();
  154. }
  155. void Graphics::loadHeroFlags()
  156. {
  157. flags1.push_back(CDefHandler::giveDef("ABF01L.DEF")); //red
  158. flags1.push_back(CDefHandler::giveDef("ABF01G.DEF")); //blue
  159. flags1.push_back(CDefHandler::giveDef("ABF01R.DEF")); //tan
  160. flags1.push_back(CDefHandler::giveDef("ABF01D.DEF")); //green
  161. flags1.push_back(CDefHandler::giveDef("ABF01B.DEF")); //orange
  162. flags1.push_back(CDefHandler::giveDef("ABF01P.DEF")); //purple
  163. flags1.push_back(CDefHandler::giveDef("ABF01W.DEF")); //teal
  164. flags1.push_back(CDefHandler::giveDef("ABF01K.DEF")); //pink
  165. for(int q=0; q<8; ++q)
  166. {
  167. for(int o=0; o<flags1[q]->ourImages.size(); ++o)
  168. {
  169. if(flags1[q]->ourImages[o].groupNumber==6)
  170. {
  171. for(int e=0; e<8; ++e)
  172. {
  173. Cimage nci;
  174. nci.bitmap = CSDL_Ext::rotate01(flags1[q]->ourImages[o+e].bitmap);
  175. nci.groupNumber = 10;
  176. nci.imName = std::string();
  177. flags1[q]->ourImages.push_back(nci);
  178. }
  179. o+=8;
  180. }
  181. if(flags1[q]->ourImages[o].groupNumber==7)
  182. {
  183. for(int e=0; e<8; ++e)
  184. {
  185. Cimage nci;
  186. nci.bitmap = CSDL_Ext::rotate01(flags1[q]->ourImages[o+e].bitmap);
  187. nci.groupNumber = 11;
  188. nci.imName = std::string();
  189. flags1[q]->ourImages.push_back(nci);
  190. }
  191. o+=8;
  192. }
  193. if(flags1[q]->ourImages[o].groupNumber==8)
  194. {
  195. for(int e=0; e<8; ++e)
  196. {
  197. Cimage nci;
  198. nci.bitmap = CSDL_Ext::rotate01(flags1[q]->ourImages[o+e].bitmap);
  199. nci.groupNumber = 12;
  200. nci.imName = std::string();
  201. flags1[q]->ourImages.push_back(nci);
  202. }
  203. o+=8;
  204. }
  205. }
  206. for(int ff=0; ff<flags1[q]->ourImages.size(); ++ff)
  207. {
  208. SDL_SetColorKey(flags1[q]->ourImages[ff].bitmap, SDL_SRCCOLORKEY,
  209. SDL_MapRGB(flags1[q]->ourImages[ff].bitmap->format, 0, 255, 255)
  210. );
  211. }
  212. flags1[q]->alphaTransformed = true;
  213. }
  214. flags2.push_back(CDefHandler::giveDef("ABF02L.DEF")); //red
  215. flags2.push_back(CDefHandler::giveDef("ABF02G.DEF")); //blue
  216. flags2.push_back(CDefHandler::giveDef("ABF02R.DEF")); //tan
  217. flags2.push_back(CDefHandler::giveDef("ABF02D.DEF")); //green
  218. flags2.push_back(CDefHandler::giveDef("ABF02B.DEF")); //orange
  219. flags2.push_back(CDefHandler::giveDef("ABF02P.DEF")); //purple
  220. flags2.push_back(CDefHandler::giveDef("ABF02W.DEF")); //teal
  221. flags2.push_back(CDefHandler::giveDef("ABF02K.DEF")); //pink
  222. for(int q=0; q<8; ++q)
  223. {
  224. for(int o=0; o<flags2[q]->ourImages.size(); ++o)
  225. {
  226. if(flags2[q]->ourImages[o].groupNumber==6)
  227. {
  228. for(int e=0; e<8; ++e)
  229. {
  230. Cimage nci;
  231. nci.bitmap = CSDL_Ext::rotate01(flags2[q]->ourImages[o+e].bitmap);
  232. nci.groupNumber = 10;
  233. nci.imName = std::string();
  234. flags2[q]->ourImages.push_back(nci);
  235. }
  236. o+=8;
  237. }
  238. if(flags2[q]->ourImages[o].groupNumber==7)
  239. {
  240. for(int e=0; e<8; ++e)
  241. {
  242. Cimage nci;
  243. nci.bitmap = CSDL_Ext::rotate01(flags2[q]->ourImages[o+e].bitmap);
  244. nci.groupNumber = 11;
  245. nci.imName = std::string();
  246. flags2[q]->ourImages.push_back(nci);
  247. }
  248. o+=8;
  249. }
  250. if(flags2[q]->ourImages[o].groupNumber==8)
  251. {
  252. for(int e=0; e<8; ++e)
  253. {
  254. Cimage nci;
  255. nci.bitmap = CSDL_Ext::rotate01(flags2[q]->ourImages[o+e].bitmap);
  256. nci.groupNumber = 12;
  257. nci.imName = std::string();
  258. flags2[q]->ourImages.push_back(nci);
  259. }
  260. o+=8;
  261. }
  262. }
  263. for(int ff=0; ff<flags2[q]->ourImages.size(); ++ff)
  264. {
  265. SDL_SetColorKey(flags2[q]->ourImages[ff].bitmap, SDL_SRCCOLORKEY,
  266. SDL_MapRGB(flags2[q]->ourImages[ff].bitmap->format, 0, 255, 255)
  267. );
  268. }
  269. flags2[q]->alphaTransformed = true;
  270. }
  271. flags3.push_back(CDefHandler::giveDef("ABF03L.DEF")); //red
  272. flags3.push_back(CDefHandler::giveDef("ABF03G.DEF")); //blue
  273. flags3.push_back(CDefHandler::giveDef("ABF03R.DEF")); //tan
  274. flags3.push_back(CDefHandler::giveDef("ABF03D.DEF")); //green
  275. flags3.push_back(CDefHandler::giveDef("ABF03B.DEF")); //orange
  276. flags3.push_back(CDefHandler::giveDef("ABF03P.DEF")); //purple
  277. flags3.push_back(CDefHandler::giveDef("ABF03W.DEF")); //teal
  278. flags3.push_back(CDefHandler::giveDef("ABF03K.DEF")); //pink
  279. for(int q=0; q<8; ++q)
  280. {
  281. for(int o=0; o<flags3[q]->ourImages.size(); ++o)
  282. {
  283. if(flags3[q]->ourImages[o].groupNumber==6)
  284. {
  285. for(int e=0; e<8; ++e)
  286. {
  287. Cimage nci;
  288. nci.bitmap = CSDL_Ext::rotate01(flags3[q]->ourImages[o+e].bitmap);
  289. nci.groupNumber = 10;
  290. nci.imName = std::string();
  291. flags3[q]->ourImages.push_back(nci);
  292. }
  293. o+=8;
  294. }
  295. if(flags3[q]->ourImages[o].groupNumber==7)
  296. {
  297. for(int e=0; e<8; ++e)
  298. {
  299. Cimage nci;
  300. nci.bitmap = CSDL_Ext::rotate01(flags3[q]->ourImages[o+e].bitmap);
  301. nci.groupNumber = 11;
  302. nci.imName = std::string();
  303. flags3[q]->ourImages.push_back(nci);
  304. }
  305. o+=8;
  306. }
  307. if(flags3[q]->ourImages[o].groupNumber==8)
  308. {
  309. for(int e=0; e<8; ++e)
  310. {
  311. Cimage nci;
  312. nci.bitmap = CSDL_Ext::rotate01(flags3[q]->ourImages[o+e].bitmap);
  313. nci.groupNumber = 12;
  314. nci.imName = std::string();
  315. flags3[q]->ourImages.push_back(nci);
  316. }
  317. o+=8;
  318. }
  319. }
  320. for(int ff=0; ff<flags3[q]->ourImages.size(); ++ff)
  321. {
  322. SDL_SetColorKey(flags3[q]->ourImages[ff].bitmap, SDL_SRCCOLORKEY,
  323. SDL_MapRGB(flags3[q]->ourImages[ff].bitmap->format, 0, 255, 255)
  324. );
  325. }
  326. flags3[q]->alphaTransformed = true;
  327. }
  328. flags4.push_back(CDefHandler::giveDef("AF00.DEF")); //red
  329. flags4.push_back(CDefHandler::giveDef("AF01.DEF")); //blue
  330. flags4.push_back(CDefHandler::giveDef("AF02.DEF")); //tan
  331. flags4.push_back(CDefHandler::giveDef("AF03.DEF")); //green
  332. flags4.push_back(CDefHandler::giveDef("AF04.DEF")); //orange
  333. flags4.push_back(CDefHandler::giveDef("AF05.DEF")); //purple
  334. flags4.push_back(CDefHandler::giveDef("AF06.DEF")); //teal
  335. flags4.push_back(CDefHandler::giveDef("AF07.DEF")); //pink
  336. for(int q=0; q<8; ++q)
  337. {
  338. for(int o=0; o<flags4[q]->ourImages.size(); ++o)
  339. {
  340. if(flags4[q]->ourImages[o].groupNumber==6)
  341. {
  342. for(int e=0; e<8; ++e)
  343. {
  344. Cimage nci;
  345. nci.bitmap = CSDL_Ext::rotate01(flags4[q]->ourImages[o+e].bitmap);
  346. nci.groupNumber = 10;
  347. nci.imName = std::string();
  348. flags4[q]->ourImages.push_back(nci);
  349. }
  350. o+=8;
  351. }
  352. if(flags4[q]->ourImages[o].groupNumber==7)
  353. {
  354. for(int e=0; e<8; ++e)
  355. {
  356. Cimage nci;
  357. nci.bitmap = CSDL_Ext::rotate01(flags4[q]->ourImages[o+e].bitmap);
  358. nci.groupNumber = 10;
  359. nci.groupNumber = 11;
  360. nci.imName = std::string();
  361. flags4[q]->ourImages.push_back(nci);
  362. }
  363. o+=8;
  364. }
  365. if(flags4[q]->ourImages[o].groupNumber==8)
  366. {
  367. for(int e=0; e<8; ++e)
  368. {
  369. Cimage nci;
  370. nci.bitmap = CSDL_Ext::rotate01(flags4[q]->ourImages[o+e].bitmap);
  371. nci.groupNumber = 10;
  372. nci.groupNumber = 12;
  373. nci.imName = std::string();
  374. flags4[q]->ourImages.push_back(nci);
  375. }
  376. o+=8;
  377. }
  378. }
  379. for(int o=0; o<flags4[q]->ourImages.size(); ++o)
  380. {
  381. if(flags4[q]->ourImages[o].groupNumber==1)
  382. {
  383. for(int e=0; e<8; ++e)
  384. {
  385. Cimage nci;
  386. nci.bitmap = CSDL_Ext::rotate01(flags4[q]->ourImages[o+e].bitmap);
  387. nci.groupNumber = 10;
  388. nci.groupNumber = 13;
  389. nci.imName = std::string();
  390. flags4[q]->ourImages.push_back(nci);
  391. }
  392. o+=8;
  393. }
  394. if(flags4[q]->ourImages[o].groupNumber==2)
  395. {
  396. for(int e=0; e<8; ++e)
  397. {
  398. Cimage nci;
  399. nci.bitmap = CSDL_Ext::rotate01(flags4[q]->ourImages[o+e].bitmap);
  400. nci.groupNumber = 10;
  401. nci.groupNumber = 14;
  402. nci.imName = std::string();
  403. flags4[q]->ourImages.push_back(nci);
  404. }
  405. o+=8;
  406. }
  407. if(flags4[q]->ourImages[o].groupNumber==3)
  408. {
  409. for(int e=0; e<8; ++e)
  410. {
  411. Cimage nci;
  412. nci.bitmap = CSDL_Ext::rotate01(flags4[q]->ourImages[o+e].bitmap);
  413. nci.groupNumber = 10;
  414. nci.groupNumber = 15;
  415. nci.imName = std::string();
  416. flags4[q]->ourImages.push_back(nci);
  417. }
  418. o+=8;
  419. }
  420. }
  421. for(int ff=0; ff<flags4[q]->ourImages.size(); ++ff)
  422. {
  423. SDL_SetColorKey(flags4[q]->ourImages[ff].bitmap, SDL_SRCCOLORKEY,
  424. SDL_MapRGB(flags4[q]->ourImages[ff].bitmap->format, 0, 255, 255)
  425. );
  426. }
  427. flags4[q]->alphaTransformed = true;
  428. }
  429. }
  430. SDL_Surface * Graphics::getPic(int ID, bool fort, bool builded)
  431. {
  432. if (ID==-1)
  433. return smallIcons->ourImages[0].bitmap;
  434. else if (ID==-2)
  435. return smallIcons->ourImages[1].bitmap;
  436. else if (ID==-3)
  437. return smallIcons->ourImages[2+F_NUMBER*4].bitmap;
  438. else if (ID>F_NUMBER || ID<-3)
  439. throw new std::exception("Invalid ID");
  440. else
  441. {
  442. int pom = 3;
  443. if(!fort)
  444. pom+=F_NUMBER*2;
  445. pom += ID*2;
  446. if (!builded)
  447. pom--;
  448. return smallIcons->ourImages[pom].bitmap;
  449. }
  450. }