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

* better support for non-800x600 resolutions

* Merged CPreGameTextHandler into CGeneralTextHandler and moved to VCMI_Lib.dll (update your project files)
* Genius AI will be used as a default AI
* more code for save/load
This commit is contained in:
Michał W. Urbańczyk 2008-11-28 01:36:34 +00:00
parent aeb1f6d012
commit c4bcf7b880
36 changed files with 681 additions and 492 deletions

View File

@ -118,7 +118,7 @@
/> />
<Tool <Tool
Name="VCCLCompilerTool" Name="VCCLCompilerTool"
Optimization="2" Optimization="3"
EnableIntrinsicFunctions="true" EnableIntrinsicFunctions="true"
AdditionalIncludeDirectories="&quot;D:\!GameDevelopment\VCMI\libs\include&quot;;G:\vcmt\repa\include" AdditionalIncludeDirectories="&quot;D:\!GameDevelopment\VCMI\libs\include&quot;;G:\vcmt\repa\include"
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;GENIUS_EXPORTS" PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;GENIUS_EXPORTS"
@ -140,9 +140,9 @@
<Tool <Tool
Name="VCLinkerTool" Name="VCLinkerTool"
AdditionalDependencies="VCMI_lib.lib" AdditionalDependencies="VCMI_lib.lib"
OutputFile="D:\Gry\heroes3\AI\genius.dll" OutputFile="../GeniusAI.dll"
LinkIncremental="1" LinkIncremental="1"
AdditionalLibraryDirectories="C:\boost\boost_1_36_0\lib;&quot;D:\!GameDevelopment\VCMI\svn\trunk&quot;;&quot;D:\!GameDevelopment\VCMI\libs\lib&quot;;G:\vcmt\repa\libs" AdditionalLibraryDirectories="G:\vcmt\repa\libs"
GenerateManifest="false" GenerateManifest="false"
GenerateDebugInformation="true" GenerateDebugInformation="true"
SubSystem="2" SubSystem="2"

View File

@ -3,7 +3,7 @@
#include "hch/CDefHandler.h" #include "hch/CDefHandler.h"
#include "CGameInfo.h" #include "CGameInfo.h"
#include "hch/CLodHandler.h" #include "hch/CLodHandler.h"
#include "hch/CPreGameTextHandler.h" #include "hch/CGeneralTextHandler.h"
#include "hch/CTownHandler.h" #include "hch/CTownHandler.h"
#include "CCallback.h" #include "CCallback.h"
#include "client/CConfigHandler.h" #include "client/CConfigHandler.h"

View File

