mirror of
https://github.com/vcmi/vcmi.git
synced 2025-07-13 01:20:34 +02:00
Merge branch 'develop' of https://github.com/vcmi/vcmi into develop
This commit is contained in:
@ -19,6 +19,8 @@ RANDOM MAP GENERATOR:
|
|||||||
* Changed fractalization algorithm so it can create cycles
|
* Changed fractalization algorithm so it can create cycles
|
||||||
* Zones will not have straight paths anymore, they are totally random
|
* Zones will not have straight paths anymore, they are totally random
|
||||||
* Added Thieves Guild random object (1 per zone)
|
* Added Thieves Guild random object (1 per zone)
|
||||||
|
* Added Seer Huts with quests that match OH3
|
||||||
|
* RMG will guarantee at least 100 pairs of Monoliths are available even if there are not enough different defs
|
||||||
|
|
||||||
0.97 -> 0.98
|
0.97 -> 0.98
|
||||||
GENERAL:
|
GENERAL:
|
||||||
|
@ -647,6 +647,8 @@ void CPlayerInterface::battleStart(const CCreatureSet *army1, const CCreatureSet
|
|||||||
autofightingAI->battleStart(army1, army2, int3(0,0,0), hero1, hero2, side);
|
autofightingAI->battleStart(army1, army2, int3(0,0,0), hero1, hero2, side);
|
||||||
isAutoFightOn = true;
|
isAutoFightOn = true;
|
||||||
cb->registerBattleInterface(autofightingAI);
|
cb->registerBattleInterface(autofightingAI);
|
||||||
|
// Player shouldn't be able to move on adventure map if quick combat is going
|
||||||
|
adventureInt->quickCombatLock();
|
||||||
}
|
}
|
||||||
|
|
||||||
//Don't wait for dialogs when we are non-active hot-seat player
|
//Don't wait for dialogs when we are non-active hot-seat player
|
||||||
@ -843,6 +845,7 @@ void CPlayerInterface::battleEnd(const BattleResult *br)
|
|||||||
isAutoFightOn = false;
|
isAutoFightOn = false;
|
||||||
cb->unregisterBattleInterface(autofightingAI);
|
cb->unregisterBattleInterface(autofightingAI);
|
||||||
autofightingAI.reset();
|
autofightingAI.reset();
|
||||||
|
adventureInt->quickCombatUnlock();
|
||||||
|
|
||||||
if(!battleInt)
|
if(!battleInt)
|
||||||
{
|
{
|
||||||
|
@ -322,18 +322,21 @@ void CTerrainRect::showAnim(SDL_Surface * to)
|
|||||||
show(to); // currently the same; maybe we should pass some flag to map handler so it redraws ONLY tiles that need redraw instead of full
|
show(to); // currently the same; maybe we should pass some flag to map handler so it redraws ONLY tiles that need redraw instead of full
|
||||||
}
|
}
|
||||||
|
|
||||||
int3 CTerrainRect::whichTileIsIt(const int & x, const int & y)
|
int3 CTerrainRect::whichTileIsIt(const int x, const int y)
|
||||||
{
|
{
|
||||||
int3 ret;
|
int3 ret;
|
||||||
ret.x = adventureInt->position.x + ((GH.current->motion.x-CGI->mh->offsetX-pos.x)/32);
|
ret.x = adventureInt->position.x + ((x-CGI->mh->offsetX-pos.x)/32);
|
||||||
ret.y = adventureInt->position.y + ((GH.current->motion.y-CGI->mh->offsetY-pos.y)/32);
|
ret.y = adventureInt->position.y + ((y-CGI->mh->offsetY-pos.y)/32);
|
||||||
ret.z = adventureInt->position.z;
|
ret.z = adventureInt->position.z;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int3 CTerrainRect::whichTileIsIt()
|
int3 CTerrainRect::whichTileIsIt()
|
||||||
{
|
{
|
||||||
return whichTileIsIt(GH.current->motion.x,GH.current->motion.y);
|
if(GH.current)
|
||||||
|
return whichTileIsIt(GH.current->motion.x,GH.current->motion.y);
|
||||||
|
else
|
||||||
|
return int3(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
int3 CTerrainRect::tileCountOnScreen()
|
int3 CTerrainRect::tileCountOnScreen()
|
||||||
@ -1704,6 +1707,18 @@ void CAdvMapInt::adjustActiveness(bool aiTurnStart)
|
|||||||
activate();
|
activate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CAdvMapInt::quickCombatLock()
|
||||||
|
{
|
||||||
|
if(!duringAITurn)
|
||||||
|
deactivate();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CAdvMapInt::quickCombatUnlock()
|
||||||
|
{
|
||||||
|
if(!duringAITurn)
|
||||||
|
activate();
|
||||||
|
}
|
||||||
|
|
||||||
void CAdvMapInt::changeMode(EAdvMapMode newMode, float newScale /* = 0.4f */)
|
void CAdvMapInt::changeMode(EAdvMapMode newMode, float newScale /* = 0.4f */)
|
||||||
{
|
{
|
||||||
if (mode != newMode)
|
if (mode != newMode)
|
||||||
|
@ -74,7 +74,7 @@ public:
|
|||||||
void showAll(SDL_Surface * to) override;
|
void showAll(SDL_Surface * to) override;
|
||||||
void showAnim(SDL_Surface * to);
|
void showAnim(SDL_Surface * to);
|
||||||
void showPath(const SDL_Rect * extRect, SDL_Surface * to);
|
void showPath(const SDL_Rect * extRect, SDL_Surface * to);
|
||||||
int3 whichTileIsIt(const int & x, const int & y); //x,y are cursor position
|
int3 whichTileIsIt(const int x, const int y); //x,y are cursor position
|
||||||
int3 whichTileIsIt(); //uses current cursor pos
|
int3 whichTileIsIt(); //uses current cursor pos
|
||||||
/// @returns number of visible tiles on screen respecting current map scaling
|
/// @returns number of visible tiles on screen respecting current map scaling
|
||||||
int3 tileCountOnScreen();
|
int3 tileCountOnScreen();
|
||||||
@ -224,6 +224,8 @@ public:
|
|||||||
void aiTurnStarted();
|
void aiTurnStarted();
|
||||||
|
|
||||||
void adjustActiveness(bool aiTurnStart); //should be called every time at AI/human turn transition; blocks GUI during AI turn
|
void adjustActiveness(bool aiTurnStart); //should be called every time at AI/human turn transition; blocks GUI during AI turn
|
||||||
|
void quickCombatLock(); //should be called when quick battle started
|
||||||
|
void quickCombatUnlock();
|
||||||
void tileLClicked(const int3 &mapPos);
|
void tileLClicked(const int3 &mapPos);
|
||||||
void tileHovered(const int3 &mapPos);
|
void tileHovered(const int3 &mapPos);
|
||||||
void tileRClicked(const int3 &mapPos);
|
void tileRClicked(const int3 &mapPos);
|
||||||
|
@ -1658,7 +1658,7 @@ void CGameState::initStartingBonus()
|
|||||||
switch(scenarioOps->playerInfos[elem.first].bonus)
|
switch(scenarioOps->playerInfos[elem.first].bonus)
|
||||||
{
|
{
|
||||||
case PlayerSettings::GOLD:
|
case PlayerSettings::GOLD:
|
||||||
elem.second.resources[Res::GOLD] += rand.nextInt(500, 1000);
|
elem.second.resources[Res::GOLD] += rand.nextInt(5, 10) * 100;
|
||||||
break;
|
break;
|
||||||
case PlayerSettings::RESOURCE:
|
case PlayerSettings::RESOURCE:
|
||||||
{
|
{
|
||||||
|
@ -299,6 +299,16 @@ void CObjectClassesHandler::afterLoadFinalization()
|
|||||||
logGlobal->warnStream() << "No templates found for " << entry.first << ":" << obj.first;
|
logGlobal->warnStream() << "No templates found for " << entry.first << ":" << obj.first;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//duplicate existing two-way portals to make reserve for RMG
|
||||||
|
auto& portalVec = objects[Obj::MONOLITH_TWO_WAY]->objects;
|
||||||
|
size_t portalCount = portalVec.size();
|
||||||
|
size_t currentIndex = portalCount;
|
||||||
|
while (portalVec.size() < 100)
|
||||||
|
{
|
||||||
|
portalVec[currentIndex] = portalVec[currentIndex % portalCount];
|
||||||
|
currentIndex++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string CObjectClassesHandler::getObjectName(si32 type) const
|
std::string CObjectClassesHandler::getObjectName(si32 type) const
|
||||||
|
@ -1246,6 +1246,8 @@ bool CRmgTemplateZone::createTreasurePile(CMapGenerator* gen, int3 &pos, float m
|
|||||||
for (auto treasure : treasures)
|
for (auto treasure : treasures)
|
||||||
{
|
{
|
||||||
int3 visitableOffset = treasure.second->getVisitableOffset();
|
int3 visitableOffset = treasure.second->getVisitableOffset();
|
||||||
|
if (treasure.second->ID == Obj::SEER_HUT) //FIXME: find generic solution or figure out why Seer Hut doesn't behave correctly
|
||||||
|
visitableOffset.x += 1;
|
||||||
placeObject(gen, treasure.second, treasure.first + visitableOffset);
|
placeObject(gen, treasure.second, treasure.first + visitableOffset);
|
||||||
}
|
}
|
||||||
if (addMonster(gen, guardPos, currentValue, false))
|
if (addMonster(gen, guardPos, currentValue, false))
|
||||||
@ -2668,8 +2670,7 @@ void CRmgTemplateZone::addAllPossibleObjects(CMapGenerator* gen)
|
|||||||
|
|
||||||
//seer huts with creatures or generic rewards
|
//seer huts with creatures or generic rewards
|
||||||
|
|
||||||
//if (questArtZone) //we won't be placing seer huts if there is no zone left to place arties
|
if (questArtZone) //we won't be placing seer huts if there is no zone left to place arties
|
||||||
if (false) //FIXME: Seer Huts are bugged
|
|
||||||
{
|
{
|
||||||
static const int genericSeerHuts = 8;
|
static const int genericSeerHuts = 8;
|
||||||
int seerHutsPerType = 0;
|
int seerHutsPerType = 0;
|
||||||
@ -2726,6 +2727,9 @@ void CRmgTemplateZone::addAllPossibleObjects(CMapGenerator* gen)
|
|||||||
obj->quest->missionType = CQuest::MISSION_ART;
|
obj->quest->missionType = CQuest::MISSION_ART;
|
||||||
ArtifactID artid = *RandomGeneratorUtil::nextItem(gen->getQuestArtsRemaning(), gen->rand);
|
ArtifactID artid = *RandomGeneratorUtil::nextItem(gen->getQuestArtsRemaning(), gen->rand);
|
||||||
obj->quest->m5arts.push_back(artid);
|
obj->quest->m5arts.push_back(artid);
|
||||||
|
obj->quest->lastDay = -1;
|
||||||
|
obj->quest->isCustomFirst = obj->quest->isCustomNext = obj->quest->isCustomComplete = false;
|
||||||
|
|
||||||
gen->banQuestArt(artid);
|
gen->banQuestArt(artid);
|
||||||
gen->map->addQuest(obj);
|
gen->map->addQuest(obj);
|
||||||
|
|
||||||
@ -2762,6 +2766,9 @@ void CRmgTemplateZone::addAllPossibleObjects(CMapGenerator* gen)
|
|||||||
obj->quest->missionType = CQuest::MISSION_ART;
|
obj->quest->missionType = CQuest::MISSION_ART;
|
||||||
ArtifactID artid = *RandomGeneratorUtil::nextItem(gen->getQuestArtsRemaning(), gen->rand);
|
ArtifactID artid = *RandomGeneratorUtil::nextItem(gen->getQuestArtsRemaning(), gen->rand);
|
||||||
obj->quest->m5arts.push_back(artid);
|
obj->quest->m5arts.push_back(artid);
|
||||||
|
obj->quest->lastDay = -1;
|
||||||
|
obj->quest->isCustomFirst = obj->quest->isCustomNext = obj->quest->isCustomComplete = false;
|
||||||
|
|
||||||
gen->banQuestArt(artid);
|
gen->banQuestArt(artid);
|
||||||
gen->map->addQuest(obj);
|
gen->map->addQuest(obj);
|
||||||
|
|
||||||
@ -2784,6 +2791,9 @@ void CRmgTemplateZone::addAllPossibleObjects(CMapGenerator* gen)
|
|||||||
obj->quest->missionType = CQuest::MISSION_ART;
|
obj->quest->missionType = CQuest::MISSION_ART;
|
||||||
ArtifactID artid = *RandomGeneratorUtil::nextItem(gen->getQuestArtsRemaning(), gen->rand);
|
ArtifactID artid = *RandomGeneratorUtil::nextItem(gen->getQuestArtsRemaning(), gen->rand);
|
||||||
obj->quest->m5arts.push_back(artid);
|
obj->quest->m5arts.push_back(artid);
|
||||||
|
obj->quest->lastDay = -1;
|
||||||
|
obj->quest->isCustomFirst = obj->quest->isCustomNext = obj->quest->isCustomComplete = false;
|
||||||
|
|
||||||
gen->banQuestArt(artid);
|
gen->banQuestArt(artid);
|
||||||
gen->map->addQuest(obj);
|
gen->map->addQuest(obj);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user