1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-07-17 01:32:21 +02:00

* redone def declaration reading

This commit is contained in:
Michał W. Urbańczyk
2007-10-28 17:56:16 +00:00
parent 1aecaf1472
commit de4d8e093e
4 changed files with 206 additions and 172 deletions

View File

@ -22,6 +22,18 @@ unsigned int intPow(unsigned int a, unsigned int b)
ret*=a; ret*=a;
return ret; return ret;
} }
unsigned char reverse(unsigned char arg)
{
unsigned char ret = 0;
for (int i=0; i<8;i++)
{
if(((arg)&(1<<i))>>i)
{
ret |= (128>>i);
}
}
return ret;
}
CAmbarCendamo::CAmbarCendamo (unsigned char * map) CAmbarCendamo::CAmbarCendamo (unsigned char * map)
{ {
bufor=map; bufor=map;
@ -502,10 +514,10 @@ void CAmbarCendamo::deh3m()
{ {
vinya->name += bufor[i++]; vinya->name += bufor[i++];
} }
for (int v=0; v<42; v++) // read info //for (int v=0; v<42; v++) // read info
{ //{
vinya->bytes[v] = bufor[i++]; // vinya->bytes[v] = bufor[i++];
} //}
std::vector<DefObjInfo>::iterator pit = std::find(CGameInfo::mainObj->dobjinfo->objs.begin(), CGameInfo::mainObj->dobjinfo->objs.end(), std::vector<DefObjInfo>::iterator pit = std::find(CGameInfo::mainObj->dobjinfo->objs.begin(), CGameInfo::mainObj->dobjinfo->objs.end(),
vinya->name); vinya->name);
if(pit == CGameInfo::mainObj->dobjinfo->objs.end()) if(pit == CGameInfo::mainObj->dobjinfo->objs.end())
@ -514,9 +526,29 @@ void CAmbarCendamo::deh3m()
} }
else else
{ {
vinya->printPriority = pit->priority; //vinya->printPriority = pit->priority;
vinya->isOnDefList = true; vinya->isOnDefList = true;
} }
unsigned char bytes[12];
for (int v=0; v<12; v++) // read info
{
bytes[v] = bufor[i++];
}
vinya->terrainAllowed = readNormalNr(i,2);i+=2;
vinya->terrainMenu = readNormalNr(i,2);i+=2;
vinya->id = readNormalNr(i,4);i+=4;
vinya->subid = readNormalNr(i,4);i+=4;
vinya->type = bufor[i++];
vinya->printPriority = bufor[i++];
for (int zi=0; zi<6; zi++)
{
vinya->blockMap[zi] = reverse(bytes[zi]);
}
for (int zi=0; zi<6; zi++)
{
vinya->visitMap[zi] = reverse(bytes[6+zi]);
}
i+=16;
map.defy.push_back(vinya); // add this def to the vector map.defy.push_back(vinya); // add this def to the vector
defsToUnpack.push_back(vinya->name); defsToUnpack.push_back(vinya->name);
} }
@ -534,8 +566,8 @@ void CAmbarCendamo::deh3m()
int tempd = readNormalNr(i, 4); i+=4; int tempd = readNormalNr(i, 4); i+=4;
nobj->defInfo = map.defy[tempd]; nobj->defInfo = map.defy[tempd];
nobj->ID = nobj->defInfo->bytes[16]; nobj->ID = nobj->defInfo->id;
nobj->subID = nobj->defInfo->bytes[20]; nobj->subID = nobj->defInfo->subid;
//nobj->defInfo = readNormalNr(i, 4); i+=4; //nobj->defInfo = readNormalNr(i, 4); i+=4;
//nobj->defObjInfoNumber = -1; //nobj->defObjInfoNumber = -1;
//nobj->isHero = false; //nobj->isHero = false;
@ -553,7 +585,7 @@ void CAmbarCendamo::deh3m()
buff[ccc] = bufor[i+ccc]; buff[ccc] = bufor[i+ccc];
} }
EDefType uu = getDefType(nobj->defInfo); EDefType uu = getDefType(nobj->defInfo);
int j = nobj->defInfo->bytes[16]; int j = nobj->defInfo->id;
int p = 99; int p = 99;
switch(uu) switch(uu)
{ {
@ -2023,7 +2055,7 @@ void CAmbarCendamo::loadDefs()
EDefType CAmbarCendamo::getDefType(CGDefInfo * a) EDefType CAmbarCendamo::getDefType(CGDefInfo * a)
{ {
switch(a->bytes[16]) switch(a->id)
{ {
case 5: case 65: case 66: case 67: case 68: case 69: case 5: case 65: case 66: case 67: case 68: case 69:
return EDefType::ARTIFACT_DEF; //handled return EDefType::ARTIFACT_DEF; //handled
@ -2381,17 +2413,17 @@ void CAmbarCendamo::processMap(std::vector<std::string> & defsToUnpack)
{ {
case EDefType::RESOURCE_DEF: case EDefType::RESOURCE_DEF:
{ {
if(curDef->bytes[16]==76) //resource to specify if(curDef->id==76) //resource to specify
{ {
CGDefInfo * nxt = curDef; CGDefInfo * nxt = curDef;
nxt->bytes[16] = 79; nxt->id = 79;
nxt->bytes[20] = rand()%7; nxt->subid = rand()%7;
if(resDefNumbers[nxt->bytes[20]+1]!=NULL) if(resDefNumbers[nxt->subid+1]!=NULL)
{ {
CGI->objh->objInstances[j]->defInfo = resDefNumbers[nxt->bytes[20]+1]; CGI->objh->objInstances[j]->defInfo = resDefNumbers[nxt->subid+1];
continue; continue;
} }
nxt->name = resDefNames[nxt->bytes[20]+1]; nxt->name = resDefNames[nxt->subid+1];
std::vector<DefObjInfo>::iterator pit = std::find(CGameInfo::mainObj->dobjinfo->objs.begin(), CGameInfo::mainObj->dobjinfo->objs.end(), std::vector<DefObjInfo>::iterator pit = std::find(CGameInfo::mainObj->dobjinfo->objs.begin(), CGameInfo::mainObj->dobjinfo->objs.end(),
nxt->name); nxt->name);
if(pit == CGameInfo::mainObj->dobjinfo->objs.end()) if(pit == CGameInfo::mainObj->dobjinfo->objs.end())
@ -2406,26 +2438,26 @@ void CAmbarCendamo::processMap(std::vector<std::string> & defsToUnpack)
map.defy.push_back(nxt); // add this def to the vector map.defy.push_back(nxt); // add this def to the vector
defsToUnpack.push_back(nxt->name); defsToUnpack.push_back(nxt->name);
CGI->objh->objInstances[j]->defInfo = nxt; CGI->objh->objInstances[j]->defInfo = nxt;
if(resDefNumbers[nxt->bytes[20]+1]==NULL) if(resDefNumbers[nxt->subid+1]==NULL)
{ {
resDefNumbers[nxt->bytes[20]+1] = nxt; resDefNumbers[nxt->subid+1] = nxt;
} }
} }
break; break;
} }
case EDefType::CREATURES_DEF: case EDefType::CREATURES_DEF:
{ {
if(curDef->bytes[16]==72) //random monster lvl 1 if(curDef->id==72) //random monster lvl 1
{ {
CGDefInfo * nxt = curDef; CGDefInfo * nxt = curDef;
nxt->bytes[16] = 54; nxt->id = 54;
nxt->bytes[20] = 14*(rand()%9)+rand()%2; nxt->subid = 14*(rand()%9)+rand()%2;
if(creDefNumbers[nxt->bytes[20]]!=NULL) if(creDefNumbers[nxt->subid]!=NULL)
{ {
CGI->objh->objInstances[j]->defInfo = creDefNumbers[nxt->bytes[20]]; CGI->objh->objInstances[j]->defInfo = creDefNumbers[nxt->subid];
continue; continue;
} }
nxt->name = creDefNames[nxt->bytes[20]]; nxt->name = creDefNames[nxt->subid];
std::vector<DefObjInfo>::iterator pit = std::find(CGameInfo::mainObj->dobjinfo->objs.begin(), CGameInfo::mainObj->dobjinfo->objs.end(), std::vector<DefObjInfo>::iterator pit = std::find(CGameInfo::mainObj->dobjinfo->objs.begin(), CGameInfo::mainObj->dobjinfo->objs.end(),
nxt->name); nxt->name);
if(pit == CGameInfo::mainObj->dobjinfo->objs.end()) if(pit == CGameInfo::mainObj->dobjinfo->objs.end())
@ -2440,22 +2472,22 @@ void CAmbarCendamo::processMap(std::vector<std::string> & defsToUnpack)
map.defy.push_back(nxt); // add this def to the vector map.defy.push_back(nxt); // add this def to the vector
defsToUnpack.push_back(nxt->name); defsToUnpack.push_back(nxt->name);
CGI->objh->objInstances[j]->defInfo = nxt; CGI->objh->objInstances[j]->defInfo = nxt;
if(creDefNumbers[nxt->bytes[20]]==NULL) if(creDefNumbers[nxt->subid]==NULL)
{ {
creDefNumbers[nxt->bytes[20]] = nxt; creDefNumbers[nxt->subid] = nxt;
} }
} }
if(curDef->bytes[16]==73) //random monster lvl 2 if(curDef->id==73) //random monster lvl 2
{ {
CGDefInfo * nxt = curDef; CGDefInfo * nxt = curDef;
nxt->bytes[16] = 54; nxt->id = 54;
nxt->bytes[20] = 14*(rand()%9)+rand()%2+2; nxt->subid = 14*(rand()%9)+rand()%2+2;
if(creDefNumbers[nxt->bytes[20]]!=NULL) if(creDefNumbers[nxt->subid]!=NULL)
{ {
CGI->objh->objInstances[j]->defInfo = creDefNumbers[nxt->bytes[20]]; CGI->objh->objInstances[j]->defInfo = creDefNumbers[nxt->subid];
continue; continue;
} }
nxt->name = creDefNames[nxt->bytes[20]]; nxt->name = creDefNames[nxt->subid];
std::vector<DefObjInfo>::iterator pit = std::find(CGameInfo::mainObj->dobjinfo->objs.begin(), CGameInfo::mainObj->dobjinfo->objs.end(), std::vector<DefObjInfo>::iterator pit = std::find(CGameInfo::mainObj->dobjinfo->objs.begin(), CGameInfo::mainObj->dobjinfo->objs.end(),
nxt->name); nxt->name);
if(pit == CGameInfo::mainObj->dobjinfo->objs.end()) if(pit == CGameInfo::mainObj->dobjinfo->objs.end())
@ -2470,22 +2502,22 @@ void CAmbarCendamo::processMap(std::vector<std::string> & defsToUnpack)
map.defy.push_back(nxt); // add this def to the vector map.defy.push_back(nxt); // add this def to the vector
defsToUnpack.push_back(nxt->name); defsToUnpack.push_back(nxt->name);
CGI->objh->objInstances[j]->defInfo = nxt; CGI->objh->objInstances[j]->defInfo = nxt;
if(creDefNumbers[nxt->bytes[20]]==NULL) if(creDefNumbers[nxt->subid]==NULL)
{ {
creDefNumbers[nxt->bytes[20]] = nxt; creDefNumbers[nxt->subid] = nxt;
} }
} }
if(curDef->bytes[16]==74) //random monster lvl 3 if(curDef->id==74) //random monster lvl 3
{ {
CGDefInfo *nxt = curDef; CGDefInfo *nxt = curDef;
nxt->bytes[16] = 54; nxt->id = 54;
nxt->bytes[20] = 14*(rand()%9)+rand()%2+4; nxt->subid = 14*(rand()%9)+rand()%2+4;
if(creDefNumbers[nxt->bytes[20]]!=NULL) if(creDefNumbers[nxt->subid]!=NULL)
{ {
CGI->objh->objInstances[j]->defInfo = creDefNumbers[nxt->bytes[20]]; CGI->objh->objInstances[j]->defInfo = creDefNumbers[nxt->subid];
continue; continue;
} }
nxt->name = creDefNames[nxt->bytes[20]]; nxt->name = creDefNames[nxt->subid];
std::vector<DefObjInfo>::iterator pit = std::find(CGameInfo::mainObj->dobjinfo->objs.begin(), CGameInfo::mainObj->dobjinfo->objs.end(), std::vector<DefObjInfo>::iterator pit = std::find(CGameInfo::mainObj->dobjinfo->objs.begin(), CGameInfo::mainObj->dobjinfo->objs.end(),
nxt->name); nxt->name);
if(pit == CGameInfo::mainObj->dobjinfo->objs.end()) if(pit == CGameInfo::mainObj->dobjinfo->objs.end())
@ -2500,22 +2532,22 @@ void CAmbarCendamo::processMap(std::vector<std::string> & defsToUnpack)
map.defy.push_back(nxt); // add this def to the vector map.defy.push_back(nxt); // add this def to the vector
defsToUnpack.push_back(nxt->name); defsToUnpack.push_back(nxt->name);
CGI->objh->objInstances[j]->defInfo = nxt; CGI->objh->objInstances[j]->defInfo = nxt;
if(creDefNumbers[nxt->bytes[20]]==NULL) if(creDefNumbers[nxt->subid]==NULL)
{ {
creDefNumbers[nxt->bytes[20]] = nxt; creDefNumbers[nxt->subid] = nxt;
} }
} }
if(curDef->bytes[16]==75) //random monster lvl 4 if(curDef->id==75) //random monster lvl 4
{ {
CGDefInfo * nxt = curDef; CGDefInfo * nxt = curDef;
nxt->bytes[16] = 54; nxt->id = 54;
nxt->bytes[20] = 14*(rand()%9)+rand()%2+6; nxt->subid = 14*(rand()%9)+rand()%2+6;
if(creDefNumbers[nxt->bytes[20]]!=NULL) if(creDefNumbers[nxt->subid]!=NULL)
{ {
CGI->objh->objInstances[j]->defInfo = creDefNumbers[nxt->bytes[20]]; CGI->objh->objInstances[j]->defInfo = creDefNumbers[nxt->subid];
continue; continue;
} }
nxt->name = creDefNames[nxt->bytes[20]]; nxt->name = creDefNames[nxt->subid];
std::vector<DefObjInfo>::iterator pit = std::find(CGameInfo::mainObj->dobjinfo->objs.begin(), CGameInfo::mainObj->dobjinfo->objs.end(), std::vector<DefObjInfo>::iterator pit = std::find(CGameInfo::mainObj->dobjinfo->objs.begin(), CGameInfo::mainObj->dobjinfo->objs.end(),
nxt->name); nxt->name);
if(pit == CGameInfo::mainObj->dobjinfo->objs.end()) if(pit == CGameInfo::mainObj->dobjinfo->objs.end())
@ -2530,22 +2562,22 @@ void CAmbarCendamo::processMap(std::vector<std::string> & defsToUnpack)
map.defy.push_back(nxt); // add this def to the vector map.defy.push_back(nxt); // add this def to the vector
defsToUnpack.push_back(nxt->name); defsToUnpack.push_back(nxt->name);
CGI->objh->objInstances[j]->defInfo = nxt; CGI->objh->objInstances[j]->defInfo = nxt;
if(creDefNumbers[nxt->bytes[20]]==NULL) if(creDefNumbers[nxt->subid]==NULL)
{ {
creDefNumbers[nxt->bytes[20]] = nxt; creDefNumbers[nxt->subid] = nxt;
} }
} }
if(curDef->bytes[16]==162) //random monster lvl 5 if(curDef->id==162) //random monster lvl 5
{ {
CGDefInfo * nxt = curDef; CGDefInfo * nxt = curDef;
nxt->bytes[16] = 54; nxt->id = 54;
nxt->bytes[20] = 14*(rand()%9)+rand()%2+8; nxt->subid = 14*(rand()%9)+rand()%2+8;
if(creDefNumbers[nxt->bytes[20]]!=NULL) if(creDefNumbers[nxt->subid]!=NULL)
{ {
CGI->objh->objInstances[j]->defInfo = creDefNumbers[nxt->bytes[20]]; CGI->objh->objInstances[j]->defInfo = creDefNumbers[nxt->subid];
continue; continue;
} }
nxt->name = creDefNames[nxt->bytes[20]]; nxt->name = creDefNames[nxt->subid];
std::vector<DefObjInfo>::iterator pit = std::find(CGameInfo::mainObj->dobjinfo->objs.begin(), CGameInfo::mainObj->dobjinfo->objs.end(), std::vector<DefObjInfo>::iterator pit = std::find(CGameInfo::mainObj->dobjinfo->objs.begin(), CGameInfo::mainObj->dobjinfo->objs.end(),
nxt->name); nxt->name);
if(pit == CGameInfo::mainObj->dobjinfo->objs.end()) if(pit == CGameInfo::mainObj->dobjinfo->objs.end())
@ -2560,22 +2592,22 @@ void CAmbarCendamo::processMap(std::vector<std::string> & defsToUnpack)
map.defy.push_back(nxt); // add this def to the vector map.defy.push_back(nxt); // add this def to the vector
defsToUnpack.push_back(nxt->name); defsToUnpack.push_back(nxt->name);
CGI->objh->objInstances[j]->defInfo = nxt; CGI->objh->objInstances[j]->defInfo = nxt;
if(creDefNumbers[nxt->bytes[20]]==NULL) if(creDefNumbers[nxt->subid]==NULL)
{ {
creDefNumbers[nxt->bytes[20]] = nxt; creDefNumbers[nxt->subid] = nxt;
} }
} }
if(curDef->bytes[16]==163) //random monster lvl 6 if(curDef->id==163) //random monster lvl 6
{ {
CGDefInfo* nxt = curDef; CGDefInfo* nxt = curDef;
nxt->bytes[16] = 54; nxt->id = 54;
nxt->bytes[20] = 14*(rand()%9)+rand()%2+10; nxt->subid = 14*(rand()%9)+rand()%2+10;
if(creDefNumbers[nxt->bytes[20]]!=NULL) if(creDefNumbers[nxt->subid]!=NULL)
{ {
CGI->objh->objInstances[j]->defInfo = creDefNumbers[nxt->bytes[20]]; CGI->objh->objInstances[j]->defInfo = creDefNumbers[nxt->subid];
continue; continue;
} }
nxt->name = creDefNames[nxt->bytes[20]]; nxt->name = creDefNames[nxt->subid];
std::vector<DefObjInfo>::iterator pit = std::find(CGameInfo::mainObj->dobjinfo->objs.begin(), CGameInfo::mainObj->dobjinfo->objs.end(), std::vector<DefObjInfo>::iterator pit = std::find(CGameInfo::mainObj->dobjinfo->objs.begin(), CGameInfo::mainObj->dobjinfo->objs.end(),
nxt->name); nxt->name);
if(pit == CGameInfo::mainObj->dobjinfo->objs.end()) if(pit == CGameInfo::mainObj->dobjinfo->objs.end())
@ -2590,22 +2622,22 @@ void CAmbarCendamo::processMap(std::vector<std::string> & defsToUnpack)
map.defy.push_back(nxt); // add this def to the vector map.defy.push_back(nxt); // add this def to the vector
defsToUnpack.push_back(nxt->name); defsToUnpack.push_back(nxt->name);
CGI->objh->objInstances[j]->defInfo = nxt; CGI->objh->objInstances[j]->defInfo = nxt;
if(creDefNumbers[nxt->bytes[20]]==NULL) if(creDefNumbers[nxt->subid]==NULL)
{ {
creDefNumbers[nxt->bytes[20]] = nxt; creDefNumbers[nxt->subid] = nxt;
} }
} }
if(curDef->bytes[16]==164) //random monster lvl 7 if(curDef->id==164) //random monster lvl 7
{ {
CGDefInfo * nxt = curDef; CGDefInfo * nxt = curDef;
nxt->bytes[16] = 54; nxt->id = 54;
nxt->bytes[20] = 14*(rand()%9)+rand()%2+12; nxt->subid = 14*(rand()%9)+rand()%2+12;
if(creDefNumbers[nxt->bytes[20]]!=NULL) if(creDefNumbers[nxt->subid]!=NULL)
{ {
CGI->objh->objInstances[j]->defInfo = creDefNumbers[nxt->bytes[20]]; CGI->objh->objInstances[j]->defInfo = creDefNumbers[nxt->subid];
continue; continue;
} }
nxt->name = creDefNames[nxt->bytes[20]]; nxt->name = creDefNames[nxt->subid];
std::vector<DefObjInfo>::iterator pit = std::find(CGameInfo::mainObj->dobjinfo->objs.begin(), CGameInfo::mainObj->dobjinfo->objs.end(), std::vector<DefObjInfo>::iterator pit = std::find(CGameInfo::mainObj->dobjinfo->objs.begin(), CGameInfo::mainObj->dobjinfo->objs.end(),
nxt->name); nxt->name);
if(pit == CGameInfo::mainObj->dobjinfo->objs.end()) if(pit == CGameInfo::mainObj->dobjinfo->objs.end())
@ -2620,22 +2652,22 @@ void CAmbarCendamo::processMap(std::vector<std::string> & defsToUnpack)
map.defy.push_back(nxt); // add this def to the vector map.defy.push_back(nxt); // add this def to the vector
defsToUnpack.push_back(nxt->name); defsToUnpack.push_back(nxt->name);
CGI->objh->objInstances[j]->defInfo = nxt; CGI->objh->objInstances[j]->defInfo = nxt;
if(creDefNumbers[nxt->bytes[20]]==NULL) if(creDefNumbers[nxt->subid]==NULL)
{ {
creDefNumbers[nxt->bytes[20]] = nxt; creDefNumbers[nxt->subid] = nxt;
} }
} }
if(curDef->bytes[16]==71) //random monster (any level) if(curDef->id==71) //random monster (any level)
{ {
CGDefInfo * nxt = curDef; CGDefInfo * nxt = curDef;
nxt->bytes[16] = 54; nxt->id = 54;
nxt->bytes[20] = rand()%126; nxt->subid = rand()%126;
if(creDefNumbers[nxt->bytes[20]]!=NULL) if(creDefNumbers[nxt->subid]!=NULL)
{ {
CGI->objh->objInstances[j]->defInfo = creDefNumbers[nxt->bytes[20]]; CGI->objh->objInstances[j]->defInfo = creDefNumbers[nxt->subid];
continue; continue;
} }
nxt->name = creDefNames[nxt->bytes[20]]; nxt->name = creDefNames[nxt->subid];
std::vector<DefObjInfo>::iterator pit = std::find(CGameInfo::mainObj->dobjinfo->objs.begin(), CGameInfo::mainObj->dobjinfo->objs.end(), std::vector<DefObjInfo>::iterator pit = std::find(CGameInfo::mainObj->dobjinfo->objs.begin(), CGameInfo::mainObj->dobjinfo->objs.end(),
nxt->name); nxt->name);
if(pit == CGameInfo::mainObj->dobjinfo->objs.end()) if(pit == CGameInfo::mainObj->dobjinfo->objs.end())
@ -2650,26 +2682,26 @@ void CAmbarCendamo::processMap(std::vector<std::string> & defsToUnpack)
map.defy.push_back(nxt); // add this def to the vector map.defy.push_back(nxt); // add this def to the vector
defsToUnpack.push_back(nxt->name); defsToUnpack.push_back(nxt->name);
CGI->objh->objInstances[j]->defInfo = nxt; CGI->objh->objInstances[j]->defInfo = nxt;
if(creDefNumbers[nxt->bytes[20]]==NULL) if(creDefNumbers[nxt->subid]==NULL)
{ {
creDefNumbers[nxt->bytes[20]] = nxt; creDefNumbers[nxt->subid] = nxt;
} }
} }
break; break;
} //end of case } //end of case
case EDefType::ARTIFACT_DEF: case EDefType::ARTIFACT_DEF:
{ {
if(curDef->bytes[16]==65) //random atrifact (any class) if(curDef->id==65) //random atrifact (any class)
{ {
CGDefInfo *nxt = curDef; CGDefInfo *nxt = curDef;
nxt->bytes[16] = 5; nxt->id = 5;
nxt->bytes[20] = rand()%artDefNames.size(); nxt->subid = rand()%artDefNames.size();
if(artDefNumbers[nxt->bytes[20]]!=NULL) if(artDefNumbers[nxt->subid]!=NULL)
{ {
CGI->objh->objInstances[j]->defInfo = artDefNumbers[nxt->bytes[20]]; CGI->objh->objInstances[j]->defInfo = artDefNumbers[nxt->subid];
continue; continue;
} }
nxt->name = artDefNames[nxt->bytes[20]]; nxt->name = artDefNames[nxt->subid];
std::vector<DefObjInfo>::iterator pit = std::find(CGameInfo::mainObj->dobjinfo->objs.begin(), CGameInfo::mainObj->dobjinfo->objs.end(), std::vector<DefObjInfo>::iterator pit = std::find(CGameInfo::mainObj->dobjinfo->objs.begin(), CGameInfo::mainObj->dobjinfo->objs.end(),
nxt->name); nxt->name);
if(pit == CGameInfo::mainObj->dobjinfo->objs.end()) if(pit == CGameInfo::mainObj->dobjinfo->objs.end())
@ -2684,22 +2716,22 @@ void CAmbarCendamo::processMap(std::vector<std::string> & defsToUnpack)
map.defy.push_back(nxt); // add this def to the vector map.defy.push_back(nxt); // add this def to the vector
defsToUnpack.push_back(nxt->name); defsToUnpack.push_back(nxt->name);
CGI->objh->objInstances[j]->defInfo = nxt; CGI->objh->objInstances[j]->defInfo = nxt;
if(artDefNumbers[nxt->bytes[20]]==NULL) if(artDefNumbers[nxt->subid]==NULL)
{ {
artDefNumbers[nxt->bytes[20]] = nxt; artDefNumbers[nxt->subid] = nxt;
} }
} }
if(curDef->bytes[16]==66) //random atrifact (treasure) if(curDef->id==66) //random atrifact (treasure)
{ {
CGDefInfo* nxt = curDef; CGDefInfo* nxt = curDef;
nxt->bytes[16] = 5; nxt->id = 5;
nxt->bytes[20] = rand()%art1DefNames.size(); nxt->subid = rand()%art1DefNames.size();
if(art1DefNumbers[nxt->bytes[20]]!=NULL) if(art1DefNumbers[nxt->subid]!=NULL)
{ {
CGI->objh->objInstances[j]->defInfo = art1DefNumbers[nxt->bytes[20]]; CGI->objh->objInstances[j]->defInfo = art1DefNumbers[nxt->subid];
continue; continue;
} }
nxt->name = art1DefNames[nxt->bytes[20]]; nxt->name = art1DefNames[nxt->subid];
std::vector<DefObjInfo>::iterator pit = std::find(CGameInfo::mainObj->dobjinfo->objs.begin(), CGameInfo::mainObj->dobjinfo->objs.end(), std::vector<DefObjInfo>::iterator pit = std::find(CGameInfo::mainObj->dobjinfo->objs.begin(), CGameInfo::mainObj->dobjinfo->objs.end(),
nxt->name); nxt->name);
if(pit == CGameInfo::mainObj->dobjinfo->objs.end()) if(pit == CGameInfo::mainObj->dobjinfo->objs.end())
@ -2714,22 +2746,22 @@ void CAmbarCendamo::processMap(std::vector<std::string> & defsToUnpack)
map.defy.push_back(nxt); // add this def to the vector map.defy.push_back(nxt); // add this def to the vector
defsToUnpack.push_back(nxt->name); defsToUnpack.push_back(nxt->name);
CGI->objh->objInstances[j]->defInfo = nxt; CGI->objh->objInstances[j]->defInfo = nxt;
if(art1DefNumbers[nxt->bytes[20]]==NULL) if(art1DefNumbers[nxt->subid]==NULL)
{ {
art1DefNumbers[nxt->bytes[20]] = nxt; art1DefNumbers[nxt->subid] = nxt;
} }
} }
if(curDef->bytes[16]==67) //random atrifact (minor) if(curDef->id==67) //random atrifact (minor)
{ {
CGDefInfo *nxt = curDef; CGDefInfo *nxt = curDef;
nxt->bytes[16] = 5; nxt->id = 5;
nxt->bytes[20] = rand()%art2DefNames.size(); nxt->subid = rand()%art2DefNames.size();
if(art2DefNumbers[nxt->bytes[20]]!=NULL) if(art2DefNumbers[nxt->subid]!=NULL)
{ {
CGI->objh->objInstances[j]->defInfo = art2DefNumbers[nxt->bytes[20]]; CGI->objh->objInstances[j]->defInfo = art2DefNumbers[nxt->subid];
continue; continue;
} }
nxt->name = art2DefNames[nxt->bytes[20]]; nxt->name = art2DefNames[nxt->subid];
std::vector<DefObjInfo>::iterator pit = std::find(CGameInfo::mainObj->dobjinfo->objs.begin(), CGameInfo::mainObj->dobjinfo->objs.end(), std::vector<DefObjInfo>::iterator pit = std::find(CGameInfo::mainObj->dobjinfo->objs.begin(), CGameInfo::mainObj->dobjinfo->objs.end(),
nxt->name); nxt->name);
if(pit == CGameInfo::mainObj->dobjinfo->objs.end()) if(pit == CGameInfo::mainObj->dobjinfo->objs.end())
@ -2744,22 +2776,22 @@ void CAmbarCendamo::processMap(std::vector<std::string> & defsToUnpack)
map.defy.push_back(nxt); // add this def to the vector map.defy.push_back(nxt); // add this def to the vector
defsToUnpack.push_back(nxt->name); defsToUnpack.push_back(nxt->name);
CGI->objh->objInstances[j]->defInfo = nxt; CGI->objh->objInstances[j]->defInfo = nxt;
if(art2DefNumbers[nxt->bytes[20]]==NULL) if(art2DefNumbers[nxt->subid]==NULL)
{ {
art2DefNumbers[nxt->bytes[20]] = nxt; art2DefNumbers[nxt->subid] = nxt;
} }
} }
if(curDef->bytes[16]==68) //random atrifact (major) if(curDef->id==68) //random atrifact (major)
{ {
CGDefInfo* nxt = curDef; CGDefInfo* nxt = curDef;
nxt->bytes[16] = 5; nxt->id = 5;
nxt->bytes[20] = rand()%art3DefNames.size(); nxt->subid = rand()%art3DefNames.size();
if(art3DefNumbers[nxt->bytes[20]]!=NULL) if(art3DefNumbers[nxt->subid]!=NULL)
{ {
CGI->objh->objInstances[j]->defInfo = art3DefNumbers[nxt->bytes[20]]; CGI->objh->objInstances[j]->defInfo = art3DefNumbers[nxt->subid];
continue; continue;
} }
nxt->name = art3DefNames[nxt->bytes[20]]; nxt->name = art3DefNames[nxt->subid];
std::vector<DefObjInfo>::iterator pit = std::find(CGameInfo::mainObj->dobjinfo->objs.begin(), CGameInfo::mainObj->dobjinfo->objs.end(), std::vector<DefObjInfo>::iterator pit = std::find(CGameInfo::mainObj->dobjinfo->objs.begin(), CGameInfo::mainObj->dobjinfo->objs.end(),
nxt->name); nxt->name);
if(pit == CGameInfo::mainObj->dobjinfo->objs.end()) if(pit == CGameInfo::mainObj->dobjinfo->objs.end())
@ -2774,22 +2806,22 @@ void CAmbarCendamo::processMap(std::vector<std::string> & defsToUnpack)
map.defy.push_back(nxt); // add this def to the vector map.defy.push_back(nxt); // add this def to the vector
defsToUnpack.push_back(nxt->name); defsToUnpack.push_back(nxt->name);
CGI->objh->objInstances[j]->defInfo = nxt; CGI->objh->objInstances[j]->defInfo = nxt;
if(art3DefNumbers[nxt->bytes[20]]==NULL) if(art3DefNumbers[nxt->subid]==NULL)
{ {
art3DefNumbers[nxt->bytes[20]] =nxt; art3DefNumbers[nxt->subid] =nxt;
} }
} }
if(curDef->bytes[16]==69) //random atrifact (relic) if(curDef->id==69) //random atrifact (relic)
{ {
CGDefInfo *nxt = curDef; CGDefInfo *nxt = curDef;
nxt->bytes[16] = 5; nxt->id = 5;
nxt->bytes[20] = rand()%art4DefNames.size(); nxt->subid = rand()%art4DefNames.size();
if(art4DefNumbers[nxt->bytes[20]]!=NULL) if(art4DefNumbers[nxt->subid]!=NULL)
{ {
CGI->objh->objInstances[j]->defInfo = art4DefNumbers[nxt->bytes[20]]; CGI->objh->objInstances[j]->defInfo = art4DefNumbers[nxt->subid];
continue; continue;
} }
nxt->name = art4DefNames[nxt->bytes[20]]; nxt->name = art4DefNames[nxt->subid];
std::vector<DefObjInfo>::iterator pit = std::find(CGameInfo::mainObj->dobjinfo->objs.begin(), CGameInfo::mainObj->dobjinfo->objs.end(), std::vector<DefObjInfo>::iterator pit = std::find(CGameInfo::mainObj->dobjinfo->objs.begin(), CGameInfo::mainObj->dobjinfo->objs.end(),
nxt->name); nxt->name);
if(pit == CGameInfo::mainObj->dobjinfo->objs.end()) if(pit == CGameInfo::mainObj->dobjinfo->objs.end())
@ -2804,40 +2836,40 @@ void CAmbarCendamo::processMap(std::vector<std::string> & defsToUnpack)
map.defy.push_back(nxt); // add this def to the vector map.defy.push_back(nxt); // add this def to the vector
defsToUnpack.push_back(nxt->name); defsToUnpack.push_back(nxt->name);
CGI->objh->objInstances[j]->defInfo = nxt; CGI->objh->objInstances[j]->defInfo = nxt;
if(art4DefNumbers[nxt->bytes[20]]==NULL) if(art4DefNumbers[nxt->subid]==NULL)
{ {
art4DefNumbers[nxt->bytes[20]] = nxt; art4DefNumbers[nxt->subid] = nxt;
} }
} }
break; break;
} }
case EDefType::TOWN_DEF: case EDefType::TOWN_DEF:
{ {
if(curDef->bytes[16]==77) //random town if(curDef->id==77) //random town
{ {
CGDefInfo* nxt = curDef; CGDefInfo* nxt = curDef;
nxt->bytes[16] = 98; nxt->id = 98;
if(((CCastleObjInfo*)CGI->objh->objInstances[j]->info)->player==0xff) if(((CCastleObjInfo*)CGI->objh->objInstances[j]->info)->player==0xff)
{ {
nxt->bytes[20] = rand()%town1DefNames.size(); nxt->subid = rand()%town1DefNames.size();
} }
else else
{ {
if(CGI->scenarioOps.getIthPlayersSettings(((CCastleObjInfo*)CGI->objh->objInstances[j]->info)->player).castle>-1) if(CGI->scenarioOps.getIthPlayersSettings(((CCastleObjInfo*)CGI->objh->objInstances[j]->info)->player).castle>-1)
{ {
nxt->bytes[20] = CGI->scenarioOps.getIthPlayersSettings(((CCastleObjInfo*)CGI->objh->objInstances[j]->info)->player).castle; nxt->subid = CGI->scenarioOps.getIthPlayersSettings(((CCastleObjInfo*)CGI->objh->objInstances[j]->info)->player).castle;
} }
else else
{ {
nxt->bytes[20] = rand()%town1DefNames.size(); nxt->subid = rand()%town1DefNames.size();
} }
} }
if(town1DefNumbers[nxt->bytes[20]]!=NULL) if(town1DefNumbers[nxt->subid]!=NULL)
{ {
CGI->objh->objInstances[j]->defInfo = town1DefNumbers[nxt->bytes[20]]; CGI->objh->objInstances[j]->defInfo = town1DefNumbers[nxt->subid];
continue; continue;
} }
nxt->name = town1DefNames[nxt->bytes[20]]; nxt->name = town1DefNames[nxt->subid];
std::vector<DefObjInfo>::iterator pit = std::find(CGameInfo::mainObj->dobjinfo->objs.begin(), CGameInfo::mainObj->dobjinfo->objs.end(), std::vector<DefObjInfo>::iterator pit = std::find(CGameInfo::mainObj->dobjinfo->objs.begin(), CGameInfo::mainObj->dobjinfo->objs.end(),
nxt->name); nxt->name);
if(pit == CGameInfo::mainObj->dobjinfo->objs.end()) if(pit == CGameInfo::mainObj->dobjinfo->objs.end())
@ -2852,15 +2884,15 @@ void CAmbarCendamo::processMap(std::vector<std::string> & defsToUnpack)
map.defy.push_back(nxt); // add this def to the vector map.defy.push_back(nxt); // add this def to the vector
defsToUnpack.push_back(nxt->name); defsToUnpack.push_back(nxt->name);
CGI->objh->objInstances[j]->defInfo = nxt; CGI->objh->objInstances[j]->defInfo = nxt;
if(town1DefNumbers[nxt->bytes[20]]==NULL) if(town1DefNumbers[nxt->subid]==NULL)
{ {
town1DefNumbers[nxt->bytes[20]] = nxt; town1DefNumbers[nxt->subid] = nxt;
} }
for (int ij=0;ij<CGI->townh->townInstances.size();ij++) // wyharatac gdy bedzie dziedziczenie for (int ij=0;ij<CGI->townh->townInstances.size();ij++) // wyharatac gdy bedzie dziedziczenie
{ {
if (CGI->townh->townInstances[ij]->pos==CGI->objh->objInstances[j]->pos) if (CGI->townh->townInstances[ij]->pos==CGI->objh->objInstances[j]->pos)
{ {
CGI->townh->townInstances[ij]->town = &CGI->townh->towns[nxt->bytes[20]]; CGI->townh->townInstances[ij]->town = &CGI->townh->towns[nxt->subid];
break; break;
} }
} }
@ -2896,7 +2928,7 @@ void CAmbarCendamo::processMap(std::vector<std::string> & defsToUnpack)
if(((CCreGenObjInfo*)CGI->objh->objInstances[j]->info)->asCastle) if(((CCreGenObjInfo*)CGI->objh->objInstances[j]->info)->asCastle)
{ {
CGDefInfo *nxt = curDef; CGDefInfo *nxt = curDef;
nxt->bytes[16] = 17; nxt->id = 17;
for(int vv=0; vv<CGI->objh->objInstances.size(); ++vv) for(int vv=0; vv<CGI->objh->objInstances.size(); ++vv)
{ {
if(getDefType(CGI->objh->objInstances[vv]->defInfo)==EDefType::TOWN_DEF) if(getDefType(CGI->objh->objInstances[vv]->defInfo)==EDefType::TOWN_DEF)
@ -2914,17 +2946,17 @@ void CAmbarCendamo::processMap(std::vector<std::string> & defsToUnpack)
std::transform(hlp.begin(), hlp.end(), hlp.begin(), (int(*)(int))toupper); std::transform(hlp.begin(), hlp.end(), hlp.begin(), (int(*)(int))toupper);
if(town1DefNames[mm]==hlp) if(town1DefNames[mm]==hlp)
{ {
nxt->bytes[20] = mm; nxt->subid = mm;
} }
} }
} }
} }
} }
int lvl = atoi(CGI->objh->objInstances[j]->defInfo->name.substr(7, 8).c_str())-1; int lvl = atoi(CGI->objh->objInstances[j]->defInfo->name.substr(7, 8).c_str())-1;
nxt->name = creGenNames[nxt->bytes[20]][lvl]; nxt->name = creGenNames[nxt->subid][lvl];
if(creGenNumbers[nxt->bytes[20]][lvl]!=NULL) if(creGenNumbers[nxt->subid][lvl]!=NULL)
{ {
CGI->objh->objInstances[j]->defInfo = creGenNumbers[nxt->bytes[20]][lvl]; CGI->objh->objInstances[j]->defInfo = creGenNumbers[nxt->subid][lvl];
continue; continue;
} }
std::vector<DefObjInfo>::iterator pit = std::find(CGameInfo::mainObj->dobjinfo->objs.begin(), CGameInfo::mainObj->dobjinfo->objs.end(), std::vector<DefObjInfo>::iterator pit = std::find(CGameInfo::mainObj->dobjinfo->objs.begin(), CGameInfo::mainObj->dobjinfo->objs.end(),
@ -2941,15 +2973,15 @@ void CAmbarCendamo::processMap(std::vector<std::string> & defsToUnpack)
map.defy.push_back(nxt); // add this def to the vector map.defy.push_back(nxt); // add this def to the vector
defsToUnpack.push_back(nxt->name); defsToUnpack.push_back(nxt->name);
CGI->objh->objInstances[j]->defInfo = nxt; CGI->objh->objInstances[j]->defInfo = nxt;
if(creGenNumbers[nxt->bytes[20]][lvl]==NULL) if(creGenNumbers[nxt->subid][lvl]==NULL)
{ {
creGenNumbers[nxt->bytes[20]][lvl] = nxt; creGenNumbers[nxt->subid][lvl] = nxt;
} }
} }
else //if not as castle else //if not as castle
{ {
CGDefInfo * nxt = curDef; CGDefInfo * nxt = curDef;
nxt->bytes[16] = 17; nxt->id = 17;
std::vector<int> possibleTowns; std::vector<int> possibleTowns;
for(int bb=0; bb<8; ++bb) for(int bb=0; bb<8; ++bb)
{ {
@ -2960,12 +2992,12 @@ void CAmbarCendamo::processMap(std::vector<std::string> & defsToUnpack)
} }
if(((CCreGenObjInfo*)CGI->objh->objInstances[j]->info)->castles[1]) if(((CCreGenObjInfo*)CGI->objh->objInstances[j]->info)->castles[1])
possibleTowns.push_back(8); possibleTowns.push_back(8);
nxt->bytes[20] = possibleTowns[rand()%possibleTowns.size()]; nxt->subid = possibleTowns[rand()%possibleTowns.size()];
int lvl = atoi(CGI->objh->objInstances[j]->defInfo->name.substr(7, 8).c_str())-1; int lvl = atoi(CGI->objh->objInstances[j]->defInfo->name.substr(7, 8).c_str())-1;
nxt->name = creGenNames[nxt->bytes[20]][lvl]; nxt->name = creGenNames[nxt->subid][lvl];
if(creGenNumbers[nxt->bytes[20]][lvl]!=NULL) if(creGenNumbers[nxt->subid][lvl]!=NULL)
{ {
CGI->objh->objInstances[j]->defInfo = creGenNumbers[nxt->bytes[20]][lvl]; CGI->objh->objInstances[j]->defInfo = creGenNumbers[nxt->subid][lvl];
continue; continue;
} }
std::vector<DefObjInfo>::iterator pit = std::find(CGameInfo::mainObj->dobjinfo->objs.begin(), CGameInfo::mainObj->dobjinfo->objs.end(), std::vector<DefObjInfo>::iterator pit = std::find(CGameInfo::mainObj->dobjinfo->objs.begin(), CGameInfo::mainObj->dobjinfo->objs.end(),
@ -2982,9 +3014,9 @@ void CAmbarCendamo::processMap(std::vector<std::string> & defsToUnpack)
map.defy.push_back(nxt); // add this def to the vector map.defy.push_back(nxt); // add this def to the vector
defsToUnpack.push_back(nxt->name); defsToUnpack.push_back(nxt->name);
CGI->objh->objInstances[j]->defInfo = nxt; CGI->objh->objInstances[j]->defInfo = nxt;
if(creGenNumbers[nxt->bytes[20]][lvl]==NULL) if(creGenNumbers[nxt->subid][lvl]==NULL)
{ {
creGenNumbers[nxt->bytes[20]][lvl] = nxt; creGenNumbers[nxt->subid][lvl] = nxt;
} }
} }
break; break;
@ -2994,7 +3026,7 @@ void CAmbarCendamo::processMap(std::vector<std::string> & defsToUnpack)
if(((CCreGenObjInfo*)CGI->objh->objInstances[j]->info)->asCastle) if(((CCreGenObjInfo*)CGI->objh->objInstances[j]->info)->asCastle)
{ {
CGDefInfo * nxt = curDef; CGDefInfo * nxt = curDef;
nxt->bytes[16] = 17; nxt->id = 17;
for(int vv=0; vv<CGI->objh->objInstances.size(); ++vv) for(int vv=0; vv<CGI->objh->objInstances.size(); ++vv)
{ {
if(getDefType(CGI->objh->objInstances[vv]->defInfo)==EDefType::TOWN_DEF) if(getDefType(CGI->objh->objInstances[vv]->defInfo)==EDefType::TOWN_DEF)
@ -3012,7 +3044,7 @@ void CAmbarCendamo::processMap(std::vector<std::string> & defsToUnpack)
std::transform(hlp.begin(), hlp.end(), hlp.begin(), (int(*)(int))toupper); std::transform(hlp.begin(), hlp.end(), hlp.begin(), (int(*)(int))toupper);
if(town1DefNames[mm]==hlp) if(town1DefNames[mm]==hlp)
{ {
nxt->bytes[20] = mm; nxt->subid = mm;
} }
} }
} }
@ -3022,10 +3054,10 @@ void CAmbarCendamo::processMap(std::vector<std::string> & defsToUnpack)
if((((CCreGen2ObjInfo*)CGI->objh->objInstances[j]->info)->maxLevel - ((CCreGen2ObjInfo*)CGI->objh->objInstances[j]->info)->minLevel)!=0) if((((CCreGen2ObjInfo*)CGI->objh->objInstances[j]->info)->maxLevel - ((CCreGen2ObjInfo*)CGI->objh->objInstances[j]->info)->minLevel)!=0)
lvl = rand()%(((CCreGen2ObjInfo*)CGI->objh->objInstances[j]->info)->maxLevel - ((CCreGen2ObjInfo*)CGI->objh->objInstances[j]->info)->minLevel) + ((CCreGen2ObjInfo*)CGI->objh->objInstances[j]->info)->minLevel; lvl = rand()%(((CCreGen2ObjInfo*)CGI->objh->objInstances[j]->info)->maxLevel - ((CCreGen2ObjInfo*)CGI->objh->objInstances[j]->info)->minLevel) + ((CCreGen2ObjInfo*)CGI->objh->objInstances[j]->info)->minLevel;
else lvl = 0; else lvl = 0;
nxt->name = creGenNames[nxt->bytes[20]][lvl]; nxt->name = creGenNames[nxt->subid][lvl];
if(creGenNumbers[nxt->bytes[20]][lvl]!=NULL) if(creGenNumbers[nxt->subid][lvl]!=NULL)
{ {
CGI->objh->objInstances[j]->defInfo = creGenNumbers[nxt->bytes[20]][lvl]; CGI->objh->objInstances[j]->defInfo = creGenNumbers[nxt->subid][lvl];
continue; continue;
} }
std::vector<DefObjInfo>::iterator pit = std::find(CGameInfo::mainObj->dobjinfo->objs.begin(), CGameInfo::mainObj->dobjinfo->objs.end(), std::vector<DefObjInfo>::iterator pit = std::find(CGameInfo::mainObj->dobjinfo->objs.begin(), CGameInfo::mainObj->dobjinfo->objs.end(),
@ -3042,15 +3074,15 @@ void CAmbarCendamo::processMap(std::vector<std::string> & defsToUnpack)
map.defy.push_back(nxt); // add this def to the vector map.defy.push_back(nxt); // add this def to the vector
defsToUnpack.push_back(nxt->name); defsToUnpack.push_back(nxt->name);
CGI->objh->objInstances[j]->defInfo = nxt; CGI->objh->objInstances[j]->defInfo = nxt;
if(creGenNumbers[nxt->bytes[20]][lvl]==NULL) if(creGenNumbers[nxt->subid][lvl]==NULL)
{ {
creGenNumbers[nxt->bytes[20]][lvl] = nxt; creGenNumbers[nxt->subid][lvl] = nxt;
} }
} }
else //if not as castle else //if not as castle
{ {
CGDefInfo * nxt = curDef; CGDefInfo * nxt = curDef;
nxt->bytes[16] = 17; nxt->id = 17;
std::vector<int> possibleTowns; std::vector<int> possibleTowns;
for(int bb=0; bb<8; ++bb) for(int bb=0; bb<8; ++bb)
{ {
@ -3061,12 +3093,12 @@ void CAmbarCendamo::processMap(std::vector<std::string> & defsToUnpack)
} }
if(((CCreGen2ObjInfo*)CGI->objh->objInstances[j]->info)->castles[1]) if(((CCreGen2ObjInfo*)CGI->objh->objInstances[j]->info)->castles[1])
possibleTowns.push_back(8); possibleTowns.push_back(8);
nxt->bytes[20] = possibleTowns[rand()%possibleTowns.size()]; nxt->subid = possibleTowns[rand()%possibleTowns.size()];
int lvl = rand()%(((CCreGen2ObjInfo*)CGI->objh->objInstances[j]->info)->maxLevel - ((CCreGen2ObjInfo*)CGI->objh->objInstances[j]->info)->minLevel) + ((CCreGen2ObjInfo*)CGI->objh->objInstances[j]->info)->minLevel; int lvl = rand()%(((CCreGen2ObjInfo*)CGI->objh->objInstances[j]->info)->maxLevel - ((CCreGen2ObjInfo*)CGI->objh->objInstances[j]->info)->minLevel) + ((CCreGen2ObjInfo*)CGI->objh->objInstances[j]->info)->minLevel;
nxt->name = creGenNames[nxt->bytes[20]][lvl]; nxt->name = creGenNames[nxt->subid][lvl];
if(creGenNumbers[nxt->bytes[20]][lvl]!=NULL) if(creGenNumbers[nxt->subid][lvl]!=NULL)
{ {
CGI->objh->objInstances[j]->defInfo = creGenNumbers[nxt->bytes[20]][lvl]; CGI->objh->objInstances[j]->defInfo = creGenNumbers[nxt->subid][lvl];
continue; continue;
} }
std::vector<DefObjInfo>::iterator pit = std::find(CGameInfo::mainObj->dobjinfo->objs.begin(), CGameInfo::mainObj->dobjinfo->objs.end(), std::vector<DefObjInfo>::iterator pit = std::find(CGameInfo::mainObj->dobjinfo->objs.begin(), CGameInfo::mainObj->dobjinfo->objs.end(),
@ -3083,17 +3115,17 @@ void CAmbarCendamo::processMap(std::vector<std::string> & defsToUnpack)
map.defy.push_back(nxt); // add this def to the vector map.defy.push_back(nxt); // add this def to the vector
defsToUnpack.push_back(nxt->name); defsToUnpack.push_back(nxt->name);
CGI->objh->objInstances[j]->defInfo = nxt; CGI->objh->objInstances[j]->defInfo = nxt;
if(creGenNumbers[nxt->bytes[20]][lvl]==NULL) if(creGenNumbers[nxt->subid][lvl]==NULL)
{ {
creGenNumbers[nxt->bytes[20]][lvl] = nxt; creGenNumbers[nxt->subid][lvl] = nxt;
} }
} }
} }
case EDefType::CREGEN3_DEF: case EDefType::CREGEN3_DEF:
{ {
CGDefInfo * nxt = curDef; CGDefInfo * nxt = curDef;
nxt->bytes[16] = 17; nxt->id = 17;
nxt->bytes[20] = atoi(CGI->objh->objInstances[j]->defInfo->name.substr(7, 8).c_str()); nxt->subid = atoi(CGI->objh->objInstances[j]->defInfo->name.substr(7, 8).c_str());
int lvl = -1; int lvl = -1;
CCreGen3ObjInfo * ct = (CCreGen3ObjInfo*)CGI->objh->objInstances[j]->info; CCreGen3ObjInfo * ct = (CCreGen3ObjInfo*)CGI->objh->objInstances[j]->info;
if(ct->maxLevel>7) if(ct->maxLevel>7)
@ -3104,10 +3136,10 @@ void CAmbarCendamo::processMap(std::vector<std::string> & defsToUnpack)
lvl = rand()%(((CCreGen3ObjInfo*)CGI->objh->objInstances[j]->info)->maxLevel - ((CCreGen3ObjInfo*)CGI->objh->objInstances[j]->info)->minLevel) + ((CCreGen3ObjInfo*)CGI->objh->objInstances[j]->info)->minLevel; lvl = rand()%(((CCreGen3ObjInfo*)CGI->objh->objInstances[j]->info)->maxLevel - ((CCreGen3ObjInfo*)CGI->objh->objInstances[j]->info)->minLevel) + ((CCreGen3ObjInfo*)CGI->objh->objInstances[j]->info)->minLevel;
else else
lvl = ((CCreGen3ObjInfo*)CGI->objh->objInstances[j]->info)->maxLevel; lvl = ((CCreGen3ObjInfo*)CGI->objh->objInstances[j]->info)->maxLevel;
nxt->name = creGenNames[nxt->bytes[20]][lvl]; nxt->name = creGenNames[nxt->subid][lvl];
if(creGenNumbers[nxt->bytes[20]][lvl]!=NULL) if(creGenNumbers[nxt->subid][lvl]!=NULL)
{ {
CGI->objh->objInstances[j]->defInfo = creGenNumbers[nxt->bytes[20]][lvl]; CGI->objh->objInstances[j]->defInfo = creGenNumbers[nxt->subid][lvl];
continue; continue;
} }
std::vector<DefObjInfo>::iterator pit = std::find(CGameInfo::mainObj->dobjinfo->objs.begin(), CGameInfo::mainObj->dobjinfo->objs.end(), std::vector<DefObjInfo>::iterator pit = std::find(CGameInfo::mainObj->dobjinfo->objs.begin(), CGameInfo::mainObj->dobjinfo->objs.end(),
@ -3124,9 +3156,9 @@ void CAmbarCendamo::processMap(std::vector<std::string> & defsToUnpack)
map.defy.push_back(nxt); // add this def to the vector map.defy.push_back(nxt); // add this def to the vector
defsToUnpack.push_back(nxt->name); defsToUnpack.push_back(nxt->name);
CGI->objh->objInstances[j]->defInfo = nxt; CGI->objh->objInstances[j]->defInfo = nxt;
if(creGenNumbers[nxt->bytes[20]][lvl]==NULL) if(creGenNumbers[nxt->subid][lvl]==NULL)
{ {
creGenNumbers[nxt->bytes[20]][lvl] = nxt; creGenNumbers[nxt->subid][lvl] = nxt;
} }
break; break;
} }

View File

@ -115,9 +115,9 @@ bool CGObjectInstance::operator<(const CGObjectInstance & cmp) const //screen p
bool CGDefInfo::isVisitable() bool CGDefInfo::isVisitable()
{ {
for (int i=6; i<12; i++) for (int i=0; i<6; i++)
{ {
if (bytes[i]) if (visitMap[i])
return true; return true;
} }
return false; return false;

View File

@ -317,11 +317,13 @@ class CGDefInfo
{ {
public: public:
std::string name; std::string name;
int bytes [42];
unsigned char visitMap[6]; unsigned char visitMap[6];
unsigned char blockMap[6]; unsigned char blockMap[6];
//CSemiDefHandler * handler; int id, subid;
int terrainAllowed, //on which terrain it is possible to place object
terrainMenu; //in which menus in map editor object will be showed
int type; //(0- ziemia, 1- miasta, 2-potwory, 3- bohaterowie, 4-artefakty, 5- surowce)
CDefHandler * handler; CDefHandler * handler;
int printPriority; int printPriority;
bool isOnDefList; bool isOnDefList;

View File

@ -1373,7 +1373,7 @@ std::vector < std::string > CMapHandler::getObjDescriptions(int3 pos)
{ {
unsigned char * blm = CGI->dobjinfo->objs[objs[g].first->defObjInfoNumber].blockMap; unsigned char * blm = CGI->dobjinfo->objs[objs[g].first->defObjInfoNumber].blockMap;
ret.push_back( ret.push_back(
CGI->objh->objects[objs[g].first->defInfo->bytes[16]].name CGI->objh->objects[objs[g].first->defInfo->id].name
); );
} }
} }