@ -17,7 +17,6 @@
#include "hch/CGeneralTextHandler.h" #include "hch/CGeneralTextHandler.h"
#include "hch/CHeroHandler.h" #include "hch/CHeroHandler.h"
#include "hch/CObjectHandler.h" #include "hch/CObjectHandler.h"
#include "hch/CPreGameTextHandler.h"
#include "hch/CTownHandler.h" #include "hch/CTownHandler.h"
#include "lib/CondSh.h" #include "lib/CondSh.h"
#include "map.h" #include "map.h"
@ -42,15 +41,15 @@ CAdvMapInt::~CAdvMapInt()
CMinimap::CMinimap(bool draw) CMinimap::CMinimap(bool draw)
{ {
int3 mapSizes = LOCPLINT->cb->getMapSize(); int3 mapSizes = LOCPLINT->cb->getMapSize();
statusbarTxt = CGI->preth->zelp[291].first; statusbarTxt = CGI->generaltexth->zelp[291].first;
rcText = CGI->preth->zelp[291].second; rcText = CGI->generaltexth->zelp[291].second;
pos.x=ADVOPT.minimapX;//630 pos.x=ADVOPT.minimapX;//630
pos.y=ADVOPT.minimapY;//26 pos.y=ADVOPT.minimapY;//26
pos.h=ADVOPT.minimapW;//144 pos.h=ADVOPT.minimapW;//144
pos.w=ADVOPT.minimapH;//144 pos.w=ADVOPT.minimapH;//144
int rx = (((float)19)/(mapSizes.x))*((float)pos.w), int rx = (((float)ADVOPT.tilesW)/(mapSizes.x))*((float)pos.w),
ry = (((float)18)/(mapSizes.y))*((float)pos.h); ry = (((float)ADVOPT.tilesH)/(mapSizes.y))*((float)pos.h);
radar = newSurface(rx,ry); radar = newSurface(rx,ry);
temps = newSurface(pos.w,pos.h); temps = newSurface(pos.w,pos.h);
@ -295,12 +294,12 @@ void CMinimap::hideTile(const int3 &pos)
} }
CTerrainRect::CTerrainRect():currentPath(NULL) CTerrainRect::CTerrainRect():currentPath(NULL)
{ {
tilesw=19; tilesw=ADVOPT.tilesW;
tilesh=18; tilesh=ADVOPT.tilesH;
pos.x=7; pos.x=ADVOPT.advmapX;
pos.y=6; pos.y=ADVOPT.advmapY;
pos.w=593; pos.w=tilesw*32 - ADVOPT.advmapTrimX;
pos.h=547; pos.h=tilesh*32 - ADVOPT.advmapTrimY;
moveX = moveY = 0; moveX = moveY = 0;
arrows = CDefHandler::giveDef("ADAG.DEF"); arrows = CDefHandler::giveDef("ADAG.DEF");
for(int y=0; y<arrows->ourImages.size(); ++y) for(int y=0; y<arrows->ourImages.size(); ++y)
@ -733,7 +732,7 @@ void CTerrainRect::show()
(LOCPLINT->adventureInt->position.x,LOCPLINT->adventureInt->position.y, (LOCPLINT->adventureInt->position.x,LOCPLINT->adventureInt->position.y,
tilesw,tilesh,LOCPLINT->adventureInt->position.z,LOCPLINT->adventureInt->anim, tilesw,tilesh,LOCPLINT->adventureInt->position.z,LOCPLINT->adventureInt->anim,
&LOCPLINT->cb->getVisibilityMap(), true, LOCPLINT->adventureInt->heroAnim, &LOCPLINT->cb->getVisibilityMap(), true, LOCPLINT->adventureInt->heroAnim,
screen, &genRect(547, 594, 7, 6) screen, &genRect(pos.h, pos.w, pos.x, pos.y)
); );
//SDL_BlitSurface(teren,&genRect(pos.h,pos.w,0,0),screen,&genRect(547,594,7,6)); //SDL_BlitSurface(teren,&genRect(pos.h,pos.w,0,0),screen,&genRect(547,594,7,6));
//SDL_FreeSurface(teren); //SDL_FreeSurface(teren);
@ -773,11 +772,19 @@ CResDataBar::CResDataBar()
graphics->blueToPlayersAdv(bg,LOCPLINT->playerID); graphics->blueToPlayersAdv(bg,LOCPLINT->playerID);
pos = genRect(bg->h,bg->w,ADVOPT.resdatabarX,ADVOPT.resdatabarY); pos = genRect(bg->h,bg->w,ADVOPT.resdatabarX,ADVOPT.resdatabarY);
txtpos += (std::pair<int,int>(35,577)),(std::pair<int,int>(120,577)),(std::pair<int,int>(205,577)), txtpos.resize(8);
(std::pair<int,int>(290,577)),(std::pair<int,int>(375,577)),(std::pair<int,int>(460,577)), for (int i = 0; i < 8 ; i++)
(std::pair<int,int>(545,577)),(std::pair<int,int>(620,577)); {
datetext = CGI->generaltexth->allTexts[62]+": %s, " + CGI->generaltexth->allTexts[63] + ": %s, " + txtpos[i].first = pos.x + ADVOPT.resOffsetX + ADVOPT.resDist*i;
CGI->generaltexth->allTexts[64] + ": %s"; txtpos[i].second = pos.y + ADVOPT.resOffsetY;
}
txtpos[7].first = txtpos[6].first + ADVOPT.resDateDist;
//txtpos += (std::pair<int,int>(32+pos.x,2+pos.y)),(std::pair<int,int>(117+pos.x,2+pos.y)),
// (std::pair<int,int>(202+pos.x,2+pos.y)),(std::pair<int,int>(287+pos.x,2+pos.y)),
// (std::pair<int,int>(372+pos.x,2+pos.y)),(std::pair<int,int>(457+pos.x,2+pos.y)),
// (std::pair<int,int>(542+pos.x,2+pos.y)),(std::pair<int,int>(617+pos.x,2+pos.y));
datetext = CGI->generaltexth->allTexts[62]+": %s, " + CGI->generaltexth->allTexts[63]
+ ": %s, " + CGI->generaltexth->allTexts[64] + ": %s";
} }
CResDataBar::~CResDataBar() CResDataBar::~CResDataBar()
@ -805,8 +812,8 @@ void CResDataBar::draw()
CInfoBar::CInfoBar() CInfoBar::CInfoBar()
{ {
toNextTick = mode = pom = -1; toNextTick = mode = pom = -1;
pos.x=605; pos.x=ADVOPT.infoboxX;
pos.y=389; pos.y=ADVOPT.infoboxY;
pos.w=194; pos.w=194;
pos.h=186; pos.h=186;
day = CDefHandler::giveDef("NEWDAY.DEF"); day = CDefHandler::giveDef("NEWDAY.DEF");
@ -898,7 +905,7 @@ void CInfoBar::blitAnim(int mode)//0 - day, 1 - week
txt << CGI->generaltexth->allTexts[64] << " " << LOCPLINT->cb->getDate(1); txt << CGI->generaltexth->allTexts[64] << " " << LOCPLINT->cb->getDate(1);
} }
blitAt(anim->ourImages[pom].bitmap,pos.x+9,pos.y+10); blitAt(anim->ourImages[pom].bitmap,pos.x+9,pos.y+10);
printAtMiddle(txt.str(),700,420,TNRB16,zwykly); printAtMiddle(txt.str(),pos.x+95,pos.y+31,TNRB16,zwykly);
if (pom == anim->ourImages.size()-1) if (pom == anim->ourImages.size()-1)
toNextTick+=750; toNextTick+=750;
} }
@ -978,37 +985,37 @@ void CInfoBar::tick()
CAdvMapInt::CAdvMapInt(int Player) CAdvMapInt::CAdvMapInt(int Player)
:player(Player), :player(Player),
statusbar(ADVOPT.statusbarX,ADVOPT.statusbarY,ADVOPT.statusbarG), statusbar(ADVOPT.statusbarX,ADVOPT.statusbarY,ADVOPT.statusbarG),
kingOverview(CGI->preth->zelp[293].first,CGI->preth->zelp[293].second, kingOverview(CGI->generaltexth->zelp[293].first,CGI->generaltexth->zelp[293].second,
boost::bind(&CAdvMapInt::fshowOverview,this),&ADVOPT.kingOverview, SDLK_k), boost::bind(&CAdvMapInt::fshowOverview,this),&ADVOPT.kingOverview, SDLK_k),
underground(CGI->preth->zelp[294].first,CGI->preth->zelp[294].second, underground(CGI->generaltexth->zelp[294].first,CGI->generaltexth->zelp[294].second,
boost::bind(&CAdvMapInt::fswitchLevel,this),&ADVOPT.underground, SDLK_u), boost::bind(&CAdvMapInt::fswitchLevel,this),&ADVOPT.underground, SDLK_u),
questlog(CGI->preth->zelp[295].first,CGI->preth->zelp[295].second, questlog(CGI->generaltexth->zelp[295].first,CGI->generaltexth->zelp[295].second,
boost::bind(&CAdvMapInt::fshowQuestlog,this),&ADVOPT.questlog, SDLK_q), boost::bind(&CAdvMapInt::fshowQuestlog,this),&ADVOPT.questlog, SDLK_q),
sleepWake(CGI->preth->zelp[296].first,CGI->preth->zelp[296].second, sleepWake(CGI->generaltexth->zelp[296].first,CGI->generaltexth->zelp[296].second,
boost::bind(&CAdvMapInt::fsleepWake,this), &ADVOPT.sleepWake, SDLK_w), boost::bind(&CAdvMapInt::fsleepWake,this), &ADVOPT.sleepWake, SDLK_w),
moveHero(CGI->preth->zelp[297].first,CGI->preth->zelp[297].second, moveHero(CGI->generaltexth->zelp[297].first,CGI->generaltexth->zelp[297].second,
boost::bind(&CAdvMapInt::fmoveHero,this), &ADVOPT.moveHero, SDLK_m), boost::bind(&CAdvMapInt::fmoveHero,this), &ADVOPT.moveHero, SDLK_m),
spellbook(CGI->preth->zelp[298].first,CGI->preth->zelp[298].second, spellbook(CGI->generaltexth->zelp[298].first,CGI->generaltexth->zelp[298].second,
boost::bind(&CAdvMapInt::fshowSpellbok,this), &ADVOPT.spellbook, SDLK_c), boost::bind(&CAdvMapInt::fshowSpellbok,this), &ADVOPT.spellbook, SDLK_c),
advOptions(CGI->preth->zelp[299].first,CGI->preth->zelp[299].second, advOptions(CGI->generaltexth->zelp[299].first,CGI->generaltexth->zelp[299].second,
boost::bind(&CAdvMapInt::fadventureOPtions,this), &ADVOPT.advOptions, SDLK_a), boost::bind(&CAdvMapInt::fadventureOPtions,this), &ADVOPT.advOptions, SDLK_a),
sysOptions(CGI->preth->zelp[300].first,CGI->preth->zelp[300].second, sysOptions(CGI->generaltexth->zelp[300].first,CGI->generaltexth->zelp[300].second,
boost::bind(&CAdvMapInt::fsystemOptions,this), &ADVOPT.sysOptions, SDLK_o), boost::bind(&CAdvMapInt::fsystemOptions,this), &ADVOPT.sysOptions, SDLK_o),
nextHero(CGI->preth->zelp[301].first,CGI->preth->zelp[301].second, nextHero(CGI->generaltexth->zelp[301].first,CGI->generaltexth->zelp[301].second,
boost::bind(&CAdvMapInt::fnextHero,this), &ADVOPT.nextHero, SDLK_h), boost::bind(&CAdvMapInt::fnextHero,this), &ADVOPT.nextHero, SDLK_h),
endTurn(CGI->preth->zelp[302].first,CGI->preth->zelp[302].second, endTurn(CGI->generaltexth->zelp[302].first,CGI->generaltexth->zelp[302].second,
boost::bind(&CAdvMapInt::fendTurn,this), &ADVOPT.endTurn, SDLK_e), boost::bind(&CAdvMapInt::fendTurn,this), &ADVOPT.endTurn, SDLK_e),
townList(5,ADVOPT.tlistX,ADVOPT.tlistY,ADVOPT.tlistAU,ADVOPT.tlistAD),//(5,&genRect(192,48,747,196),747,196,747,372), townList(ADVOPT.tlistSize,ADVOPT.tlistX,ADVOPT.tlistY,ADVOPT.tlistAU,ADVOPT.tlistAD),//(5,&genRect(192,48,747,196),747,196,747,372),
heroList(ADVOPT.hlistSize) heroList(ADVOPT.hlistSize)
{ {
selection = NULL; selection = NULL;
@ -1218,7 +1225,7 @@ void CAdvMapInt::update()
} }
if(scrollingRight) if(scrollingRight)
{ {
if(position.x<CGI->mh->map->width-19+4) if(position.x < CGI->mh->map->width - terrain.tilesw + 4 )
{ {
position.x++; position.x++;
updateScreen = true; updateScreen = true;
@ -1236,7 +1243,7 @@ void CAdvMapInt::update()
} }
if(scrollingDown) if(scrollingDown)
{ {
if(position.y<CGI->mh->map->height-18+4) if(position.y < CGI->mh->map->height - terrain.tilesh + 4)
{ {
position.y++; position.y++;
updateScreen = true; updateScreen = true;

View File

@ -12,7 +12,6 @@
#include "CCallback.h" #include "CCallback.h"
#include "CGameState.h" #include "CGameState.h"
#include "hch/CGeneralTextHandler.h" #include "hch/CGeneralTextHandler.h"
#include "hch/CPreGameTextHandler.h"
#include "client/CCreatureAnimation.h" #include "client/CCreatureAnimation.h"
#include "client/Graphics.h" #include "client/Graphics.h"
#include "client/CSpellWindow.h" #include "client/CSpellWindow.h"
@ -2272,23 +2271,23 @@ CBattleOptionsWindow::CBattleOptionsWindow(const SDL_Rect & position, CBattleInt
background = BitmapHandler::loadBitmap("comopbck.bmp", true); background = BitmapHandler::loadBitmap("comopbck.bmp", true);
graphics->blueToPlayersAdv(background, LOCPLINT->playerID); graphics->blueToPlayersAdv(background, LOCPLINT->playerID);
viewGrid = new CHighlightableButton(boost::bind(&CBattleInterface::setPrintCellBorders, owner, true), boost::bind(&CBattleInterface::setPrintCellBorders, owner, false), boost::assign::map_list_of(0,CGI->preth->zelp[427].first)(3,CGI->preth->zelp[427].first), CGI->preth->zelp[427].second, false, "sysopchk.def", NULL, 185, 140, false); viewGrid = new CHighlightableButton(boost::bind(&CBattleInterface::setPrintCellBorders, owner, true), boost::bind(&CBattleInterface::setPrintCellBorders, owner, false), boost::assign::map_list_of(0,CGI->generaltexth->zelp[427].first)(3,CGI->generaltexth->zelp[427].first), CGI->generaltexth->zelp[427].second, false, "sysopchk.def", NULL, 185, 140, false);
viewGrid->select(owner->printCellBorders); viewGrid->select(owner->printCellBorders);
movementShadow = new CHighlightableButton(boost::bind(&CBattleInterface::setPrintStackRange, owner, true), boost::bind(&CBattleInterface::setPrintStackRange, owner, false), boost::assign::map_list_of(0,CGI->preth->zelp[428].first)(3,CGI->preth->zelp[428].first), CGI->preth->zelp[428].second, false, "sysopchk.def", NULL, 185, 173, false); movementShadow = new CHighlightableButton(boost::bind(&CBattleInterface::setPrintStackRange, owner, true), boost::bind(&CBattleInterface::setPrintStackRange, owner, false), boost::assign::map_list_of(0,CGI->generaltexth->zelp[428].first)(3,CGI->generaltexth->zelp[428].first), CGI->generaltexth->zelp[428].second, false, "sysopchk.def", NULL, 185, 173, false);
movementShadow->select(owner->printStackRange); movementShadow->select(owner->printStackRange);
mouseShadow = new CHighlightableButton(boost::bind(&CBattleInterface::setPrintMouseShadow, owner, true), boost::bind(&CBattleInterface::setPrintMouseShadow, owner, false), boost::assign::map_list_of(0,CGI->preth->zelp[429].first)(3,CGI->preth->zelp[429].first), CGI->preth->zelp[429].second, false, "sysopchk.def", NULL, 185, 207, false); mouseShadow = new CHighlightableButton(boost::bind(&CBattleInterface::setPrintMouseShadow, owner, true), boost::bind(&CBattleInterface::setPrintMouseShadow, owner, false), boost::assign::map_list_of(0,CGI->generaltexth->zelp[429].first)(3,CGI->generaltexth->zelp[429].first), CGI->generaltexth->zelp[429].second, false, "sysopchk.def", NULL, 185, 207, false);
mouseShadow->select(owner->printMouseShadow); mouseShadow->select(owner->printMouseShadow);
animSpeeds = new CHighlightableButtonsGroup(0); animSpeeds = new CHighlightableButtonsGroup(0);
animSpeeds->addButton(boost::assign::map_list_of(0,CGI->preth->zelp[422].first),CGI->preth->zelp[422].second, "sysopb9.def",188, 309, 1); animSpeeds->addButton(boost::assign::map_list_of(0,CGI->generaltexth->zelp[422].first),CGI->generaltexth->zelp[422].second, "sysopb9.def",188, 309, 1);
animSpeeds->addButton(boost::assign::map_list_of(0,CGI->preth->zelp[423].first),CGI->preth->zelp[423].second, "sysob10.def",252, 309, 2); animSpeeds->addButton(boost::assign::map_list_of(0,CGI->generaltexth->zelp[423].first),CGI->generaltexth->zelp[423].second, "sysob10.def",252, 309, 2);
animSpeeds->addButton(boost::assign::map_list_of(0,CGI->preth->zelp[424].first),CGI->preth->zelp[424].second, "sysob11.def",315, 309, 4); animSpeeds->addButton(boost::assign::map_list_of(0,CGI->generaltexth->zelp[424].first),CGI->generaltexth->zelp[424].second, "sysob11.def",315, 309, 4);
animSpeeds->select(owner->getAnimSpeed(), 1); animSpeeds->select(owner->getAnimSpeed(), 1);
animSpeeds->onChange = boost::bind(&CBattleInterface::setAnimSpeed, owner, _1); animSpeeds->onChange = boost::bind(&CBattleInterface::setAnimSpeed, owner, _1);
setToDefault = new AdventureMapButton (CGI->preth->zelp[392].first, CGI->preth->zelp[392].second, boost::bind(&CBattleOptionsWindow::bDefaultf,this), 405, 443, "codefaul.def"); setToDefault = new AdventureMapButton (CGI->generaltexth->zelp[392].first, CGI->generaltexth->zelp[392].second, boost::bind(&CBattleOptionsWindow::bDefaultf,this), 405, 443, "codefaul.def");
std::swap(setToDefault->imgs[0][0], setToDefault->imgs[0][1]); std::swap(setToDefault->imgs[0][0], setToDefault->imgs[0][1]);
exit = new AdventureMapButton (CGI->preth->zelp[393].first, CGI->preth->zelp[393].second, boost::bind(&CBattleOptionsWindow::bExitf,this), 516, 443, "soretrn.def",SDLK_RETURN); exit = new AdventureMapButton (CGI->generaltexth->zelp[393].first, CGI->generaltexth->zelp[393].second, boost::bind(&CBattleOptionsWindow::bExitf,this), 516, 443, "soretrn.def",SDLK_RETURN);
std::swap(exit->imgs[0][0], exit->imgs[0][1]); std::swap(exit->imgs[0][0], exit->imgs[0][1]);
//printing texts to background //printing texts to background

View File

@ -40,8 +40,8 @@ CBuildingRect::CBuildingRect(Structure *Str)
} }
} }
pos.x = str->pos.x; pos.x = str->pos.x + LOCPLINT->castleInt->pos.x;
pos.y = str->pos.y; pos.y = str->pos.y + LOCPLINT->castleInt->pos.y;
pos.w = def->ourImages[0].bitmap->w; pos.w = def->ourImages[0].bitmap->w;
pos.h = def->ourImages[0].bitmap->h; pos.h = def->ourImages[0].bitmap->h;
if(Str->ID<0 || (Str->ID>=27 && Str->ID<=29)) if(Str->ID<0 || (Str->ID>=27 && Str->ID<=29))
@ -342,10 +342,17 @@ public:
CCastleInterface::CCastleInterface(const CGTownInstance * Town, bool Activate) CCastleInterface::CCastleInterface(const CGTownInstance * Town, bool Activate)
:hslotup(241,387,0,Town->garrisonHero,this),hslotdown(241,483,1,Town->visitingHero,this) :hslotup(241,387,0,Town->garrisonHero,this),hslotdown(241,483,1,Town->visitingHero,this)
{ {
LOCPLINT->castleInt = this;
subInt = NULL; subInt = NULL;
hall = NULL; hall = NULL;
townInt = BitmapHandler::loadBitmap("TOWNSCRN.bmp"); townInt = BitmapHandler::loadBitmap("TOWNSCRN.bmp");
cityBg = BitmapHandler::loadBitmap(getBgName(Town->subID)); cityBg = BitmapHandler::loadBitmap(getBgName(Town->subID));
pos.x = screen->w/2 - 400;
pos.y = screen->h/2 - 300;
hslotup.pos.x += pos.x;
hslotup.pos.y += pos.y;
hslotdown.pos.x += pos.x;
hslotdown.pos.y += pos.y;
hall = CDefHandler::giveDef("ITMTL.DEF"); hall = CDefHandler::giveDef("ITMTL.DEF");
fort = CDefHandler::giveDef("ITMCL.DEF"); fort = CDefHandler::giveDef("ITMCL.DEF");
hBuild = NULL; hBuild = NULL;
@ -353,14 +360,14 @@ CCastleInterface::CCastleInterface(const CGTownInstance * Town, bool Activate)
town = Town; town = Town;
//garrison //garrison
garr = new CGarrisonInt(305,387,4,32,townInt,243,13,town,town->visitingHero); garr = new CGarrisonInt(pos.x+305,pos.y+387,4,32,townInt,243,13,town,town->visitingHero);
townlist = new CTownList(3,744,414,"IAM014.DEF","IAM015.DEF");//744,526); townlist = new CTownList(3,pos.x+744,pos.y+414,"IAM014.DEF","IAM015.DEF");//744,526);
exit = new AdventureMapButton exit = new AdventureMapButton
(CGI->townh->tcommands[8],"",boost::bind(&CCastleInterface::close,this),744,544,"TSBTNS.DEF",SDLK_RETURN); (CGI->townh->tcommands[8],"",boost::bind(&CCastleInterface::close,this),pos.x+744,pos.y+544,"TSBTNS.DEF",SDLK_RETURN);
split = new AdventureMapButton split = new AdventureMapButton
(CGI->townh->tcommands[3],"",boost::bind(&CGarrisonInt::splitClick,garr),744,382,"TSBTNS.DEF"); (CGI->townh->tcommands[3],"",boost::bind(&CGarrisonInt::splitClick,garr),pos.x+744,pos.y+382,"TSBTNS.DEF");
statusbar = new CStatusBar(8,555,"TSTATBAR.bmp",732); statusbar = new CStatusBar(pos.x+7,pos.y+555,"TSTATBAR.bmp",732);
townlist->fun = boost::bind(&CCastleInterface::townChange,this); townlist->fun = boost::bind(&CCastleInterface::townChange,this);
townlist->genList(); townlist->genList();
@ -414,18 +421,9 @@ CCastleInterface::CCastleInterface(const CGTownInstance * Town, bool Activate)
defname = "HALLELEM.DEF"; defname = "HALLELEM.DEF";
break; break;
default: default:
#ifndef __GNUC__ throw new std::string("Wrong town subID");
throw new std::exception("Bad town subID");
#else
throw new std::exception();
#endif
} }
bicons = CDefHandler::giveDefEss(defname); bicons = CDefHandler::giveDefEss(defname);
//blit buildings on bg
//for(int i=0;i<buildings.size();i++)
//{
// blitAt(buildings[i]->def->ourImages[0].bitmap,buildings[i]->pos.x,buildings[i]->pos.y,cityBg);
//}
} }
CCastleInterface::~CCastleInterface() CCastleInterface::~CCastleInterface()
{ {
@ -570,8 +568,8 @@ void CCastleInterface::showAll( SDL_Surface * to/*=NULL*/, bool forceTotalRedraw
{ {
if (!to) if (!to)
to=screen; to=screen;
blitAt(cityBg,0,0,to); blitAt(cityBg,pos,to);
blitAt(townInt,0,374,to); blitAt(townInt,pos.x,pos.y+374,to);
LOCPLINT->adventureInt->resdatabar.draw(); LOCPLINT->adventureInt->resdatabar.draw();
townlist->draw(); townlist->draw();
statusbar->show(); statusbar->show();
@ -587,7 +585,7 @@ void CCastleInterface::showAll( SDL_Surface * to/*=NULL*/, bool forceTotalRedraw
else if(town->builtBuildings.find(7)!=town->builtBuildings.end()) else if(town->builtBuildings.find(7)!=town->builtBuildings.end())
pom = 0; pom = 0;
else pom = 3; else pom = 3;
blitAt(fort->ourImages[pom].bitmap,122,413,to); blitAt(fort->ourImages[pom].bitmap,pos.x+122,pos.y+413,to);
//draw ((village/town/city) hall)/capitol icon //draw ((village/town/city) hall)/capitol icon
if(town->builtBuildings.find(13)!=town->builtBuildings.end()) if(town->builtBuildings.find(13)!=town->builtBuildings.end())
@ -597,7 +595,7 @@ void CCastleInterface::showAll( SDL_Surface * to/*=NULL*/, bool forceTotalRedraw
else if(town->builtBuildings.find(11)!=town->builtBuildings.end()) else if(town->builtBuildings.find(11)!=town->builtBuildings.end())
pom = 1; pom = 1;
else pom = 0; else pom = 0;
blitAt(hall->ourImages[pom].bitmap,80,413,to); blitAt(hall->ourImages[pom].bitmap,pos.x+80,pos.y+413,to);
//draw creatures icons and their growths //draw creatures icons and their growths
for(int i=0;i<CREATURES_PER_TOWN;i++) for(int i=0;i<CREATURES_PER_TOWN;i++)
@ -615,18 +613,18 @@ void CCastleInterface::showAll( SDL_Surface * to/*=NULL*/, bool forceTotalRedraw
int pomx, pomy; int pomx, pomy;
pomx = 22 + (55*((i>3)?(i-4):i)); pomx = 22 + (55*((i>3)?(i-4):i));
pomy = (i>3)?(507):(459); pomy = (i>3)?(507):(459);
blitAt(graphics->smallImgs[cid],pomx,pomy,to); blitAt(graphics->smallImgs[cid],pos.x+pomx,pos.y+pomy,to);
std::ostringstream oss; std::ostringstream oss;
oss << '+' << town->creatureGrowth(i); oss << '+' << town->creatureGrowth(i);
CSDL_Ext::printAtMiddle(oss.str(),pomx+16,pomy+37,GEOR13,zwykly,to); CSDL_Ext::printAtMiddle(oss.str(),pos.x+pomx+16,pos.y+pomy+37,GEOR13,zwykly,to);
} }
} }
//print name and income //print name and income
CSDL_Ext::printAt(town->name,85,389,GEOR13,zwykly,to); CSDL_Ext::printAt(town->name,pos.x+85,pos.y+389,GEOR13,zwykly,to);
char temp[10]; char temp[10];
SDL_itoa(town->dailyIncome(),temp,10); SDL_itoa(town->dailyIncome(),temp,10);
CSDL_Ext::printAtMiddle(temp,195,442,GEOR13,zwykly,to); CSDL_Ext::printAtMiddle(temp,pos.x+195,pos.y+442,GEOR13,zwykly,to);
//blit town icon //blit town icon
pom = town->subID*2; pom = town->subID*2;
@ -634,7 +632,7 @@ void CCastleInterface::showAll( SDL_Surface * to/*=NULL*/, bool forceTotalRedraw
pom += F_NUMBER*2; pom += F_NUMBER*2;
if(town->builded >= MAX_BUILDING_PER_TURN) if(town->builded >= MAX_BUILDING_PER_TURN)
pom++; pom++;
blitAt(graphics->bigTownPic->ourImages[pom].bitmap,15,387,to); blitAt(graphics->bigTownPic->ourImages[pom].bitmap,pos.x+15,pos.y+387,to);
hslotup.show(); hslotup.show();
hslotdown.show(); hslotdown.show();
@ -667,7 +665,7 @@ void CCastleInterface::show(SDL_Surface * to)
animval++; animval++;
} }
blitAt(cityBg,0,0,to); blitAt(cityBg,pos,to);
//blit buildings //blit buildings
@ -977,12 +975,16 @@ CHallInterface::CBuildingBox::CBuildingBox(int id, int x, int y)
CHallInterface::CHallInterface(CCastleInterface * owner) CHallInterface::CHallInterface(CCastleInterface * owner)
{ {
pos = owner->pos;
resdatabar.pos.x += pos.x;
resdatabar.pos.y += pos.y;
bg = BitmapHandler::loadBitmap(CGI->buildh->hall[owner->town->subID].first); bg = BitmapHandler::loadBitmap(CGI->buildh->hall[owner->town->subID].first);
graphics->blueToPlayersAdv(bg,LOCPLINT->playerID); graphics->blueToPlayersAdv(bg,LOCPLINT->playerID);
bars = CDefHandler::giveDefEss("TPTHBAR.DEF"); bars = CDefHandler::giveDefEss("TPTHBAR.DEF");
status = CDefHandler::giveDefEss("TPTHCHK.DEF"); status = CDefHandler::giveDefEss("TPTHCHK.DEF");
exit = new AdventureMapButton exit = new AdventureMapButton
(CGI->townh->tcommands[8],"",boost::bind(&CHallInterface::close,this),748,556,"TPMAGE1.DEF",SDLK_RETURN); (CGI->townh->tcommands[8],"",boost::bind(&CHallInterface::close,this),pos.x+748,pos.y+556,"TPMAGE1.DEF",SDLK_RETURN);
exit->assignedKeys.insert(SDLK_ESCAPE);
//preparing boxes with buildings// //preparing boxes with buildings//
boxes.resize(5); boxes.resize(5);
@ -1005,7 +1007,7 @@ CHallInterface::CHallInterface(CCastleInterface * owner)
x+=194; x+=194;
else if(CGI->buildh->hall[owner->town->subID].second[i].size() == 3) //only three boxes in this row else if(CGI->buildh->hall[owner->town->subID].second[i].size() == 3) //only three boxes in this row
x+=97; x+=97;
boxes[i].push_back(new CBuildingBox(CGI->buildh->hall[owner->town->subID].second[i][j][k],x,y)); boxes[i].push_back(new CBuildingBox(CGI->buildh->hall[owner->town->subID].second[i][j][k],pos.x+x,pos.y+y));
boxes[i][boxes[i].size()-1]->state = 7; //allowed by default boxes[i][boxes[i].size()-1]->state = 7; //allowed by default
@ -1044,7 +1046,7 @@ CHallInterface::CHallInterface(CCastleInterface * owner)
x+=194; x+=194;
else if(CGI->buildh->hall[owner->town->subID].second[i].size() == 3) else if(CGI->buildh->hall[owner->town->subID].second[i].size() == 3)
x+=97; x+=97;
boxes[i].push_back(new CBuildingBox(CGI->buildh->hall[owner->town->subID].second[i][j][k-1],x,y)); boxes[i].push_back(new CBuildingBox(CGI->buildh->hall[owner->town->subID].second[i][j][k-1],pos.x+x,pos.y+y));
boxes[i][boxes[i].size()-1]->state = 4; //already exists boxes[i][boxes[i].size()-1]->state = 4; //already exists
} }
} }
@ -1069,7 +1071,7 @@ void CHallInterface::close()
} }
void CHallInterface::show(SDL_Surface * to) void CHallInterface::show(SDL_Surface * to)
{ {
blitAt(bg,0,0); blitAt(bg,pos);
resdatabar.show(); resdatabar.show();
exit->show(); exit->show();
for(int i=0; i<5; i++) for(int i=0; i<5; i++)
@ -1168,9 +1170,14 @@ std::string CHallInterface::CBuildWindow::getTextForState(int state)
used.insert(bid); used.insert(bid);
std::set<int> reqs; std::set<int> reqs;
for(std::set<int>::iterator i=CGI->townh->requirements[tid][bid].begin();i!=CGI->townh->requirements[tid][bid].end();i++) for(std::set<int>::iterator i=CGI->townh->requirements[tid][bid].begin();
i!=CGI->townh->requirements[tid][bid].end();
i++
)
{
if (LOCPLINT->castleInt->town->builtBuildings.find(*i) == LOCPLINT->castleInt->town->builtBuildings.end()) if (LOCPLINT->castleInt->town->builtBuildings.find(*i) == LOCPLINT->castleInt->town->builtBuildings.end())
reqs.insert(*i); reqs.insert(*i);
}
while(true) while(true)
{ {
int czystych=0; int czystych=0;
@ -1282,11 +1289,11 @@ CFortScreen::~CFortScreen()
void CFortScreen::show( SDL_Surface * to) void CFortScreen::show( SDL_Surface * to)
{ {
blitAt(bg,0,0); blitAt(bg,pos);
static unsigned char anim = 1; static unsigned char anim = 1;
for (int i=0; i<CREATURES_PER_TOWN; i++) for (int i=0; i<CREATURES_PER_TOWN; i++)
{ {
crePics[i]->blitPic(screen,positions[i].x+159,positions[i].y+4,!(anim%4)); crePics[i]->blitPic(screen,pos.x+positions[i].x+159,pos.y+positions[i].y+4,!(anim%4));
} }
anim++; anim++;
exit->show(); exit->show();
@ -1325,14 +1332,17 @@ void CFortScreen::close()
} }
CFortScreen::CFortScreen( CCastleInterface * owner ) CFortScreen::CFortScreen( CCastleInterface * owner )
{ {
pos = owner->pos;
LOCPLINT->curint->subInt = this; LOCPLINT->curint->subInt = this;
bg = NULL; bg = NULL;
exit = new AdventureMapButton(CGI->townh->tcommands[8],"",boost::bind(&CFortScreen::close,this),748,556,"TPMAGE1.DEF",SDLK_RETURN); exit = new AdventureMapButton(CGI->townh->tcommands[8],"",boost::bind(&CFortScreen::close,this),pos.x+748,pos.y+556,"TPMAGE1.DEF",SDLK_RETURN);
positions += genRect(126,386,10,22),genRect(126,386,404,22), positions += genRect(126,386,10,22),genRect(126,386,404,22),
genRect(126,386,10,155),genRect(126,386,404,155), genRect(126,386,10,155),genRect(126,386,404,155),
genRect(126,386,10,288),genRect(126,386,404,288), genRect(126,386,10,288),genRect(126,386,404,288),
genRect(126,386,206,421);//genRect(126,386,10,421),genRect(126,386,404,421); genRect(126,386,206,421);
draw(owner,true); draw(owner,true);
resdatabar.pos.x += pos.x;
resdatabar.pos.y += pos.y;
} }
void CFortScreen::draw( CCastleInterface * owner, bool first) void CFortScreen::draw( CCastleInterface * owner, bool first)
@ -1386,12 +1396,12 @@ void CFortScreen::draw( CCastleInterface * owner, bool first)
printToWR(buf,positions[i].x+381,positions[i].y+59,GEOR13,zwykly,bg); printToWR(buf,positions[i].x+381,positions[i].y+59,GEOR13,zwykly,bg);
//health //health
printAt(CGI->preth->zelp[439].first,positions[i].x+288,positions[i].y+66,GEOR13,zwykly,bg); printAt(CGI->generaltexth->zelp[439].first,positions[i].x+288,positions[i].y+66,GEOR13,zwykly,bg);
SDL_itoa(c->hitPoints,buf,10); SDL_itoa(c->hitPoints,buf,10);
printToWR(buf,positions[i].x+381,positions[i].y+79,GEOR13,zwykly,bg); printToWR(buf,positions[i].x+381,positions[i].y+79,GEOR13,zwykly,bg);
//speed //speed
printAt(CGI->preth->zelp[441].first,positions[i].x+288,positions[i].y+87,GEOR13,zwykly,bg); printAt(CGI->generaltexth->zelp[441].first,positions[i].x+288,positions[i].y+87,GEOR13,zwykly,bg);
SDL_itoa(c->speed,buf,10); SDL_itoa(c->speed,buf,10);
printToWR(buf,positions[i].x+381,positions[i].y+100,GEOR13,zwykly,bg); printToWR(buf,positions[i].x+381,positions[i].y+100,GEOR13,zwykly,bg);
@ -1433,8 +1443,12 @@ void CFortScreen::RecArea::deactivate()
CMageGuildScreen::CMageGuildScreen(CCastleInterface * owner) CMageGuildScreen::CMageGuildScreen(CCastleInterface * owner)
{ {
pos = owner->pos;
resdatabar.pos.x += pos.x;
resdatabar.pos.y += pos.y;
bg = BitmapHandler::loadBitmap("TPMAGE.bmp"); bg = BitmapHandler::loadBitmap("TPMAGE.bmp");
exit = new AdventureMapButton(CGI->townh->tcommands[8],"",boost::bind(&CMageGuildScreen::close,this),748,556,"TPMAGE1.DEF",SDLK_RETURN); exit = new AdventureMapButton(CGI->townh->tcommands[8],"",boost::bind(&CMageGuildScreen::close,this),pos.x+748,pos.y+556,"TPMAGE1.DEF",SDLK_RETURN);
exit->assignedKeys.insert(SDLK_ESCAPE);
scrolls = CDefHandler::giveDefEss("SPELLSCR.DEF"); scrolls = CDefHandler::giveDefEss("SPELLSCR.DEF");
scrolls2 = CDefHandler::giveDefEss("TPMAGES.DEF"); scrolls2 = CDefHandler::giveDefEss("TPMAGES.DEF");
SDL_Surface *view = BitmapHandler::loadBitmap(graphics->guildBgs[owner->town->subID]); SDL_Surface *view = BitmapHandler::loadBitmap(graphics->guildBgs[owner->town->subID]);
@ -1464,6 +1478,11 @@ CMageGuildScreen::CMageGuildScreen(CCastleInterface * owner)
} }
} }
SDL_FreeSurface(view); SDL_FreeSurface(view);
for(int i=0;i<spells.size();i++)
{
spells[i].pos.x += pos.x;
spells[i].pos.y += pos.y;
}
delete scrolls2; delete scrolls2;
} }
CMageGuildScreen::~CMageGuildScreen() CMageGuildScreen::~CMageGuildScreen()
@ -1481,7 +1500,7 @@ void CMageGuildScreen::close()
} }
void CMageGuildScreen::show(SDL_Surface * to) void CMageGuildScreen::show(SDL_Surface * to)
{ {
blitAt(bg,0,0); blitAt(bg,pos);
resdatabar.show(); resdatabar.show();
LOCPLINT->statusbar->show(); LOCPLINT->statusbar->show();
exit->show(); exit->show();

View File

@ -49,6 +49,7 @@ public:
class CCastleInterface : public CMainInterface class CCastleInterface : public CMainInterface
{ {
public: public:
SDL_Rect pos;
bool showing; bool showing;
CBuildingRect * hBuild; //highlighted building CBuildingRect * hBuild; //highlighted building
SDL_Surface * townInt; SDL_Surface * townInt;
@ -89,6 +90,7 @@ class CHallInterface : public IShowActivable
{ {
public: public:
CMinorResDataBar resdatabar; CMinorResDataBar resdatabar;
SDL_Rect pos;
class CBuildingBox : public Hoverable, public ClickableL, public ClickableR class CBuildingBox : public Hoverable, public ClickableL, public ClickableR
{ {
@ -143,7 +145,7 @@ public:
void deactivate(); void deactivate();
}; };
class CFortScreen : public CMainInterface class CFortScreen : public CMainInterface, public CIntObject
{ {
class RecArea : public ClickableL class RecArea : public ClickableL
{ {
@ -172,7 +174,7 @@ public:
void deactivate(); void deactivate();
}; };
class CMageGuildScreen : public IShowActivable class CMageGuildScreen : public IShowActivable, public CIntObject
{ {
public: public:
class Scroll : public ClickableL, public Hoverable, public ClickableR class Scroll : public ClickableL, public Hoverable, public ClickableR

View File

@ -48,7 +48,6 @@ public:
CAbilityHandler * abilh; CAbilityHandler * abilh;
CSpellHandler * spellh; CSpellHandler * spellh;
CMapHandler * mh; CMapHandler * mh;
CPreGameTextHandler * preth;
CBuildingHandler * buildh; CBuildingHandler * buildh;
CObjectHandler * objh; CObjectHandler * objh;
CMusicHandler * mush; CMusicHandler * mush;

View File

@ -1062,14 +1062,7 @@ void CGameState::init(StartInfo * si, Mapa * map, int Seed)
ran.seed((boost::int32_t)seed); ran.seed((boost::int32_t)seed);
scenarioOps = si; scenarioOps = si;
this->map = map; this->map = map;
loadTownDInfos();
for(int i=0;i<F_NUMBER;i++)
{
villages[i] = new CGDefInfo(*VLC->dobjinfo->castles[i]);
forts[i] = VLC->dobjinfo->castles[i];
capitols[i] = new CGDefInfo(*VLC->dobjinfo->castles[i]);
}
//picking random factions for players //picking random factions for players
for(int i=0;i<scenarioOps->playerInfos.size();i++) for(int i=0;i<scenarioOps->playerInfos.size();i++)
{ {
@ -1383,15 +1376,6 @@ void CGameState::init(StartInfo * si, Mapa * map, int Seed)
k->second.heroes[l]->pos.x -= 1; k->second.heroes[l]->pos.x -= 1;
break; break;
} }
//else if(k->second.heroes[l]->pos == k->second.towns[m]->pos)
//{
// k->second.towns[m]->garrisonHero = k->second.heroes[l];
// k->second.towns[m]->army = k->second.heroes[l]->army;
// k->second.heroes[l]->visitedTown = k->second.towns[m];
// k->second.heroes[l]->inTownGarrison = true;
// k->second.heroes[l]->pos.x -= 1;
// goto mainplheloop;
//}
} }
} }
} }
@ -1503,6 +1487,15 @@ std::set<int3> CGameState::tilesToReveal(int3 pos, int radious, int player)
return ret; return ret;
} }
void CGameState::loadTownDInfos()
{
for(int i=0;i<F_NUMBER;i++)
{
villages[i] = new CGDefInfo(*VLC->dobjinfo->castles[i]);
forts[i] = VLC->dobjinfo->castles[i];
capitols[i] = new CGDefInfo(*VLC->dobjinfo->castles[i]);
}
}
int BattleInfo::calculateDmg(const CStack* attacker, const CStack* defender, const CGHeroInstance * attackerHero, const CGHeroInstance * defendingHero, bool shooting) int BattleInfo::calculateDmg(const CStack* attacker, const CStack* defender, const CGHeroInstance * attackerHero, const CGHeroInstance * defendingHero, bool shooting)
{ {
int attackDefenseBonus = attacker->creature->attack + (attackerHero ? attackerHero->getPrimSkillLevel(0) : 0) - (defender->creature->defence + (defendingHero ? defendingHero->getPrimSkillLevel(1) : 0)); int attackDefenseBonus = attacker->creature->attack + (attackerHero ? attackerHero->getPrimSkillLevel(0) : 0) - (defender->creature->defence + (defendingHero ? defendingHero->getPrimSkillLevel(1) : 0));

View File

@ -178,6 +178,7 @@ private:
CGameState(); CGameState();
~CGameState(); ~CGameState();
void init(StartInfo * si, Mapa * map, int Seed); void init(StartInfo * si, Mapa * map, int Seed);
void loadTownDInfos();
void applyNL(IPack * pack); void applyNL(IPack * pack);
void apply(IPack * pack); void apply(IPack * pack);
void randomizeObject(CGObjectInstance *cur); void randomizeObject(CGObjectInstance *cur);
@ -199,7 +200,10 @@ public:
template <typename Handler> void serialize(Handler &h, const int version) template <typename Handler> void serialize(Handler &h, const int version)
{ {
h & scenarioOps & seed & currentPlayer & day & map & players & resVals; h & scenarioOps & seed & currentPlayer & day & map & players & resVals;
//TODO: villages, forts, capitols - will need reloading if(!h.saving)
{
loadTownDInfos();
}
//TODO: hero pool //TODO: hero pool
} }

View File

@ -33,8 +33,8 @@ CHeroWindow::CHeroWindow(int playerColor):
artWorn.resize(19); artWorn.resize(19);
background = BitmapHandler::loadBitmap("HEROSCR4.bmp"); background = BitmapHandler::loadBitmap("HEROSCR4.bmp");
graphics->blueToPlayersAdv(background, playerColor); graphics->blueToPlayersAdv(background, playerColor);
pos.x = 65; pos.x = screen->w/2 - background->w/2 - 65;
pos.y = 8; pos.y = screen->h/2 - background->h/2 - 8;
pos.h = background->h; pos.h = background->h;
pos.w = background->w; pos.w = background->w;
curBack = NULL; curBack = NULL;
@ -42,47 +42,49 @@ CHeroWindow::CHeroWindow(int playerColor):
activeArtPlace = NULL; activeArtPlace = NULL;
garInt = NULL; garInt = NULL;
ourBar = new CStatusBar(72, 567, "ADROLLVR.bmp", 660); ourBar = new CStatusBar(pos.x+72, pos.y+567, "ADROLLVR.bmp", 660);
quitButton = new AdventureMapButton(CGI->generaltexth->heroscrn[17], std::string(), boost::function<void()>(), 674, 524, "hsbtns.def", SDLK_RETURN); quitButton = new AdventureMapButton(CGI->generaltexth->heroscrn[17], std::string(), boost::function<void()>(), pos.x+674, pos.y+524, "hsbtns.def", SDLK_RETURN);
dismissButton = new AdventureMapButton(std::string(), CGI->generaltexth->heroscrn[28], boost::bind(&CHeroWindow::dismissCurrent,this), 519, 437, "hsbtns2.def", SDLK_d); dismissButton = new AdventureMapButton(std::string(), CGI->generaltexth->heroscrn[28], boost::bind(&CHeroWindow::dismissCurrent,this), pos.x+519, pos.y+437, "hsbtns2.def", SDLK_d);
questlogButton = new AdventureMapButton(CGI->generaltexth->heroscrn[0], std::string(), boost::bind(&CHeroWindow::questlog,this), 379, 437, "hsbtns4.def", SDLK_q); questlogButton = new AdventureMapButton(CGI->generaltexth->heroscrn[0], std::string(), boost::bind(&CHeroWindow::questlog,this), pos.x+379, pos.y+437, "hsbtns4.def", SDLK_q);
formations = new CHighlightableButtonsGroup(0); formations = new CHighlightableButtonsGroup(0);
formations->addButton(map_list_of(0,CGI->generaltexth->heroscrn[23]),CGI->generaltexth->heroscrn[29], "hsbtns6.def",546, 491, 0, 0, SDLK_t); formations->addButton(map_list_of(0,CGI->generaltexth->heroscrn[23]),CGI->generaltexth->heroscrn[29], "hsbtns6.def", pos.x+546, pos.y+491, 0, 0, SDLK_t);
formations->addButton(map_list_of(0,CGI->generaltexth->heroscrn[24]),CGI->generaltexth->heroscrn[30], "hsbtns7.def",546, 527, 1, 0, SDLK_l); formations->addButton(map_list_of(0,CGI->generaltexth->heroscrn[24]),CGI->generaltexth->heroscrn[30], "hsbtns7.def", pos.x+546, pos.y+527, 1, 0, SDLK_l);
gar2button = new CHighlightableButton(0, 0, map_list_of(0,CGI->generaltexth->heroscrn[26])(3,CGI->generaltexth->heroscrn[25]), CGI->generaltexth->heroscrn[31], false, "hsbtns8.def", NULL, 604, 491, SDLK_b); gar2button = new CHighlightableButton(0, 0, map_list_of(0,CGI->generaltexth->heroscrn[26])(3,CGI->generaltexth->heroscrn[25]), CGI->generaltexth->heroscrn[31], false, "hsbtns8.def", NULL, pos.x+604, pos.y+491, SDLK_b);
gar4button = new AdventureMapButton(CGI->generaltexth->allTexts[256], CGI->generaltexth->heroscrn[32], boost::function<void()>(), 604, 527, "hsbtns9.def", false, NULL, false); gar4button = new AdventureMapButton(CGI->generaltexth->allTexts[256], CGI->generaltexth->heroscrn[32], boost::function<void()>(), pos.x+604, pos.y+527, "hsbtns9.def", false, NULL, false);
boost::algorithm::replace_first(gar4button->hoverTexts[0],"%s",CGI->generaltexth->allTexts[43]); boost::algorithm::replace_first(gar4button->hoverTexts[0],"%s",CGI->generaltexth->allTexts[43]);
leftArtRoll = new AdventureMapButton(std::string(), std::string(), boost::bind(&CHeroWindow::leftArtRoller,this), 379, 364, "hsbtns3.def", SDLK_LEFT); leftArtRoll = new AdventureMapButton(std::string(), std::string(), boost::bind(&CHeroWindow::leftArtRoller,this), pos.x+379, pos.y+364, "hsbtns3.def", SDLK_LEFT);
rightArtRoll = new AdventureMapButton(std::string(), std::string(), boost::bind(&CHeroWindow::rightArtRoller,this), 632, 364, "hsbtns5.def", SDLK_RIGHT); rightArtRoll = new AdventureMapButton(std::string(), std::string(), boost::bind(&CHeroWindow::rightArtRoller,this), pos.x+632, pos.y+364, "hsbtns5.def", SDLK_RIGHT);
for(int g=0; g<8; ++g) for(int g=0; g<8; ++g)
{ {
//heroList.push_back(new AdventureMapButton<CHeroWindow>(std::string(), std::string(), &CHeroWindow::switchHero, 677, 95+g*54, "hsbtns5.def", this)); //heroList.push_back(new AdventureMapButton<CHeroWindow>(std::string(), std::string(), &CHeroWindow::switchHero, 677, 95+g*54, "hsbtns5.def", this));
heroListMi.push_back(new LClickableAreaHero()); heroListMi.push_back(new LClickableAreaHero());
heroListMi[g]->pos.x = 677; heroListMi[g]->pos.x = pos.x+677;
heroListMi[g]->pos.y = 95+g*54; heroListMi[g]->pos.y = pos.y + 95+g*54;
heroListMi[g]->pos.h = 32; heroListMi[g]->pos.h = 32;
heroListMi[g]->pos.w = 48; heroListMi[g]->pos.w = 48;
heroListMi[g]->owner = this; heroListMi[g]->owner = this;
heroListMi[g]->id = g; heroListMi[g]->id = g;
} }
flags = CDefHandler::giveDef("CREST58.DEF"); flags = CDefHandler::giveDef("CREST58.DEF");
//areas //areas
portraitArea = new LRClickableAreaWText(); portraitArea = new LRClickableAreaWText();
portraitArea->pos.x = 83; portraitArea->pos.x = pos.x+83;
portraitArea->pos.y = 26; portraitArea->pos.y = pos.y + 26;
portraitArea->pos.w = 58; portraitArea->pos.w = 58;
portraitArea->pos.h = 64; portraitArea->pos.h = 64;
for(int v=0; v<4; ++v) for(int v=0; v<4; ++v)
{ {
primSkillAreas.push_back(new LRClickableAreaWTextComp()); primSkillAreas.push_back(new LRClickableAreaWTextComp());
primSkillAreas[v]->pos.x = 95 + 70*v; primSkillAreas[v]->pos.x = pos.x+95 + 70*v;
primSkillAreas[v]->pos.y = 111; primSkillAreas[v]->pos.y = pos.y + 111;
primSkillAreas[v]->pos.w = 42; primSkillAreas[v]->pos.w = 42;
primSkillAreas[v]->pos.h = 42; primSkillAreas[v]->pos.h = 42;
primSkillAreas[v]->text = CGI->generaltexth->arraytxt[2+v].substr(1, CGI->generaltexth->arraytxt[2+v].size()-2); primSkillAreas[v]->text = CGI->generaltexth->arraytxt[2+v].substr(1, CGI->generaltexth->arraytxt[2+v].size()-2);
@ -91,15 +93,15 @@ CHeroWindow::CHeroWindow(int playerColor):
primSkillAreas[v]->baseType = 0; primSkillAreas[v]->baseType = 0;
} }
expArea = new LRClickableAreaWText(); expArea = new LRClickableAreaWText();
expArea->pos.x = 83; expArea->pos.x = pos.x+83;
expArea->pos.y = 236; expArea->pos.y = pos.y + 236;
expArea->pos.w = 136; expArea->pos.w = 136;
expArea->pos.h = 42; expArea->pos.h = 42;
expArea->hoverText = CGI->generaltexth->heroscrn[9]; expArea->hoverText = CGI->generaltexth->heroscrn[9];
spellPointsArea = new LRClickableAreaWText(); spellPointsArea = new LRClickableAreaWText();
spellPointsArea->pos.x = 227; spellPointsArea->pos.x = pos.x+227;
spellPointsArea->pos.y = 236; spellPointsArea->pos.y = pos.y + 236;
spellPointsArea->pos.w = 136; spellPointsArea->pos.w = 136;
spellPointsArea->pos.h = 42; spellPointsArea->pos.h = 42;
spellPointsArea->hoverText = CGI->generaltexth->heroscrn[22]; spellPointsArea->hoverText = CGI->generaltexth->heroscrn[22];
@ -107,12 +109,14 @@ CHeroWindow::CHeroWindow(int playerColor):
for(int i=0; i<8; ++i) for(int i=0; i<8; ++i)
{ {
secSkillAreas.push_back(new LRClickableAreaWTextComp()); secSkillAreas.push_back(new LRClickableAreaWTextComp());
secSkillAreas[i]->pos.x = (i%2==0) ? (83) : (227); secSkillAreas[i]->pos.x = pos.x + ((i%2==0) ? (83) : (227));
secSkillAreas[i]->pos.y = 284 + 48 * (i/2); secSkillAreas[i]->pos.y = pos.y + (284 + 48 * (i/2));
secSkillAreas[i]->pos.w = 136; secSkillAreas[i]->pos.w = 136;
secSkillAreas[i]->pos.h = 42; secSkillAreas[i]->pos.h = 42;
secSkillAreas[i]->baseType = 1; secSkillAreas[i]->baseType = 1;
} }
pos.x += 65;
pos.y += 8;
} }
CHeroWindow::~CHeroWindow() CHeroWindow::~CHeroWindow()
@ -200,6 +204,9 @@ void CHeroWindow::setHero(const CGHeroInstance *Hero)
} }
curHero = hero; curHero = hero;
pos.x -= 65;
pos.y -= 8;
gar2button->callback.clear(); gar2button->callback.clear();
gar2button->callback2.clear(); gar2button->callback2.clear();
@ -209,10 +216,10 @@ void CHeroWindow::setHero(const CGHeroInstance *Hero)
sprintf(bufor, CGI->generaltexth->allTexts[15].c_str(), curHero->name.c_str(), curHero->type->heroClass->name.c_str()); sprintf(bufor, CGI->generaltexth->allTexts[15].c_str(), curHero->name.c_str(), curHero->type->heroClass->name.c_str());
portraitArea->hoverText = std::string(bufor); portraitArea->hoverText = std::string(bufor);
portraitArea->text = hero->biography; portraitArea->text = hero->getBiography();
delete garInt; delete garInt;
/*gar4button->owner = */garInt = new CGarrisonInt(80, 493, 8, 0, curBack, 13, 482, curHero); /*gar4button->owner = */garInt = new CGarrisonInt(pos.x+80, pos.y+493, 8, 0, curBack, 13, 482, curHero);
garInt->update = false; garInt->update = false;
gar4button->callback = boost::bind(&CGarrisonInt::splitClick,garInt);//actualization of callback function gar4button->callback = boost::bind(&CGarrisonInt::splitClick,garInt);//actualization of callback function
@ -249,11 +256,13 @@ void CHeroWindow::setHero(const CGHeroInstance *Hero)
std::vector<SDL_Rect> slotPos; std::vector<SDL_Rect> slotPos;
slotPos += genRect(44,44,509,30), genRect(44,44,567,240), genRect(44,44,509,80), genRect(44,44,383,68), slotPos += genRect(44,44,pos.x+509,pos.y+30), genRect(44,44,pos.x+567,pos.y+240), genRect(44,44,pos.x+509,pos.y+80),
genRect(44,44,564,183), genRect(44,44,509,130), genRect(44,44,431,68), genRect(44,44,610,183), genRect(44,44,pos.x+383,pos.y+68), genRect(44,44,pos.x+564,pos.y+183), genRect(44,44,pos.x+509,pos.y+130),
genRect(44,44,515,295), genRect(44,44,383,143), genRect(44,44,399,194), genRect(44,44,415,245), genRect(44,44,pos.x+431,pos.y+68), genRect(44,44,pos.x+610,pos.y+183), genRect(44,44,pos.x+515,pos.y+295),
genRect(44,44,431,296), genRect(44,44,564,30), genRect(44,44,610,30), genRect(44,44,610,76), genRect(44,44,pos.x+383,pos.y+143), genRect(44,44,pos.x+399,pos.y+194), genRect(44,44,pos.x+415,pos.y+245),
genRect(44,44,610,122), genRect(44,44,610,310), genRect(44,44,381,296); genRect(44,44,pos.x+431,pos.y+296), genRect(44,44,pos.x+564,pos.y+30), genRect(44,44,pos.x+610,pos.y+30),
genRect(44,44,pos.x+610,pos.y+76), genRect(44,44,pos.x+610,pos.y+122), genRect(44,44,pos.x+610,pos.y+310),
genRect(44,44,pos.x+381,pos.y+296);
for (int g = 0; g < 19 ; g++) for (int g = 0; g < 19 ; g++)
{ {
@ -292,8 +301,8 @@ void CHeroWindow::setHero(const CGHeroInstance *Hero)
add = new CArtPlace(NULL); add = new CArtPlace(NULL);
add->hoverText = CGI->generaltexth->allTexts[507]; add->hoverText = CGI->generaltexth->allTexts[507];
} }
add->pos.x = 403 + 46*s; add->pos.x = pos.x + 403 + 46*s;
add->pos.y = 365; add->pos.y = pos.y + 365;
add->pos.h = add->pos.w = 44; add->pos.h = add->pos.w = 44;
if(s<hero->artifacts.size() && hero->artifacts[s]) if(s<hero->artifacts.size() && hero->artifacts[s])
add->text = hero->getArt(19+s)->description; add->text = hero->getArt(19+s)->description;
@ -320,6 +329,9 @@ void CHeroWindow::setHero(const CGHeroInstance *Hero)
formations->select(hero->army.formation,true); formations->select(hero->army.formation,true);
formations->onChange = boost::bind(&CCallback::setFormation, LOCPLINT->cb, Hero, _1); formations->onChange = boost::bind(&CCallback::setFormation, LOCPLINT->cb, Hero, _1);
pos.x += 65;
pos.y += 8;
redrawCurBack(); redrawCurBack();
} }

