1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-03-19 21:10:12 +02:00

* choosing random towns

* some minor bugfixes and improvements
This commit is contained in:
mateuszb 2007-08-01 14:06:04 +00:00
parent 7789e9e01c
commit 95b3ad64d3
8 changed files with 102 additions and 21 deletions

View File

@ -2011,6 +2011,17 @@ void CAmbarCendamo::processMap(std::vector<std::string> & defsToUnpack)
art4DefNumbers.push_back(-1);
}
std::vector<std::string> town0DefNames; //without fort
std::vector<int> town0DefNumbers;
std::vector<std::string> town1DefNames; //with fort
std::vector<int> town1DefNumbers;
for(int dd=0; dd<9; ++dd)
{
town1DefNames.push_back(CGI->dobjinfo->objs[dd+385].defName);
town1DefNumbers.push_back(-1);
}
//variables initialized
for(int j=0; j<CGI->objh->objInstances.size(); ++j)
{
@ -2449,6 +2460,59 @@ void CAmbarCendamo::processMap(std::vector<std::string> & defsToUnpack)
}
break;
}
case EDefType::TOWN_DEF:
{
if(curDef.bytes[16]==77) //random town
{
DefInfo nxt = curDef;
nxt.bytes[16] = 98;
if(((CCastleObjInfo*)CGI->objh->objInstances[j].info)->player==0xff)
{
nxt.bytes[20] = rand()%town1DefNames.size();
}
else
{
if(CGI->scenarioOps.playerInfos[((CCastleObjInfo*)CGI->objh->objInstances[j].info)->player].castle>-1)
{
nxt.bytes[20] = CGI->scenarioOps.playerInfos[((CCastleObjInfo*)CGI->objh->objInstances[j].info)->player].castle;
}
else
{
nxt.bytes[20] = rand()%town1DefNames.size();
}
}
if(town1DefNumbers[nxt.bytes[20]]!=-1)
{
CGI->objh->objInstances[j].defNumber = town1DefNumbers[nxt.bytes[20]];
continue;
}
nxt.name = town1DefNames[nxt.bytes[20]];
std::vector<DefObjInfo>::iterator pit = std::find(CGameInfo::mainObj->dobjinfo->objs.begin(), CGameInfo::mainObj->dobjinfo->objs.end(),
nxt.name);
if(pit == CGameInfo::mainObj->dobjinfo->objs.end())
{
nxt.isOnDefList = false;
}
else
{
nxt.printPriority = pit->priority;
nxt.isOnDefList = true;
}
map.defy.push_back(nxt); // add this def to the vector
defsToUnpack.push_back(nxt.name);
CGI->objh->objInstances[j].defNumber = map.defy.size()-1;
if(town1DefNumbers[nxt.bytes[20]]==-1)
{
town1DefNumbers[nxt.bytes[20]] = map.defy.size()-1;
}
}
//((CCastleObjInfo*)CGI->objh->objInstances[j].info)
break;
}
} //end of main switch
} //end of main loop
//for(int j=0; j<CGI->objh->objInstances.size(); ++j) //for creature dwellings on map (they are town type dependent)
//{
// DefInfo curDef = map.defy[CGI->objh->objInstances[j].defNumber];
//}
}

View File

