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

wczytywanie kolejnych obiektów, zostały jeszcze tylko miasta i trochę drobnicy (ponad 700 wykomentowanych linii... ojej)

This commit is contained in:
mateuszb 2007-06-15 20:11:52 +00:00
parent 6b812b847b
commit d7ea5b93bf
3 changed files with 254 additions and 13 deletions

View File

@ -405,8 +405,8 @@ void CAmbarCendamo::deh3m()
}
THC std::cout<<"Wczytywanie defow: "<<th.getDif()<<std::endl;
////loading objects
/*int howManyObjs = readNormalNr(i, 4); i+=4;
for(int ww=0; ww<howManyObjs; ++ww) //comment this line to turn loading objects off
int howManyObjs = readNormalNr(i, 4); i+=4;
/*for(int ww=0; ww<howManyObjs; ++ww) //comment this line to turn loading objects off
{
CObjectInstance nobj; //we will read this object
nobj.id = CGameInfo::mainObj->objh->objInstances.size();
@ -958,6 +958,175 @@ void CAmbarCendamo::deh3m()
spec->completedText += bufor[i]; ++i;
}
unsigned char rewardType = bufor[i]; ++i;
spec->rewardType = rewardType;
switch(rewardType)
{
case 1:
{
spec->r1exp = readNormalNr(i); i+=4;
break;
}
case 2:
{
spec->r2mana = readNormalNr(i); i+=4;
break;
}
case 3:
{
spec->r3morale = bufor[i]; ++i;
break;
}
case 4:
{
spec->r4luck = bufor[i]; ++i;
break;
}
case 5:
{
spec->r5type = bufor[i]; ++i;
spec->r5amount = readNormalNr(i, 3); i+=3;
break;
}
case 6:
{
spec->r6type = bufor[i]; ++i;
spec->r6amount = bufor[i]; ++i;
break;
}
case 7:
{
int abid = bufor[i]; ++i;
spec->r7ability = &(CGameInfo::mainObj->abilh->abilities[abid]);
spec->r7level = bufor[i]; ++i;
break;
}
case 8:
{
int artid = readNormalNr(i, 2); i+=2;
spec->r8art = &(CGameInfo::mainObj->arth->artifacts[artid]);
break;
}
case 9:
{
int spellid = bufor[i]; ++i;
spec->r9spell = &(CGameInfo::mainObj->spellh->spells[spellid]);
break;
}
case 10:
{
int creid = readNormalNr(i, 2); i+=2;
spec->r10creature = &(CGameInfo::mainObj->creh->creatures[creid]);
spec->r10amount = readNormalNr(i, 2); i+=2;
break;
}
}// end of internal switch
i+=2;
nobj.info = spec;
break;
}
case EDefType::WITCHHUT_DEF:
{
CWitchHutObjInfo * spec = new CWitchHutObjInfo;
ist=i; //starting i for loop
for(i; i<ist+4; ++i)
{
unsigned char c = bufor[i];
for(int yy=0; yy<8; ++yy)
{
if((i-ist)*8+yy < CGameInfo::mainObj->abilh->abilities.size())
{
if(c == (c|((unsigned char)intPow(2, yy))))
spec->allowedAbilities.push_back(&(CGameInfo::mainObj->abilh->abilities[(i-ist)*8+yy]));
}
}
}
nobj.info = spec;
break;
}
case EDefType::SCHOLAR_DEF:
{
CScholarObjInfo * spec = new CScholarObjInfo;
spec->bonusType = bufor[i]; ++i;
switch(spec->bonusType)
{
case 0xff:
++i;
break;
case 0:
spec->r0type = bufor[i]; ++i;
break;
case 1:
spec->r1 = &(CGameInfo::mainObj->abilh->abilities[bufor[i]]); ++i;
break;
case 2:
spec->r2 = &(CGameInfo::mainObj->spellh->spells[bufor[i]]); ++i;
break;
}
i+=6;
nobj.info = spec;
break;
}
case EDefType::GARRISON_DEF:
{
CGarrisonObjInfo * spec = new CGarrisonObjInfo;
spec->player = bufor[i]; ++i;
i+=3;
spec->units = readCreatureSet(i); i+=28;
spec->movableUnits = bufor[i]; ++i;
i+=8;
nobj.info = spec;
break;
}
case EDefType::ARTIFACT_DEF:
{
CArtifactObjInfo * spec = new CArtifactObjInfo;
bool areSettings = bufor[i]; ++i;
if(areSettings)
{
int messLength = readNormalNr(i, 4); i+=4;
for(int hh=0; hh<messLength; ++hh)
{
spec->message += bufor[i]; ++i;
}
bool areGuards = bufor[i]; ++i;
if(areGuards)
{
spec->areGuards = true;
spec->guards = readCreatureSet(i);
}
else
spec->areGuards = false;
}
nobj.info = spec;
break;
}
case EDefType::RESOURCE_DEF:
{
CResourceObjInfo * spec = new CResourceObjInfo;
bool isMessGuard = bufor[i]; ++i;
if(isMessGuard)
{
int messLength = readNormalNr(i); i+=4;
for(int mm=0; mm<messLength; ++mm)
{
spec->message+=bufor[i]; ++i;
}
spec->areGuards = bufor[i]; ++i;
if(spec->areGuards)
{
spec->guards = readCreatureSet(i); i+=28;
}
i+=4;
}
else
{
spec->areGuards = false;
}
spec->amount = readNormalNr(i); i+=4;
i+=4;
nobj.info = spec;
break;
}
@ -1014,27 +1183,31 @@ EDefType CAmbarCendamo::getDefType(DefInfo &a)
switch(a.bytes[16])
{
case 5:
return EDefType::ARTIFACT_DEF;
return EDefType::ARTIFACT_DEF; //handled
case 26:
return EDefType::EVENTOBJ_DEF;
return EDefType::EVENTOBJ_DEF; //handled
case 33:
return EDefType::GARRISON_DEF;
return EDefType::GARRISON_DEF; //handled
case 34:
return EDefType::HERO_DEF;
return EDefType::HERO_DEF; //handled
case 54:
return EDefType::CREATURES_DEF;
return EDefType::CREATURES_DEF; //handled
case 59:
return EDefType::SIGN_DEF;
return EDefType::SIGN_DEF; //handled
case 79:
return EDefType::RESOURCE_DEF;
return EDefType::RESOURCE_DEF; //handled
case 81:
return EDefType::SCHOLAR_DEF; //handled
case 83:
return EDefType::SEERHUT_DEF;
return EDefType::SEERHUT_DEF; //handled
case 91:
return EDefType::SIGN_DEF;
return EDefType::SIGN_DEF; //handled
case 98:
return EDefType::TOWN_DEF;
case 113:
return EDefType::WITCHHUT_DEF; //handled
case 219:
return EDefType::GARRISON_DEF;
return EDefType::GARRISON_DEF; //handled
default:
return EDefType::TERRAINOBJ_DEF;
}

View File

@ -10,7 +10,7 @@
#include "CSemiDefHandler.h"
#include "CCreatureHandler.h"
enum EDefType {TOWN_DEF, HERO_DEF, CREATURES_DEF, SEERHUT_DEF, RESOURCE_DEF, TERRAINOBJ_DEF, EVENTOBJ_DEF, SIGN_DEF, GARRISON_DEF, ARTIFACT_DEF};
enum EDefType {TOWN_DEF, HERO_DEF, CREATURES_DEF, SEERHUT_DEF, RESOURCE_DEF, TERRAINOBJ_DEF, EVENTOBJ_DEF, SIGN_DEF, GARRISON_DEF, ARTIFACT_DEF, WITCHHUT_DEF, SCHOLAR_DEF};
class CAmbarCendamo
{

View File

@ -108,6 +108,74 @@ public:
int m9player; //number; from 0 to 7
std::string firstVisitText, nextVisitText, completedText;
char rewardType; //type of reward: 0 - no reward; 1 - experience; 2 - mana points; 3 - morale bonus; 4 - luck bonus; 5 - resources; 6 - main ability bonus (attak, defence etd.); 7 - secondary ability gain; 8 - artifact; 9 - spell; 10 - creature
//for reward 1
int r1exp;
//for reward 2
int r2mana;
//for reward 3
int r3morale;
//for reward 4
int r4luck;
//for reward 5
unsigned char r5type; //0 - wood, 1 - mercury, 2 - ore, 3 - sulfur, 4 - crystal, 5 - gems, 6 - gold
int r5amount;
//for reward 6
unsigned char r6type; //0 - attack, 1 - defence, 2 - power, 3 - knowledge
int r6amount;
//for reward 7
CAbility * r7ability;
unsigned char r7level; //1 - basic, 2 - advanced, 3 - expert
//for reward 8
CArtifact * r8art;
//for reward 9
CSpell * r9spell;
//for reward 10
CCreature * r10creature;
int r10amount;
};
class CWitchHutObjInfo : public CSpecObjInfo
{
public:
std::vector<CAbility *> allowedAbilities;
};
class CScholarObjInfo : public CSpecObjInfo
{
public:
unsigned char bonusType; //255 - random, 0 - primary skill, 1 - secondary skill, 2 - spell
unsigned char r0type;
CAbility * r1;
CSpell * r2;
};
class CGarrisonObjInfo : public CSpecObjInfo
{
public:
unsigned char player; //255 - nobody; 0 - 7 - players
CCreatureSet units;
bool movableUnits; //if true, units can be moved
};
class CArtifactObjInfo : public CSpecObjInfo
{
public:
bool areGuards;
std::string message;
CCreatureSet guards;
};
class CResourceObjInfo : public CSpecObjInfo
{
public:
bool randomAmount;
int amount; //if not random
bool areGuards;
CCreatureSet guards;
std::string message;
};
class CObject //typical object that can be encountered on a map