View File

@ -122,18 +122,17 @@ int main(int argc, char** argv)
CGI->spellh = VLC->spellh; CGI->spellh = VLC->spellh;
CGI->dobjinfo = VLC->dobjinfo; CGI->dobjinfo = VLC->dobjinfo;
CGI->buildh = VLC->buildh; CGI->buildh = VLC->buildh;
CGI->generaltexth = VLC->generaltexth;
tlog0<<"Initializing VCMI_Lib: "<<tmh.getDif()<<std::endl; tlog0<<"Initializing VCMI_Lib: "<<tmh.getDif()<<std::endl;
pomtime.getDif(); pomtime.getDif();
cgi->curh = new CCursorHandler; cgi->curh = new CCursorHandler;
cgi->curh->initCursor(); cgi->curh->initCursor();
cgi->curh->show();
tlog0<<"\tScreen handler: "<<pomtime.getDif()<<std::endl; tlog0<<"\tScreen handler: "<<pomtime.getDif()<<std::endl;
CAbilityHandler * abilh = new CAbilityHandler; CAbilityHandler * abilh = new CAbilityHandler;
abilh->loadAbilities(); abilh->loadAbilities();
cgi->abilh = abilh; cgi->abilh = abilh;
tlog0<<"\tAbility handler: "<<pomtime.getDif()<<std::endl; tlog0<<"\tAbility handler: "<<pomtime.getDif()<<std::endl;
CGI->preth = new CPreGameTextHandler;
CGI->preth->loadTexts();
tlog0<<"\tCPreGameTextHandler: "<<pomtime.getDif()<<std::endl;
tlog0<<"Preparing first handlers: "<<tmh.getDif()<<std::endl; tlog0<<"Preparing first handlers: "<<tmh.getDif()<<std::endl;
pomtime.getDif(); pomtime.getDif();
graphics = new Graphics(); graphics = new Graphics();
@ -145,9 +144,7 @@ int main(int argc, char** argv)
tlog0<<"\tHero animations: "<<tmh.getDif()<<std::endl; tlog0<<"\tHero animations: "<<tmh.getDif()<<std::endl;
tlog0<<"Initializing game graphics: "<<tmh.getDif()<<std::endl; tlog0<<"Initializing game graphics: "<<tmh.getDif()<<std::endl;
CMessage::init(); CMessage::init();
cgi->generaltexth = new CGeneralTextHandler; tlog0<<"Message handler: "<<tmh.getDif()<<std::endl;
cgi->generaltexth->load();
tlog0<<"Preparing more handlers: "<<tmh.getDif()<<std::endl;
CPreGame * cpg = new CPreGame(); //main menu and submenus CPreGame * cpg = new CPreGame(); //main menu and submenus
tlog0<<"Initialization CPreGame (together): "<<tmh.getDif()<<std::endl; tlog0<<"Initialization CPreGame (together): "<<tmh.getDif()<<std::endl;
tlog0<<"Initialization of VCMI (togeter): "<<total.getDif()<<std::endl; tlog0<<"Initialization of VCMI (togeter): "<<total.getDif()<<std::endl;