@ -446,7 +446,7 @@ void CCreatureHandler::loadUnitAnimInfo(CCreature & unit, std::string & src, int
void CCreatureHandler::loadUnitAnimations()
{
std::ifstream inp("CREDEFS.TXT", std::ios::in | std::ios::binary);
std::ifstream inp("CREDEFS.TXT", std::ios::in | std::ios::binary); //this file is not in lod
inp.seekg(0,std::ios::end); // na koniec
int andame = inp.tellg(); // read length
inp.seekg(0,std::ios::beg); // wracamy na poczatek

View File

@ -1,6 +1,8 @@
#ifndef CGAMEINFO_H
#define CGAMEINFO_H
#include "CPreGame.h"
#include "StartInfo.h"
#include "CSpellHandler.h"
#include "CAbilityHandler.h"
#include "CCreaturehandler.h"
@ -16,8 +18,8 @@
#include "CTownHandler.h"
#include "CGeneralTextHandler.h"
#include "SDL.h"
#include <vector>
#include <vector>
/*
CGameInfo class
for allowing different functions for modifying game informations
@ -43,6 +45,7 @@ public:
CGeneralTextHandler * generaltexth;
std::vector<SDL_Color> playerColors;
SDL_Color neutralColor;
StartInfo scenarioOps;
};
#endif //CGAMEINFO_H

View File

@ -1,3 +1,6 @@
#ifndef CGAMEINTERFACE_H
#define CGAMEINTERFACE_H
#include "SDL.h"
#include "CDefHandler.h"
#include "SDL_Extensions.h"
@ -59,4 +62,6 @@ class CPlayerInterface
std::vector<Hoverable*> hoverable;
std::vector<KeyInterested*> keyinterested;
void handleEvent(SDL_Event * sEvent);
};
};
#endif //CGAMEINTERFACE_H

View File

@ -284,7 +284,7 @@ int _tmain(int argc, _TCHAR* argv[])
//CSDL_Ext::blueToPlayersAdv(ll->piecesOfBox[0].ourImages[0].bitmap, 0);
//SDL_SaveBMP(ll->piecesOfBox[0].ourImages[0].bitmap, "test2.bmp");
cpg->mush = mush;
cpg->runLoop();
cgi->scenarioOps = cpg->runLoop();
THC tmh.getDif();
//////////////////////////////////////////////////////////////////////////////// lod testing

View File

@ -1,6 +1,7 @@
#ifndef CPREGAME_H
#define CPREGAME_H
#include "SDL.h"
#include "StartInfo.h"
#include "CSemiDefHandler.h"
#include "CSemiLodHandler.h"
#include "CPreGameTextHandler.h"
@ -9,7 +10,6 @@
#include "CMusicHandler.h"
class CPreGame;
extern CPreGame * CPG;
enum Ebonus {brandom=-1,bartifact, bgold, bresource};
typedef void(CPreGame::*ttt)();
template <class T=ttt> class CGroup;
@ -105,20 +105,6 @@ public:
CGroup():selected(NULL),type(0){};
};
struct StartInfo
{
struct PlayerSettings
{
int castle, hero, heroPortrait; //ID, if -1 then random, if -2 then none
std::string heroName;
Ebonus bonus;
Ecolor color; //from 0 -
int handicap;//0-no, 1-mild, 2-severe
std::string name;
};
std::vector<PlayerSettings> playerInfos;
int turnTime; //in minutes, 0=unlimited
};
class PreGameTab
{
public:

23
StartInfo.h Normal file
View File

@ -0,0 +1,23 @@
#ifndef STARTINFO_H
#define STARTINFO_H
#include "global.h"
enum Ebonus {brandom=-1,bartifact, bgold, bresource};
struct StartInfo
{
struct PlayerSettings
{
int castle, hero, heroPortrait; //ID, if -1 then random, if -2 then none
std::string heroName;
Ebonus bonus;
Ecolor color; //from 0 -
int handicap;//0-no, 1-mild, 2-severe
std::string name;
};
std::vector<PlayerSettings> playerInfos;
int turnTime; //in minutes, 0=unlimited
};
#endif

View File

@ -140,7 +140,7 @@ void CMapHandler::init()
}
if(cDir==8 || cDir==9)
{
if(j-Hoff+1<reader->map.height && !(reader->map.terrain[i-Woff][j-Hoff+1].malle))
if((j-Hoff+1<reader->map.height && !(reader->map.terrain[i-Woff][j-Hoff+1].malle)) || j-Hoff+1==reader->map.height)
{
roadBitmaps[i][j] = CSDL_Ext::hFlip(roadBitmaps[i][j]);
roadBitmaps[i][j] = CSDL_Ext::alphaTransform(roadBitmaps[i][j]);
@ -222,7 +222,7 @@ void CMapHandler::init()
}
if(cDir==8 || cDir==9)
{
if(j-Hoff+1<reader->map.height && !(reader->map.undergroungTerrain[i-Woff][j-Hoff+1].malle))
if((j-Hoff+1<reader->map.height && !(reader->map.undergroungTerrain[i-Woff][j-Hoff+1].malle)) || j-Hoff+1==reader->map.height)
{
undRoadBitmaps[i][j] = CSDL_Ext::hFlip(undRoadBitmaps[i][j]);
undRoadBitmaps[i][j] = CSDL_Ext::alphaTransform(undRoadBitmaps[i][j]);