|
|
@@ -3,18 +3,69 @@
|
|
|
#include "CSemiDefHandler.h"
|
|
|
#include "SDL_rotozoom.h"
|
|
|
#include "SDL_Extensions.h"
|
|
|
+#include "CGameInfo.h"
|
|
|
+
|
|
|
extern SDL_Surface * ekran;
|
|
|
void mapHandler::init()
|
|
|
{
|
|
|
- terrainBitmap = new SDL_Surface **[reader->map.width];
|
|
|
- for (int ii=0;ii<reader->map.width;ii++)
|
|
|
- terrainBitmap[ii] = new SDL_Surface*[reader->map.height]; // allocate memory
|
|
|
- for (int i=0; i<reader->map.width; i++)
|
|
|
+ terrainBitmap = new SDL_Surface **[reader->map.width+8];
|
|
|
+ for (int ii=0;ii<reader->map.width+8;ii++)
|
|
|
+ terrainBitmap[ii] = new SDL_Surface*[reader->map.height+8]; // allocate memory
|
|
|
+ CSemiDefHandler * bord = CGameInfo::mainObj->sspriteh->giveDef("EDG.DEF");
|
|
|
+ for (int i=0; i<reader->map.width+8; i++) //jest po szerokoœci
|
|
|
{
|
|
|
- for (int j=0; j<reader->map.height;j++)
|
|
|
+ for (int j=0; j<reader->map.height+8;j++) //po wysokoœci
|
|
|
{
|
|
|
- TerrainTile zz = reader->map.terrain[i][j];
|
|
|
- std::string name = CSemiDefHandler::nameFromType(reader->map.terrain[i][j].tertype);
|
|
|
+ if(i < 4 || i > (reader->map.width+3) || j < 4 || j > (reader->map.height+3))
|
|
|
+ {
|
|
|
+ if(i==3 && j==3)
|
|
|
+ {
|
|
|
+ terrainBitmap[i][j] = bord->ourImages[16].bitmap;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ else if(i==3 && j==(reader->map.height+4))
|
|
|
+ {
|
|
|
+ terrainBitmap[i][j] = bord->ourImages[19].bitmap;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ else if(i==(reader->map.width+4) && j==3)
|
|
|
+ {
|
|
|
+ terrainBitmap[i][j] = bord->ourImages[17].bitmap;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ else if(i==(reader->map.width+4) && j==(reader->map.height+4))
|
|
|
+ {
|
|
|
+ terrainBitmap[i][j] = bord->ourImages[18].bitmap;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ else if(j == 3 && i > 3 && i < reader->map.height+4)
|
|
|
+ {
|
|
|
+ terrainBitmap[i][j] = bord->ourImages[22+rand()%2].bitmap;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ else if(i == 3 && j > 3 && j < reader->map.height+4)
|
|
|
+ {
|
|
|
+ terrainBitmap[i][j] = bord->ourImages[33+rand()%2].bitmap;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ else if(j == reader->map.height+4 && i > 3 && i < reader->map.width+4)
|
|
|
+ {
|
|
|
+ terrainBitmap[i][j] = bord->ourImages[29+rand()%2].bitmap;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ else if(i == reader->map.width+4 && j > 3 && j < reader->map.height+4)
|
|
|
+ {
|
|
|
+ terrainBitmap[i][j] = bord->ourImages[25+rand()%2].bitmap;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ terrainBitmap[i][j] = bord->ourImages[rand()%16].bitmap;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ TerrainTile zz = reader->map.terrain[i-4][j-4];
|
|
|
+ std::string name = CSemiDefHandler::nameFromType(reader->map.terrain[i-4][j-4].tertype);
|
|
|
for (unsigned int k=0; k<reader->defs.size(); k++)
|
|
|
{
|
|
|
try
|
|
|
@@ -24,10 +75,10 @@ void mapHandler::init()
|
|
|
else
|
|
|
{
|
|
|
SDL_Surface * n;
|
|
|
- int ktora = reader->map.terrain[i][j].terview;
|
|
|
+ int ktora = reader->map.terrain[i-4][j-4].terview;
|
|
|
terrainBitmap[i][j] = reader->defs[k]->ourImages[ktora].bitmap;
|
|
|
//TODO: odwracanie
|
|
|
- switch ((reader->map.terrain[i][j].siodmyTajemniczyBajt)%4)
|
|
|
+ switch ((reader->map.terrain[i-4][j-4].siodmyTajemniczyBajt)%4)
|
|
|
{
|
|
|
case 1:
|
|
|
{
|
|
|
@@ -57,15 +108,63 @@ void mapHandler::init()
|
|
|
}
|
|
|
if (reader->map.twoLevel)
|
|
|
{
|
|
|
- undTerrainBitmap = new SDL_Surface **[reader->map.width];
|
|
|
- for (int ii=0;ii<reader->map.width;ii++)
|
|
|
- undTerrainBitmap[ii] = new SDL_Surface*[reader->map.height]; // allocate memory
|
|
|
- for (int i=0; i<reader->map.width; i++)
|
|
|
+ undTerrainBitmap = new SDL_Surface **[reader->map.width+8];
|
|
|
+ for (int ii=0;ii<reader->map.width+8;ii++)
|
|
|
+ undTerrainBitmap[ii] = new SDL_Surface*[reader->map.height+8]; // allocate memory
|
|
|
+ for (int i=0; i<reader->map.width+8; i++)
|
|
|
{
|
|
|
- for (int j=0; j<reader->map.height;j++)
|
|
|
+ for (int j=0; j<reader->map.height+8;j++)
|
|
|
{
|
|
|
- TerrainTile zz = reader->map.undergroungTerrain[i][j];
|
|
|
- std::string name = CSemiDefHandler::nameFromType(reader->map.undergroungTerrain[i][j].tertype);
|
|
|
+ if(i < 4 || i > (reader->map.width+3) || j < 4 || j > (reader->map.height+3))
|
|
|
+ {
|
|
|
+ if(i==3 && j==3)
|
|
|
+ {
|
|
|
+ undTerrainBitmap[i][j] = bord->ourImages[16].bitmap;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ else if(i==3 && j==(reader->map.height+4))
|
|
|
+ {
|
|
|
+ undTerrainBitmap[i][j] = bord->ourImages[19].bitmap;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ else if(i==(reader->map.width+4) && j==3)
|
|
|
+ {
|
|
|
+ undTerrainBitmap[i][j] = bord->ourImages[17].bitmap;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ else if(i==(reader->map.width+4) && j==(reader->map.height+4))
|
|
|
+ {
|
|
|
+ undTerrainBitmap[i][j] = bord->ourImages[18].bitmap;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ else if(j == 3 && i > 3 && i < reader->map.height+4)
|
|
|
+ {
|
|
|
+ undTerrainBitmap[i][j] = bord->ourImages[22+rand()%2].bitmap;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ else if(i == 3 && j > 3 && j < reader->map.height+4)
|
|
|
+ {
|
|
|
+ undTerrainBitmap[i][j] = bord->ourImages[33+rand()%2].bitmap;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ else if(j == reader->map.height+4 && i > 3 && i < reader->map.width+4)
|
|
|
+ {
|
|
|
+ undTerrainBitmap[i][j] = bord->ourImages[29+rand()%2].bitmap;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ else if(i == reader->map.width+4 && j > 3 && j < reader->map.height+4)
|
|
|
+ {
|
|
|
+ undTerrainBitmap[i][j] = bord->ourImages[25+rand()%2].bitmap;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ undTerrainBitmap[i][j] = bord->ourImages[rand()%16].bitmap;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ TerrainTile zz = reader->map.undergroungTerrain[i-4][j-4];
|
|
|
+ std::string name = CSemiDefHandler::nameFromType(reader->map.undergroungTerrain[i-4][j-4].tertype);
|
|
|
for (unsigned int k=0; k<reader->defs.size(); k++)
|
|
|
{
|
|
|
try
|
|
|
@@ -75,10 +174,10 @@ void mapHandler::init()
|
|
|
else
|
|
|
{
|
|
|
SDL_Surface * n;
|
|
|
- int ktora = reader->map.undergroungTerrain[i][j].terview;
|
|
|
+ int ktora = reader->map.undergroungTerrain[i-4][j-4].terview;
|
|
|
undTerrainBitmap[i][j] = reader->defs[k]->ourImages[ktora].bitmap;
|
|
|
//TODO: odwracanie
|
|
|
- switch ((reader->map.undergroungTerrain[i][j].siodmyTajemniczyBajt)%4)
|
|
|
+ switch ((reader->map.undergroungTerrain[i-4][j-4].siodmyTajemniczyBajt)%4)
|
|
|
{
|
|
|
case 1:
|
|
|
{
|
|
|
@@ -123,7 +222,7 @@ SDL_Surface * mapHandler::terrainRect(int x, int y, int dx, int dy, int level)
|
|
|
#endif
|
|
|
SDL_Surface * su = SDL_CreateRGBSurface(SDL_SWSURFACE, dx*32, dy*32, 32,
|
|
|
rmask, gmask, bmask, amask);
|
|
|
- if (((dx+x)>((reader->map.width)) || (dy+y)>((reader->map.height))) || ((x<0)||(y<0) ) )
|
|
|
+ if (((dx+x)>((reader->map.width+8)) || (dy+y)>((reader->map.height+8))) || ((x<0)||(y<0) ) )
|
|
|
throw new std::string("Poza zakresem");
|
|
|
for (int bx=0; bx<dx; bx++)
|
|
|
{
|