View File

@ -22,7 +22,6 @@
#include "hch/CHeroHandler.h" #include "hch/CHeroHandler.h"
#include "hch/CLodHandler.h" #include "hch/CLodHandler.h"
#include "hch/CObjectHandler.h" #include "hch/CObjectHandler.h"
#include "hch/CPreGameTextHandler.h"
#include "hch/CSpellHandler.h" #include "hch/CSpellHandler.h"
#include "hch/CTownHandler.h" #include "hch/CTownHandler.h"
#include "lib/CondSh.h" #include "lib/CondSh.h"
@ -632,7 +631,7 @@ void SComponent::init(Etype Type, int Subtype, int Val)
break; break;
case primskill: case primskill:
description = CGI->generaltexth->arraytxt[2+Subtype]; description = CGI->generaltexth->arraytxt[2+Subtype];
oss << ((Val>0)?("+"):("-")) << Val << " " << CGI->heroh->pskillsn[Subtype]; oss << ((Val>0)?("+"):("-")) << Val << " " << CGI->generaltexth->primarySkillNames[Subtype];
subtitle = oss.str(); subtitle = oss.str();
break; break;
case secskill44: case secskill44:
@ -1380,7 +1379,7 @@ void CPlayerInterface::heroMoved(const HeroMoveDetails & details)
{ {
if(details.dst.x+1 == details.src.x && details.dst.y+1 == details.src.y) //tl if(details.dst.x+1 == details.src.x && details.dst.y+1 == details.src.y) //tl
{ {
//seting advmap shift //setting advmap shift
adventureInt->terrain.moveX = i-32; adventureInt->terrain.moveX = i-32;
adventureInt->terrain.moveY = i-32; adventureInt->terrain.moveY = i-32;
@ -1401,7 +1400,7 @@ void CPlayerInterface::heroMoved(const HeroMoveDetails & details)
} }
else if(details.dst.x == details.src.x && details.dst.y+1 == details.src.y) //t else if(details.dst.x == details.src.x && details.dst.y+1 == details.src.y) //t
{ {
//seting advmap shift //setting advmap shift
adventureInt->terrain.moveY = i-32; adventureInt->terrain.moveY = i-32;
subRect(hp.x-2, hp.y-2, hp.z, genRect(32, 32, 0, -31+i), ho->id); subRect(hp.x-2, hp.y-2, hp.z, genRect(32, 32, 0, -31+i), ho->id);
@ -1418,7 +1417,7 @@ void CPlayerInterface::heroMoved(const HeroMoveDetails & details)
} }
else if(details.dst.x-1 == details.src.x && details.dst.y+1 == details.src.y) //tr else if(details.dst.x-1 == details.src.x && details.dst.y+1 == details.src.y) //tr
{ {
//seting advmap shift //setting advmap shift
adventureInt->terrain.moveX = -i+32; adventureInt->terrain.moveX = -i+32;
adventureInt->terrain.moveY = i-32; adventureInt->terrain.moveY = i-32;
@ -1439,7 +1438,7 @@ void CPlayerInterface::heroMoved(const HeroMoveDetails & details)
} }
else if(details.dst.x-1 == details.src.x && details.dst.y == details.src.y) //r else if(details.dst.x-1 == details.src.x && details.dst.y == details.src.y) //r
{ {
//seting advmap shift //setting advmap shift
adventureInt->terrain.moveX = -i+32; adventureInt->terrain.moveX = -i+32;
subRect(hp.x-2, hp.y-1, hp.z, genRect(32, 32, -1-i, 0), ho->id); subRect(hp.x-2, hp.y-1, hp.z, genRect(32, 32, -1-i, 0), ho->id);
@ -1455,7 +1454,7 @@ void CPlayerInterface::heroMoved(const HeroMoveDetails & details)
else if(details.dst.x-1 == details.src.x && details.dst.y-1 == details.src.y) //br else if(details.dst.x-1 == details.src.x && details.dst.y-1 == details.src.y) //br
{ {
//seting advmap shift //setting advmap shift
adventureInt->terrain.moveX = -i+32; adventureInt->terrain.moveX = -i+32;
adventureInt->terrain.moveY = -i+32; adventureInt->terrain.moveY = -i+32;
@ -1476,7 +1475,7 @@ void CPlayerInterface::heroMoved(const HeroMoveDetails & details)
} }
else if(details.dst.x == details.src.x && details.dst.y-1 == details.src.y) //b else if(details.dst.x == details.src.x && details.dst.y-1 == details.src.y) //b
{ {
//seting advmap shift //setting advmap shift
adventureInt->terrain.moveY = -i+32; adventureInt->terrain.moveY = -i+32;
subRect(hp.x-2, hp.y-1, hp.z, genRect(32, 32, 0, -1-i), ho->id); subRect(hp.x-2, hp.y-1, hp.z, genRect(32, 32, 0, -1-i), ho->id);
@ -1493,7 +1492,7 @@ void CPlayerInterface::heroMoved(const HeroMoveDetails & details)
} }
else if(details.dst.x+1 == details.src.x && details.dst.y-1 == details.src.y) //bl else if(details.dst.x+1 == details.src.x && details.dst.y-1 == details.src.y) //bl
{ {
//seting advmap shift //setting advmap shift
adventureInt->terrain.moveX = i-32; adventureInt->terrain.moveX = i-32;
adventureInt->terrain.moveY = -i+32; adventureInt->terrain.moveY = -i+32;
@ -1514,7 +1513,7 @@ void CPlayerInterface::heroMoved(const HeroMoveDetails & details)
} }
else if(details.dst.x+1 == details.src.x && details.dst.y == details.src.y) //l else if(details.dst.x+1 == details.src.x && details.dst.y == details.src.y) //l
{ {
//seting advmap shift //setting advmap shift
adventureInt->terrain.moveX = i-32; adventureInt->terrain.moveX = i-32;
subRect(hp.x-3, hp.y-1, hp.z, genRect(32, 32, -31+i, 0), ho->id); subRect(hp.x-3, hp.y-1, hp.z, genRect(32, 32, -31+i, 0), ho->id);
@ -2497,7 +2496,7 @@ void CHeroList::mouseMoved (const SDL_MouseMotionEvent & sEvent)
if(isItIn(&arrupp,LOCPLINT->current->motion.x,LOCPLINT->current->motion.y)) if(isItIn(&arrupp,LOCPLINT->current->motion.x,LOCPLINT->current->motion.y))
{ {
if (from>0) if (from>0)
LOCPLINT->adventureInt->statusbar.print(CGI->preth->zelp[303].first); LOCPLINT->adventureInt->statusbar.print(CGI->generaltexth->zelp[303].first);
else else
LOCPLINT->adventureInt->statusbar.clear(); LOCPLINT->adventureInt->statusbar.clear();
return; return;
@ -2505,7 +2504,7 @@ void CHeroList::mouseMoved (const SDL_MouseMotionEvent & sEvent)
else if(isItIn(&arrdop,LOCPLINT->current->motion.x,LOCPLINT->current->motion.y)) else if(isItIn(&arrdop,LOCPLINT->current->motion.x,LOCPLINT->current->motion.y))
{ {
if ((items.size()-from) > SIZE) if ((items.size()-from) > SIZE)
LOCPLINT->adventureInt->statusbar.print(CGI->preth->zelp[304].first); LOCPLINT->adventureInt->statusbar.print(CGI->generaltexth->zelp[304].first);
else else
LOCPLINT->adventureInt->statusbar.clear(); LOCPLINT->adventureInt->statusbar.clear();
return; return;
@ -2533,11 +2532,11 @@ void CHeroList::clickRight(tribool down)
/***************************ARROWS*****************************************/ /***************************ARROWS*****************************************/
if(isItIn(&arrupp,LOCPLINT->current->motion.x,LOCPLINT->current->motion.y) && from>0) if(isItIn(&arrupp,LOCPLINT->current->motion.x,LOCPLINT->current->motion.y) && from>0)
{ {
LOCPLINT->adventureInt->handleRightClick(CGI->preth->zelp[303].second,down,this); LOCPLINT->adventureInt->handleRightClick(CGI->generaltexth->zelp[303].second,down,this);
} }
else if(isItIn(&arrdop,LOCPLINT->current->motion.x,LOCPLINT->current->motion.y) && (items.size()-from>5)) else if(isItIn(&arrdop,LOCPLINT->current->motion.x,LOCPLINT->current->motion.y) && (items.size()-from>5))
{ {
LOCPLINT->adventureInt->handleRightClick(CGI->preth->zelp[304].second,down,this); LOCPLINT->adventureInt->handleRightClick(CGI->generaltexth->zelp[304].second,down,this);
} }
//if not buttons then heroes //if not buttons then heroes
int hx = LOCPLINT->current->motion.x, hy = LOCPLINT->current->motion.y; int hx = LOCPLINT->current->motion.x, hy = LOCPLINT->current->motion.y;
@ -2558,8 +2557,8 @@ void CHeroList::clickRight(tribool down)
} }
else else
{ {
LOCPLINT->adventureInt->handleRightClick(CGI->preth->zelp[303].second,down,this); LOCPLINT->adventureInt->handleRightClick(CGI->generaltexth->zelp[303].second,down,this);
LOCPLINT->adventureInt->handleRightClick(CGI->preth->zelp[304].second,down,this); LOCPLINT->adventureInt->handleRightClick(CGI->generaltexth->zelp[304].second,down,this);
} }
} }
void CHeroList::hover (bool on) void CHeroList::hover (bool on)
@ -2691,7 +2690,7 @@ void CTownList::mouseMoved (const SDL_MouseMotionEvent & sEvent)
if(isItIn(&arrupp,LOCPLINT->current->motion.x,LOCPLINT->current->motion.y)) if(isItIn(&arrupp,LOCPLINT->current->motion.x,LOCPLINT->current->motion.y))
{ {
if (from>0) if (from>0)
LOCPLINT->statusbar->print(CGI->preth->zelp[306].first); LOCPLINT->statusbar->print(CGI->generaltexth->zelp[306].first);
else else
LOCPLINT->statusbar->clear(); LOCPLINT->statusbar->clear();
return; return;
@ -2699,7 +2698,7 @@ void CTownList::mouseMoved (const SDL_MouseMotionEvent & sEvent)
else if(isItIn(&arrdop,LOCPLINT->current->motion.x,LOCPLINT->current->motion.y)) else if(isItIn(&arrdop,LOCPLINT->current->motion.x,LOCPLINT->current->motion.y))
{ {
if ((items.size()-from) > SIZE) if ((items.size()-from) > SIZE)
LOCPLINT->statusbar->print(CGI->preth->zelp[307].first); LOCPLINT->statusbar->print(CGI->generaltexth->zelp[307].first);
else else
LOCPLINT->statusbar->clear(); LOCPLINT->statusbar->clear();
return; return;
@ -2741,7 +2740,10 @@ void CTownList::clickLeft(tribool down)
int ny = hy/32; int ny = hy/32;
if (ny>SIZE || ny<0) if (ny>SIZE || ny<0)
return; return;
if (SIZE==5 && (ny+from)==selected && (LOCPLINT->adventureInt->selection->ID == TOWNI_TYPE)) if(LOCPLINT->curint == LOCPLINT->adventureInt
&& (ny+from)==selected
&& LOCPLINT->adventureInt->selection->ID == TOWNI_TYPE
)
LOCPLINT->openTownWindow(items[selected]);//print town screen LOCPLINT->openTownWindow(items[selected]);//print town screen
else else
select(ny+from); select(ny+from);
@ -2787,11 +2789,11 @@ void CTownList::clickRight(tribool down)
/***************************ARROWS*****************************************/ /***************************ARROWS*****************************************/
if(isItIn(&arrupp,LOCPLINT->current->motion.x,LOCPLINT->current->motion.y) && from>0) if(isItIn(&arrupp,LOCPLINT->current->motion.x,LOCPLINT->current->motion.y) && from>0)
{ {
LOCPLINT->adventureInt->handleRightClick(CGI->preth->zelp[306].second,down,this); LOCPLINT->adventureInt->handleRightClick(CGI->generaltexth->zelp[306].second,down,this);
} }
else if(isItIn(&arrdop,LOCPLINT->current->motion.x,LOCPLINT->current->motion.y) && (items.size()-from>5)) else if(isItIn(&arrdop,LOCPLINT->current->motion.x,LOCPLINT->current->motion.y) && (items.size()-from>5))
{ {
LOCPLINT->adventureInt->handleRightClick(CGI->preth->zelp[307].second,down,this); LOCPLINT->adventureInt->handleRightClick(CGI->generaltexth->zelp[307].second,down,this);
} }
//if not buttons then towns //if not buttons then towns
int hx = LOCPLINT->current->motion.x, hy = LOCPLINT->current->motion.y; int hx = LOCPLINT->current->motion.x, hy = LOCPLINT->current->motion.y;
@ -2809,8 +2811,8 @@ void CTownList::clickRight(tribool down)
} }
else else
{ {
LOCPLINT->adventureInt->handleRightClick(CGI->preth->zelp[306].second,down,this); LOCPLINT->adventureInt->handleRightClick(CGI->generaltexth->zelp[306].second,down,this);
LOCPLINT->adventureInt->handleRightClick(CGI->preth->zelp[307].second,down,this); LOCPLINT->adventureInt->handleRightClick(CGI->generaltexth->zelp[307].second,down,this);
} }
} }
@ -3188,7 +3190,7 @@ CCreInfoWindow::CCreInfoWindow(int Cid, int Type, int creatureCount, StackState
printAtMiddle(c->namePl,149,30,GEOR13,zwykly,bitmap); //creature name printAtMiddle(c->namePl,149,30,GEOR13,zwykly,bitmap); //creature name
//atttack //atttack
printAt(CGI->preth->zelp[435].first,155,48,GEOR13,zwykly,bitmap); printAt(CGI->generaltexth->zelp[435].first,155,48,GEOR13,zwykly,bitmap);
SDL_itoa(c->attack,pom,10); SDL_itoa(c->attack,pom,10);
if(State && State->attackBonus) if(State && State->attackBonus)
{ {
@ -3205,7 +3207,7 @@ CCreInfoWindow::CCreInfoWindow(int Cid, int Type, int creatureCount, StackState
printToWR(pom,276,61,GEOR13,zwykly,bitmap); printToWR(pom,276,61,GEOR13,zwykly,bitmap);
//defense //defense
printAt(CGI->preth->zelp[436].first,155,67,GEOR13,zwykly,bitmap); printAt(CGI->generaltexth->zelp[436].first,155,67,GEOR13,zwykly,bitmap);
SDL_itoa(c->defence,pom,10); SDL_itoa(c->defence,pom,10);
if(State && State->defenseBonus) if(State && State->defenseBonus)
{ {
@ -3244,20 +3246,20 @@ CCreInfoWindow::CCreInfoWindow(int Cid, int Type, int creatureCount, StackState
printToWR(pom,276,118,GEOR13,zwykly,bitmap); printToWR(pom,276,118,GEOR13,zwykly,bitmap);
//health //health
printAt(CGI->preth->zelp[439].first,155,124,GEOR13,zwykly,bitmap); printAt(CGI->generaltexth->zelp[439].first,155,124,GEOR13,zwykly,bitmap);
SDL_itoa(c->hitPoints,pom,10); SDL_itoa(c->hitPoints,pom,10);
printToWR(pom,276,137,GEOR13,zwykly,bitmap); printToWR(pom,276,137,GEOR13,zwykly,bitmap);
//remaining health //remaining health
if(State && State->currentHealth) if(State && State->currentHealth)
{ {
printAt(CGI->preth->zelp[440].first,155,143,GEOR13,zwykly,bitmap); printAt(CGI->generaltexth->zelp[440].first,155,143,GEOR13,zwykly,bitmap);
SDL_itoa(State->currentHealth,pom,10); SDL_itoa(State->currentHealth,pom,10);
printToWR(pom,276,156,GEOR13,zwykly,bitmap); printToWR(pom,276,156,GEOR13,zwykly,bitmap);
} }
//speed //speed
printAt(CGI->preth->zelp[441].first,155,162,GEOR13,zwykly,bitmap); printAt(CGI->generaltexth->zelp[441].first,155,162,GEOR13,zwykly,bitmap);
SDL_itoa(c->speed,pom,10); SDL_itoa(c->speed,pom,10);
printToWR(pom,276,175,GEOR13,zwykly,bitmap); printToWR(pom,276,175,GEOR13,zwykly,bitmap);
@ -3288,11 +3290,11 @@ CCreInfoWindow::CCreInfoWindow(int Cid, int Type, int creatureCount, StackState
CFunctionList<void()> cfl; CFunctionList<void()> cfl;
cfl = boost::bind(&CCreInfoWindow::deactivate,this); cfl = boost::bind(&CCreInfoWindow::deactivate,this);
cfl += boost::bind(&CPlayerInterface::showYesNoDialog,LOCPLINT,CGI->generaltexth->allTexts[207],boost::ref(upgResCost),fs[0],fs[1],false,false); cfl += boost::bind(&CPlayerInterface::showYesNoDialog,LOCPLINT,CGI->generaltexth->allTexts[207],boost::ref(upgResCost),fs[0],fs[1],false,false);
upgrade = new AdventureMapButton("",CGI->preth->zelp[446].second,cfl,pos.x+76,pos.y+237,"IVIEWCR.DEF",SDLK_u); upgrade = new AdventureMapButton("",CGI->generaltexth->zelp[446].second,cfl,pos.x+76,pos.y+237,"IVIEWCR.DEF",SDLK_u);
} }
else else
{ {
upgrade = new AdventureMapButton("",CGI->preth->zelp[446].second,boost::function<void()>(),pos.x+76,pos.y+237,"IVIEWCR.DEF"); upgrade = new AdventureMapButton("",CGI->generaltexth->zelp[446].second,boost::function<void()>(),pos.x+76,pos.y+237,"IVIEWCR.DEF");
upgrade->callback.funcs.clear(); upgrade->callback.funcs.clear();
upgrade->bitmapOffset = 2; upgrade->bitmapOffset = 2;
} }
@ -3308,9 +3310,9 @@ CCreInfoWindow::CCreInfoWindow(int Cid, int Type, int creatureCount, StackState
CFunctionList<void()> cfl; CFunctionList<void()> cfl;
cfl = boost::bind(&CCreInfoWindow::deactivate,this); cfl = boost::bind(&CCreInfoWindow::deactivate,this);
cfl += boost::bind(&CPlayerInterface::showYesNoDialog,LOCPLINT,CGI->generaltexth->allTexts[12],std::vector<SComponent*>(),fs[0],fs[1],false,false); cfl += boost::bind(&CPlayerInterface::showYesNoDialog,LOCPLINT,CGI->generaltexth->allTexts[12],std::vector<SComponent*>(),fs[0],fs[1],false,false);
dismiss = new AdventureMapButton("",CGI->preth->zelp[445].second,cfl,pos.x+21,pos.y+237,"IVIEWCR2.DEF",SDLK_d); dismiss = new AdventureMapButton("",CGI->generaltexth->zelp[445].second,cfl,pos.x+21,pos.y+237,"IVIEWCR2.DEF",SDLK_d);
} }
ok = new AdventureMapButton("",CGI->preth->zelp[445].second,boost::bind(&CCreInfoWindow::close,this),pos.x+216,pos.y+237,"IOKAY.DEF",SDLK_RETURN); ok = new AdventureMapButton("",CGI->generaltexth->zelp[445].second,boost::bind(&CCreInfoWindow::close,this),pos.x+216,pos.y+237,"IOKAY.DEF",SDLK_RETURN);
} }
else else
{ {
@ -3844,16 +3846,16 @@ CSystemOptionsWindow::CSystemOptionsWindow(const SDL_Rect &pos, CPlayerInterface
CSDL_Ext::printAt(CGI->generaltexth->allTexts[577], 283, 217, GEOR16, zwykly, background); //spell book animation CSDL_Ext::printAt(CGI->generaltexth->allTexts[577], 283, 217, GEOR16, zwykly, background); //spell book animation
//setting up buttons //setting up buttons
quitGame = new AdventureMapButton (CGI->preth->zelp[324].first, CGI->preth->zelp[324].second, boost::bind(&CSystemOptionsWindow::bquitf, this), 405, 471, "soquit.def", SDLK_q); quitGame = new AdventureMapButton (CGI->generaltexth->zelp[324].first, CGI->generaltexth->zelp[324].second, boost::bind(&CSystemOptionsWindow::bquitf, this), 405, 471, "soquit.def", SDLK_q);
std::swap(quitGame->imgs[0][0], quitGame->imgs[0][1]); std::swap(quitGame->imgs[0][0], quitGame->imgs[0][1]);
backToMap = new AdventureMapButton (CGI->preth->zelp[325].first, CGI->preth->zelp[325].second, boost::bind(&CSystemOptionsWindow::breturnf, this), 516, 471, "soretrn.def", SDLK_RETURN); backToMap = new AdventureMapButton (CGI->generaltexth->zelp[325].first, CGI->generaltexth->zelp[325].second, boost::bind(&CSystemOptionsWindow::breturnf, this), 516, 471, "soretrn.def", SDLK_RETURN);
std::swap(backToMap->imgs[0][0], backToMap->imgs[0][1]); std::swap(backToMap->imgs[0][0], backToMap->imgs[0][1]);
heroMoveSpeed = new CHighlightableButtonsGroup(0); heroMoveSpeed = new CHighlightableButtonsGroup(0);
heroMoveSpeed->addButton(boost::assign::map_list_of(0,CGI->preth->zelp[349].first),CGI->preth->zelp[349].second, "sysopb1.def", 187, 134, 1); heroMoveSpeed->addButton(boost::assign::map_list_of(0,CGI->generaltexth->zelp[349].first),CGI->generaltexth->zelp[349].second, "sysopb1.def", 187, 134, 1);
heroMoveSpeed->addButton(boost::assign::map_list_of(0,CGI->preth->zelp[350].first),CGI->preth->zelp[350].second, "sysopb2.def", 235, 134, 2); heroMoveSpeed->addButton(boost::assign::map_list_of(0,CGI->generaltexth->zelp[350].first),CGI->generaltexth->zelp[350].second, "sysopb2.def", 235, 134, 2);
heroMoveSpeed->addButton(boost::assign::map_list_of(0,CGI->preth->zelp[351].first),CGI->preth->zelp[351].second, "sysopb3.def", 283, 134, 4); heroMoveSpeed->addButton(boost::assign::map_list_of(0,CGI->generaltexth->zelp[351].first),CGI->generaltexth->zelp[351].second, "sysopb3.def", 283, 134, 4);
heroMoveSpeed->addButton(boost::assign::map_list_of(0,CGI->preth->zelp[352].first),CGI->preth->zelp[352].second, "sysopb4.def", 331, 134, 8); heroMoveSpeed->addButton(boost::assign::map_list_of(0,CGI->generaltexth->zelp[352].first),CGI->generaltexth->zelp[352].second, "sysopb4.def", 331, 134, 8);
heroMoveSpeed->select(owner->heroMoveSpeed, 1); heroMoveSpeed->select(owner->heroMoveSpeed, 1);
heroMoveSpeed->onChange = boost::bind(&CPlayerInterface::setHeroMoveSpeed, owner, _1); heroMoveSpeed->onChange = boost::bind(&CPlayerInterface::setHeroMoveSpeed, owner, _1);
} }

View File

@ -770,10 +770,10 @@ void Options::show()
playersSoFar++; playersSoFar++;
} }
CSDL_Ext::printAtMiddleWB(CGI->generaltexth->allTexts[516],221,63,GEOR13,55,zwykly); CSDL_Ext::printAtMiddleWB(CGI->generaltexth->allTexts[516],221,63,GEOR13,55,zwykly);
CSDL_Ext::printAtMiddleWB(CGI->preth->getTitle(CGI->preth->zelp[256].second),109,109,GEOR13,14); CSDL_Ext::printAtMiddleWB(CGI->generaltexth->getTitle(CGI->generaltexth->zelp[256].second),109,109,GEOR13,14);
CSDL_Ext::printAtMiddleWB(CGI->preth->getTitle(CGI->preth->zelp[259].second),201,109,GEOR13,10); CSDL_Ext::printAtMiddleWB(CGI->generaltexth->getTitle(CGI->generaltexth->zelp[259].second),201,109,GEOR13,10);
CSDL_Ext::printAtMiddleWB(CGI->preth->getTitle(CGI->preth->zelp[260].second),275,109,GEOR13,10); CSDL_Ext::printAtMiddleWB(CGI->generaltexth->getTitle(CGI->generaltexth->zelp[260].second),275,109,GEOR13,10);
CSDL_Ext::printAtMiddleWB(CGI->preth->getTitle(CGI->preth->zelp[261].second),354,109,GEOR13,10); CSDL_Ext::printAtMiddleWB(CGI->generaltexth->getTitle(CGI->generaltexth->zelp[261].second),354,109,GEOR13,10);
turnLength->activate(); turnLength->activate();
for (int i=0;i<poptions.size();i++) for (int i=0;i<poptions.size();i++)
showIcon(-2,i,false); showIcon(-2,i,false);
@ -992,10 +992,9 @@ void MapSel::show()
void MapSel::processMaps(std::vector<std::string> &pliczkiTemp, int &index) void MapSel::processMaps(std::vector<std::string> &pliczkiTemp, int &index)
{ {
static boost::mutex mx; static boost::mutex mx;
bool areMaps=true; int pom=-1, read;
int pom=-1;
unsigned char sss[1000]; unsigned char sss[1000];
while(areMaps) while(true)
{ {
mx.lock(); mx.lock();
if(index>=pliczkiTemp.size()) if(index>=pliczkiTemp.size())
@ -1009,25 +1008,14 @@ void MapSel::processMaps(std::vector<std::string> &pliczkiTemp, int &index)
mx.unlock(); mx.unlock();
} }
gzFile tempf = gzopen(pliczkiTemp[pom].c_str(),"rb"); gzFile tempf = gzopen(pliczkiTemp[pom].c_str(),"rb");
int iii=0; read = gzread(tempf, sss, 1000);
while(true)
{
if (iii>=1000) break;
int z = gzgetc (tempf);
if (z>=0)
{
sss[iii++] = (unsigned char)z;
}
else break;
}
gzclose(tempf); gzclose(tempf);
if(read < 50)
if(iii<50)
{ {
tlog3<<"\t\tWarning: corrupted map file: "<<pliczkiTemp[pom]<<std::endl; tlog3<<"\t\tWarning: corrupted map file: "<<pliczkiTemp[pom]<<std::endl;
continue; continue;
} }
if (!sss[4]) if (!sss[4]) //not a valid map
{ {
//tlog3 << "\t\tSkipping " << pliczkiTemp[pom] << " - map marked as unplayable.\n"; //tlog3 << "\t\tSkipping " << pliczkiTemp[pom] << " - map marked as unplayable.\n";
continue; continue;
@ -1048,12 +1036,13 @@ void MapSel::init()
fs::directory_iterator end_iter; fs::directory_iterator end_iter;
for ( fs::directory_iterator dir (tie); dir!=end_iter; ++dir ) for ( fs::directory_iterator dir (tie); dir!=end_iter; ++dir )
{ {
if (fs::is_regular(dir->status())); if (fs::is_regular_file(dir->status()));
{ {
if (boost::ends_with(dir->path().leaf(),std::string(".h3m"))) if (boost::ends_with(dir->path().filename(),".h3m"))
pliczkiTemp.push_back("Maps/"+(dir->path().leaf())); pliczkiTemp.push_back("Maps/"+(dir->path().leaf()));
} }
} }
ourMaps.reserve(pliczkiTemp.size());
int mapInd=0; int mapInd=0;
boost::thread_group group; boost::thread_group group;
@ -1233,7 +1222,7 @@ void MapSel::printSelectedInfo()
SDL_BlitSurface(CPG->ourScenSel->bOptions.imgs->ourImages[0].bitmap,NULL,screen,&CPG->ourScenSel->bOptions.pos); SDL_BlitSurface(CPG->ourScenSel->bOptions.imgs->ourImages[0].bitmap,NULL,screen,&CPG->ourScenSel->bOptions.pos);
SDL_BlitSurface(CPG->ourScenSel->bRandom.imgs->ourImages[0].bitmap,NULL,screen,&CPG->ourScenSel->bRandom.pos); SDL_BlitSurface(CPG->ourScenSel->bRandom.imgs->ourImages[0].bitmap,NULL,screen,&CPG->ourScenSel->bRandom.pos);
//blit texts //blit texts
CSDL_Ext::printAt(CGI->preth->zelp[21].second,420,25,GEOR13); CSDL_Ext::printAt(CGI->generaltexth->zelp[21].second,420,25,GEOR13);
CSDL_Ext::printAt(CGI->generaltexth->allTexts[496],420,135,GEOR13); CSDL_Ext::printAt(CGI->generaltexth->allTexts[496],420,135,GEOR13);
CSDL_Ext::printAt(CGI->generaltexth->allTexts[497],420,285,GEOR13); CSDL_Ext::printAt(CGI->generaltexth->allTexts[497],420,285,GEOR13);
CSDL_Ext::printAt(CGI->generaltexth->allTexts[498],420,340,GEOR13); CSDL_Ext::printAt(CGI->generaltexth->allTexts[498],420,340,GEOR13);
@ -1242,14 +1231,14 @@ void MapSel::printSelectedInfo()
int temp = ourMaps[selected].victoryCondition+1; int temp = ourMaps[selected].victoryCondition+1;
if (temp>20) temp=0; if (temp>20) temp=0;
std::string sss = CGI->preth->victoryConditions[temp]; std::string sss = CGI->generaltexth->victoryConditions[temp];
if (temp && ourMaps[selected].vicConDetails->allowNormalVictory) sss+= "/" + CGI->preth->victoryConditions[0]; if (temp && ourMaps[selected].vicConDetails->allowNormalVictory) sss+= "/" + CGI->generaltexth->victoryConditions[0];
CSDL_Ext::printAt(sss,452,310,GEOR13,zwykly); CSDL_Ext::printAt(sss,452,310,GEOR13,zwykly);
temp = ourMaps[selected].lossCondition.typeOfLossCon+1; temp = ourMaps[selected].lossCondition.typeOfLossCon+1;
if (temp>20) temp=0; if (temp>20) temp=0;
sss = CGI->preth->lossCondtions[temp]; sss = CGI->generaltexth->lossCondtions[temp];
CSDL_Ext::printAt(sss,452,370,GEOR13,zwykly); CSDL_Ext::printAt(sss,452,370,GEOR13,zwykly);
//blit descrption //blit descrption
@ -1266,19 +1255,19 @@ void MapSel::printSelectedInfo()
switch (ourMaps[selected].difficulty) switch (ourMaps[selected].difficulty)
{ {
case 0: case 0:
diff=gdiff(CGI->preth->zelp[24].second); diff=gdiff(CGI->generaltexth->zelp[24].second);
break; break;
case 1: case 1:
diff=gdiff(CGI->preth->zelp[25].second); diff=gdiff(CGI->generaltexth->zelp[25].second);
break; break;
case 2: case 2:
diff=gdiff(CGI->preth->zelp[26].second); diff=gdiff(CGI->generaltexth->zelp[26].second);
break; break;
case 3: case 3:
diff=gdiff(CGI->preth->zelp[27].second); diff=gdiff(CGI->generaltexth->zelp[27].second);
break; break;
case 4: case 4:
diff=gdiff(CGI->preth->zelp[28].second); diff=gdiff(CGI->generaltexth->zelp[28].second);
break; break;
} }
temp=-1; temp=-1;
@ -1676,7 +1665,7 @@ void CPreGame::highlightButton(int which, int on)
void CPreGame::showCenBox (std::string data) void CPreGame::showCenBox (std::string data)
{ {
CMessage * cmh = new CMessage(); CMessage * cmh = new CMessage();
SDL_Surface * infoBox = cmh->genMessage(CGI->preth->getTitle(data), CGI->preth->getDescr(data)); SDL_Surface * infoBox = cmh->genMessage(CGI->generaltexth->getTitle(data), CGI->generaltexth->getDescr(data));
behindCurMes = CSDL_Ext::newSurface(infoBox->w,infoBox->h,screen); behindCurMes = CSDL_Ext::newSurface(infoBox->w,infoBox->h,screen);
SDL_Rect pos = genRect(infoBox->h,infoBox->w, SDL_Rect pos = genRect(infoBox->h,infoBox->w,
(screen->w/2)-(infoBox->w/2),(screen->h/2)-(infoBox->h/2)); (screen->w/2)-(infoBox->w/2),(screen->h/2)-(infoBox->h/2));
@ -1694,7 +1683,7 @@ void CPreGame::showAskBox (std::string data, void(*f1)(),void(*f2)())
std::vector<SDL_Rect> * btnspos= new std::vector<SDL_Rect>(0); std::vector<SDL_Rect> * btnspos= new std::vector<SDL_Rect>(0);
przyciski->push_back(ok); przyciski->push_back(ok);
przyciski->push_back(cancel); przyciski->push_back(cancel);
SDL_Surface * infoBox = cmh->genMessage(CGI->preth->getTitle(data), CGI->preth->getDescr(data), yesOrNO, przyciski, btnspos); SDL_Surface * infoBox = cmh->genMessage(CGI->generaltexth->getTitle(data), CGI->generaltexth->getDescr(data), yesOrNO, przyciski, btnspos);
behindCurMes = CSDL_Ext::newSurface(infoBox->w,infoBox->h,screen); behindCurMes = CSDL_Ext::newSurface(infoBox->w,infoBox->h,screen);
SDL_Rect pos = genRect(infoBox->h,infoBox->w, SDL_Rect pos = genRect(infoBox->h,infoBox->w,
(screen->w/2)-(infoBox->w/2),(screen->h/2)-(infoBox->h/2)); (screen->w/2)-(infoBox->w/2),(screen->h/2)-(infoBox->h/2));
@ -2112,15 +2101,15 @@ std::string CPreGame::buttonText(int which)
switch (which) switch (which)
{ {
case 0: case 0:
return CGI->preth->zelp[3].second; return CGI->generaltexth->zelp[3].second;
case 1: case 1:
return CGI->preth->zelp[4].second; return CGI->generaltexth->zelp[4].second;
case 2: case 2:
return CGI->preth->zelp[5].second; return CGI->generaltexth->zelp[5].second;
case 3: case 3:
return CGI->preth->zelp[6].second; return CGI->generaltexth->zelp[6].second;
case 4: case 4:
return CGI->preth->zelp[7].second; return CGI->generaltexth->zelp[7].second;
} }
} }
else if (state==newGame || state==loadGame) else if (state==newGame || state==loadGame)
@ -2128,15 +2117,15 @@ std::string CPreGame::buttonText(int which)
switch (which) switch (which)
{ {
case 0: case 0:
return CGI->preth->zelp[10].second; return CGI->generaltexth->zelp[10].second;
case 1: case 1:
return CGI->preth->zelp[11].second; return CGI->generaltexth->zelp[11].second;
case 2: case 2:
return CGI->preth->zelp[12].second; return CGI->generaltexth->zelp[12].second;
case 3: case 3:
return CGI->preth->zelp[13].second; return CGI->generaltexth->zelp[13].second;
case 4: case 4:
return CGI->preth->zelp[14].second; return CGI->generaltexth->zelp[14].second;
} }
} }
return std::string(); return std::string();

View File

@ -4,7 +4,6 @@
#include <set> #include <set>
#include "SDL.h" #include "SDL.h"
#include "StartInfo.h" #include "StartInfo.h"
#include "hch/CPreGameTextHandler.h"
#include "CMessage.h" #include "CMessage.h"
#include "map.h" #include "map.h"
#include "hch/CMusicHandler.h" #include "hch/CMusicHandler.h"

View File

@ -208,9 +208,29 @@ struct SettingsGrammar : public grammar<SettingsGrammar>
*( *(
( "x=" >> uint_p[SetAdventureProp_a(&AdventureMapConfig::resdatabarX)] ( "x=" >> uint_p[SetAdventureProp_a(&AdventureMapConfig::resdatabarX)]
| "y=" >> uint_p[SetAdventureProp_a(&AdventureMapConfig::resdatabarY)] | "y=" >> uint_p[SetAdventureProp_a(&AdventureMapConfig::resdatabarY)]
| "offsetX=" >> uint_p[SetAdventureProp_a(&AdventureMapConfig::resOffsetX)]
| "offsetY=" >> uint_p[SetAdventureProp_a(&AdventureMapConfig::resOffsetY)]
| "resSpace=" >> uint_p[SetAdventureProp_a(&AdventureMapConfig::resDist)]
| "resDateSpace=" >> uint_p[SetAdventureProp_a(&AdventureMapConfig::resDateDist)]
| "graphic=" >> fname[SetAdventureStr(&AdventureMapConfig::resdatabarG)] | "graphic=" >> fname[SetAdventureStr(&AdventureMapConfig::resdatabarG)]
) )
) )
| str_p("InfoBox:") >>
*(
( "x=" >> uint_p[SetAdventureProp_a(&AdventureMapConfig::infoboxX)]
| "y=" >> uint_p[SetAdventureProp_a(&AdventureMapConfig::infoboxY)]
)
)
| str_p("AdvMap:") >>
*(
( "x=" >> uint_p[SetAdventureProp_a(&AdventureMapConfig::advmapX)]
| "y=" >> uint_p[SetAdventureProp_a(&AdventureMapConfig::advmapY)]
| "trimX=" >> uint_p[SetAdventureProp_a(&AdventureMapConfig::advmapTrimX)]
| "trimY=" >> uint_p[SetAdventureProp_a(&AdventureMapConfig::advmapTrimY)]
| "tilesWidth=" >> uint_p[SetAdventureProp_a(&AdventureMapConfig::tilesW)]
| "tilesHeight=" >> uint_p[SetAdventureProp_a(&AdventureMapConfig::tilesH)]
)
)
| str_p("background=") >> fname[SetAdventureStr(&AdventureMapConfig::mainGraphic)] | str_p("background=") >> fname[SetAdventureStr(&AdventureMapConfig::mainGraphic)]
| str_p("Button") >> (+(anychar_p-':'))[SetCurButton()] >> ':' >> | str_p("Button") >> (+(anychar_p-':'))[SetCurButton()] >> ':' >>
*( *(

View File

@ -25,8 +25,12 @@ namespace config
int statusbarX, statusbarY; //pos int statusbarX, statusbarY; //pos
std::string statusbarG; //graphic name std::string statusbarG; //graphic name
//resdatabar //resdatabar
int resdatabarX, resdatabarY; //pos int resdatabarX, resdatabarY, resDist, resDateDist, resOffsetX, resOffsetY; //pos
std::string resdatabarG; //graphic name std::string resdatabarG; //graphic name
//infobox
int infoboxX, infoboxY;
//advmap
int tilesW, tilesH, advmapX, advmapY, advmapTrimX, advmapTrimY;
//general properties //general properties
std::string mainGraphic; std::string mainGraphic;
//buttons //buttons

View File

@ -3,7 +3,6 @@
#include "../hch/CDefHandler.h" #include "../hch/CDefHandler.h"
#include "../hch/CObjectHandler.h" #include "../hch/CObjectHandler.h"
#include "../hch/CSpellHandler.h" #include "../hch/CSpellHandler.h"
#include "../hch/CPreGameTextHandler.h"
#include "../hch/CGeneralTextHandler.h" #include "../hch/CGeneralTextHandler.h"
#include "../CAdvmapInterface.h" #include "../CAdvmapInterface.h"
#include "../CBattleInterface.h" #include "../CBattleInterface.h"
@ -218,29 +217,29 @@ CSpellWindow::CSpellWindow(const SDL_Rect & myRect, const CGHeroInstance * myHer
statusBar = new CStatusBar(97, 571, "Spelroll.bmp"); statusBar = new CStatusBar(97, 571, "Spelroll.bmp");
SDL_Rect temp_rect = genRect(45, 35, 569, 407); SDL_Rect temp_rect = genRect(45, 35, 569, 407);
exitBtn = new SpellbookInteractiveArea(temp_rect, boost::bind(&CSpellWindow::fexitb, this), CGI->preth->zelp[460].second, boost::bind(&CStatusBar::print, statusBar, (CGI->preth->zelp[460].first)), boost::bind(&CStatusBar::clear, statusBar)); exitBtn = new SpellbookInteractiveArea(temp_rect, boost::bind(&CSpellWindow::fexitb, this), CGI->generaltexth->zelp[460].second, boost::bind(&CStatusBar::print, statusBar, (CGI->generaltexth->zelp[460].first)), boost::bind(&CStatusBar::clear, statusBar));
temp_rect = genRect(45, 35, 311, 407); temp_rect = genRect(45, 35, 311, 407);
battleSpells = new SpellbookInteractiveArea(temp_rect, boost::bind(&CSpellWindow::fbattleSpellsb, this), CGI->preth->zelp[453].second, boost::bind(&CStatusBar::print, statusBar, (CGI->preth->zelp[453].first)), boost::bind(&CStatusBar::clear, statusBar)); battleSpells = new SpellbookInteractiveArea(temp_rect, boost::bind(&CSpellWindow::fbattleSpellsb, this), CGI->generaltexth->zelp[453].second, boost::bind(&CStatusBar::print, statusBar, (CGI->generaltexth->zelp[453].first)), boost::bind(&CStatusBar::clear, statusBar));
temp_rect = genRect(45, 35, 445, 407); temp_rect = genRect(45, 35, 445, 407);
adventureSpells = new SpellbookInteractiveArea(temp_rect, boost::bind(&CSpellWindow::fadvSpellsb, this), CGI->preth->zelp[452].second, boost::bind(&CStatusBar::print, statusBar, (CGI->preth->zelp[452].first)), boost::bind(&CStatusBar::clear, statusBar)); adventureSpells = new SpellbookInteractiveArea(temp_rect, boost::bind(&CSpellWindow::fadvSpellsb, this), CGI->generaltexth->zelp[452].second, boost::bind(&CStatusBar::print, statusBar, (CGI->generaltexth->zelp[452].first)), boost::bind(&CStatusBar::clear, statusBar));
temp_rect = genRect(45, 35, 508, 407); temp_rect = genRect(45, 35, 508, 407);
manaPoints = new SpellbookInteractiveArea(temp_rect, boost::bind(&CSpellWindow::fmanaPtsb, this), CGI->preth->zelp[459].second, boost::bind(&CStatusBar::print, statusBar, (CGI->preth->zelp[459].first)), boost::bind(&CStatusBar::clear, statusBar)); manaPoints = new SpellbookInteractiveArea(temp_rect, boost::bind(&CSpellWindow::fmanaPtsb, this), CGI->generaltexth->zelp[459].second, boost::bind(&CStatusBar::print, statusBar, (CGI->generaltexth->zelp[459].first)), boost::bind(&CStatusBar::clear, statusBar));
temp_rect = genRect(36, 56, 639, 96); temp_rect = genRect(36, 56, 639, 96);
selectSpellsA = new SpellbookInteractiveArea(temp_rect, boost::bind(&CSpellWindow::fspellsAb, this), CGI->preth->zelp[454].second, boost::bind(&CStatusBar::print, statusBar, (CGI->preth->zelp[454].first)), boost::bind(&CStatusBar::clear, statusBar)); selectSpellsA = new SpellbookInteractiveArea(temp_rect, boost::bind(&CSpellWindow::fspellsAb, this), CGI->generaltexth->zelp[454].second, boost::bind(&CStatusBar::print, statusBar, (CGI->generaltexth->zelp[454].first)), boost::bind(&CStatusBar::clear, statusBar));
temp_rect = genRect(36, 56, 639, 153); temp_rect = genRect(36, 56, 639, 153);
selectSpellsE = new SpellbookInteractiveArea(temp_rect, boost::bind(&CSpellWindow::fspellsEb, this), CGI->preth->zelp[457].second, boost::bind(&CStatusBar::print, statusBar, (CGI->preth->zelp[457].first)), boost::bind(&CStatusBar::clear, statusBar)); selectSpellsE = new SpellbookInteractiveArea(temp_rect, boost::bind(&CSpellWindow::fspellsEb, this), CGI->generaltexth->zelp[457].second, boost::bind(&CStatusBar::print, statusBar, (CGI->generaltexth->zelp[457].first)), boost::bind(&CStatusBar::clear, statusBar));
temp_rect = genRect(36, 56, 639, 212); temp_rect = genRect(36, 56, 639, 212);
selectSpellsF = new SpellbookInteractiveArea(temp_rect, boost::bind(&CSpellWindow::fspellsFb, this), CGI->preth->zelp[455].second, boost::bind(&CStatusBar::print, statusBar, (CGI->preth->zelp[455].first)), boost::bind(&CStatusBar::clear, statusBar)); selectSpellsF = new SpellbookInteractiveArea(temp_rect, boost::bind(&CSpellWindow::fspellsFb, this), CGI->generaltexth->zelp[455].second, boost::bind(&CStatusBar::print, statusBar, (CGI->generaltexth->zelp[455].first)), boost::bind(&CStatusBar::clear, statusBar));
temp_rect = genRect(36, 56, 639, 272); temp_rect = genRect(36, 56, 639, 272);
selectSpellsW = new SpellbookInteractiveArea(temp_rect, boost::bind(&CSpellWindow::fspellsWb, this), CGI->preth->zelp[456].second, boost::bind(&CStatusBar::print, statusBar, (CGI->preth->zelp[456].first)), boost::bind(&CStatusBar::clear, statusBar)); selectSpellsW = new SpellbookInteractiveArea(temp_rect, boost::bind(&CSpellWindow::fspellsWb, this), CGI->generaltexth->zelp[456].second, boost::bind(&CStatusBar::print, statusBar, (CGI->generaltexth->zelp[456].first)), boost::bind(&CStatusBar::clear, statusBar));
temp_rect = genRect(36, 56, 639, 332); temp_rect = genRect(36, 56, 639, 332);
selectSpellsAll = new SpellbookInteractiveArea(temp_rect, boost::bind(&CSpellWindow::fspellsAllb, this), CGI->preth->zelp[458].second, boost::bind(&CStatusBar::print, statusBar, (CGI->preth->zelp[458].first)), boost::bind(&CStatusBar::clear, statusBar)); selectSpellsAll = new SpellbookInteractiveArea(temp_rect, boost::bind(&CSpellWindow::fspellsAllb, this), CGI->generaltexth->zelp[458].second, boost::bind(&CStatusBar::print, statusBar, (CGI->generaltexth->zelp[458].first)), boost::bind(&CStatusBar::clear, statusBar));
temp_rect = genRect(leftCorner->h, leftCorner->w, 187, 79); temp_rect = genRect(leftCorner->h, leftCorner->w, 187, 79);
lCorner = new SpellbookInteractiveArea(temp_rect, boost::bind(&CSpellWindow::fLcornerb, this), CGI->preth->zelp[450].second, boost::bind(&CStatusBar::print, statusBar, (CGI->preth->zelp[450].first)), boost::bind(&CStatusBar::clear, statusBar)); lCorner = new SpellbookInteractiveArea(temp_rect, boost::bind(&CSpellWindow::fLcornerb, this), CGI->generaltexth->zelp[450].second, boost::bind(&CStatusBar::print, statusBar, (CGI->generaltexth->zelp[450].first)), boost::bind(&CStatusBar::clear, statusBar));
temp_rect = genRect(rightCorner->h, rightCorner->w, 577, 76); temp_rect = genRect(rightCorner->h, rightCorner->w, 577, 76);
rCorner = new SpellbookInteractiveArea(temp_rect, boost::bind(&CSpellWindow::fRcornerb, this), CGI->preth->zelp[451].second, boost::bind(&CStatusBar::print, statusBar, (CGI->preth->zelp[451].first)), boost::bind(&CStatusBar::clear, statusBar)); rCorner = new SpellbookInteractiveArea(temp_rect, boost::bind(&CSpellWindow::fRcornerb, this), CGI->generaltexth->zelp[451].second, boost::bind(&CStatusBar::print, statusBar, (CGI->generaltexth->zelp[451].first)), boost::bind(&CStatusBar::clear, statusBar));
//areas for spells //areas for spells
int xpos = 207, ypos = 92; int xpos = 207, ypos = 92;

View File

@ -318,10 +318,6 @@
RelativePath="..\CGameInterface.cpp" RelativePath="..\CGameInterface.cpp"
> >
</File> </File>
<File
RelativePath="..\hch\CGeneralTextHandler.cpp"
>
</File>
<File <File
RelativePath="..\CHeroWindow.cpp" RelativePath="..\CHeroWindow.cpp"
> >
@ -358,10 +354,6 @@
RelativePath="..\CPreGame.cpp" RelativePath="..\CPreGame.cpp"
> >
</File> </File>
<File
RelativePath="..\hch\CPreGameTextHandler.cpp"
>
</File>
<File <File
RelativePath="..\hch\CSndHandler.cpp" RelativePath="..\hch\CSndHandler.cpp"
> >
@ -464,10 +456,6 @@
RelativePath="..\CGameInterface.h" RelativePath="..\CGameInterface.h"
> >
</File> </File>
<File
RelativePath="..\hch\CGeneralTextHandler.h"
>
</File>
<File <File
RelativePath="..\hch\CHeroHandler.h" RelativePath="..\hch\CHeroHandler.h"
> >
@ -508,10 +496,6 @@
RelativePath="..\CPreGame.h" RelativePath="..\CPreGame.h"
> >
</File> </File>
<File
RelativePath="..\hch\CPreGameTextHandler.h"
>
</File>
<File <File
RelativePath="..\hch\CSndHandler.h" RelativePath="..\hch\CSndHandler.h"
> >

View File

@ -8,7 +8,7 @@ clientSettings
fullscreen=0; //0 - windowed mode, 1 - fullscreen fullscreen=0; //0 - windowed mode, 1 - fullscreen
server=127.0.0.1; //use 127.0.0.1 for localhost server=127.0.0.1; //use 127.0.0.1 for localhost
localInformation=2; //0 - *all* information sent from server (safest and slowest); 1 - map information sent from server; 2 - all information local-storaged localInformation=2; //0 - *all* information sent from server (safest and slowest); 1 - map information sent from server; 2 - all information local-storaged
defaultAI=EmptyAI.dll; defaultAI=GeniusAI.dll;
} }
GUISettings GUISettings
{ {
@ -16,6 +16,8 @@ GUISettings
{ {
AdventureMap AdventureMap
{ {
AdvMap: x=7 y=6 tilesWidth=19 tilesHeight=18 trimX=15 trimY=29;
InfoBox: x=605 y=389;
gem0: x=6 y=508 graphic=agemLL.def; gem0: x=6 y=508 graphic=agemLL.def;
gem1: x=556 y=508 graphic=agemLR.def; gem1: x=556 y=508 graphic=agemLR.def;
gem2: x=6 y=6 graphic=agemUL.def; gem2: x=6 y=6 graphic=agemUL.def;
@ -25,7 +27,7 @@ GUISettings
TownList: size=5 x=747 y=196 arrowUp=IAM014.DEF arrowDown=IAM015.DEF; TownList: size=5 x=747 y=196 arrowUp=IAM014.DEF arrowDown=IAM015.DEF;
Minimap: width=144 height=144 x=630 y=26; Minimap: width=144 height=144 x=630 y=26;
Statusbar: x=7 y=556 graphic=ADROLLVR.bmp; Statusbar: x=7 y=556 graphic=ADROLLVR.bmp;
ResDataBar: x=3 y=575 graphic=ZRESBAR.bmp; ResDataBar: x=3 y=575 graphic=ZRESBAR.bmp offsetX=32 offsetY=2 resSpace=85 resDateSpace=85;
ButtonKingdomOv: x=679 y=196 graphic=IAM002.DEF playerColoured=1; ButtonKingdomOv: x=679 y=196 graphic=IAM002.DEF playerColoured=1;
ButtonUnderground: x=711 y=196 graphic=IAM010.DEF playerColoured=1 additionalDefs=(IAM003.DEF); ButtonUnderground: x=711 y=196 graphic=IAM010.DEF playerColoured=1 additionalDefs=(IAM003.DEF);
ButtonQuestLog: x=679 y=228 graphic=IAM004.DEF playerColoured=1; ButtonQuestLog: x=679 y=228 graphic=IAM004.DEF playerColoured=1;
@ -42,12 +44,57 @@ GUISettings
{ {
AdventureMap AdventureMap
{ {
AdvMap: x=7 y=6 tilesWidth=19 tilesHeight=18 trimX=15 trimY=29;
InfoBox: x=829 y=389;
gem0: x=6 y=508 graphic=agemLL.def;
gem1: x=780 y=508 graphic=agemLR.def;
gem2: x=6 y=6 graphic=agemUL.def;
gem3: x=780 y=6 graphic=agemUR.def;
background=ADVMAP3.pcx;
HeroList: size=5 x=832 y=196 movePoints=IMOBIL.DEF manaPoints=IMANA.DEF arrowUp=IAM012.DEF arrowDown=IAM013.DEF;
TownList: size=5 x=970 y=196 arrowUp=IAM014.DEF arrowDown=IAM015.DEF;
Minimap: width=144 height=144 x=854 y=26;
Statusbar: x=8 y=556 graphic=ADROLLVR2.pcx;
ResDataBar: x=0 y=575 graphic=ZRESBAR2.pcx offsetX=32 offsetY=2 resSpace=85;
ButtonKingdomOv: x=902 y=196 graphic=IAM002.DEF playerColoured=1;
ButtonUnderground: x=934 y=196 graphic=IAM010.DEF playerColoured=1 additionalDefs=(IAM003.DEF);
ButtonQuestLog: x=902 y=228 graphic=IAM004.DEF playerColoured=1;
ButtonSleepWake: x=934 y=228 graphic=IAM005.DEF playerColoured=1;
ButtonMoveHero: x=902 y=260 graphic=IAM006.DEF playerColoured=1;
ButtonSpellbook: x=934 y=260 graphic=IAM007.DEF playerColoured=1;
ButtonAdvOptions: x=902 y=292 graphic=IAM008.DEF playerColoured=1;
ButtonSysOptions: x=934 y=292 graphic=IAM009.DEF playerColoured=1;
ButtonNextHero: x=902 y=324 graphic=IAM000.DEF playerColoured=1;
ButtonEndTurn: x=902 y=356 graphic=IAM001.DEF playerColoured=1;
}; };
} }
1024x768 //setting specific for this resolution 1024x768 //setting specific for this resolution
{ {
AdventureMap AdventureMap
{ {
AdvMap: x=7 y=6 tilesWidth=26 tilesHeight=23 trimX=15 trimY=20;
InfoBox: x=829 y=557;
gem0: x=6 y=676 graphic=agemLL.def;
gem1: x=780 y=676 graphic=agemLR.def;
gem2: x=6 y=6 graphic=agemUL.def;
gem3: x=780 y=6 graphic=agemUR.def;
background=ADVMAP2.pcx;
HeroList: size=10 x=832 y=201 movePoints=IMOBIL.DEF manaPoints=IMANA.DEF arrowUp=IAM012.DEF arrowDown=IAM013.DEF;
TownList: size=10 x=970 y=201 arrowUp=IAM014.DEF arrowDown=IAM015.DEF;
Minimap: width=144 height=144 x=854 y=26;
Statusbar: x=8 y=856 graphic=ADROLLVR2.pcx;
ResDataBar: x=0 y=743 graphic=ZRESBAR2.pcx offsetX=65 offsetY=2 resSpace=109 resDateSpace=135;
ButtonKingdomOv: x=903 y=197 graphic=IAM002.DEF playerColoured=1;
ButtonUnderground: x=903 y=230 graphic=IAM010.DEF playerColoured=1 additionalDefs=(IAM003.DEF);
ButtonQuestLog: x=903 y=261 graphic=IAM004.DEF playerColoured=1;
ButtonSleepWake: x=903 y=294 graphic=IAM005.DEF playerColoured=1;
ButtonMoveHero: x=903 y=327 graphic=IAM006.DEF playerColoured=1;
ButtonSpellbook: x=903 y=359 graphic=IAM007.DEF playerColoured=1;
ButtonAdvOptions: x=903 y=393 graphic=IAM008.DEF playerColoured=1;
ButtonSysOptions: x=903 y=426 graphic=IAM009.DEF playerColoured=1;
ButtonNextHero: x=903 y=491 graphic=IAM000.DEF playerColoured=1;
ButtonEndTurn: x=903 y=524 graphic=IAM001.DEF playerColoured=1;
}; };
} }
} }

View File

@ -41,24 +41,7 @@ void CArtHandler::loadArtifacts()
nart.id=i; nart.id=i;
artifacts.push_back(nart); artifacts.push_back(nart);
} }
for(int i=0;i<144;i++) //do 144, bo nie chcemy bzdurek sortArts();
{
switch (artifacts[i].aClass)
{
case TartClass:
treasures.push_back(&(artifacts[i]));
break;
case NartClass:
minors.push_back(&(artifacts[i]));
break;
case JartClass:
majors.push_back(&(artifacts[i]));
break;
case RartClass:
relics.push_back(&(artifacts[i]));
break;
}
}
} }
int CArtHandler::convertMachineID(int id, bool creToArt ) int CArtHandler::convertMachineID(int id, bool creToArt )
@ -91,3 +74,25 @@ int CArtHandler::convertMachineID(int id, bool creToArt )
} }
return id + dif; return id + dif;
} }
void CArtHandler::sortArts()
{
for(int i=0;i<144;i++) //do 144, bo nie chcemy bzdurek
{
switch (artifacts[i].aClass)
{
case TartClass:
treasures.push_back(&(artifacts[i]));
break;
case NartClass:
minors.push_back(&(artifacts[i]));
break;
case JartClass:
majors.push_back(&(artifacts[i]));
break;
case RartClass:
relics.push_back(&(artifacts[i]));
break;
}
}
}

View File

@ -20,7 +20,10 @@ public:
EartClass aClass; EartClass aClass;
int id; int id;
template <typename Handler> void serialize(Handler &h, const int version)
{
h & isAllowed & name & description & price & possibleSlots & aClass & id ;
}
}; };
class DLL_EXPORT CArtHandler //handles artifacts class DLL_EXPORT CArtHandler //handles artifacts
@ -28,9 +31,18 @@ class DLL_EXPORT CArtHandler //handles artifacts
public: public:
std::vector<CArtifact*> treasures, minors, majors, relics; std::vector<CArtifact*> treasures, minors, majors, relics;
std::vector<CArtifact> artifacts; std::vector<CArtifact> artifacts;
void loadArtifacts(); void loadArtifacts();
void sortArts();
static int convertMachineID(int id, bool creToArt); static int convertMachineID(int id, bool creToArt);
CArtHandler(); CArtHandler();
template <typename Handler> void serialize(Handler &h, const int version)
{
h & artifacts;
if(!h.saving)
sortArts();
}
}; };
#endif // CARTHANDLER_H #endif // CARTHANDLER_H

View File

@ -28,6 +28,10 @@ public:
else else
return subid<por.subid; return subid<por.subid;
} }
template <typename Handler> void serialize(Handler &h, const int version)
{
h & name & visitMap & blockMap & visitDir & id & subid &terrainAllowed & terrainMenu & width & height & type & printPriority;
}
CGDefInfo(); CGDefInfo();
}; };
class DLL_EXPORT CDefObjInfoHandler class DLL_EXPORT CDefObjInfoHandler

