1
0
mirror of https://github.com/vcmi/vcmi.git synced 2024-12-24 22:14:36 +02:00

zaczytywanie kolejnych tekstów, drobne eksperymenty z odcieniami cieni i obiektami na mapie (defy! królestwo za defy! ;])

This commit is contained in:
mateuszb 2007-06-27 20:17:58 +00:00
parent 118c917a60
commit 0428ea1f86
7 changed files with 176 additions and 48 deletions

View File

@ -4,6 +4,7 @@
#include "CGameInfo.h"
#include "CObjectHandler.h"
#include "CCastleHandler.h"
#include "SDL_Extensions.h"
#include <set>
unsigned int intPow(unsigned int a, unsigned int b)
@ -405,8 +406,12 @@ void CAmbarCendamo::deh3m()
map.defy.push_back(vinya); // add this def to the vector
//testing - only fragment//////////////////////////////////////////////////////////////
//map.defy[idd].handler = new CSemiDefHandler();
//map.defy[idd].handler->openDef(map.defy[idd].name.c_str(), "H3sprite.lod");
/*map.defy[idd].handler = new CSemiDefHandler();
map.defy[idd].handler->openDef(map.defy[idd].name.c_str(), "H3sprite.lod");
for(int ff=0; ff<map.defy[idd].handler->ourImages.size(); ++ff) //adding shadows and transparency
{
map.defy[idd].handler->ourImages[ff].bitmap = CSDL_Ext::alphaTransform(map.defy[idd].handler->ourImages[ff].bitmap);
}//*/
//end fo testing - only fragment///////////////////////////////////////////////////////
//teceDef();

View File

@ -283,7 +283,7 @@ int _tmain(int argc, _TCHAR* argv[])
CObjectHandler * objh = new CObjectHandler;
objh->loadObjects();
cgi->objh = objh;
CAmbarCendamo * ac = new CAmbarCendamo("4gryf"); //4gryf
CAmbarCendamo * ac = new CAmbarCendamo("9gryf"); //4gryf
CMapHeader * mmhh = new CMapHeader(ac->bufor); //czytanie nag³ówka
cgi->ac = ac;
THC std::cout<<"Wczytywanie pliku: "<<tmh.getDif()<<std::endl;

View File

@ -484,4 +484,58 @@ void CPreGameTextHandler::loadToIt(std::string &dest, std::string &src, int &ite
iter+=2;
}
}
}
loadLossConditions();
loadVictoryConditions();
}
void CPreGameTextHandler::loadVictoryConditions()
{
std::ifstream inp("H3bitmap.lod\\VCDESC.TXT", std::ios::in|std::ios::binary);
inp.seekg(0,std::ios::end); // na koniec
int andame = inp.tellg(); // read length
inp.seekg(0,std::ios::beg); // wracamy na poczatek
char * bufor = new char[andame]; // allocate memory
inp.read((char*)bufor, andame); // read map file to buffer
inp.close();
std::string buf = std::string(bufor);
delete [andame] bufor;
int i=0; //buf iterator
for(int gg=0; gg<14; ++gg)
{
int befi=i;
for(i; i<andame; ++i)
{
if(buf[i]=='\r')
break;
}
victoryConditions[gg] = buf.substr(befi, i-befi);
i+=2;
}
}
void CPreGameTextHandler::loadLossConditions()
{
std::ifstream inp("H3bitmap.lod\\LCDESC.TXT", std::ios::in|std::ios::binary);
inp.seekg(0,std::ios::end); // na koniec
int andame = inp.tellg(); // read length
inp.seekg(0,std::ios::beg); // wracamy na poczatek
char * bufor = new char[andame]; // allocate memory
inp.read((char*)bufor, andame); // read map file to buffer
inp.close();
std::string buf = std::string(bufor);
delete [andame] bufor;
int i=0; //buf iterator
for(int gg=0; gg<4; ++gg)
{
int befi=i;
for(i; i<andame; ++i)
{
if(buf[i]=='\r')
break;
}
lossCondtions[gg] = buf.substr(befi, i-befi);
i+=2;
}
}

View File

@ -7,7 +7,9 @@ class CPreGameTextHandler //handles pre - game texts
{
public:
std::string mainNewGame, mainLoadGame, mainHighScores, mainCredits, mainQuit; //right - click texts in main menu
std::string ngSingleScenario, ngCampain, ngMultiplayer, ngTutorial, ngBack; //right - click texts in new game menu
std::string singleChooseScenario, singleSetAdvOptions, singleRandomMap, singleScenarioName, singleDescriptionTitle, singleDescriptionText, singleEasy, singleNormal, singleHard, singleExpert, singleImpossible; //main single scenario texts
std::string singleAllyFlag[8], singleEnemyFlag[8];
std::string singleViewHideScenarioList, singleViewHideAdvOptions, singlePlayRandom, singleChatDesc, singleMapDifficulty, singleRating, singleMapPossibleDifficulties, singleVicCon, singleLossCon;
@ -30,10 +32,15 @@ public:
std::string multiGameNo [12];
std::string multiScrollGames, multiCancel;
std::string lossCondtions[4];
std::string victoryConditions[14];
std::string getTitle(std::string text);
std::string getDescr(std::string text);
void loadTexts();
void loadToIt(std::string & dest, std::string & src, int & iter, int mode = 0); //mode 0 - dump to tab, dest to tab, dump to eol //mode 1 - dump to tab, src to eol
void loadVictoryConditions();
void loadLossConditions();
};

