mapHandler.cpp 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532
  1. #include "stdafx.h"
  2. #include "mapHandler.h"
  3. #include "CSemiDefHandler.h"
  4. #include "SDL_rotozoom.h"
  5. #include "SDL_Extensions.h"
  6. #include "CGameInfo.h"
  7. #include "stdlib.h"
  8. extern SDL_Surface * ekran;
  9. void CMapHandler::init()
  10. {
  11. fullHide = CGameInfo::mainObj->sspriteh->giveDef("TSHRC.DEF", 2);
  12. partialHide = CGameInfo::mainObj->sspriteh->giveDef("TSHRE.DEF", 2);
  13. for(int i=0; i<partialHide->ourImages.size(); ++i)
  14. {
  15. //CSDL_Ext::alphaTransform(partialHide->ourImages[i].bitmap);
  16. }
  17. visibility.resize(reader->map.width+8);
  18. for(int gg=0; gg<reader->map.width+8; ++gg)
  19. {
  20. visibility[gg].resize(reader->map.height+8);
  21. for(int jj=0; jj<reader->map.height+8; ++jj)
  22. visibility[gg][jj] = true;
  23. }
  24. undVisibility.resize(reader->map.width+8);
  25. for(int gg=0; gg<reader->map.width+8; ++gg)
  26. {
  27. undVisibility[gg].resize(reader->map.height+8);
  28. for(int jj=0; jj<reader->map.height+8; ++jj)
  29. undVisibility[gg][jj] = true;
  30. }
  31. visibility[6][7] = false;
  32. undVisibility[5][7] = false;
  33. visibility[7][7] = false;
  34. visibility[6][8] = false;
  35. visibility[6][6] = false;
  36. //visibility[5][6] = false;
  37. //visibility[7][8] = false;
  38. visibility[5][8] = false;
  39. visibility[7][6] = false;
  40. visibility[6][9] = false;
  41. terrainBitmap = new SDL_Surface **[reader->map.width+8];
  42. for (int ii=0;ii<reader->map.width+8;ii++)
  43. terrainBitmap[ii] = new SDL_Surface*[reader->map.height+8]; // allocate memory
  44. CSemiDefHandler * bord = CGameInfo::mainObj->sspriteh->giveDef("EDG.DEF");
  45. for (int i=0; i<reader->map.width+8; i++) //jest po szerokoœci
  46. {
  47. for (int j=0; j<reader->map.height+8;j++) //po wysokoœci
  48. {
  49. if(i < 4 || i > (reader->map.width+3) || j < 4 || j > (reader->map.height+3))
  50. {
  51. if(i==3 && j==3)
  52. {
  53. terrainBitmap[i][j] = bord->ourImages[16].bitmap;
  54. continue;
  55. }
  56. else if(i==3 && j==(reader->map.height+4))
  57. {
  58. terrainBitmap[i][j] = bord->ourImages[19].bitmap;
  59. continue;
  60. }
  61. else if(i==(reader->map.width+4) && j==3)
  62. {
  63. terrainBitmap[i][j] = bord->ourImages[17].bitmap;
  64. continue;
  65. }
  66. else if(i==(reader->map.width+4) && j==(reader->map.height+4))
  67. {
  68. terrainBitmap[i][j] = bord->ourImages[18].bitmap;
  69. continue;
  70. }
  71. else if(j == 3 && i > 3 && i < reader->map.height+4)
  72. {
  73. terrainBitmap[i][j] = bord->ourImages[22+rand()%2].bitmap;
  74. continue;
  75. }
  76. else if(i == 3 && j > 3 && j < reader->map.height+4)
  77. {
  78. terrainBitmap[i][j] = bord->ourImages[33+rand()%2].bitmap;
  79. continue;
  80. }
  81. else if(j == reader->map.height+4 && i > 3 && i < reader->map.width+4)
  82. {
  83. terrainBitmap[i][j] = bord->ourImages[29+rand()%2].bitmap;
  84. continue;
  85. }
  86. else if(i == reader->map.width+4 && j > 3 && j < reader->map.height+4)
  87. {
  88. terrainBitmap[i][j] = bord->ourImages[25+rand()%2].bitmap;
  89. continue;
  90. }
  91. else
  92. {
  93. terrainBitmap[i][j] = bord->ourImages[rand()%16].bitmap;
  94. continue;
  95. }
  96. }
  97. TerrainTile zz = reader->map.terrain[i-4][j-4];
  98. std::string name = CSemiDefHandler::nameFromType(reader->map.terrain[i-4][j-4].tertype);
  99. for (unsigned int k=0; k<reader->defs.size(); k++)
  100. {
  101. try
  102. {
  103. if (reader->defs[k]->defName != name)
  104. continue;
  105. else
  106. {
  107. SDL_Surface * n;
  108. int ktora = reader->map.terrain[i-4][j-4].terview;
  109. terrainBitmap[i][j] = reader->defs[k]->ourImages[ktora].bitmap;
  110. //TODO: odwracanie
  111. switch ((reader->map.terrain[i-4][j-4].siodmyTajemniczyBajt)%4)
  112. {
  113. case 1:
  114. {
  115. terrainBitmap[i][j] = CSDL_Ext::rotate01(terrainBitmap[i][j]);
  116. break;
  117. }
  118. case 2:
  119. {
  120. terrainBitmap[i][j] = CSDL_Ext::hFlip(terrainBitmap[i][j]);
  121. break;
  122. }
  123. case 3:
  124. {
  125. terrainBitmap[i][j] = CSDL_Ext::rotate03(terrainBitmap[i][j]);
  126. break;
  127. }
  128. }
  129. //SDL_BlitSurface(terrainBitmap[i][j],NULL,ekran,NULL); SDL_Flip(ekran);SDL_Delay(50);
  130. break;
  131. }
  132. }
  133. catch (...)
  134. { continue; }
  135. }
  136. }
  137. }
  138. if (reader->map.twoLevel)
  139. {
  140. undTerrainBitmap = new SDL_Surface **[reader->map.width+8];
  141. for (int ii=0;ii<reader->map.width+8;ii++)
  142. undTerrainBitmap[ii] = new SDL_Surface*[reader->map.height+8]; // allocate memory
  143. for (int i=0; i<reader->map.width+8; i++)
  144. {
  145. for (int j=0; j<reader->map.height+8;j++)
  146. {
  147. if(i < 4 || i > (reader->map.width+3) || j < 4 || j > (reader->map.height+3))
  148. {
  149. if(i==3 && j==3)
  150. {
  151. undTerrainBitmap[i][j] = bord->ourImages[16].bitmap;
  152. continue;
  153. }
  154. else if(i==3 && j==(reader->map.height+4))
  155. {
  156. undTerrainBitmap[i][j] = bord->ourImages[19].bitmap;
  157. continue;
  158. }
  159. else if(i==(reader->map.width+4) && j==3)
  160. {
  161. undTerrainBitmap[i][j] = bord->ourImages[17].bitmap;
  162. continue;
  163. }
  164. else if(i==(reader->map.width+4) && j==(reader->map.height+4))
  165. {
  166. undTerrainBitmap[i][j] = bord->ourImages[18].bitmap;
  167. continue;
  168. }
  169. else if(j == 3 && i > 3 && i < reader->map.height+4)
  170. {
  171. undTerrainBitmap[i][j] = bord->ourImages[22+rand()%2].bitmap;
  172. continue;
  173. }
  174. else if(i == 3 && j > 3 && j < reader->map.height+4)
  175. {
  176. undTerrainBitmap[i][j] = bord->ourImages[33+rand()%2].bitmap;
  177. continue;
  178. }
  179. else if(j == reader->map.height+4 && i > 3 && i < reader->map.width+4)
  180. {
  181. undTerrainBitmap[i][j] = bord->ourImages[29+rand()%2].bitmap;
  182. continue;
  183. }
  184. else if(i == reader->map.width+4 && j > 3 && j < reader->map.height+4)
  185. {
  186. undTerrainBitmap[i][j] = bord->ourImages[25+rand()%2].bitmap;
  187. continue;
  188. }
  189. else
  190. {
  191. undTerrainBitmap[i][j] = bord->ourImages[rand()%16].bitmap;
  192. continue;
  193. }
  194. }
  195. TerrainTile zz = reader->map.undergroungTerrain[i-4][j-4];
  196. std::string name = CSemiDefHandler::nameFromType(reader->map.undergroungTerrain[i-4][j-4].tertype);
  197. for (unsigned int k=0; k<reader->defs.size(); k++)
  198. {
  199. try
  200. {
  201. if (reader->defs[k]->defName != name)
  202. continue;
  203. else
  204. {
  205. SDL_Surface * n;
  206. int ktora = reader->map.undergroungTerrain[i-4][j-4].terview;
  207. undTerrainBitmap[i][j] = reader->defs[k]->ourImages[ktora].bitmap;
  208. //TODO: odwracanie
  209. switch ((reader->map.undergroungTerrain[i-4][j-4].siodmyTajemniczyBajt)%4)
  210. {
  211. case 1:
  212. {
  213. undTerrainBitmap[i][j] = CSDL_Ext::rotate01(undTerrainBitmap[i][j]);
  214. break;
  215. }
  216. case 2:
  217. {
  218. undTerrainBitmap[i][j] = CSDL_Ext::hFlip(undTerrainBitmap[i][j]);
  219. break;
  220. }
  221. case 3:
  222. {
  223. undTerrainBitmap[i][j] = CSDL_Ext::rotate03(undTerrainBitmap[i][j]);
  224. break;
  225. }
  226. }
  227. //SDL_BlitSurface(undTerrainBitmap[i][j],NULL,ekran,NULL); SDL_Flip(ekran);SDL_Delay(50);
  228. break;
  229. }
  230. }
  231. catch (...)
  232. { continue; }
  233. }
  234. } //end of internal for
  235. } //end of external for
  236. } //end of if
  237. }
  238. SDL_Surface * CMapHandler::terrainRect(int x, int y, int dx, int dy, int level)
  239. {
  240. #if SDL_BYTEORDER == SDL_BIG_ENDIAN
  241. int rmask = 0xff000000;
  242. int gmask = 0x00ff0000;
  243. int bmask = 0x0000ff00;
  244. int amask = 0x000000ff;
  245. #else
  246. int rmask = 0x000000ff;
  247. int gmask = 0x0000ff00;
  248. int bmask = 0x00ff0000;
  249. int amask = 0xff000000;
  250. #endif
  251. SDL_Surface * su = SDL_CreateRGBSurface(SDL_SWSURFACE, dx*32, dy*32, 32,
  252. rmask, gmask, bmask, amask);
  253. if (((dx+x)>((reader->map.width+8)) || (dy+y)>((reader->map.height+8))) || ((x<0)||(y<0) ) )
  254. throw new std::string("Poza zakresem");
  255. for (int bx=0; bx<dx; bx++)
  256. {
  257. for (int by=0; by<dy; by++)
  258. {
  259. SDL_Rect * sr = new SDL_Rect;
  260. sr->y=by*32;
  261. sr->x=bx*32;
  262. sr->h=sr->w=32;
  263. if (!level)
  264. {
  265. SDL_BlitSurface(terrainBitmap[bx+x][by+y],NULL,su,sr);
  266. if( bx+x>3 && by+y>3 && bx+x<visibility.size()-3 && by+y<visibility[0].size()-3 && !visibility[bx+x][by+y])
  267. {
  268. SDL_Surface * hide = CSDL_Ext::alphaTransform(getVisBitmap(bx+x, by+y, visibility));
  269. Uint32 pompom[32][32];
  270. for(int i=0; i<hide->w; ++i)
  271. {
  272. for(int j=0; j<hide->h; ++j)
  273. {
  274. pompom[i][j] = 0xffffffff - (CSDL_Ext::SDL_GetPixel(hide, i, j, true) & 0xff000000);
  275. }
  276. }
  277. hide = SDL_ConvertSurface(hide, su->format, SDL_SWSURFACE);
  278. for(int i=0; i<hide->w; ++i)
  279. {
  280. for(int j=0; j<hide->h; ++j)
  281. {
  282. Uint32 * place = (Uint32*)( (Uint8*)hide->pixels + j * hide->pitch + i * hide->format->BytesPerPixel);
  283. (*place)&=pompom[i][j];
  284. }
  285. }
  286. SDL_BlitSurface(hide, NULL, su, sr);
  287. }
  288. }
  289. else
  290. {
  291. SDL_BlitSurface(undTerrainBitmap[bx+x][by+y],NULL,su,sr);
  292. if( bx+x>3 && by+y>3 && bx+x<undVisibility.size()-3 && by+y<undVisibility[0].size()-3 && !undVisibility[bx+x][by+y])
  293. {
  294. SDL_Surface * hide = CSDL_Ext::alphaTransform(getVisBitmap(bx+x, by+y, undVisibility));
  295. Uint32 pompom[32][32];
  296. for(int i=0; i<hide->w; ++i)
  297. {
  298. for(int j=0; j<hide->h; ++j)
  299. {
  300. pompom[i][j] = 0xffffffff - (CSDL_Ext::SDL_GetPixel(hide, i, j, true) & 0xff000000);
  301. }
  302. }
  303. hide = SDL_ConvertSurface(hide, su->format, SDL_SWSURFACE);
  304. for(int i=0; i<hide->w; ++i)
  305. {
  306. for(int j=0; j<hide->h; ++j)
  307. {
  308. Uint32 * place = (Uint32*)( (Uint8*)hide->pixels + j * hide->pitch + i * hide->format->BytesPerPixel);
  309. (*place)&=pompom[i][j];
  310. }
  311. }
  312. SDL_BlitSurface(hide, NULL, su, sr);
  313. }
  314. }
  315. delete sr;
  316. //SDL_BlitSurface(su,NULL,ekran,NULL);SDL_Flip(ekran);
  317. }
  318. }
  319. return su;
  320. }
  321. SDL_Surface * CMapHandler::terrBitmap(int x, int y)
  322. {
  323. return terrainBitmap[x+4][y+4];
  324. }
  325. SDL_Surface * CMapHandler::undTerrBitmap(int x, int y)
  326. {
  327. return undTerrainBitmap[x+4][y+4];
  328. }
  329. SDL_Surface * CMapHandler::getVisBitmap(int x, int y, std::vector< std::vector<bool> > & visibility)
  330. {
  331. if(!visibility[x][y+1] && !visibility[x+1][y] && !visibility[x-1][y] && !visibility[x][y-1] && !visibility[x-1][y-1] && !visibility[x+1][y+1] && !visibility[x+1][y-1] && !visibility[x-1][y+1])
  332. {
  333. return fullHide->ourImages[rand()%fullHide->ourImages.size()].bitmap; //fully hidden
  334. }
  335. else if(!visibility[x][y+1] && !visibility[x+1][y] && !visibility[x-1][y] && !visibility[x][y-1] && !visibility[x-1][y-1] && visibility[x+1][y+1] && !visibility[x+1][y-1] && !visibility[x-1][y+1])
  336. {
  337. return partialHide->ourImages[22].bitmap; //visible right bottom corner
  338. }
  339. else if(!visibility[x][y+1] && !visibility[x+1][y] && !visibility[x-1][y] && !visibility[x][y-1] && !visibility[x-1][y-1] && !visibility[x+1][y+1] && visibility[x+1][y-1] && !visibility[x-1][y+1])
  340. {
  341. return partialHide->ourImages[15].bitmap; //visible right top corner
  342. }
  343. else if(!visibility[x][y+1] && !visibility[x+1][y] && !visibility[x-1][y] && !visibility[x][y-1] && !visibility[x-1][y-1] && !visibility[x+1][y+1] && !visibility[x+1][y-1] && visibility[x-1][y+1])
  344. {
  345. return CSDL_Ext::rotate01(partialHide->ourImages[22].bitmap); //visible left bottom corner
  346. }
  347. else if(!visibility[x][y+1] && !visibility[x+1][y] && !visibility[x-1][y] && !visibility[x][y-1] && visibility[x-1][y-1] && !visibility[x+1][y+1] && !visibility[x+1][y-1] && !visibility[x-1][y+1])
  348. {
  349. return CSDL_Ext::rotate01(partialHide->ourImages[15].bitmap); //visible left top corner
  350. }
  351. else if(!visibility[x][y+1] && !visibility[x+1][y] && !visibility[x-1][y] && visibility[x][y-1] && visibility[x-1][y-1] && !visibility[x+1][y+1] && visibility[x+1][y-1] && !visibility[x-1][y+1])
  352. {
  353. return partialHide->ourImages[rand()%2].bitmap; //visible top
  354. }
  355. else if(visibility[x][y+1] && !visibility[x+1][y] && !visibility[x-1][y] && !visibility[x][y-1] && !visibility[x-1][y-1] && visibility[x+1][y+1] && !visibility[x+1][y-1] && visibility[x-1][y+1])
  356. {
  357. return partialHide->ourImages[4+rand()%2].bitmap; //visble bottom
  358. }
  359. else if(!visibility[x][y+1] && !visibility[x+1][y] && visibility[x-1][y] && !visibility[x][y-1] && visibility[x-1][y-1] && !visibility[x+1][y+1] && !visibility[x+1][y-1] && visibility[x-1][y+1])
  360. {
  361. return CSDL_Ext::rotate01(partialHide->ourImages[2+rand()%2].bitmap); //visible left
  362. }
  363. else if(!visibility[x][y+1] && visibility[x+1][y] && !visibility[x-1][y] && !visibility[x][y-1] && !visibility[x-1][y-1] && visibility[x+1][y+1] && visibility[x+1][y-1] && !visibility[x-1][y+1])
  364. {
  365. return partialHide->ourImages[2+rand()%2].bitmap; //visible right
  366. }
  367. else if(visibility[x][y+1] && visibility[x+1][y] && !visibility[x-1][y] && !visibility[x][y-1] && !visibility[x-1][y-1])
  368. {
  369. return partialHide->ourImages[12+2*(rand()%2)].bitmap; //visible bottom, right - bottom, right; left top corner hidden
  370. }
  371. else if(!visibility[x][y+1] && visibility[x+1][y] && !visibility[x-1][y] && visibility[x][y-1] && !visibility[x-1][y+1])
  372. {
  373. return partialHide->ourImages[13].bitmap; //visible right, right - top; left bottom corner hidden
  374. }
  375. else if(!visibility[x][y+1] && !visibility[x+1][y] && visibility[x-1][y] && visibility[x][y-1] && !visibility[x+1][y+1])
  376. {
  377. return CSDL_Ext::rotate01(partialHide->ourImages[13].bitmap); //visible top, top - left, left; right bottom corner hidden
  378. }
  379. else if(visibility[x][y+1] && !visibility[x+1][y] && visibility[x-1][y] && !visibility[x][y-1] && !visibility[x+1][y-1])
  380. {
  381. return CSDL_Ext::rotate01(partialHide->ourImages[12+2*(rand()%2)].bitmap); //visible left, left - bottom, bottom; right top corner hidden
  382. }
  383. else if(visibility[x][y+1] && visibility[x+1][y] && visibility[x-1][y] && visibility[x][y-1] && visibility[x-1][y-1] && visibility[x+1][y+1] && visibility[x+1][y-1] && visibility[x-1][y+1])
  384. {
  385. return partialHide->ourImages[10].bitmap; //visible left, right, bottom and top
  386. }
  387. if(!visibility[x][y+1] && !visibility[x+1][y] && !visibility[x-1][y] && !visibility[x][y-1] && !visibility[x-1][y-1] && visibility[x+1][y+1] && visibility[x+1][y-1] && !visibility[x-1][y+1])
  388. {
  389. return partialHide->ourImages[16].bitmap; //visible right corners
  390. }
  391. if(!visibility[x][y+1] && !visibility[x+1][y] && !visibility[x-1][y] && !visibility[x][y-1] && visibility[x-1][y-1] && !visibility[x+1][y+1] && visibility[x+1][y-1] && !visibility[x-1][y+1])
  392. {
  393. return partialHide->ourImages[18].bitmap; //visible top corners
  394. }
  395. if(!visibility[x][y+1] && !visibility[x+1][y] && !visibility[x-1][y] && !visibility[x][y-1] && visibility[x-1][y-1] && !visibility[x+1][y+1] && !visibility[x+1][y-1] && visibility[x-1][y+1])
  396. {
  397. return CSDL_Ext::rotate01(partialHide->ourImages[16].bitmap); //visible left corners
  398. }
  399. if(!visibility[x][y+1] && !visibility[x+1][y] && !visibility[x-1][y] && !visibility[x][y-1] && !visibility[x-1][y-1] && visibility[x+1][y+1] && !visibility[x+1][y-1] && visibility[x-1][y+1])
  400. {
  401. return CSDL_Ext::hFlip(partialHide->ourImages[18].bitmap); //visible bottom corners
  402. }
  403. if(!visibility[x][y+1] && !visibility[x+1][y] && !visibility[x-1][y] && !visibility[x][y-1] && !visibility[x-1][y-1] && !visibility[x+1][y+1] && visibility[x+1][y-1] && visibility[x-1][y+1])
  404. {
  405. return partialHide->ourImages[17].bitmap; //visible right - top and bottom - left corners
  406. }
  407. if(!visibility[x][y+1] && !visibility[x+1][y] && !visibility[x-1][y] && !visibility[x][y-1] && visibility[x-1][y-1] && visibility[x+1][y+1] && !visibility[x+1][y-1] && !visibility[x-1][y+1])
  408. {
  409. return CSDL_Ext::hFlip(partialHide->ourImages[17].bitmap); //visible top - left and bottom - right corners
  410. }
  411. if(!visibility[x][y+1] && !visibility[x+1][y] && !visibility[x-1][y] && !visibility[x][y-1] && !visibility[x-1][y-1] && visibility[x+1][y+1] && visibility[x+1][y-1] && visibility[x-1][y+1])
  412. {
  413. return partialHide->ourImages[19].bitmap; //visible corners without left top
  414. }
  415. if(!visibility[x][y+1] && !visibility[x+1][y] && !visibility[x-1][y] && !visibility[x][y-1] && visibility[x-1][y-1] && visibility[x+1][y+1] && visibility[x+1][y-1] && !visibility[x-1][y+1])
  416. {
  417. return partialHide->ourImages[20].bitmap; //visible corners without left bottom
  418. }
  419. if(!visibility[x][y+1] && !visibility[x+1][y] && !visibility[x-1][y] && !visibility[x][y-1] && visibility[x-1][y-1] && !visibility[x+1][y+1] && visibility[x+1][y-1] && visibility[x-1][y+1])
  420. {
  421. return CSDL_Ext::rotate01(partialHide->ourImages[20].bitmap); //visible corners without right bottom
  422. }
  423. if(!visibility[x][y+1] && !visibility[x+1][y] && !visibility[x-1][y] && !visibility[x][y-1] && visibility[x-1][y-1] && visibility[x+1][y+1] && !visibility[x+1][y-1] && visibility[x-1][y+1])
  424. {
  425. return CSDL_Ext::rotate01(partialHide->ourImages[19].bitmap); //visible corners without right top
  426. }
  427. if(!visibility[x][y+1] && !visibility[x+1][y] && !visibility[x-1][y] && !visibility[x][y-1] && visibility[x-1][y-1] && visibility[x+1][y+1] && visibility[x+1][y-1] && visibility[x-1][y+1])
  428. {
  429. return partialHide->ourImages[21].bitmap; //visible all corners only
  430. }
  431. if(visibility[x][y+1] && visibility[x+1][y] && visibility[x-1][y] && !visibility[x][y-1])
  432. {
  433. return partialHide->ourImages[6].bitmap; //hidden top
  434. }
  435. if(visibility[x][y+1] && !visibility[x+1][y] && visibility[x-1][y] && visibility[x][y-1])
  436. {
  437. return partialHide->ourImages[7].bitmap; //hidden right
  438. }
  439. if(!visibility[x][y+1] && visibility[x+1][y] && visibility[x-1][y] && visibility[x][y-1])
  440. {
  441. return partialHide->ourImages[8].bitmap; //hidden bottom
  442. }
  443. if(visibility[x][y+1] && visibility[x+1][y] && !visibility[x-1][y] && visibility[x][y-1])
  444. {
  445. return CSDL_Ext::rotate01(partialHide->ourImages[6].bitmap); //hidden left
  446. }
  447. if(!visibility[x][y+1] && visibility[x+1][y] && visibility[x-1][y] && visibility[x][y-1])
  448. {
  449. return partialHide->ourImages[9].bitmap; //hidden top and bottom
  450. }
  451. if(visibility[x][y+1] && visibility[x+1][y] && !visibility[x-1][y] && visibility[x][y-1])
  452. {
  453. return partialHide->ourImages[29].bitmap; //hidden left and right
  454. }
  455. if(!visibility[x][y+1] && !visibility[x+1][y] && !visibility[x-1][y] && visibility[x][y-1] && visibility[x+1][y+1] && !visibility[x-1][y+1])
  456. {
  457. return partialHide->ourImages[24].bitmap; //visible top and right bottom corner
  458. }
  459. if(!visibility[x][y+1] && !visibility[x+1][y] && !visibility[x-1][y] && visibility[x][y-1] && !visibility[x+1][y+1] && visibility[x-1][y+1])
  460. {
  461. return CSDL_Ext::rotate01(partialHide->ourImages[24].bitmap); //visible top and left bottom corner
  462. }
  463. if(!visibility[x][y+1] && !visibility[x+1][y] && !visibility[x-1][y] && visibility[x][y-1] && visibility[x+1][y+1] && visibility[x-1][y+1])
  464. {
  465. return partialHide->ourImages[33].bitmap; //visible top and bottom corners
  466. }
  467. if(!visibility[x][y+1] && !visibility[x+1][y] && visibility[x-1][y] && !visibility[x][y-1] && !visibility[x+1][y+1] && visibility[x+1][y-1])
  468. {
  469. return CSDL_Ext::rotate01(partialHide->ourImages[26].bitmap); //visible left and right top corner
  470. }
  471. if(!visibility[x][y+1] && !visibility[x+1][y] && visibility[x-1][y] && !visibility[x][y-1] && visibility[x+1][y+1] && !visibility[x+1][y-1])
  472. {
  473. return CSDL_Ext::rotate01(partialHide->ourImages[25].bitmap); //visible left and right bottom corner
  474. }
  475. if(!visibility[x][y+1] && !visibility[x+1][y] && visibility[x-1][y] && !visibility[x][y-1] && visibility[x+1][y+1] && visibility[x+1][y-1])
  476. {
  477. return partialHide->ourImages[32].bitmap; //visible left and right corners
  478. }
  479. if(visibility[x][y+1] && !visibility[x+1][y] && !visibility[x-1][y] && !visibility[x][y-1] && visibility[x-1][y-1] && !visibility[x+1][y-1])
  480. {
  481. return CSDL_Ext::rotate01(partialHide->ourImages[30].bitmap); //visible bottom and left top corner
  482. }
  483. if(visibility[x][y+1] && !visibility[x+1][y] && !visibility[x-1][y] && !visibility[x][y-1] && !visibility[x-1][y-1] && visibility[x+1][y-1])
  484. {
  485. return partialHide->ourImages[30].bitmap; //visible bottom and right top corner
  486. }
  487. if(visibility[x][y+1] && !visibility[x+1][y] && !visibility[x-1][y] && !visibility[x][y-1] && visibility[x-1][y-1] && visibility[x+1][y-1])
  488. {
  489. return partialHide->ourImages[31].bitmap; //visible bottom and top corners
  490. }
  491. if(!visibility[x][y+1] && visibility[x+1][y] && !visibility[x-1][y] && !visibility[x][y-1] && !visibility[x-1][y-1] && visibility[x-1][y+1])
  492. {
  493. return partialHide->ourImages[25].bitmap; //visible right and left bottom corner
  494. }
  495. if(!visibility[x][y+1] && visibility[x+1][y] && !visibility[x-1][y] && !visibility[x][y-1] && visibility[x-1][y-1] && !visibility[x-1][y+1])
  496. {
  497. return partialHide->ourImages[26].bitmap; //visible right and left top corner
  498. }
  499. if(!visibility[x][y+1] && visibility[x+1][y] && !visibility[x-1][y] && !visibility[x][y-1] && visibility[x-1][y-1] && visibility[x-1][y+1])
  500. {
  501. return CSDL_Ext::rotate01(partialHide->ourImages[32].bitmap); //visible right and left cornres
  502. }
  503. if(visibility[x][y+1] && visibility[x+1][y] && !visibility[x-1][y] && !visibility[x][y-1] && visibility[x-1][y-1])
  504. {
  505. return partialHide->ourImages[28].bitmap; //visible bottom, right - bottom, right; left top corner visible
  506. }
  507. else if(!visibility[x][y+1] && visibility[x+1][y] && !visibility[x-1][y] && visibility[x][y-1] && visibility[x-1][y+1])
  508. {
  509. return partialHide->ourImages[27].bitmap; //visible right, right - top; left bottom corner visible
  510. }
  511. else if(!visibility[x][y+1] && !visibility[x+1][y] && visibility[x-1][y] && visibility[x][y-1] && visibility[x+1][y+1])
  512. {
  513. return CSDL_Ext::rotate01(partialHide->ourImages[27].bitmap); //visible top, top - left, left; right bottom corner visible
  514. }
  515. else if(visibility[x][y+1] && !visibility[x+1][y] && visibility[x-1][y] && !visibility[x][y-1] && visibility[x+1][y-1])
  516. {
  517. return CSDL_Ext::rotate01(partialHide->ourImages[28].bitmap); //visible left, left - bottom, bottom; right top corner visible
  518. }
  519. return fullHide->ourImages[0].bitmap; //this case should never happen, but it is better to hide too much than reveal it....
  520. }