View File

@ -1,12 +1,15 @@
#define VCMI_DLL
#include "../stdafx.h" #include "../stdafx.h"
#include "../lib/VCMI_Lib.h"
#include "CGeneralTextHandler.h" #include "CGeneralTextHandler.h"
#include "../CGameInfo.h"
#include "CLodHandler.h" #include "CLodHandler.h"
#include <boost/algorithm/string.hpp>
#include <boost/algorithm/string/replace.hpp>
#include <fstream> #include <fstream>
void CGeneralTextHandler::load() void CGeneralTextHandler::load()
{ {
std::string buf = CGI->bitmaph->getTextFile("GENRLTXT.TXT"), tmp; std::string buf = bitmaph->getTextFile("GENRLTXT.TXT"), tmp;
int andame = buf.size(); int andame = buf.size();
int i=0; //buf iterator int i=0; //buf iterator
for(i; i<andame; ++i) for(i; i<andame; ++i)
@ -25,7 +28,7 @@ void CGeneralTextHandler::load()
allTexts.push_back(buflet); allTexts.push_back(buflet);
} }
std::string strs = CGI->bitmaph->getTextFile("ARRAYTXT.TXT"); std::string strs = bitmaph->getTextFile("ARRAYTXT.TXT");
int itr=0; int itr=0;
while(itr<strs.length()-1) while(itr<strs.length()-1)
@ -35,7 +38,7 @@ void CGeneralTextHandler::load()
} }
itr = 0; itr = 0;
std::string strin = CGI->bitmaph->getTextFile("PRISKILL.TXT"); std::string strin = bitmaph->getTextFile("PRISKILL.TXT");
for(int hh=0; hh<4; ++hh) for(int hh=0; hh<4; ++hh)
{ {
loadToIt(tmp, strin, itr, 3); loadToIt(tmp, strin, itr, 3);
@ -43,7 +46,7 @@ void CGeneralTextHandler::load()
} }
itr = 0; itr = 0;
std::string strin2 = CGI->bitmaph->getTextFile("JKTEXT.TXT"); std::string strin2 = bitmaph->getTextFile("JKTEXT.TXT");
for(int hh=0; hh<45; ++hh) for(int hh=0; hh<45; ++hh)
{ {
loadToIt(tmp, strin2, itr, 3); loadToIt(tmp, strin2, itr, 3);
@ -51,17 +54,115 @@ void CGeneralTextHandler::load()
} }
itr = 0; itr = 0;
std::string strin3 = CGI->bitmaph->getTextFile("HEROSCRN.TXT"); std::string strin3 = bitmaph->getTextFile("HEROSCRN.TXT");
for(int hh=0; hh<33; ++hh) for(int hh=0; hh<33; ++hh)
{ {
loadToIt(tmp, strin3, itr, 3); loadToIt(tmp, strin3, itr, 3);
heroscrn.push_back(tmp); heroscrn.push_back(tmp);
} }
strin3 = CGI->bitmaph->getTextFile("ARTEVENT.TXT"); strin3 = bitmaph->getTextFile("ARTEVENT.TXT");
for(itr = 0; itr<strin3.size();itr++) for(itr = 0; itr<strin3.size();itr++)
{ {
loadToIt(tmp, strin3, itr, 3); loadToIt(tmp, strin3, itr, 3);
artifEvents.push_back(tmp); artifEvents.push_back(tmp);
} }
} }
std::string CGeneralTextHandler::getTitle(std::string text)
{
std::string ret;
int i=0;
while ((text[i++]!='{'));
while ((text[i]!='}') && (i<text.length()))
ret+=text[i++];
return ret;
}
std::string CGeneralTextHandler::getDescr(std::string text)
{
std::string ret;
int i=0;
while ((text[i++]!='}'));
i+=2;
while ((text[i]!='"') && (i<text.length()))
ret+=text[i++];
return ret;
}
void CGeneralTextHandler::loadTexts()
{
std::string buf1 = bitmaph->getTextFile("ZELP.TXT");
int itr=0, eol=-1, eolnext=-1, pom;
eolnext = buf1.find_first_of('\r',itr);
while(itr<buf1.size())
{
eol = eolnext; //end of this line
eolnext = buf1.find_first_of('\r',eol+1); //end of the next line
pom=buf1.find_first_of('\t',itr); //upcoming tab
if(eol<0 || pom<0)
break;
if(pom>eol) //in current line there is not tab
zelp.push_back(std::pair<std::string,std::string>());
else
{
zelp.push_back
(std::pair<std::string,std::string>
(buf1.substr(itr,pom-itr),
buf1.substr(pom+1,eol-pom-1)));
boost::algorithm::replace_all(zelp[zelp.size()-1].first,"\t","");
boost::algorithm::replace_all(zelp[zelp.size()-1].second,"\t","");
}
itr=eol+2;
}
std::string buf = bitmaph->getTextFile("VCDESC.TXT");
int andame = buf.size();
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;
}
buf = bitmaph->getTextFile("LCDESC.TXT");
andame = buf.size();
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;
}
hTxts.resize(HEROES_QUANTITY);
buf = bitmaph->getTextFile("HEROSPEC.TXT");
i=0;
std::string dump;
for(int iii=0; iii<2; ++iii)
{
loadToIt(dump,buf,i,3);
}
for (int iii=0;iii<hTxts.size();iii++)
{
loadToIt(hTxts[iii].bonusName,buf,i,4);
loadToIt(hTxts[iii].shortBonus,buf,i,4);
loadToIt(hTxts[iii].longBonus,buf,i,3);
}
buf = bitmaph->getTextFile("HEROBIOS.TXT");
i=0;
for (int iii=0;iii<hTxts.size();iii++)
{
loadToIt(hTxts[iii].biography,buf,i,3);
}
}