View File

@ -2,6 +2,7 @@
#include "SDL_Extensions.h"
#include "SDL_TTF.h"
#include <iostream>
extern SDL_Surface * ekran;
extern SDL_Color tytulowy, tlo, zwykly ;
bool isItIn(const SDL_Rect * rect, int x, int y)
@ -305,7 +306,27 @@ SDL_Surface * CSDL_Ext::alphaTransform(SDL_Surface *src)
{
SDL_Color shadow;
shadow.b = shadow.g = shadow.r = 0;
shadow.unused = cur.g + 25; //25 is a scalable constans to make it nicer
switch(cur.g) //change this values; make diffrerent for objects and shadows (?)
{
case 0:
shadow.unused = 0+32;
break;
case 50:
shadow.unused = 50+32;
break;
case 100:
shadow.unused = 100+64;
break;
case 128:
shadow.unused = 128+64;
break;
case 150:
shadow.unused = 150+64;
break;
default:
shadow.unused = 255;
break;
}
SDL_SetColors(src, &shadow, yy, 1);
}
if(cur.g == 255 && cur.b == 255)
@ -321,6 +342,38 @@ SDL_Surface * CSDL_Ext::alphaTransform(SDL_Surface *src)
return src;
}
SDL_Surface * CSDL_Ext::secondAlphaTransform(SDL_Surface * src, SDL_Surface * alpha)
{
Uint32 pompom[192][192];
for(int i=0; i<src->w; ++i)
{
for(int j=0; j<src->h; ++j)
{
pompom[i][j] = 0xffffffff - (SDL_GetPixel(src, i, j, true) & 0xff000000);
}
}
Uint32 pompom2[192][192];
for(int i=0; i<src->w; ++i)
{
for(int j=0; j<src->h; ++j)
{
pompom2[i][j] = pompom[i][j]>>24;
}
}
SDL_Surface * hide2 = SDL_ConvertSurface(src, alpha->format, SDL_SWSURFACE);
for(int i=0; i<hide2->w; ++i)
{
for(int j=0; j<hide2->h; ++j)
{
Uint32 * place = (Uint32*)( (Uint8*)hide2->pixels + j * hide2->pitch + i * hide2->format->BytesPerPixel);
(*place)&=pompom[i][j];
int ffgg=0;
}
}
return hide2;
}
Uint32 CSDL_Ext::colorToUint32(const SDL_Color * color)
{
Uint32 ret = 0;

View File

@ -14,6 +14,7 @@ public:
static Uint32 SDL_GetPixel(SDL_Surface *surface, int x, int y, bool colorByte = false);
static SDL_Color SDL_GetPixelColor(SDL_Surface *surface, int x, int y);
static SDL_Surface * alphaTransform(SDL_Surface * src); //adds transparency and shadows (partial handling only; see examples of using for details)
static SDL_Surface * secondAlphaTransform(SDL_Surface * src, SDL_Surface * alpha); //alpha is a surface we want to blit src to
static Uint32 colorToUint32(const SDL_Color * color); //little endian only
};

View File

