From be8c9c837819b3892ebe1fa41321b567d3538244 Mon Sep 17 00:00:00 2001 From: DjWarmonger Date: Tue, 15 Jul 2014 14:38:05 +0200 Subject: [PATCH] Correct strength of zone guards. Logs for guard strength. --- lib/rmg/CMapGenerator.cpp | 2 +- lib/rmg/CRmgTemplateZone.cpp | 19 +++++++++++-------- lib/rmg/CRmgTemplateZone.h | 6 +++--- 3 files changed, 15 insertions(+), 12 deletions(-) diff --git a/lib/rmg/CMapGenerator.cpp b/lib/rmg/CMapGenerator.cpp index 0189de2e7..1501b19d2 100644 --- a/lib/rmg/CMapGenerator.cpp +++ b/lib/rmg/CMapGenerator.cpp @@ -259,7 +259,7 @@ void CMapGenerator::createConnections() if (guardPos.valid()) { setOccupied (guardPos, ETileType::FREE); //just in case monster is too weak to spawn - zoneA->addMonster (this, guardPos, connection.getGuardStrength(), false); + zoneA->addMonster (this, guardPos, connection.getGuardStrength(), false, true); //zones can make paths only in their own area zoneA->crunchPath (this, guardPos, posA, zoneA->getId(), zoneA->getFreePaths()); //make connection towards our zone center zoneB->crunchPath (this, guardPos, posB, zoneB->getId(), zoneB->getFreePaths()); //make connection towards other zone center diff --git a/lib/rmg/CRmgTemplateZone.cpp b/lib/rmg/CRmgTemplateZone.cpp index 5718bbb15..2d4e180c7 100644 --- a/lib/rmg/CRmgTemplateZone.cpp +++ b/lib/rmg/CRmgTemplateZone.cpp @@ -567,13 +567,13 @@ void CRmgTemplateZone::addRequiredObject(CGObjectInstance * obj, si32 strength) requiredObjects.push_back(std::make_pair(obj, strength)); } -bool CRmgTemplateZone::addMonster(CMapGenerator* gen, int3 &pos, si32 strength, bool clearSurroundingTiles) +bool CRmgTemplateZone::addMonster(CMapGenerator* gen, int3 &pos, si32 strength, bool clearSurroundingTiles, bool zoneGuard) { //precalculate actual (randomized) monster strength based on this post //http://forum.vcmi.eu/viewtopic.php?p=12426#12426 int mapMonsterStrength = gen->mapGenOptions->getMonsterStrength(); - int monsterStrength = zoneMonsterStrength + mapMonsterStrength - 1; //array index from 0 to 4 + int monsterStrength = (zoneGuard ? 0 : zoneMonsterStrength) + mapMonsterStrength - 1; //array index from 0 to 4 static const int value1[] = {2500, 1500, 1000, 500, 0}; static const int value2[] = {7500, 7500, 7500, 5000, 5000}; static const float multiplier1[] = {0.5, 0.75, 1.0, 1.5, 1.5}; @@ -619,6 +619,9 @@ bool CRmgTemplateZone::addMonster(CMapGenerator* gen, int3 &pos, si32 strength, //will be set during initialization guard->putStack(SlotID(0), hlp); + logGlobal->traceStream() << boost::format ("Adding stack of %d %s. Map monster strenght %d, zone monster strength %d, base monster value %d") + % amount % VLC->creh->creatures[creId]->namePl % mapMonsterStrength % zoneMonsterStrength % strength; + placeObject(gen, guard, pos); if (clearSurroundingTiles) @@ -1054,8 +1057,8 @@ bool CRmgTemplateZone::createRequiredObjects(CMapGenerator* gen) } logGlobal->traceStream() << "Place found"; - placeObject(gen, obj.first, pos); - guardObject (gen, obj.first, obj.second); + placeObject (gen, obj.first, pos); + guardObject (gen, obj.first, obj.second, (obj.first->ID == Obj::MONOLITH_TWO_WAY)); } return true; } @@ -1363,10 +1366,10 @@ void CRmgTemplateZone::placeObject(CMapGenerator* gen, CGObjectInstance* object, } } -void CRmgTemplateZone::placeAndGuardObject(CMapGenerator* gen, CGObjectInstance* object, const int3 &pos, si32 str) +void CRmgTemplateZone::placeAndGuardObject(CMapGenerator* gen, CGObjectInstance* object, const int3 &pos, si32 str, bool zoneGuard) { placeObject(gen, object, pos); - guardObject(gen, object, str); + guardObject(gen, object, str, zoneGuard); } std::vector CRmgTemplateZone::getAccessibleOffsets (CMapGenerator* gen, CGObjectInstance* object) @@ -1395,7 +1398,7 @@ std::vector CRmgTemplateZone::getAccessibleOffsets (CMapGenerator* gen, CG return tiles; } -bool CRmgTemplateZone::guardObject(CMapGenerator* gen, CGObjectInstance* object, si32 str) +bool CRmgTemplateZone::guardObject(CMapGenerator* gen, CGObjectInstance* object, si32 str, bool zoneGuard) { logGlobal->traceStream() << boost::format("Guard object at %s") % object->pos(); @@ -1418,7 +1421,7 @@ bool CRmgTemplateZone::guardObject(CMapGenerator* gen, CGObjectInstance* object, return false; } - if (addMonster (gen, guardTile, str, false)) //do not place obstacles around unguarded object + if (addMonster (gen, guardTile, str, false, zoneGuard)) //do not place obstacles around unguarded object { for (auto pos : tiles) { diff --git a/lib/rmg/CRmgTemplateZone.h b/lib/rmg/CRmgTemplateZone.h index f582884b5..39987a442 100644 --- a/lib/rmg/CRmgTemplateZone.h +++ b/lib/rmg/CRmgTemplateZone.h @@ -145,7 +145,7 @@ public: void discardDistantTiles (CMapGenerator* gen, float distance); void addRequiredObject(CGObjectInstance * obj, si32 guardStrength=0); - bool addMonster(CMapGenerator* gen, int3 &pos, si32 strength, bool clearSurroundingTiles = true); + bool addMonster(CMapGenerator* gen, int3 &pos, si32 strength, bool clearSurroundingTiles = true, bool zoneGuard = false); bool createTreasurePile (CMapGenerator* gen, int3 &pos); bool fill (CMapGenerator* gen); bool placeMines (CMapGenerator* gen); @@ -170,7 +170,7 @@ public: ObjectInfo getRandomObject (CMapGenerator* gen, CTreasurePileInfo &info, ui32 value); - void placeAndGuardObject(CMapGenerator* gen, CGObjectInstance* object, const int3 &pos, si32 str); + void placeAndGuardObject(CMapGenerator* gen, CGObjectInstance* object, const int3 &pos, si32 str, bool zoneGuard = false); private: //template info @@ -213,5 +213,5 @@ private: bool canObstacleBePlacedHere(CMapGenerator* gen, ObjectTemplate &temp, int3 &pos); void checkAndPlaceObject(CMapGenerator* gen, CGObjectInstance* object, const int3 &pos); void placeObject(CMapGenerator* gen, CGObjectInstance* object, const int3 &pos); - bool guardObject(CMapGenerator* gen, CGObjectInstance* object, si32 str); + bool guardObject(CMapGenerator* gen, CGObjectInstance* object, si32 str, bool zoneGuard = false); };