View File

@ -4,9 +4,17 @@
#include <string> #include <string>
#include <vector> #include <vector>
DLL_EXPORT void loadToIt(std::string &dest, std::string &src, int &iter, int mode); DLL_EXPORT void loadToIt(std::string &dest, std::string &src, int &iter, int mode);
class CGeneralTextHandler //Handles general texts class DLL_EXPORT CGeneralTextHandler //Handles general texts
{ {
public: public:
class HeroTexts
{
public:
std::string bonusName, shortBonus, longBonus; //for special abilities
std::string biography; //biography, of course
};
std::vector<HeroTexts> hTxts;
std::vector<std::string> allTexts; std::vector<std::string> allTexts;
std::vector<std::string> arraytxt; std::vector<std::string> arraytxt;
@ -15,6 +23,14 @@ public:
std::vector<std::string> heroscrn; std::vector<std::string> heroscrn;
std::vector<std::string> artifEvents; std::vector<std::string> artifEvents;
std::vector<std::pair<std::string,std::string> > zelp;
std::string lossCondtions[4];
std::string victoryConditions[14];
std::string getTitle(std::string text);
std::string getDescr(std::string text);
void loadTexts();
void load(); void load();
}; };

View File

@ -10,6 +10,7 @@ void loadToIt(std::string &dest, std::string &src, int &iter, int mode);
CHeroClass::CHeroClass() CHeroClass::CHeroClass()
{ {
skillLimit = 8; skillLimit = 8;
moveAnim = NULL;
} }
CHeroClass::~CHeroClass() CHeroClass::~CHeroClass()
{ {
@ -30,21 +31,11 @@ int CHeroClass::chooseSecSkill(const std::set<int> & possibles) const //picks se
if(ran<0) if(ran<0)
return *i; return *i;
} }
throw std::string("Cannot pick secondary skill!");
} }
CHeroHandler::~CHeroHandler() CHeroHandler::~CHeroHandler()
{} {}
void CHeroHandler::loadPortraits()
{
std::string strs = bitmaph->getTextFile("PRISKILL.TXT");
int itr=0;
for (int i=0; i<PRIMARY_SKILLS; i++)
{
std::string tmp;
loadToIt(tmp, strs, itr, 3);
pskillsn.push_back(tmp);
}
}
void CHeroHandler::loadHeroes() void CHeroHandler::loadHeroes()
{ {
VLC->heroh = this; VLC->heroh = this;
@ -140,8 +131,6 @@ void CHeroHandler::loadHeroes()
} }
//initial skills loaded //initial skills loaded
loadSpecialAbilities();
loadBiographies();
loadHeroClasses(); loadHeroClasses();
initHeroClasses(); initHeroClasses();
expPerLevel.push_back(0); expPerLevel.push_back(0);
@ -162,33 +151,6 @@ void CHeroHandler::loadHeroes()
return; return;
} }
void CHeroHandler::loadSpecialAbilities()
{
std::string buf = bitmaph->getTextFile("HEROSPEC.TXT");
int it=0;
std::string dump;
for(int i=0; i<2; ++i)
{
loadToIt(dump,buf,it,3);
}
for (int i=0;i<heroes.size();i++)
{
loadToIt(heroes[i]->bonusName,buf,it,4);
loadToIt(heroes[i]->shortBonus,buf,it,4);
loadToIt(heroes[i]->longBonus,buf,it,3);
}
}
void CHeroHandler::loadBiographies()
{
std::string buf = bitmaph->getTextFile("HEROBIOS.TXT");
int it=0;
for (int i=0;i<heroes.size();i++)
{
loadToIt(heroes[i]->biography,buf,it,3);
}
}
void CHeroHandler::loadHeroClasses() void CHeroHandler::loadHeroClasses()
{ {
std::string buf = bitmaph->getTextFile("HCTRAITS.TXT"); std::string buf = bitmaph->getTextFile("HCTRAITS.TXT");

View File

@ -15,13 +15,16 @@ public:
int ID; int ID;
int lowStack[3], highStack[3]; //amount of units; described below int lowStack[3], highStack[3]; //amount of units; described below
std::string refTypeStack[3]; //reference names of units appearing in hero's army if he is recruited in tavern std::string refTypeStack[3]; //reference names of units appearing in hero's army if he is recruited in tavern
std::string bonusName, shortBonus, longBonus; //for special abilities
std::string biography; //biography, of course
bool isAllowed; //true if we can play with this hero (depends on map)
CHeroClass * heroClass; CHeroClass * heroClass;
EHeroClasses heroType; //hero class EHeroClasses heroType; //hero class
std::vector<std::pair<int,int> > secSkillsInit; //initial secondaryskills; first - ID of skill, second - level of skill (1 - basic, 2 - adv., 3 - expert) std::vector<std::pair<ui8,ui8> > secSkillsInit; //initial secondary skills; first - ID of skill, second - level of skill (1 - basic, 2 - adv., 3 - expert)
//bool operator<(CHero& drugi){if (ID < drugi.ID) return true; else return false;} //bool operator<(CHero& drugi){if (ID < drugi.ID) return true; else return false;}
template <typename Handler> void serialize(Handler &h, const int version)
{
h & name & ID & lowStack & highStack & refTypeStack & heroType & ID;
//hero class pointer is restored by herohandler
}
}; };
class DLL_EXPORT CHeroClass class DLL_EXPORT CHeroClass
@ -34,11 +37,18 @@ public:
std::vector<std::pair<int,int> > primChance;//primChance[PRIMARY_SKILL_ID] - first is for levels 2 - 9, second for 10+;;; probability (%) of getting point of primary skill when getting new level std::vector<std::pair<int,int> > primChance;//primChance[PRIMARY_SKILL_ID] - first is for levels 2 - 9, second for 10+;;; probability (%) of getting point of primary skill when getting new level
std::vector<int> proSec; //probabilities of gaining secondary skills (out of 112), in id order std::vector<int> proSec; //probabilities of gaining secondary skills (out of 112), in id order
int selectionProbability[9]; //probability of selection in towns int selectionProbability[9]; //probability of selection in towns
std::vector<int> terrCosts; //default costs of going through terrains: dirt, sand, grass, snow, swamp, rough, subterrain, lava, water, rock; -1 means terrain is imapassable std::vector<int> terrCosts; //default costs of going through terrains: dirt, sand, grass, snow, swamp, rough, subterranean, lava, water, rock; -1 means terrain is imapassable
CDefHandler * moveAnim; //added group 10: up - left, 11 - left and 12 - left down // 13 - up-left standing; 14 - left standing; 15 - left down standing CDefHandler * moveAnim; //added group 10: up - left, 11 - left and 12 - left down // 13 - up-left standing; 14 - left standing; 15 - left down standing
int chooseSecSkill(const std::set<int> & possibles) const; //picks secondary skill out from given possibilities int chooseSecSkill(const std::set<int> & possibles) const; //picks secondary skill out from given possibilities
CHeroClass(); CHeroClass();
~CHeroClass(); ~CHeroClass();
template <typename Handler> void serialize(Handler &h, const int version)
{
h & skillLimit & name & aggression & initialAttack & initialDefence & initialPower & initialKnowledge & primChance
& proSec & selectionProbability & terrCosts;
}
}; };
class DLL_EXPORT CHeroHandler class DLL_EXPORT CHeroHandler
@ -46,17 +56,27 @@ class DLL_EXPORT CHeroHandler
public: public:
std::vector<CHero*> heroes; //by³o nodrze std::vector<CHero*> heroes; //by³o nodrze
std::vector<CHeroClass *> heroClasses; std::vector<CHeroClass *> heroClasses;
std::vector<std::string> pskillsn;
std::vector<int> expPerLevel; //expPerLEvel[i] is amount of exp needed to reach level i; if it is not in this vector, multiplicate last value by 1,2 to get next value std::vector<int> expPerLevel; //expPerLEvel[i] is amount of exp needed to reach level i; if it is not in this vector, multiplicate last value by 1,2 to get next value
unsigned int level(unsigned int experience); unsigned int level(unsigned int experience);
unsigned int reqExp(unsigned int level); unsigned int reqExp(unsigned int level);
void loadHeroes(); void loadHeroes();
void loadSpecialAbilities();
void loadBiographies();
void loadHeroClasses(); void loadHeroClasses();
void loadPortraits(); //loads names of primary skills
void initHeroClasses(); void initHeroClasses();
~CHeroHandler(); ~CHeroHandler();
void initTerrainCosts(); void initTerrainCosts();
template <typename Handler> void serialize(Handler &h, const int version)
{
h & heroClasses & heroes & expPerLevel;
if(!h.saving)
{
//restore class pointers
for (int i=0; i<heroes.size(); i++)
{
heroes[i]->heroClass = heroClasses[heroes[i]->heroType];
}
}
}
}; };
#endif //CHEROHANDLER_H #endif //CHEROHANDLER_H