@ -109,7 +109,6 @@ void CMapHandler::init()
continue;
else
{
SDL_Surface * n;
int ktora = reader->map.terrain[i-4][j-4].terview;
terrainBitmap[i][j] = reader->defs[k]->ourImages[ktora].bitmap;
//TODO: odwracanie
@ -208,7 +207,6 @@ void CMapHandler::init()
continue;
else
{
SDL_Surface * n;
int ktora = reader->map.undergroungTerrain[i-4][j-4].terview;
undTerrainBitmap[i][j] = reader->defs[k]->ourImages[ktora].bitmap;
//TODO: odwracanie
@ -261,6 +259,7 @@ SDL_Surface * CMapHandler::terrainRect(int x, int y, int dx, int dy, int level)
rmask, gmask, bmask, amask);
if (((dx+x)>((reader->map.width+8)) || (dy+y)>((reader->map.height+8))) || ((x<0)||(y<0) ) )
throw new std::string("Poza zakresem");
////printing terrain
for (int bx=0; bx<dx; bx++)
{
for (int by=0; by<dy; by++)
@ -272,61 +271,70 @@ SDL_Surface * CMapHandler::terrainRect(int x, int y, int dx, int dy, int level)
if (!level)
{
SDL_BlitSurface(terrainBitmap[bx+x][by+y],NULL,su,sr);
if( bx+x>3 && by+y>3 && bx+x<visibility.size()-3 && by+y<visibility[0].size()-3 && !visibility[bx+x][by+y])
{
SDL_Surface * hide = getVisBitmap(bx+x, by+y, visibility);
Uint32 pompom[32][32];
for(int i=0; i<hide->w; ++i)
{
for(int j=0; j<hide->h; ++j)
{
pompom[i][j] = 0xffffffff - (CSDL_Ext::SDL_GetPixel(hide, i, j, true) & 0xff000000);
}
}
SDL_Surface * hide2 = SDL_ConvertSurface(hide, su->format, SDL_SWSURFACE);
for(int i=0; i<hide2->w; ++i)
{
for(int j=0; j<hide2->h; ++j)
{
Uint32 * place = (Uint32*)( (Uint8*)hide2->pixels + j * hide2->pitch + i * hide2->format->BytesPerPixel);
(*place)&=pompom[i][j];
}
}
SDL_BlitSurface(hide2, NULL, su, sr);
SDL_FreeSurface(hide2);
}
}
else
{
SDL_BlitSurface(undTerrainBitmap[bx+x][by+y],NULL,su,sr);
}
delete sr;
}
}
////terrain printed; printing objects
/*
for (int bx=0; bx<dx; bx++)
{
for (int by=0; by<dy; by++)
{
for(int gg=0; gg<CGameInfo::mainObj->objh->objInstances.size(); ++gg)
{
if(CGameInfo::mainObj->objh->objInstances[gg].x == bx+x-4 && CGameInfo::mainObj->objh->objInstances[gg].y == by+y-4 && CGameInfo::mainObj->objh->objInstances[gg].z == level)
{
SDL_Rect * sr = new SDL_Rect;
sr->h=sr->w=192;
sr->x = (bx)*32 - CGameInfo::mainObj->ac->map.defy[CGameInfo::mainObj->objh->objInstances[gg].defNumber].handler->ourImages[0].bitmap->w + 32;
sr->y = (by)*32 - CGameInfo::mainObj->ac->map.defy[CGameInfo::mainObj->objh->objInstances[gg].defNumber].handler->ourImages[0].bitmap->h + 32;
SDL_Surface * s2 = CSDL_Ext::secondAlphaTransform(CGameInfo::mainObj->ac->map.defy[CGameInfo::mainObj->objh->objInstances[gg].defNumber].handler->ourImages[0].bitmap, su);
SDL_BlitSurface(s2, NULL, su, sr);
SDL_FreeSurface(s2);
delete sr;
}
}
}
}//*/
////objects printed, printing shadow
for (int bx=0; bx<dx; bx++)
{
for (int by=0; by<dy; by++)
{
SDL_Rect * sr = new SDL_Rect;
sr->y=by*32;
sr->x=bx*32;
sr->h=sr->w=32;
if (!level)
{
if( bx+x>3 && by+y>3 && bx+x<visibility.size()-3 && by+y<visibility[0].size()-3 && !visibility[bx+x][by+y])
{
SDL_Surface * hide = getVisBitmap(bx+x, by+y, visibility);
SDL_Surface * hide2 = CSDL_Ext::secondAlphaTransform(hide, su);
SDL_BlitSurface(hide2, NULL, su, sr);
SDL_FreeSurface(hide2);
}
}
else
{
if( bx+x>3 && by+y>3 && bx+x<undVisibility.size()-3 && by+y<undVisibility[0].size()-3 && !undVisibility[bx+x][by+y])
{
SDL_Surface * hide = getVisBitmap(bx+x, by+y, undVisibility);
Uint32 pompom[32][32];
for(int i=0; i<hide->w; ++i)
{
for(int j=0; j<hide->h; ++j)
{
pompom[i][j] = 0xffffffff - (CSDL_Ext::SDL_GetPixel(hide, i, j, true) & 0xff000000);
}
}
SDL_Surface * hide2 = SDL_ConvertSurface(hide, su->format, SDL_SWSURFACE);
for(int i=0; i<hide2->w; ++i)
{
for(int j=0; j<hide2->h; ++j)
{
Uint32 * place = (Uint32*)( (Uint8*)hide2->pixels + j * hide2->pitch + i * hide2->format->BytesPerPixel);
(*place)&=pompom[i][j];
}
}
SDL_Surface * hide2 = CSDL_Ext::secondAlphaTransform(hide, su);
SDL_BlitSurface(hide2, NULL, su, sr);
SDL_FreeSurface(hide2);
}
}
delete sr;
//SDL_BlitSurface(su,NULL,ekran,NULL);SDL_Flip(ekran);
}
}
////shadow printed
return su;
}