mirror of
https://github.com/vcmi/vcmi.git
synced 2025-02-03 13:01:33 +02:00
Merge branch 'develop' of https://github.com/vcmi/vcmi into develop
This commit is contained in:
commit
1f4bc0f2e4
@ -19,6 +19,8 @@ RANDOM MAP GENERATOR:
|
||||
* Changed fractalization algorithm so it can create cycles
|
||||
* Zones will not have straight paths anymore, they are totally random
|
||||
* 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
|
||||
GENERAL:
|
||||
|
@ -647,6 +647,8 @@ void CPlayerInterface::battleStart(const CCreatureSet *army1, const CCreatureSet
|
||||
autofightingAI->battleStart(army1, army2, int3(0,0,0), hero1, hero2, side);
|
||||
isAutoFightOn = true;
|
||||
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
|
||||
@ -843,6 +845,7 @@ void CPlayerInterface::battleEnd(const BattleResult *br)
|
||||
isAutoFightOn = false;
|
||||
cb->unregisterBattleInterface(autofightingAI);
|
||||
autofightingAI.reset();
|
||||
adventureInt->quickCombatUnlock();
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
int3 CTerrainRect::whichTileIsIt(const int & x, const int & y)
|
||||
int3 CTerrainRect::whichTileIsIt(const int x, const int y)
|
||||
{
|
||||
int3 ret;
|
||||
ret.x = adventureInt->position.x + ((GH.current->motion.x-CGI->mh->offsetX-pos.x)/32);
|
||||
ret.y = adventureInt->position.y + ((GH.current->motion.y-CGI->mh->offsetY-pos.y)/32);
|
||||
ret.x = adventureInt->position.x + ((x-CGI->mh->offsetX-pos.x)/32);
|
||||
ret.y = adventureInt->position.y + ((y-CGI->mh->offsetY-pos.y)/32);
|
||||
ret.z = adventureInt->position.z;
|
||||
return ret;
|
||||
}
|
||||
|
||||
int3 CTerrainRect::whichTileIsIt()
|
||||
{
|
||||
if(GH.current)
|
||||
return whichTileIsIt(GH.current->motion.x,GH.current->motion.y);
|
||||
else
|
||||
return int3(-1);
|
||||
}
|
||||
|
||||
int3 CTerrainRect::tileCountOnScreen()
|
||||
@ -1704,6 +1707,18 @@ void CAdvMapInt::adjustActiveness(bool aiTurnStart)
|
||||
activate();
|
||||
}
|
||||
|
||||
void CAdvMapInt::quickCombatLock()
|
||||
{
|
||||
if(!duringAITurn)
|
||||
deactivate();
|
||||
}
|
||||
|
||||
void CAdvMapInt::quickCombatUnlock()
|
||||
{
|
||||
if(!duringAITurn)
|
||||
activate();
|
||||
}
|
||||
|
||||
void CAdvMapInt::changeMode(EAdvMapMode newMode, float newScale /* = 0.4f */)
|
||||
{
|
||||
if (mode != newMode)
|
||||
|
@ -74,7 +74,7 @@ public:
|
||||
void showAll(SDL_Surface * to) override;
|
||||
void showAnim(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
|
||||
/// @returns number of visible tiles on screen respecting current map scaling
|
||||
int3 tileCountOnScreen();
|
||||
@ -224,6 +224,8 @@ public:
|
||||
void aiTurnStarted();
|
||||
|
||||
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 tileHovered(const int3 &mapPos);
|
||||
void tileRClicked(const int3 &mapPos);
|
||||
|
@ -1658,7 +1658,7 @@ void CGameState::initStartingBonus()
|
||||
switch(scenarioOps->playerInfos[elem.first].bonus)
|
||||
{
|
||||
case PlayerSettings::GOLD:
|
||||
elem.second.resources[Res::GOLD] += rand.nextInt(500, 1000);
|
||||
elem.second.resources[Res::GOLD] += rand.nextInt(5, 10) * 100;
|
||||
break;
|
||||
case PlayerSettings::RESOURCE:
|
||||
{
|
||||
|
@ -299,6 +299,16 @@ void CObjectClassesHandler::afterLoadFinalization()
|
||||
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
|
||||
|
@ -1246,6 +1246,8 @@ bool CRmgTemplateZone::createTreasurePile(CMapGenerator* gen, int3 &pos, float m
|
||||
for (auto treasure : treasures)
|
||||
{
|
||||
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);
|
||||
}
|
||||
if (addMonster(gen, guardPos, currentValue, false))
|
||||
@ -2668,8 +2670,7 @@ void CRmgTemplateZone::addAllPossibleObjects(CMapGenerator* gen)
|
||||
|
||||
//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 (false) //FIXME: Seer Huts are bugged
|
||||
if (questArtZone) //we won't be placing seer huts if there is no zone left to place arties
|
||||
{
|
||||
static const int genericSeerHuts = 8;
|
||||
int seerHutsPerType = 0;
|
||||
@ -2726,6 +2727,9 @@ void CRmgTemplateZone::addAllPossibleObjects(CMapGenerator* gen)
|
||||
obj->quest->missionType = CQuest::MISSION_ART;
|
||||
ArtifactID artid = *RandomGeneratorUtil::nextItem(gen->getQuestArtsRemaning(), gen->rand);
|
||||
obj->quest->m5arts.push_back(artid);
|
||||
obj->quest->lastDay = -1;
|
||||
obj->quest->isCustomFirst = obj->quest->isCustomNext = obj->quest->isCustomComplete = false;
|
||||
|
||||
gen->banQuestArt(artid);
|
||||
gen->map->addQuest(obj);
|
||||
|
||||
@ -2762,6 +2766,9 @@ void CRmgTemplateZone::addAllPossibleObjects(CMapGenerator* gen)
|
||||
obj->quest->missionType = CQuest::MISSION_ART;
|
||||
ArtifactID artid = *RandomGeneratorUtil::nextItem(gen->getQuestArtsRemaning(), gen->rand);
|
||||
obj->quest->m5arts.push_back(artid);
|
||||
obj->quest->lastDay = -1;
|
||||
obj->quest->isCustomFirst = obj->quest->isCustomNext = obj->quest->isCustomComplete = false;
|
||||
|
||||
gen->banQuestArt(artid);
|
||||
gen->map->addQuest(obj);
|
||||
|
||||
@ -2784,6 +2791,9 @@ void CRmgTemplateZone::addAllPossibleObjects(CMapGenerator* gen)
|
||||
obj->quest->missionType = CQuest::MISSION_ART;
|
||||
ArtifactID artid = *RandomGeneratorUtil::nextItem(gen->getQuestArtsRemaning(), gen->rand);
|
||||
obj->quest->m5arts.push_back(artid);
|
||||
obj->quest->lastDay = -1;
|
||||
obj->quest->isCustomFirst = obj->quest->isCustomNext = obj->quest->isCustomComplete = false;
|
||||
|
||||
gen->banQuestArt(artid);
|
||||
gen->map->addQuest(obj);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user