View File

@ -3,6 +3,7 @@
#include "CObjectHandler.h" #include "CObjectHandler.h"
#include "CDefObjInfoHandler.h" #include "CDefObjInfoHandler.h"
#include "CLodHandler.h" #include "CLodHandler.h"
#include "CGeneralTextHandler.h"
#include "CDefObjInfoHandler.h" #include "CDefObjInfoHandler.h"
#include "CHeroHandler.h" #include "CHeroHandler.h"
#include "CSpellHandler.h" #include "CSpellHandler.h"
@ -600,7 +601,7 @@ void CGHeroInstance::initHero()
artifWorn[17] = 0; //give him spellbook artifWorn[17] = 0; //give him spellbook
} }
if(portrait < 0) if(portrait < 0 || portrait == 255)
portrait = subID; portrait = subID;
if((!primSkills.size()) || (getPrimSkillLevel(0)<0)) if((!primSkills.size()) || (getPrimSkillLevel(0)<0))
{ {
@ -610,14 +611,12 @@ void CGHeroInstance::initHero()
primSkills[2] = type->heroClass->initialPower; primSkills[2] = type->heroClass->initialPower;
primSkills[3] = type->heroClass->initialKnowledge; primSkills[3] = type->heroClass->initialKnowledge;
} }
if(secSkills.size() == 1 && secSkills[0] == std::make_pair(-1, -1)) //set secondary skills to default if(secSkills.size() == 1 && secSkills[0] == std::pair<ui8,ui8>(-1, -1)) //set secondary skills to default
secSkills = type->secSkillsInit; secSkills = type->secSkillsInit;
if(mana < 0) if(mana < 0)
mana = manaLimit(); mana = manaLimit();
if (!name.length()) if (!name.length())
name = type->name; name = type->name;
if (!biography.length())
biography = type->biography;
if (exp == 0xffffffff) if (exp == 0xffffffff)
{ {
exp=40+ (ran()) % 50; exp=40+ (ran()) % 50;
@ -666,6 +665,14 @@ bool CGHeroInstance::needsLastStack() const
{ {
return true; return true;
} }
const std::string & CGHeroInstance::getBiography()
{
if (biography.length())
return biography;
else
return VLC->generaltexth->hTxts[subID].biography;
}
CGTownInstance::~CGTownInstance() CGTownInstance::~CGTownInstance()
{} {}

View File

@ -89,11 +89,11 @@ public:
ui32 exp; //experience point ui32 exp; //experience point
int level; //current level of hero int level; //current level of hero
std::string name; //may be custom std::string name; //may be custom
std::string biography; //may be custom std::string biography; //if custom
int portrait; //may be custom int portrait; //may be custom
int mana; // remaining spell points int mana; // remaining spell points
std::vector<int> primSkills; //0-attack, 1-defence, 2-spell power, 3-knowledge std::vector<int> primSkills; //0-attack, 1-defence, 2-spell power, 3-knowledge
std::vector<std::pair<int,int> > secSkills; //first - ID of skill, second - level of skill (1 - basic, 2 - adv., 3 - expert); if hero has ability (-1, -1) it meansthat it should have default secondary abilities std::vector<std::pair<ui8,ui8> > secSkills; //first - ID of skill, second - level of skill (1 - basic, 2 - adv., 3 - expert); if hero has ability (-1, -1) it meansthat it should have default secondary abilities
int movement; //remaining movement points int movement; //remaining movement points
int identifier; //from the map file int identifier; //from the map file
bool sex; bool sex;
@ -113,6 +113,7 @@ public:
std::map<ui16,ui32> artifWorn; //map<position,artifact_id>; positions: 0 - head; 1 - shoulders; 2 - neck; 3 - right hand; 4 - left hand; 5 - torso; 6 - right ring; 7 - left ring; 8 - feet; 9 - misc1; 10 - misc2; 11 - misc3; 12 - misc4; 13 - mach1; 14 - mach2; 15 - mach3; 16 - mach4; 17 - spellbook; 18 - misc5 std::map<ui16,ui32> artifWorn; //map<position,artifact_id>; positions: 0 - head; 1 - shoulders; 2 - neck; 3 - right hand; 4 - left hand; 5 - torso; 6 - right ring; 7 - left ring; 8 - feet; 9 - misc1; 10 - misc2; 11 - misc3; 12 - misc4; 13 - mach1; 14 - mach2; 15 - mach3; 16 - mach4; 17 - spellbook; 18 - misc5
std::set<ui32> spells; //known spells (spell IDs) std::set<ui32> spells; //known spells (spell IDs)
const std::string &getBiography();
bool needsLastStack()const; bool needsLastStack()const;
virtual bool isHero() const; virtual bool isHero() const;
unsigned int getTileCost(const EterrainType & ttype, const Eroad & rdtype, const Eriver & rvtype) const; unsigned int getTileCost(const EterrainType & ttype, const Eroad & rdtype, const Eriver & rvtype) const;

View File

@ -1,79 +0,0 @@
#include "../stdafx.h"
#include "CPreGameTextHandler.h"
#include "../CGameInfo.h"
#include "CLodHandler.h"
#include <boost/algorithm/string.hpp>
#include <boost/algorithm/string/replace.hpp>
std::string CPreGameTextHandler::getTitle(std::string text)
{
std::string ret;
int i=0;
while ((text[i++]!='{'));
while ((text[i]!='}') && (i<text.length()))
ret+=text[i++];
return ret;
}
std::string CPreGameTextHandler::getDescr(std::string text)
{
std::string ret;
int i=0;
while ((text[i++]!='}'));
i+=2;
while ((text[i]!='"') && (i<text.length()))
ret+=text[i++];
return ret;
}
void CPreGameTextHandler::loadTexts()
{
std::string buf1 = CGI->bitmaph->getTextFile("ZELP.TXT");
int itr=0, eol=-1, eolnext=-1, pom;
eolnext = buf1.find_first_of('\r',itr);
while(itr<buf1.size())
{
eol = eolnext; //end of this line
eolnext = buf1.find_first_of('\r',eol+1); //end of the next line
pom=buf1.find_first_of('\t',itr); //upcoming tab
if(eol<0 || pom<0)
break;
if(pom>eol) //in current line there is not tab
zelp.push_back(std::pair<std::string,std::string>());
else
{
zelp.push_back
(std::pair<std::string,std::string>
(buf1.substr(itr,pom-itr),
buf1.substr(pom+1,eol-pom-1)));
boost::algorithm::replace_all(zelp[zelp.size()-1].first,"\t","");
boost::algorithm::replace_all(zelp[zelp.size()-1].second,"\t","");
}
itr=eol+2;
}
std::string buf = CGI->bitmaph->getTextFile("VCDESC.TXT");
int andame = buf.size();
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;
}
buf = CGI->bitmaph->getTextFile("LCDESC.TXT");
andame = buf.size();
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

@ -1,21 +0,0 @@
#ifndef CPREGAMETEXTHANDLER_H
#define CPREGAMETEXTHANDLER_H
#include <string>
class CPreGameTextHandler //handles pre - game texts
{
public:
std::vector<std::pair<std::string,std::string> > zelp;
std::string lossCondtions[4];
std::string victoryConditions[14];
std::string getTitle(std::string text);
std::string getDescr(std::string text);
void loadTexts();
};
#endif //CPREGAMETEXTHANDLER_H

View File

@ -228,9 +228,16 @@ public:
} }
void saveSerializable(const std::string &data) void saveSerializable(const std::string &data)
{ {
*this << ui32(data.size()); if(!data.length())
{
*this << ui8(0);
}
else
{
*this << ui32(data.length());
this->This()->write(data.c_str(),data.size()); this->This()->write(data.c_str(),data.size());
} }
}
template <typename T1, typename T2> template <typename T1, typename T2>
void saveSerializable(const std::pair<T1,T2> &data) void saveSerializable(const std::pair<T1,T2> &data)
{ {
@ -346,10 +353,14 @@ public:
} }
void loadSerializable(std::string &data) void loadSerializable(std::string &data)
{ {
ui32 l; ui8 length[4];
*this >> l; *this >> length[0];
data.resize(l); if(!length[0]) return;
this->This()->read((void*)data.c_str(),l); *this >> length[1];
*this >> length[2];
*this >> length[3];
data.resize(*((ui32*)length));
this->This()->read((void*)data.c_str(),*((ui32*)length));
} }
}; };

View File

@ -9,6 +9,7 @@
#include "../hch/CTownHandler.h" #include "../hch/CTownHandler.h"
#include "../hch/CBuildingHandler.h" #include "../hch/CBuildingHandler.h"
#include "../hch/CSpellHandler.h" #include "../hch/CSpellHandler.h"
#include "../hch/CGeneralTextHandler.h"
class CLodHandler; class CLodHandler;
LibClasses * VLC = NULL; LibClasses * VLC = NULL;
CLodHandler * bitmaph=NULL; CLodHandler * bitmaph=NULL;
@ -30,7 +31,6 @@ DLL_EXPORT void initDLL(CLodHandler *b, CConsoleHandler *Console, std::ostream *
CHeroHandler * heroh = new CHeroHandler; CHeroHandler * heroh = new CHeroHandler;
heroh->loadHeroes(); heroh->loadHeroes();
heroh->loadPortraits();
VLC->heroh = heroh; VLC->heroh = heroh;
tlog0 <<"\tHero handler: "<<pomtime.getDif()<<std::endl; tlog0 <<"\tHero handler: "<<pomtime.getDif()<<std::endl;
@ -65,6 +65,11 @@ DLL_EXPORT void initDLL(CLodHandler *b, CConsoleHandler *Console, std::ostream *
spellh->loadSpells(); spellh->loadSpells();
VLC->spellh = spellh; VLC->spellh = spellh;
tlog0<<"\tSpell handler: "<<pomtime.getDif()<<std::endl; tlog0<<"\tSpell handler: "<<pomtime.getDif()<<std::endl;
VLC->generaltexth = new CGeneralTextHandler;
VLC->generaltexth->loadTexts();
VLC->generaltexth->load();
tlog0<<"\tGeneral text handler: "<<pomtime.getDif()<<std::endl;
} }
DLL_EXPORT void loadToIt(std::string &dest, std::string &src, int &iter, int mode) DLL_EXPORT void loadToIt(std::string &dest, std::string &src, int &iter, int mode)

View File

@ -15,7 +15,7 @@ class CObjectHandler;
//class CSemiLodHandler; //class CSemiLodHandler;
class CDefObjInfoHandler; class CDefObjInfoHandler;
class CTownHandler; class CTownHandler;
//class CGeneralTextHandler; class CGeneralTextHandler;
//class CConsoleHandler; //class CConsoleHandler;
//class CPathfinder; //class CPathfinder;
//class CGameState; //class CGameState;
@ -23,27 +23,23 @@ class CTownHandler;
class LibClasses class LibClasses
{ {
public: public:
//CGameState * state;
CArtHandler * arth; CArtHandler * arth;
CHeroHandler * heroh; CHeroHandler * heroh;
CCreatureHandler * creh; CCreatureHandler * creh;
//CAbilityHandler * abilh;
CSpellHandler * spellh; CSpellHandler * spellh;
//CPreGameTextHandler * preth;
CBuildingHandler * buildh; CBuildingHandler * buildh;
CObjectHandler * objh; CObjectHandler * objh;
CDefObjInfoHandler * dobjinfo; CDefObjInfoHandler * dobjinfo;
CTownHandler * townh; CTownHandler * townh;
//CGeneralTextHandler * generaltexth; CGeneralTextHandler * generaltexth;
//CConsoleHandler * consoleh;
//CPathfinder * pathf; //CPathfinder * pathf;
}; };
extern DLL_EXPORT LibClasses * VLC; extern DLL_EXPORT LibClasses * VLC;
extern CLodHandler * bitmaph;
DLL_EXPORT void loadToIt(std::string &dest, std::string &src, int &iter, int mode); DLL_EXPORT void loadToIt(std::string &dest, std::string &src, int &iter, int mode);
DLL_EXPORT void loadToIt(si32 &dest, std::string &src, int &iter, int mode); DLL_EXPORT void loadToIt(si32 &dest, std::string &src, int &iter, int mode);
DLL_EXPORT void initDLL(CLodHandler *b, CConsoleHandler *Console, std::ostream *Logfile); DLL_EXPORT void initDLL(CLodHandler *b, CConsoleHandler *Console, std::ostream *Logfile);
#endif //VCMI_LIB_H #endif //VCMI_LIB_H

View File

@ -282,6 +282,10 @@
RelativePath="..\CGameState.cpp" RelativePath="..\CGameState.cpp"
> >
</File> </File>
<File
RelativePath="..\hch\CGeneralTextHandler.cpp"
>
</File>
<File <File
RelativePath="..\hch\CHeroHandler.cpp" RelativePath="..\hch\CHeroHandler.cpp"
> >
@ -352,6 +356,10 @@
RelativePath="..\CGameState.h" RelativePath="..\CGameState.h"
> >
</File> </File>
<File
RelativePath="..\hch\CGeneralTextHandler.h"
>
</File>
<File <File
RelativePath="..\hch\CHeroHandler.h" RelativePath="..\hch\CHeroHandler.h"
> >

104
map.h
View File

@ -269,28 +269,45 @@ struct DLL_EXPORT TerrainTile
std::vector <CGObjectInstance*> visitableObjects; //pointers to objects hero can visit while being on this tile std::vector <CGObjectInstance*> visitableObjects; //pointers to objects hero can visit while being on this tile
std::vector <CGObjectInstance*> blockingObjects; //pointers to objects that are blocking this tile std::vector <CGObjectInstance*> blockingObjects; //pointers to objects that are blocking this tile
template <typename Handler> void serialize(Handler &h, const int version)
{
h & tertype & terview & nuine & rivDir & malle &roadDir & siodmyTajemniczyBajt;
}
}; };
struct DLL_EXPORT SheroName //name of starting hero struct DLL_EXPORT SheroName //name of starting hero
{ {
int heroID; int heroID;
std::string heroName; std::string heroName;
template <typename Handler> void serialize(Handler &h, const int version)
{
h & heroID & heroName;
}
}; };
struct DLL_EXPORT PlayerInfo struct DLL_EXPORT PlayerInfo
{ {
int p7, p8, p9; si32 p7, p8, p9;
bool canHumanPlay; ui8 canHumanPlay;
bool canComputerPlay; ui8 canComputerPlay;
unsigned int AITactic; //(00 - random, 01 - warrior, 02 - builder, 03 - explorer) ui32 AITactic; //(00 - random, 01 - warrior, 02 - builder, 03 - explorer)
unsigned int allowedFactions; //(01 - castle; 02 - rampart; 04 - tower; 08 - inferno; 16 - necropolis; 32 - dungeon; 64 - stronghold; 128 - fortress; 256 - conflux); ui32 allowedFactions; //(01 - castle; 02 - rampart; 04 - tower; 08 - inferno; 16 - necropolis; 32 - dungeon; 64 - stronghold; 128 - fortress; 256 - conflux);
bool isFactionRandom; ui8 isFactionRandom;
unsigned int mainHeroPortrait; //it's ID of hero with choosen portrait; 255 if standard ui32 mainHeroPortrait; //it's ID of hero with choosen portrait; 255 if standard
std::string mainHeroName; std::string mainHeroName;
std::vector<SheroName> heroesNames; std::vector<SheroName> heroesNames;
bool hasMainTown; ui8 hasMainTown;
bool generateHeroAtMainTown; ui8 generateHeroAtMainTown;
int3 posOfMainTown; int3 posOfMainTown;
int team; ui8 team;
bool generateHero; ui8 generateHero;
template <typename Handler> void serialize(Handler &h, const int version)
{
h & p7 & p8 & p9 & canHumanPlay & canComputerPlay & AITactic & allowedFactions & isFactionRandom &
mainHeroPortrait & mainHeroName & heroesNames & hasMainTown & generateHeroAtMainTown &
posOfMainTown & team & generateHero;
}
}; };
struct DLL_EXPORT LossCondition struct DLL_EXPORT LossCondition
{ {
@ -298,6 +315,11 @@ struct DLL_EXPORT LossCondition
int3 castlePos; int3 castlePos;
int3 heroPos; int3 heroPos;
int timeLimit; // in days int timeLimit; // in days
template <typename Handler> void serialize(Handler &h, const int version)
{
h & typeOfLossCon & castlePos & heroPos & timeLimit;
}
}; };
struct DLL_EXPORT CspecificVictoryConidtions struct DLL_EXPORT CspecificVictoryConidtions
{ {
@ -349,26 +371,41 @@ struct DLL_EXPORT VicCona : public CspecificVictoryConidtions //transport specif
struct DLL_EXPORT Rumor struct DLL_EXPORT Rumor
{ {
std::string name, text; std::string name, text;
template <typename Handler> void serialize(Handler &h, const int version)
{
h & name & text;
}
}; };
struct DLL_EXPORT DisposedHero struct DLL_EXPORT DisposedHero
{ {
int ID; ui32 ID;
int portrait; //0xFF - default ui16 portrait; //0xFF - default
std::string name; std::string name;
ui8 players; //who can hire this hero (bitfield) ui8 players; //who can hire this hero (bitfield)
template <typename Handler> void serialize(Handler &h, const int version)
{
h & ID & portrait & name & players;
}
}; };
class DLL_EXPORT CMapEvent class DLL_EXPORT CMapEvent
{ {
public: public:
std::string name, message; std::string name, message;
int wood, mercury, ore, sulfur, crystal, gems, gold; //gained / taken resources si32 wood, mercury, ore, sulfur, crystal, gems, gold; //gained / taken resources
unsigned char players; //affected players ui8 players; //affected players
bool humanAffected; ui8 humanAffected;
bool computerAffected; ui8 computerAffected;
int firstOccurence; ui32 firstOccurence;
int nextOccurence; //after nextOccurance day event will occure; if it it 0, event occures only one time; ui32 nextOccurence; //after nextOccurance day event will occure; if it it 0, event occures only one time;
template <typename Handler> void serialize(Handler &h, const int version)
{
h & name & message & wood & mercury & ore & sulfur & crystal & gems & gold
& players & humanAffected & computerAffected & firstOccurence & nextOccurence;
}
}; };
class DLL_EXPORT CMapHeader class DLL_EXPORT CMapHeader
{ {
@ -507,7 +544,34 @@ struct DLL_EXPORT Mapa
bool isInTheMap(int3 pos); bool isInTheMap(int3 pos);
template <typename Handler> void serialize(Handler &h, const int version) template <typename Handler> void serialize(Handler &h, const int version)
{ {
//TODO: write h & version & name & description & width & height & twoLevel & difficulty & levelLimit & rumors & defy & defs
& players & teams & lossCondition & victoryCondition & howManyTeams & allowedSpell & allowedAbilities
& allowedArtifact &allowedHeroes & events;
//TODO: viccondetails
if(h.saving)
{
//saving terrain
for (int i = 0; i < width ; i++)
for (int j = 0; j < height ; j++)
for (int k = 0; k <= twoLevel ; k++)
h & terrain[i][j][k];
}
else
{
//loading terrain
terrain = new TerrainTile**[width]; // allocate memory
for (int ii=0;ii<width;ii++)
{
terrain[ii] = new TerrainTile*[height]; // allocate memory
for(int jj=0;jj<height;jj++)
terrain[ii][jj] = new TerrainTile[twoLevel+1];
}
for (int i = 0; i < width ; i++)
for (int j = 0; j < height ; j++)
for (int k = 0; k <= twoLevel ; k++)
h & terrain[i][j][k];
}
//TODO: recreate blockvis maps
} }
}; };
#endif //MAPD_H #endif //MAPD_H

View File

@ -1,24 +1,25 @@
#include <boost/foreach.hpp>
#include <boost/thread.hpp>
#include <boost/thread/shared_mutex.hpp>
#include <boost/bind.hpp>
#include "CGameHandler.h"
#include "CScriptCallback.h"
#include "../CLua.h"
#include "../CGameState.h" #include "../CGameState.h"
#include "../CLua.h"
#include "../StartInfo.h" #include "../StartInfo.h"
#include "../map.h"
#include "../lib/NetPacks.h"
#include "../lib/Connection.h"
#include "../hch/CArtHandler.h" #include "../hch/CArtHandler.h"
#include "../hch/CBuildingHandler.h"
#include "../hch/CDefObjInfoHandler.h"
#include "../hch/CHeroHandler.h"
#include "../hch/CObjectHandler.h" #include "../hch/CObjectHandler.h"
#include "../hch/CSpellHandler.h" #include "../hch/CSpellHandler.h"
#include "../hch/CTownHandler.h" #include "../hch/CTownHandler.h"
#include "../hch/CBuildingHandler.h"
#include "../hch/CHeroHandler.h"
#include "boost/date_time/posix_time/posix_time_types.hpp" //no i/o just types
#include "../lib/VCMI_Lib.h"
#include "../lib/CondSh.h" #include "../lib/CondSh.h"
#include "../lib/Connection.h"
#include "../lib/NetPacks.h"
#include "../lib/VCMI_Lib.h"
#include "../map.h"
#include "CGameHandler.h"
#include "CScriptCallback.h"
#include <boost/bind.hpp>
#include <boost/date_time/posix_time/posix_time_types.hpp> //no i/o just types
#include <boost/foreach.hpp>
#include <boost/thread.hpp>
#include <boost/thread/shared_mutex.hpp>
#include <fstream> #include <fstream>
#ifndef _MSC_VER #ifndef _MSC_VER
#include <boost/thread/xtime.hpp> #include <boost/thread/xtime.hpp>
@ -412,7 +413,7 @@ void CGameHandler::handleConnection(std::set<int> players, CConnection &c)
std::string fname; std::string fname;
c >> fname; c >> fname;
CSaveFile save(fname); CSaveFile save(fname);
save << this; save << VLC->heroh << this;
//save << this; //save << this;
break; break;
} }