浏览代码

Implemented mod-friendly loading of town building icons for campaigns

Ivan Savenko 5 月之前
父节点
当前提交
0fa83c0478

+ 14 - 9
client/lobby/CBonusSelection.cpp

@@ -48,7 +48,6 @@
 #include "../../lib/campaign/CampaignState.h"
 #include "../../lib/entities/artifact/CArtifact.h"
 #include "../../lib/entities/building/CBuilding.h"
-#include "../../lib/entities/building/CBuildingHandler.h"
 #include "../../lib/entities/faction/CFaction.h"
 #include "../../lib/entities/faction/CTown.h"
 #include "../../lib/entities/faction/CTownHandler.h"
@@ -60,6 +59,7 @@
 #include "../../lib/mapping/CMapInfo.h"
 #include "../../lib/mapping/CMapService.h"
 #include "../../lib/texts/CGeneralTextHandler.h"
+#include "mapping/MapFormatSettings.h"
 
 std::shared_ptr<CampaignState> CBonusSelection::getCampaign()
 {
@@ -219,16 +219,21 @@ void CBonusSelection::createBonusesIcons()
 				}
 				assert(faction.hasValue());
 
-				BuildingID buildID;
-				if(getCampaign()->formatVCMI())
-					buildID = bonusValue.building;
-				else
-					buildID = CBuildingHandler::campToERMU(bonusValue.building, faction, std::set<BuildingID>());
-				picName = graphics->ERMUtoPicture[faction.getNum()][buildID.getNum()];
+				BuildingID buildID = bonusValue.buildingDecoded;
+				if (bonusValue.buildingH3M.hasValue())
+				{
+					auto mapping = LIBRARY->mapFormat->getMapping(getCampaign()->getFormat());
+					buildID = mapping.remapBuilding(faction, bonusValue.buildingH3M);
+				}
+
+				for (const auto & townStructure : faction.toFaction()->town->clientInfo.structures)
+					if (townStructure->building && townStructure->building->bid == buildID)
+						picName = townStructure->campaignBonus.getOriginalName();
+
 				picNumber = -1;
 
-				if(vstd::contains((*LIBRARY->townh)[faction]->town->buildings, buildID))
-					desc.appendTextID((*LIBRARY->townh)[faction]->town->buildings.find(buildID)->second->getNameTextID());
+				if(vstd::contains(faction.toFaction()->town->buildings, buildID))
+					desc.appendTextID(faction.toFaction()->town->buildings.find(buildID)->second->getNameTextID());
 				break;
 			}
 			case CampaignBonusType::ARTIFACT:

+ 0 - 19
client/render/Graphics.cpp

@@ -118,7 +118,6 @@ Graphics::Graphics()
 {
 	loadPaletteAndColors();
 	initializeBattleGraphics();
-	loadErmuToPicture();
 
 	//(!) do not load any CAnimation here
 }
@@ -153,21 +152,3 @@ void Graphics::setPlayerFlagColor(SDL_Palette * targetPalette, PlayerColor playe
 		SDL_SetPaletteColors(targetPalette, &color, 5, 1);
 	}
 }
-
-void Graphics::loadErmuToPicture()
-{
-	//loading ERMU to picture
-	const JsonNode config(JsonPath::builtin("config/ERMU_to_picture.json"));
-	int etp_idx = 0;
-	for(const JsonNode &etp : config["ERMU_to_picture"].Vector()) {
-		int idx = 0;
-		for(const JsonNode &n : etp.Vector()) {
-			ERMUtoPicture[idx][etp_idx] = n.String();
-			idx ++;
-		}
-		assert (idx == std::size(ERMUtoPicture));
-
-		etp_idx ++;
-	}
-	assert (etp_idx == 44);
-}

+ 0 - 3
client/render/Graphics.h

@@ -20,7 +20,6 @@ class Graphics
 {
 	void initializeBattleGraphics();
 	void loadPaletteAndColors();
-	void loadErmuToPicture();
 
 public:
 	using PlayerPalette = std::array<ColorRGBA, 32>;
@@ -32,8 +31,6 @@ public:
 	PlayerPalette neutralColorPalette;
 	ColorRGBA neutralColor;
 
-	//towns
-	std::map<int, std::string> ERMUtoPicture[GameConstants::F_NUMBER]; //maps building ID to it's picture's name for each town type
 	//for battles
 	std::map< int, std::vector < std::string > > battleACToDef; //maps AC format to vector of appropriate def names
 

+ 3 - 2
client/widgets/CArtifactsOfHeroBase.cpp

@@ -269,12 +269,13 @@ void CArtifactsOfHeroBase::setSlotData(ArtPlacePtr artPlace, const ArtifactPosit
 	artPlace->slot = slot;
 	if(auto slotInfo = curHero->getSlot(slot))
 	{
+		const auto curArt = slotInfo->getArt();
+
 		artPlace->lockSlot(slotInfo->locked);
-		artPlace->setArtifact(slotInfo->getArt()->getTypeId(), slotInfo->getArt()->getScrollSpellID());
+		artPlace->setArtifact(curArt->getTypeId(), curArt->getScrollSpellID());
 		if(slotInfo->locked)
 			return;
 
-		const auto curArt = slotInfo->getArt();
 		// If the artifact has charges, add charges information
 		if(curArt->getType()->isCharged())
 			artPlace->addChargedArtInfo(curArt->getCharges());

+ 0 - 48
config/ERMU_to_picture.json

@@ -1,48 +0,0 @@
-{
-	"ERMU_to_picture": [
-		[ "BoCsMag1.pcx", "BoRMag1.pcx", "BoTGld1.pcx", "BoIMag1.pcx", "BoNmage1.pcx", "BoDmage1.pcx", "BoSmage1.pcx", "BoFmage1.pcx", "BoEgld1.pcx" ],
-		[ "BoCsMag2.pcx", "BoRMag2.pcx", "BoTGld2.pcx", "BoIMag2.pcx", "BoNmage2.pcx", "BoDmage2.pcx", "BoSmage2.pcx", "BoFmage2.pcx", "BoEgld2.pcx" ],
-		[ "BoCsMag3.pcx", "BoRMag3.pcx", "BoTGld3.pcx", "BoIMag3.pcx", "BoNmage3.pcx", "BoDmage3.pcx", "BoSmage3.pcx", "BoFmage3.pcx", "BoEgld3.pcx" ],
-		[ "BoCsMag4.pcx", "BoRMag4.pcx", "BoTGld4.pcx", "BoIMag4.pcx", "BoNmage4.pcx", "BoDmage4.pcx", "BoSmage4.pcx", "BoFmage4.pcx", "BoEgld4.pcx" ],
-		[ "BoCsMag5.pcx", "BoRMag5.pcx", "BoTGld5.pcx", "BoIMag5.pcx", "BoNmage5.pcx", "BoDmage5.pcx", "BoSmage5.pcx", "BoFmage5.pcx", "BoEgld5.pcx" ],
-		[ "BoCsTav1.pcx", "BoRTav.pcx", "BoTTav.pcx", "BoITav.pcx", "BoNtav.pcx", "BoDtav.pcx", "BoStav1.pcx", "BoFtav.pcx", "BoEtav.pcx" ],
-		[ "BoCsDock.pcx", "", "", "", "", "", "", "BoFship.pcx", "BoEship.pcx" ],
-		[ "BoCsCas1.pcx", "BoRCas1.pcx", "BoTCas1.pcx", "BoICas1.pcx", "BoNcast1.pcx", "BoDcas1.pcx", "BoScas1.pcx", "BoFcast1.pcx", "BoEcast1.pcx" ],
-		[ "BoCsCas2.pcx", "BoRCas2.pcx", "BoTCas2.pcx", "BoICas2.pcx", "BoNcast2.pcx", "BoDcas2.pcx", "BoScas2.pcx", "BoFcast2.pcx", "BoEcast2.pcx" ],
-		[ "BoCsCas3.pcx", "BoRCas3.pcx", "BoTCas3.pcx", "BoICas3.pcx", "BoNcast3.pcx", "BoDcas3.pcx", "BoScas3.pcx", "BoFcast3.pcx", "BoEcast3.pcx" ],
-		[ "BoCsHal1.pcx", "BoRHal1.pcx", "BoTHal1.pcx", "BoIHal1.pcx", "BoNhall1.pcx", "BoDhall1.pcx", "BoShall1.pcx", "BoFhall1.pcx", "BoEhall1.pcx" ],
-		[ "BoCsHal2.pcx", "BoRHal2.pcx", "BoTHal2.pcx", "BoIHal2.pcx", "BoNhall2.pcx", "BoDhall2.pcx", "BoShall2.pcx", "BoFhall2.pcx", "BoEhall2.pcx" ],
-		[ "BoCsHal3.pcx", "BoRHal3.pcx", "BoTHal3.pcx", "BoIHal3.pcx", "BoNhall3.pcx", "BoDhall3.pcx", "BoShall3.pcx", "BoFhall3.pcx", "BoEhall3.pcx" ],
-		[ "BoCsHal4.pcx", "BoRHal4.pcx", "BoTHal4.pcx", "BoIHal4.pcx", "BoNhall4.pcx", "BoDhall4.pcx", "BoShall4.pcx", "BoFhall4.pcx", "BoEhall4.pcx" ],
-		[ "BoCsMrk1.pcx", "BoRMrk1.pcx", "BoTMark.pcx", "BoIMrk1.pcx", "BoNmark1.pcx", "BoDmark1.pcx", "BoSmrk1.pcx", "BoFmark1.pcx", "BoEmark1.pcx" ],
-		[ "BoCsMrk2.pcx", "BoRMrk2.pcx", "BoTMarkS.pcx", "BoIMrk2.pcx", "BoNmark2.pcx", "BoDmark2.pcx", "BoSmrk2.pcx", "BoFmark2.pcx", "BoEmarkS.pcx" ],
-		[ "BoCsBlak.pcx", "BoRAid.pcx", "BoTBlack.pcx", "BoIBlak.pcx", "BoNsmith.pcx", "BoDsmith.pcx", "BoSblak1.pcx", "BoFapoth.pcx", "BoEblack.pcx" ],
-		[ "BoCsLite.pcx", "BoRGar1.pcx", "BoTMarkA.pcx", "", "BoNshrod.pcx", "BoDmarkA.pcx", "BoSescap.pcx", "BoFcage.pcx", "BoEmarkA.pcx" ],
-		[ "BoCsGr1H.pcx", "BoRDwf1h.pcx", "BoTGa1H.pcx", "BoIImpH.pcx", "BoNskelH.pcx", "BoDtrogH.pcx", "BoSgob1h.pcx", "BoFgno1h.pcx", "BoDhrd1.pcx" ],
-		[ "BoCsGr2H.pcx", "BoRDwf2h.pcx", "BoTGa2h.pcx", "BoIImp2H.pcx", "", "", "BoSgob2h.pcx", "BoFgno2h.pcx", "BoDhrd2.pcx" ],
-		[ "", "", "", "", "", "", "", "", "" ],
-		[ "BoCsCv2S.pcx", "BoRGar2.pcx", "BoTCasW.pcx", "BoICasB.pcx", "BoNnecro.pcx", "BoDvort.pcx", "BoSmrk1c.pcx", "BoFcastD.pcx", "BoEuniv.pcx" ],
-		[ "BoCsTav2.pcx", "BoRDwf1t.pcx", "BoTGldL.pcx", "BoICasG.pcx", "BoNskelT.pcx", "BoDport.pcx", "BoSblak2.pcx", "BoFcastA.pcx", "" ],
-		[ "", "", "BoTGldW.pcx", "BoIMagO.pcx", "", "BoDacad.pcx", "BoSvahal.pcx", "", "" ],
-		[ "", "BoRTre1h.pcx", "", "BoIHndH.pcx", "", "", "", "", "" ],
-		[ "", "BoRTre2h.pcx", "", "BoIHnd2H.pcx", "", "", "", "", "" ],
-		[ "BoCsHoly.pcx", "BoRHoly.pcx", "BoTHoly.pcx", "BoIHoly.pcx", "BoNholyG.pcx", "BoDholy.pcx", "BoSholy.pcx", "BoFgrail.pcx", "BoEgrail.pcx" ],
-		[ "", "", "", "", "", "", "", "", "" ],
-		[ "", "", "", "", "", "", "", "", "" ],
-		[ "", "", "", "", "", "", "", "", "" ],
-		[ "BoCsPik1.pcx", "BoRCen1.pcx", "BoTGrem1.pcx", "BoIImp1.pcx", "BoNskel1.pcx", "BoDtrog1.pcx", "BoSgob1.pcx", "BoFgnol1.pcx", "BoEdn_0.pcx" ],
-		[ "BoCsCrs1.pcx", "BoRDwf1.pcx", "BoTGar1.pcx", "BoIGog1.pcx", "BoNzomb1.pcx", "BoDharp1.pcx", "BoSwolf1.pcx", "BoFlizr1.pcx", "BoEdn_1.pcx" ],
-		[ "BoCsGr1.pcx", "BoRElf1.pcx", "BoTGolm1.pcx", "BoIHnd1.pcx", "BoNwigh1.pcx", "BoDbeh1.pcx", "BoSorc1.pcx", "BoFfly1.pcx", "BoEdn_2.pcx" ],
-		[ "BoCsSwd1.pcx", "BoRPeg1.pcx", "BoTMag1.pcx", "BoIDmn1.pcx", "BoNvamp1.pcx", "BoDmedu1.pcx", "BoSogre1.pcx", "BoFbas1.pcx", "BoEdn_3.pcx" ],
-		[ "BoCsMon1.pcx", "BoRTre1.pcx", "BoTGen1.pcx", "BoIPit1.pcx", "BoNlich1.pcx", "BoDmino1.pcx", "BoSroc1.pcx", "BoFgorg1.pcx", "BoEdn_4.pcx" ],
-		[ "BoCsCv1.pcx", "BoRUni1.pcx", "BoTNaga1.pcx", "BoIEfr1.pcx", "BoNbkni1.pcx", "BoDmant1.pcx", "BoScyc1.pcx", "BoFwyvr1.pcx", "BoEdn_5.pcx" ],
-		[ "BoCsAng1.pcx", "BoRDra1.pcx", "BoTTit1.pcx", "BoIDvl1.pcx", "BoNbone1.pcx", "BoDdrag1.pcx", "BoSbeh1.pcx", "BoFhydr1.pcx", "BoEdn_6.pcx" ],
-		[ "BoCsPik2.pcx", "BoRCen2.pcx", "BoTGrem2.pcx", "BoIImp2.pcx", "BoNskel2.pcx", "BoDtrog2.pcx", "BoSgob2.pcx", "BoFgnol2.pcx", "BoEup_0.pcx" ],
-		[ "BoCsCrs2.pcx", "BoRDwf2.pcx", "BoTGar2.pcx", "BoIGog2.pcx", "BoNzomb2.pcx", "BoDharp2.pcx", "BoSwolf2.pcx", "BoFlizr2.pcx", "BoEup_1.pcx" ],
-		[ "BoCsGr2.pcx", "BoRElf2.pcx", "BoTGolm2.pcx", "BoIHnd2.pcx", "BoNwigh2.pcx", "BoDbeh2.pcx", "BoSorc2.pcx", "BoFfly2.pcx", "BoEup_2.pcx" ],
-		[ "BoCsSwd2.pcx", "BoRPeg2.pcx", "BoTMag2.pcx", "BoIDmn2.pcx", "BoNvamp2.pcx", "BoDmedu2.pcx", "BoSogre2.pcx", "BoFbas2.pcx", "BoEup_3.pcx" ],
-		[ "BoCsMon2.pcx", "BoRTre2.pcx", "BoTGen2.pcx", "BoIPit2.pcx", "BoNlich2.pcx", "BoDmino2.pcx", "BoSroc2.pcx", "BoFgorg2.pcx", "BoEup_4.pcx" ],
-		[ "BoCsCv2.pcx", "BoRUni2.pcx", "BoTNaga2.pcx", "BoIEfr2.pcx", "BoNbkni2.pcx", "BoDmant2.pcx", "BoScyc2.pcx", "BoFwyvr2.pcx", "BoEup_5.pcx" ],
-		[ "BoCsAng2.pcx", "BoRDra2.pcx", "BoTTit2.pcx", "BoIDvl2.pcx", "BoNbone2.pcx", "BoDdrag2.pcx", "BoSbeh2.pcx", "BoFhydr2.pcx", "BoEup_6.pcx" ]
-	]
-}

+ 36 - 36
config/factions/castle.json

@@ -80,43 +80,43 @@
 			"structures" :
 			{
 				"extraAnimation": { "animation" : "TBCSEXT2.def", "x" : 46,  "y" : 119 },
-				"mageGuild1":     { "animation" : "TBCSMAGE.def", "x" : 707, "y" : 166, "z" : 1, "border" : "TOCSMAG1.bmp", "area" : "TZCSMAG1.bmp" },
-				"mageGuild2":     { "animation" : "TBCSMAG2.def", "x" : 706, "y" : 135, "z" : 1, "border" : "TOCSMAG2.bmp", "area" : "TZCSMAG2.bmp" },
-				"mageGuild3":     { "animation" : "TBCSMAG3.def", "x" : 704, "y" : 107, "z" : 1, "border" : "TOCSM301.bmp", "area" : "TZCSM301.bmp" },
-				"mageGuild4":     { "animation" : "TBCSMAG4.def", "x" : 704, "y" : 76,  "z" : 1, "border" : "TOCSM401.bmp", "area" : "TZCSM401.bmp" },
-				"tavern":         { "animation" : "TBCSTVRN.def", "x" : 0,   "y" : 230, "z" : 2, "border" : "TOCSTAV1.bmp", "area" : "TZCSTAV1.bmp" },
-				"shipyard":       { "animation" : "TBCSDOCK.def", "x" : 478, "y" : 134, "z" : -3, "border" : "TOCSDKMS.bmp", "area" : "TZCSDKMS.bmp" },
-				"fort":           { "animation" : "TBCSCSTL.def", "x" : 595, "y" : 66,  "z" : -5, "border" : "TOCSCAS1.bmp", "area" : "TZCSCAS1.bmp" },
-				"citadel":        { "animation" : "TBCSCAS2.def", "x" : 478, "y" : 66,  "z" : -5, "border" : "TOCSCAS2.bmp", "area" : "TZCSCAS2.bmp" },
-				"castle":         { "animation" : "TBCSCAS3.def", "x" : 478, "y" : 37,  "z" : -5, "border" : "TOCSCAS3.bmp", "area" : "TZCSCAS3.bmp" },
-				"villageHall":    { "animation" : "TBCSHALL.def", "x" : 0,   "y" : 209, "z" : 1, "border" : "TOCSH101.bmp", "area" : "TZCSH101.bmp" },
-				"townHall":       { "animation" : "TBCSHAL2.def", "x" : 0,   "y" : 176, "z" : 1, "border" : "TOCSH201.bmp", "area" : "TZCSH201.bmp" },
-				"cityHall":       { "animation" : "TBCSHAL3.def", "x" : 0,   "y" : 164, "z" : 1, "border" : "TOCSH301.bmp", "area" : "TZCSH301.bmp" },
-				"capitol":        { "animation" : "TBCSHAL4.def", "x" : 0,   "y" : 154, "z" : 1, "border" : "TOCSH401.bmp", "area" : "TZCSH401.bmp" },
-				"marketplace":    { "animation" : "TBCSMARK.def", "x" : 413, "y" : 264, "z" : 0, "border" : "TOCSMRK1.bmp", "area" : "TZCSMRK1.bmp" },
-				"resourceSilo":   { "animation" : "TBCSSILO.def", "x" : 488, "y" : 228, "z" : 1, "border" : "TOCSMRK2.bmp", "area" : "TZCSMRK2.bmp" },
-				"blacksmith":     { "animation" : "TBCSBLAK.def", "x" : 213, "y" : 251, "z" : 0, "border" : "TOCSBLAK.bmp", "area" : "TZCSBLAK.bmp" },
-				"special1":       { "animation" : "TBCSSPEC.def", "x" : 533, "y" : 71,  "z" : -4, "border" : "TOCSLT01.bmp", "area" : "TZCSLT01.bmp" },
-				"horde1":         { "animation" : "TBCSHRD1.def", "x" : 76,  "y" : 53,  "z" : -1, "border" : "TOCSGR1H.bmp", "area" : "TZCSGR1H.bmp", "hidden" : true },
-				"horde1Upgr":     { "animation" : "TBCSHRD2.def", "x" : 76,  "y" : 35,  "z" : -1, "border" : "TOCSGR2H.bmp", "area" : "TZCSGR2H.bmp", "hidden" : true, "builds" : "horde1" },
+				"mageGuild1":     { "animation" : "TBCSMAGE.def", "x" : 707, "y" : 166, "z" : 1,  "campaignBonus" : "BoCsMag1.pcx", "border" : "TOCSMAG1.bmp", "area" : "TZCSMAG1.bmp" },
+				"mageGuild2":     { "animation" : "TBCSMAG2.def", "x" : 706, "y" : 135, "z" : 1,  "campaignBonus" : "BoCsMag2.pcx", "border" : "TOCSMAG2.bmp", "area" : "TZCSMAG2.bmp" },
+				"mageGuild3":     { "animation" : "TBCSMAG3.def", "x" : 704, "y" : 107, "z" : 1,  "campaignBonus" : "BoCsMag3.pcx", "border" : "TOCSM301.bmp", "area" : "TZCSM301.bmp" },
+				"mageGuild4":     { "animation" : "TBCSMAG4.def", "x" : 704, "y" : 76,  "z" : 1,  "campaignBonus" : "BoCsMag4.pcx", "border" : "TOCSM401.bmp", "area" : "TZCSM401.bmp" },
+				"tavern":         { "animation" : "TBCSTVRN.def", "x" : 0,   "y" : 230, "z" : 2,  "campaignBonus" : "BoCsTav1.pcx", "border" : "TOCSTAV1.bmp", "area" : "TZCSTAV1.bmp" },
+				"shipyard":       { "animation" : "TBCSDOCK.def", "x" : 478, "y" : 134, "z" : -3, "campaignBonus" : "BoCsDock.pcx", "border" : "TOCSDKMS.bmp", "area" : "TZCSDKMS.bmp" },
+				"fort":           { "animation" : "TBCSCSTL.def", "x" : 595, "y" : 66,  "z" : -5, "campaignBonus" : "BoCsCas1.pcx", "border" : "TOCSCAS1.bmp", "area" : "TZCSCAS1.bmp" },
+				"citadel":        { "animation" : "TBCSCAS2.def", "x" : 478, "y" : 66,  "z" : -5, "campaignBonus" : "BoCsCas2.pcx", "border" : "TOCSCAS2.bmp", "area" : "TZCSCAS2.bmp" },
+				"castle":         { "animation" : "TBCSCAS3.def", "x" : 478, "y" : 37,  "z" : -5, "campaignBonus" : "BoCsCas3.pcx", "border" : "TOCSCAS3.bmp", "area" : "TZCSCAS3.bmp" },
+				"villageHall":    { "animation" : "TBCSHALL.def", "x" : 0,   "y" : 209, "z" : 1,  "campaignBonus" : "BoCsHal1.pcx", "border" : "TOCSH101.bmp", "area" : "TZCSH101.bmp" },
+				"townHall":       { "animation" : "TBCSHAL2.def", "x" : 0,   "y" : 176, "z" : 1,  "campaignBonus" : "BoCsHal2.pcx", "border" : "TOCSH201.bmp", "area" : "TZCSH201.bmp" },
+				"cityHall":       { "animation" : "TBCSHAL3.def", "x" : 0,   "y" : 164, "z" : 1,  "campaignBonus" : "BoCsHal3.pcx", "border" : "TOCSH301.bmp", "area" : "TZCSH301.bmp" },
+				"capitol":        { "animation" : "TBCSHAL4.def", "x" : 0,   "y" : 154, "z" : 1,  "campaignBonus" : "BoCsHal4.pcx", "border" : "TOCSH401.bmp", "area" : "TZCSH401.bmp" },
+				"marketplace":    { "animation" : "TBCSMARK.def", "x" : 413, "y" : 264, "z" : 0,  "campaignBonus" : "BoCsMrk1.pcx", "border" : "TOCSMRK1.bmp", "area" : "TZCSMRK1.bmp" },
+				"resourceSilo":   { "animation" : "TBCSSILO.def", "x" : 488, "y" : 228, "z" : 1,  "campaignBonus" : "BoCsMrk2.pcx", "border" : "TOCSMRK2.bmp", "area" : "TZCSMRK2.bmp" },
+				"blacksmith":     { "animation" : "TBCSBLAK.def", "x" : 213, "y" : 251, "z" : 0,  "campaignBonus" : "BoCsBlak.pcx", "border" : "TOCSBLAK.bmp", "area" : "TZCSBLAK.bmp" },
+				"special1":       { "animation" : "TBCSSPEC.def", "x" : 533, "y" : 71,  "z" : -4, "campaignBonus" : "BoCsLite.pcx", "border" : "TOCSLT01.bmp", "area" : "TZCSLT01.bmp" },
+				"horde1":         { "animation" : "TBCSHRD1.def", "x" : 76,  "y" : 53,  "z" : -1, "campaignBonus" : "BoCsGr1H.pcx", "border" : "TOCSGR1H.bmp", "area" : "TZCSGR1H.bmp", "hidden" : true },
+				"horde1Upgr":     { "animation" : "TBCSHRD2.def", "x" : 76,  "y" : 35,  "z" : -1, "campaignBonus" : "BoCsGr2H.pcx", "border" : "TOCSGR2H.bmp", "area" : "TZCSGR2H.bmp", "hidden" : true, "builds" : "horde1" },
 				"ship":           { "animation" : "TBCSBOAT.def", "x" : 478, "y" : 134, "z" : -3, "border" : "TOCSDKMN.bmp", "area" : "TZCSDKMN.bmp", "hidden" : true },
-				"special2":       { "animation" : "TBCSEXT0.def", "x" : 384, "y" : 193, "z" : -2, "border" : "TOCSCAVM.bmp", "area" : "TZCSCAVM.bmp" },
-				"special3":       { "animation" : "TBCSEXT1.def", "x" : 0,   "y" : 198, "z" :  2, "border" : "TOCSTAV2.bmp", "area" : "TZCSTAV2.bmp" },
-				"grail":          { "animation" : "TBCSHOLY.def", "x" : 456, "y" : 109, "z" : -6, "border" : "TOCSHOLY.bmp", "area" : "TZCSHOLY.bmp" },
-				"dwellingLvl1":   { "animation" : "TBCSDW_0.def", "x" : 304, "y" : 92,  "z" : -1, "border" : "TOCSPIK1.bmp", "area" : "TZCSPIK1.bmp" },
-				"dwellingLvl2":   { "animation" : "TBCSDW_1.def", "x" : 360, "y" : 130, "z" : 0, "border" : "TOCSCRS1.bmp", "area" : "TZCSCRS1.bmp" },
-				"dwellingLvl3":   { "animation" : "TBCSDW_2.def", "x" : 76,  "y" : 57,  "z" : -1, "border" : "TOCSGR1N.bmp", "area" : "TZCSGR1N.bmp" },
-				"dwellingLvl4":   { "animation" : "TBCSDW_3.def", "x" : 176, "y" : 101, "z" : 0, "border" : "TOCSSWD1.bmp", "area" : "TZCSSWD1.bmp" },
-				"dwellingLvl5":   { "animation" : "TBCSDW_4.def", "x" : 563, "y" : 211, "z" : 1,  "border" : "TOCSMON1.bmp", "area" : "TZCSMON1.bmp" },
-				"dwellingLvl6":   { "animation" : "TBCSDW_5.def", "x" : 174, "y" : 190, "z" : -1, "border" : "TOCSC101.bmp", "area" : "TZCSCAV1.bmp" },
-				"dwellingLvl7":   { "animation" : "TBCSDW_6.def", "x" : 303, "y" : 0,   "z" : -2, "border" : "TOCSANG1.bmp", "area" : "TZCSANG1.bmp" },
-				"dwellingUpLvl1": { "animation" : "TBCSUP_0.def", "x" : 304, "y" : 65,  "z" : -1, "border" : "TOCSPIK2.bmp", "area" : "TZCSPIK2.bmp" },
-				"dwellingUpLvl2": { "animation" : "TBCSUP_1.def", "x" : 360, "y" : 115, "z" : 0, "border" : "TOCSCRS2.bmp", "area" : "TZCSCRS2.bmp" },
-				"dwellingUpLvl3": { "animation" : "TBCSUP_2.def", "x" : 76,  "y" : 35,  "z" : -1, "border" : "TOCSGR2N.bmp", "area" : "TZCSGR2N.bmp" },
-				"dwellingUpLvl4": { "animation" : "TBCSUP_3.def", "x" : 176, "y" : 85,  "z" : 0, "border" : "TOCSSWD2.bmp", "area" : "TZCSSWD2.bmp" },
-				"dwellingUpLvl5": { "animation" : "TBCSUP_4.def", "x" : 563, "y" : 173, "z" : 1,  "border" : "TOCSMON2.bmp", "area" : "TZCSMON2.bmp" },
-				"dwellingUpLvl6": { "animation" : "TBCSUP_5.def", "x" : 160, "y" : 190, "z" : -1, "border" : "TOCSCAV2.bmp", "area" : "TZCSCAV2.bmp" },
-				"dwellingUpLvl7": { "animation" : "TBCSUP_6.def", "x" : 303, "y" : 0,   "z" : -2, "border" : "TOCSANG2.bmp", "area" : "TZCSANG2.bmp" }
+				"special2":       { "animation" : "TBCSEXT0.def", "x" : 384, "y" : 193, "z" : -2, "campaignBonus" : "BoCsCv2S.pcx", "border" : "TOCSCAVM.bmp", "area" : "TZCSCAVM.bmp" },
+				"special3":       { "animation" : "TBCSEXT1.def", "x" : 0,   "y" : 198, "z" :  2, "campaignBonus" : "BoCsTav2.pcx", "border" : "TOCSTAV2.bmp", "area" : "TZCSTAV2.bmp" },
+				"grail":          { "animation" : "TBCSHOLY.def", "x" : 456, "y" : 109, "z" : -6, "campaignBonus" : "BoCsHoly.pcx", "border" : "TOCSHOLY.bmp", "area" : "TZCSHOLY.bmp" },
+				"dwellingLvl1":   { "animation" : "TBCSDW_0.def", "x" : 304, "y" : 92,  "z" : -1, "campaignBonus" : "BoCsPik1.pcx", "border" : "TOCSPIK1.bmp", "area" : "TZCSPIK1.bmp" },
+				"dwellingLvl2":   { "animation" : "TBCSDW_1.def", "x" : 360, "y" : 130, "z" : 0,  "campaignBonus" : "BoCsCrs1.pcx", "border" : "TOCSCRS1.bmp", "area" : "TZCSCRS1.bmp" },
+				"dwellingLvl3":   { "animation" : "TBCSDW_2.def", "x" : 76,  "y" : 57,  "z" : -1, "campaignBonus" : "BoCsGr1.pcx",  "border" : "TOCSGR1N.bmp", "area" : "TZCSGR1N.bmp" },
+				"dwellingLvl4":   { "animation" : "TBCSDW_3.def", "x" : 176, "y" : 101, "z" : 0,  "campaignBonus" : "BoCsSwd1.pcx", "border" : "TOCSSWD1.bmp", "area" : "TZCSSWD1.bmp" },
+				"dwellingLvl5":   { "animation" : "TBCSDW_4.def", "x" : 563, "y" : 211, "z" : 1,  "campaignBonus" : "BoCsMon1.pcx", "border" : "TOCSMON1.bmp", "area" : "TZCSMON1.bmp" },
+				"dwellingLvl6":   { "animation" : "TBCSDW_5.def", "x" : 174, "y" : 190, "z" : -1, "campaignBonus" : "BoCsCv1.pcx",  "border" : "TOCSC101.bmp", "area" : "TZCSCAV1.bmp" },
+				"dwellingLvl7":   { "animation" : "TBCSDW_6.def", "x" : 303, "y" : 0,   "z" : -2, "campaignBonus" : "BoCsAng1.pcx", "border" : "TOCSANG1.bmp", "area" : "TZCSANG1.bmp" },
+				"dwellingUpLvl1": { "animation" : "TBCSUP_0.def", "x" : 304, "y" : 65,  "z" : -1, "campaignBonus" : "BoCsPik2.pcx", "border" : "TOCSPIK2.bmp", "area" : "TZCSPIK2.bmp" },
+				"dwellingUpLvl2": { "animation" : "TBCSUP_1.def", "x" : 360, "y" : 115, "z" : 0,  "campaignBonus" : "BoCsCrs2.pcx", "border" : "TOCSCRS2.bmp", "area" : "TZCSCRS2.bmp" },
+				"dwellingUpLvl3": { "animation" : "TBCSUP_2.def", "x" : 76,  "y" : 35,  "z" : -1, "campaignBonus" : "BoCsGr2.pcx",  "border" : "TOCSGR2N.bmp", "area" : "TZCSGR2N.bmp" },
+				"dwellingUpLvl4": { "animation" : "TBCSUP_3.def", "x" : 176, "y" : 85,  "z" : 0,  "campaignBonus" : "BoCsSwd2.pcx", "border" : "TOCSSWD2.bmp", "area" : "TZCSSWD2.bmp" },
+				"dwellingUpLvl5": { "animation" : "TBCSUP_4.def", "x" : 563, "y" : 173, "z" : 1,  "campaignBonus" : "BoCsMon2.pcx", "border" : "TOCSMON2.bmp", "area" : "TZCSMON2.bmp" },
+				"dwellingUpLvl6": { "animation" : "TBCSUP_5.def", "x" : 160, "y" : 190, "z" : -1, "campaignBonus" : "BoCsCv2.pcx",  "border" : "TOCSCAV2.bmp", "area" : "TZCSCAV2.bmp" },
+				"dwellingUpLvl7": { "animation" : "TBCSUP_6.def", "x" : 303, "y" : 0,   "z" : -2, "campaignBonus" : "BoCsAng2.pcx", "border" : "TOCSANG2.bmp", "area" : "TZCSANG2.bmp" }
 			},
 
 			"musicTheme" : [ "music/CstleTown" ],

+ 36 - 36
config/factions/conflux.json

@@ -81,46 +81,46 @@
 			{
 				"extraAnimation2":{ "animation" : "TBELEXT5.def", "x" : 682, "y" : 183, "z" : 2 },
 				"extraAnimation": { "animation" : "TBELEXT1.def", "x" : 23,  "y" : 218, "z" : 3 },
-				"mageGuild1":     { "animation" : "TBELMAGE.def", "x" : 206, "y" : 58,  "z" : 7, "border" : "TOELMAGE.bmp", "area" : "TZELMAGE.bmp" },
-				"mageGuild2":     { "animation" : "TBELMAG2.def", "x" : 206, "y" : 58,  "z" : 7, "border" : "TOELMAG2.bmp", "area" : "TZELMAG2.bmp" },
-				"mageGuild3":     { "animation" : "TBELMAG3.def", "x" : 206, "y" : 58,  "z" : 7, "border" : "TOELMAG3.bmp", "area" : "TZELMAG3.bmp" },
-				"mageGuild4":     { "animation" : "TBELMAG4.def", "x" : 206, "y" : 58,  "z" : 7, "border" : "TOELMAG4.bmp", "area" : "TZELMAG4.bmp" },
-				"mageGuild5":     { "animation" : "TBELMAG5.def", "x" : 206, "y" : 58,  "z" : 7, "border" : "TOELMAG5.bmp", "area" : "TZELMAG5.bmp" },
-				"tavern":         { "animation" : "TBELTVRN.def", "x" : 553, "y" : 203, "z" : 7, "border" : "TOELTVRN.bmp", "area" : "TZELTVRN.bmp" },
-				"shipyard":       { "animation" : "TBELDOCK.def", "x" : 239, "y" : 215, "z" : 5, "border" : "TOELDOCK.bmp", "area" : "TZELDOCK.bmp" },
-				"fort":           { "animation" : "TBELCSTL.def", "x" : 349, "y" : 101, "z" : 1, "border" : "TOELCSTL.bmp", "area" : "TZELCSTL.bmp" },
-				"citadel":        { "animation" : "TBELCAS2.def", "x" : 349, "y" : 101, "z" : 1, "border" : "TOELCAS2.bmp", "area" : "TZELCAS2.bmp" },
-				"castle":         { "animation" : "TBELCAS3.def", "x" : 349, "y" : 101, "z" : 1, "border" : "TOELCAS3.bmp", "area" : "TZELCAS3.bmp" },
-				"villageHall":    { "animation" : "TBELHALL.def", "x" : -1,  "y" : 164, "z" : 8, "border" : "TOELHALL.bmp", "area" : "TZELHALL.bmp" },
-				"townHall":       { "animation" : "TBELHAL2.def", "x" : 0,   "y" : 165, "z" : 8, "border" : "TOELHAL2.bmp", "area" : "TZELHAL2.bmp" },
-				"cityHall":       { "animation" : "TBELHAL3.def", "x" : 0,   "y" : 165, "z" : 8, "border" : "TOELHAL3.bmp", "area" : "TZELHAL3.bmp" },
-				"capitol":        { "animation" : "TBELHAL4.def", "x" : 0,   "y" : 164, "z" : 8, "border" : "TOELHAL4.bmp", "area" : "TZELHAL4.bmp" },
-				"marketplace":    { "animation" : "TBELMARK.def", "x" : 347, "y" : 216, "z" : 8, "border" : "TOELMARK.bmp", "area" : "TZELMARK.bmp" },
-				"resourceSilo":   { "animation" : "TBELSILO.def", "x" : 372, "y" : 171, "z" : 7, "border" : "TOELSILO.bmp", "area" : "TZELSILO.bmp" },
-				"blacksmith":     { "animation" : "TBELBLAK.def", "x" : 449, "y" : 151, "z" : 5, "border" : "TOELBLAK.bmp", "area" : "TZELBLAK.bmp" },
-				"special1":       { "animation" : "TBELSPEC.def", "x" : 284, "y" : 246, "z" : 9, "border" : "TOELSPEC.bmp", "area" : "TZELSPEC.bmp" },
-				"horde1":         { "animation" : "TBELHRD1.def", "x" : 689, "y" : 250, "z" : 9, "border" : "TOELHRD1.bmp", "area" : "TZELHRD1.bmp", "hidden" : true },
-				"horde1Upgr":     { "animation" : "TBELHRD2.def", "x" : 689, "y" : 250, "z" : 9, "border" : "TOELHRD2.bmp", "area" : "TZELHRD2.bmp", "hidden" : true, "builds" : "horde1" },
+				"mageGuild1":     { "animation" : "TBELMAGE.def", "x" : 206, "y" : 58,  "z" : 7, "campaignBonus" : "BoEgld1.pcx", "border" : "TOELMAGE.bmp", "area" : "TZELMAGE.bmp" },
+				"mageGuild2":     { "animation" : "TBELMAG2.def", "x" : 206, "y" : 58,  "z" : 7, "campaignBonus" : "BoEgld2.pcx", "border" : "TOELMAG2.bmp", "area" : "TZELMAG2.bmp" },
+				"mageGuild3":     { "animation" : "TBELMAG3.def", "x" : 206, "y" : 58,  "z" : 7, "campaignBonus" : "BoEgld3.pcx", "border" : "TOELMAG3.bmp", "area" : "TZELMAG3.bmp" },
+				"mageGuild4":     { "animation" : "TBELMAG4.def", "x" : 206, "y" : 58,  "z" : 7, "campaignBonus" : "BoEgld4.pcx", "border" : "TOELMAG4.bmp", "area" : "TZELMAG4.bmp" },
+				"mageGuild5":     { "animation" : "TBELMAG5.def", "x" : 206, "y" : 58,  "z" : 7, "campaignBonus" : "BoEgld5.pcx", "border" : "TOELMAG5.bmp", "area" : "TZELMAG5.bmp" },
+				"tavern":         { "animation" : "TBELTVRN.def", "x" : 553, "y" : 203, "z" : 7, "campaignBonus" : "BoEtav.pcx",  "border" : "TOELTVRN.bmp", "area" : "TZELTVRN.bmp" },
+				"shipyard":       { "animation" : "TBELDOCK.def", "x" : 239, "y" : 215, "z" : 5, "campaignBonus" : "BoEship.pcx", "border" : "TOELDOCK.bmp", "area" : "TZELDOCK.bmp" },
+				"fort":           { "animation" : "TBELCSTL.def", "x" : 349, "y" : 101, "z" : 1, "campaignBonus" : "BoEcast1.pcx", "border" : "TOELCSTL.bmp", "area" : "TZELCSTL.bmp" },
+				"citadel":        { "animation" : "TBELCAS2.def", "x" : 349, "y" : 101, "z" : 1, "campaignBonus" : "BoEcast2.pcx", "border" : "TOELCAS2.bmp", "area" : "TZELCAS2.bmp" },
+				"castle":         { "animation" : "TBELCAS3.def", "x" : 349, "y" : 101, "z" : 1, "campaignBonus" : "BoEcast3.pcx", "border" : "TOELCAS3.bmp", "area" : "TZELCAS3.bmp" },
+				"villageHall":    { "animation" : "TBELHALL.def", "x" : -1,  "y" : 164, "z" : 8, "campaignBonus" : "BoEhall1.pcx", "border" : "TOELHALL.bmp", "area" : "TZELHALL.bmp" },
+				"townHall":       { "animation" : "TBELHAL2.def", "x" : 0,   "y" : 165, "z" : 8, "campaignBonus" : "BoEhall2.pcx", "border" : "TOELHAL2.bmp", "area" : "TZELHAL2.bmp" },
+				"cityHall":       { "animation" : "TBELHAL3.def", "x" : 0,   "y" : 165, "z" : 8, "campaignBonus" : "BoEhall3.pcx", "border" : "TOELHAL3.bmp", "area" : "TZELHAL3.bmp" },
+				"capitol":        { "animation" : "TBELHAL4.def", "x" : 0,   "y" : 164, "z" : 8, "campaignBonus" : "BoEhall4.pcx", "border" : "TOELHAL4.bmp", "area" : "TZELHAL4.bmp" },
+				"marketplace":    { "animation" : "TBELMARK.def", "x" : 347, "y" : 216, "z" : 8, "campaignBonus" : "BoEMark.pcx",  "border" : "TOELMARK.bmp", "area" : "TZELMARK.bmp" },
+				"resourceSilo":   { "animation" : "TBELSILO.def", "x" : 372, "y" : 171, "z" : 7, "campaignBonus" : "BoEMarkS.pcx", "border" : "TOELSILO.bmp", "area" : "TZELSILO.bmp" },
+				"blacksmith":     { "animation" : "TBELBLAK.def", "x" : 449, "y" : 151, "z" : 5, "campaignBonus" : "BoEblack.pcx", "border" : "TOELBLAK.bmp", "area" : "TZELBLAK.bmp" },
+				"special1":       { "animation" : "TBELSPEC.def", "x" : 284, "y" : 246, "z" : 9, "campaignBonus" : "BoEMarkA.pcx", "border" : "TOELSPEC.bmp", "area" : "TZELSPEC.bmp" },
+				"horde1":         { "animation" : "TBELHRD1.def", "x" : 689, "y" : 250, "z" : 9, "campaignBonus" : "BoEHrd1.pcx",  "border" : "TOELHRD1.bmp", "area" : "TZELHRD1.bmp", "hidden" : true },
+				"horde1Upgr":     { "animation" : "TBELHRD2.def", "x" : 689, "y" : 250, "z" : 9, "campaignBonus" : "BoEHrd2.pcx",  "border" : "TOELHRD2.bmp", "area" : "TZELHRD2.bmp", "hidden" : true, "builds" : "horde1" },
 				"ship":           { "animation" : "TBELBOAT.def", "x" : 239, "y" : 215, "z" : 5, "border" : "TOELBOAT.bmp", "area" : "TZELBOAT.bmp", "hidden" : true },
-				"special2":       { "animation" : "TBELEXT6.def", "x" : 104, "y" : 170, "z" : 6, "border" : "TOELEXT6.bmp", "area" : "TZELEXT6.bmp" },
-				"grail":          { "animation" : "TBELHOLY.def", "x" : 307, "y" : 2,   "z" : 0, "border" : "TOELHOLY.bmp", "area" : "TZELHOLY.bmp" },
+				"special2":       { "animation" : "TBELEXT6.def", "x" : 104, "y" : 170, "z" : 6, "campaignBonus" : "BoEuniv.pcx",  "border" : "TOELEXT6.bmp", "area" : "TZELEXT6.bmp" },
+				"grail":          { "animation" : "TBELHOLY.def", "x" : 307, "y" : 2,   "z" : 0, "campaignBonus" : "BoEgrail.pcx", "border" : "TOELHOLY.bmp", "area" : "TZELHOLY.bmp" },
 				"extraTownHall":  { "animation" : "TBELEXT2.def", "x" : 232, "y" : 205, "z" : 4 },
 				"extraCityHall":  { "animation" : "TBELEXT3.def", "x" : 516, "y" : 223, "z" : 6 },
 				"extraCapitol":   { "animation" : "TBELEXT4.def", "x" : 0,   "y" : 252, "z" : 9 },
-				"dwellingLvl1":   { "animation" : "TBELDW_0.def", "x" : 689, "y" : 250, "z" : 9, "border" : "TOELDW_0.bmp", "area" : "TZELDW_0.bmp" },
-				"dwellingLvl2":   { "animation" : "TBELDW_1.def", "x" : 630, "y" : 50,  "z" : 0, "border" : "TOELDW_1.bmp", "area" : "TZELDW_1.bmp" },
-				"dwellingLvl3":   { "animation" : "TBELDW_2.def", "x" : 709, "y" : 210, "z" : 5, "border" : "TOELDW_2.bmp", "area" : "TZELDW_2.bmp" },
-				"dwellingLvl4":   { "animation" : "TBELDW_3.def", "x" : 108, "y" : 131, "z" : 1, "border" : "TOELDW_3.bmp", "area" : "TZELDW_3.bmp" },
-				"dwellingLvl5":   { "animation" : "TBELDW_4.def", "x" : 264, "y" : 168, "z" : 0, "border" : "TOELDW_4.bmp", "area" : "TZELDW_4.bmp" },
-				"dwellingLvl6":   { "animation" : "TBELDW_5.def", "x" : 394, "y" : 283, "z" : 9, "border" : "TOELDW_5.bmp", "area" : "TZELDW_5.bmp" },
-				"dwellingLvl7":   { "animation" : "TBELDW_6.def", "x" : 34,  "y" : 16,  "z" : 0, "border" : "TOELDW_6.bmp", "area" : "TZELDW_6.bmp" },
-				"dwellingUpLvl1": { "animation" : "TBELUP_0.def", "x" : 689, "y" : 250, "z" : 9, "border" : "TOELUP_0.bmp", "area" : "TZELUP_0.bmp" },
-				"dwellingUpLvl2": { "animation" : "TBELUP_1.def", "x" : 630, "y" : 50,  "z" : 0, "border" : "TOELUP_1.bmp", "area" : "TZELUP_1.bmp" },
-				"dwellingUpLvl3": { "animation" : "TBELUP_2.def", "x" : 709, "y" : 210, "z" : 5, "border" : "TOELUP_2.bmp", "area" : "TZELUP_2.bmp" },
-				"dwellingUpLvl4": { "animation" : "TBELUP_3.def", "x" : 108, "y" : 131, "z" : 1, "border" : "TOELUP_3.bmp", "area" : "TZELUP_3.bmp" },
-				"dwellingUpLvl5": { "animation" : "TBELUP_4.def", "x" : 264, "y" : 168, "z" : 0, "border" : "TOELUP_4.bmp", "area" : "TZELUP_4.bmp" },
-				"dwellingUpLvl6": { "animation" : "TBELUP_5.def", "x" : 394, "y" : 283, "z" : 9, "border" : "TOELUP_5.bmp", "area" : "TZELUP_5.bmp" },
-				"dwellingUpLvl7": { "animation" : "TBELUP_6.def", "x" : 34,  "y" : 0,   "z" : 0, "border" : "TOELUP_6.bmp", "area" : "TZELUP_6.bmp" }
+				"dwellingLvl1":   { "animation" : "TBELDW_0.def", "x" : 689, "y" : 250, "z" : 9, "campaignBonus" : "BoEdn_0.pcx", "border" : "TOELDW_0.bmp", "area" : "TZELDW_0.bmp" },
+				"dwellingLvl2":   { "animation" : "TBELDW_1.def", "x" : 630, "y" : 50,  "z" : 0, "campaignBonus" : "BoEdn_1.pcx", "border" : "TOELDW_1.bmp", "area" : "TZELDW_1.bmp" },
+				"dwellingLvl3":   { "animation" : "TBELDW_2.def", "x" : 709, "y" : 210, "z" : 5, "campaignBonus" : "BoEdn_2.pcx", "border" : "TOELDW_2.bmp", "area" : "TZELDW_2.bmp" },
+				"dwellingLvl4":   { "animation" : "TBELDW_3.def", "x" : 108, "y" : 131, "z" : 1, "campaignBonus" : "BoEdn_3.pcx", "border" : "TOELDW_3.bmp", "area" : "TZELDW_3.bmp" },
+				"dwellingLvl5":   { "animation" : "TBELDW_4.def", "x" : 264, "y" : 168, "z" : 0, "campaignBonus" : "BoEdn_4.pcx", "border" : "TOELDW_4.bmp", "area" : "TZELDW_4.bmp" },
+				"dwellingLvl6":   { "animation" : "TBELDW_5.def", "x" : 394, "y" : 283, "z" : 9, "campaignBonus" : "BoEdn_5.pcx", "border" : "TOELDW_5.bmp", "area" : "TZELDW_5.bmp" },
+				"dwellingLvl7":   { "animation" : "TBELDW_6.def", "x" : 34,  "y" : 16,  "z" : 0, "campaignBonus" : "BoEdn_6.pcx", "border" : "TOELDW_6.bmp", "area" : "TZELDW_6.bmp" },
+				"dwellingUpLvl1": { "animation" : "TBELUP_0.def", "x" : 689, "y" : 250, "z" : 9, "campaignBonus" : "BoEup_0.pcx", "border" : "TOELUP_0.bmp", "area" : "TZELUP_0.bmp" },
+				"dwellingUpLvl2": { "animation" : "TBELUP_1.def", "x" : 630, "y" : 50,  "z" : 0, "campaignBonus" : "BoEup_1.pcx", "border" : "TOELUP_1.bmp", "area" : "TZELUP_1.bmp" },
+				"dwellingUpLvl3": { "animation" : "TBELUP_2.def", "x" : 709, "y" : 210, "z" : 5, "campaignBonus" : "BoEup_2.pcx", "border" : "TOELUP_2.bmp", "area" : "TZELUP_2.bmp" },
+				"dwellingUpLvl4": { "animation" : "TBELUP_3.def", "x" : 108, "y" : 131, "z" : 1, "campaignBonus" : "BoEup_3.pcx", "border" : "TOELUP_3.bmp", "area" : "TZELUP_3.bmp" },
+				"dwellingUpLvl5": { "animation" : "TBELUP_4.def", "x" : 264, "y" : 168, "z" : 0, "campaignBonus" : "BoEup_4.pcx", "border" : "TOELUP_4.bmp", "area" : "TZELUP_4.bmp" },
+				"dwellingUpLvl6": { "animation" : "TBELUP_5.def", "x" : 394, "y" : 283, "z" : 9, "campaignBonus" : "BoEup_5.pcx", "border" : "TOELUP_5.bmp", "area" : "TZELUP_5.bmp" },
+				"dwellingUpLvl7": { "animation" : "TBELUP_6.def", "x" : 34,  "y" : 0,   "z" : 0, "campaignBonus" : "BoEup_6.pcx", "border" : "TOELUP_6.bmp", "area" : "TZELUP_6.bmp" }
 			},
 
 			"musicTheme" : [ "music/ElemTown" ],

+ 37 - 37
config/factions/dungeon.json

@@ -80,43 +80,43 @@
 			},
 			"structures" :
 			{
-				"mageGuild1":     { "animation" : "TBDNMAGE.def", "x" : 164, "y" : 119, "z" : -1, "border" : "TODMAG1.bmp",  "area" : "TZDMAG1.bmp" },
-				"mageGuild2":     { "animation" : "TBDNMAG2.def", "x" : 164, "y" : 97,  "z" : -1, "border" : "TODMAG2.bmp",  "area" : "TZDMAG2.bmp" },
-				"mageGuild3":     { "animation" : "TBDNMAG3.def", "x" : 164, "y" : 77,  "z" : -1, "border" : "TODMAG3.bmp",  "area" : "TZDMAG3.bmp" },
-				"mageGuild4":     { "animation" : "TBDNMAG4.def", "x" : 164, "y" : 61,  "z" : -1, "border" : "TODMAG4.bmp",  "area" : "TZDMAG4.bmp" },
-				"mageGuild5":     { "animation" : "TBDNMAG5.def", "x" : 164, "y" : 15,  "z" : -1, "border" : "TODMAG5.bmp",  "area" : "TZDMAG5.bmp" },
-				"tavern":         { "animation" : "TBDNTVRN.def", "x" : 211, "y" : 297, "border" : "TODTAV.bmp",   "area" : "TZDTAV.bmp" },
-				"fort":           { "animation" : "TBDNCSTL.def", "x" : 363, "y" : 87,  "z" : 2,  "border" : "TODCAS1.bmp",  "area" : "TZDCAS1.bmp" },
-				"citadel":        { "animation" : "TBDNCAS2.def", "x" : 363, "y" : 87,  "z" : 2,  "border" : "TODCAS2.bmp",  "area" : "TZDCAS2.bmp" },
-				"castle":         { "animation" : "TBDNCAS3.def", "x" : 363, "y" : 87,  "z" : 2,  "border" : "TODCAS3.bmp",  "area" : "TZDCAS3.bmp" },
-				"villageHall":    { "animation" : "TBDNHALL.def", "x" : 0,   "y" : 234, "border" : "TODHALL1.bmp", "area" : "TZDHALL1.bmp" },
-				"townHall":       { "animation" : "TBDNHAL2.def", "x" : 0,   "y" : 223, "border" : "TODHALL2.bmp", "area" : "TZDHALL2.bmp" },
-				"cityHall":       { "animation" : "TBDNHAL3.def", "x" : 0,   "y" : 223, "border" : "TODHALL3.bmp", "area" : "TZDHALL3.bmp" },
-				"capitol":        { "animation" : "TBDNHAL4.def", "x" : 0,   "y" : 203, "border" : "TODHALL4.bmp", "area" : "TZDHALL4.bmp" },
-				"marketplace":    { "animation" : "TBDNMARK.def", "x" : 590, "y" : 318, "z" : -2, "border" : "TODMARK.bmp",  "area" : "TZDMARK.bmp" },
-				"resourceSilo":   { "animation" : "TBDNSILO.def", "x" : 624, "y" : 335, "z" : 1,  "border" : "TODSILO.bmp",  "area" : "TZDSILO.bmp" },
-				"blacksmith":     { "animation" : "TBDNBLAK.def", "x" : 544, "y" : 248, "z" : -3, "border" : "TODSMITH.bmp", "area" : "TZDSMITH.bmp" },
-				"special1":       { "animation" : "TBDNSPEC.def", "x" : 746, "y" : 294, "z" : 1,  "border" : "TODART.bmp",   "area" : "TZDART.bmp" },
-				"horde1":         { "animation" : "TBDNHRD1.def", "x" : 0,   "y" : 326, "z" : 2,  "border" : "TODTR1HA.bmp", "area" : "TZDTR1HA.bmp", "hidden" : true },
-				"horde1Upgr":     { "animation" : "TBDNHRD2.def", "x" : 0,   "y" : 300, "z" : 2,  "border" : "TODTR2HA.bmp", "area" : "TZDTR2HA.bmp", "hidden" : true, "builds" : "horde1" },
-				"special2":       { "animation" : "TBDNEXT0.def", "x" : 131, "y" : 26 , "border" : "TODVOR1A.bmp", "area" : "TZDVOR1A.bmp" },
-				"special3":       { "animation" : "TBDNEXT1.def", "x" : 687, "y" : 177, "border" : "TODPORTA.bmp", "area" : "TZDPORTA.bmp" },
-				"special4":       { "animation" : "TBDNEXT2.def", "x" : 313, "y" : 298, "border" : "TODACAD.bmp",  "area" : "TZDACAD.bmp" },
-				"grail":          { "animation" : "TBDNHOLY.def", "x" : 562, "y" : 24,  "z" : 1,  "border" : "TODHOLY.bmp",  "area" : "TZDHOLY.bmp" },
-				"dwellingLvl1":   { "animation" : "TBDNDW_0.def", "x" : 0,   "y" : 326, "z" : 2,  "border" : "TODTRG1A.bmp", "area" : "TZDTRG1A.bmp" },
-				"dwellingLvl2":   { "animation" : "TBDNDW_1.def", "x" : 0,   "y" : 26,  "border" : "TODHAR1.bmp",  "area" : "TZDHAR1.bmp" },
-				"dwellingLvl3":   { "animation" : "TBDNDW_2.def", "x" : 118, "y" : 308, "z" : 1,  "border" : "TODBEH1A.bmp", "area" : "TZDBEH1A.bmp" },
-				"dwellingLvl4":   { "animation" : "TBDNDW_3.def", "x" : 300, "y" : 29,  "z" : -1, "border" : "TODMED1.bmp",  "area" : "TZDMED1.bmp" },
-				"dwellingLvl5":   { "animation" : "TBDNDW_4.def", "x" : 551, "y" : 186, "z" : 1,  "border" : "TODMIN1.bmp",  "area" : "TZDMIN1.bmp" },
-				"dwellingLvl6":   { "animation" : "TBDNDW_5.def", "x" : 270, "y" : 253, "z" : -1, "border" : "TODMAN1.bmp",  "area" : "TZDMAN1.bmp" },
-				"dwellingLvl7":   { "animation" : "TBDNDW_6.def", "x" : 550, "y" : 0,   "z" : -1, "border" : "TODDRA1A.bmp", "area" : "TZDDRA1A.bmp" },
-				"dwellingUpLvl1": { "animation" : "TBDNUP_0.def", "x" : 0,   "y" : 300, "z" : 2,  "border" : "TODTRG2A.bmp", "area" : "TZDTRG2A.bmp" },
-				"dwellingUpLvl2": { "animation" : "TBDNUP_1.def", "x" : 0,   "y" : 26,  "border" : "TODHAR2.bmp",  "area" : "TZDHAR2.bmp" },
-				"dwellingUpLvl3": { "animation" : "TBDNUP_2.def", "x" : 118, "y" : 256, "z" : 1,  "border" : "TODBEH2A.bmp", "area" : "TZDBEH2A.bmp" },
-				"dwellingUpLvl4": { "animation" : "TBDNUP_3.def", "x" : 300, "y" : 29,  "z" : -1, "border" : "TODMED2.bmp",  "area" : "TZDMED2.bmp" },
-				"dwellingUpLvl5": { "animation" : "TBDNUP_4.def", "x" : 519, "y" : 172, "z" : 1,  "border" : "TODMIN2.bmp",  "area" : "TZDMIN2.bmp" },
-				"dwellingUpLvl6": { "animation" : "TBDNUP_5.def", "x" : 270, "y" : 253, "z" : -1, "border" : "TODMAN2.bmp",  "area" : "TZDMAN2.bmp" },
-				"dwellingUpLvl7": { "animation" : "TBDNUP_6.def", "x" : 550, "y" : 0,   "z" : -1, "border" : "TODDRA2A.bmp", "area" : "TZDDRA2A.bmp" }
+				"mageGuild1":     { "animation" : "TBDNMAGE.def", "x" : 164, "y" : 119, "z" : -1, "campaignBonus" : "BoDmage1.pcx", "border" : "TODMAG1.bmp",  "area" : "TZDMAG1.bmp" },
+				"mageGuild2":     { "animation" : "TBDNMAG2.def", "x" : 164, "y" : 97,  "z" : -1, "campaignBonus" : "BoDmage2.pcx", "border" : "TODMAG2.bmp",  "area" : "TZDMAG2.bmp" },
+				"mageGuild3":     { "animation" : "TBDNMAG3.def", "x" : 164, "y" : 77,  "z" : -1, "campaignBonus" : "BoDmage3.pcx", "border" : "TODMAG3.bmp",  "area" : "TZDMAG3.bmp" },
+				"mageGuild4":     { "animation" : "TBDNMAG4.def", "x" : 164, "y" : 61,  "z" : -1, "campaignBonus" : "BoDmage4.pcx", "border" : "TODMAG4.bmp",  "area" : "TZDMAG4.bmp" },
+				"mageGuild5":     { "animation" : "TBDNMAG5.def", "x" : 164, "y" : 15,  "z" : -1, "campaignBonus" : "BoDmage5.pcx", "border" : "TODMAG5.bmp",  "area" : "TZDMAG5.bmp" },
+				"tavern":         { "animation" : "TBDNTVRN.def", "x" : 211, "y" : 297,           "campaignBonus" : "BoDtav.pcx",   "border" : "TODTAV.bmp",   "area" : "TZDTAV.bmp" },
+				"fort":           { "animation" : "TBDNCSTL.def", "x" : 363, "y" : 87,  "z" : 2,  "campaignBonus" : "BoDcas1.pcx",  "border" : "TODCAS1.bmp",  "area" : "TZDCAS1.bmp" },
+				"citadel":        { "animation" : "TBDNCAS2.def", "x" : 363, "y" : 87,  "z" : 2,  "campaignBonus" : "BoDcas2.pcx",  "border" : "TODCAS2.bmp",  "area" : "TZDCAS2.bmp" },
+				"castle":         { "animation" : "TBDNCAS3.def", "x" : 363, "y" : 87,  "z" : 2,  "campaignBonus" : "BoDcas3.pcx",  "border" : "TODCAS3.bmp",  "area" : "TZDCAS3.bmp" },
+				"villageHall":    { "animation" : "TBDNHALL.def", "x" : 0,   "y" : 234,           "campaignBonus" : "BoDhall1.pcx", "border" : "TODHALL1.bmp", "area" : "TZDHALL1.bmp" },
+				"townHall":       { "animation" : "TBDNHAL2.def", "x" : 0,   "y" : 223,           "campaignBonus" : "BoDhall2.pcx", "border" : "TODHALL2.bmp", "area" : "TZDHALL2.bmp" },
+				"cityHall":       { "animation" : "TBDNHAL3.def", "x" : 0,   "y" : 223,           "campaignBonus" : "BoDhall3.pcx", "border" : "TODHALL3.bmp", "area" : "TZDHALL3.bmp" },
+				"capitol":        { "animation" : "TBDNHAL4.def", "x" : 0,   "y" : 203,           "campaignBonus" : "BoDhall4.pcx", "border" : "TODHALL4.bmp", "area" : "TZDHALL4.bmp" },
+				"marketplace":    { "animation" : "TBDNMARK.def", "x" : 590, "y" : 318, "z" : -2, "campaignBonus" : "BoDmark1.pcx", "border" : "TODMARK.bmp",  "area" : "TZDMARK.bmp" },
+				"resourceSilo":   { "animation" : "TBDNSILO.def", "x" : 624, "y" : 335, "z" : 1,  "campaignBonus" : "BoDmark2.pcx", "border" : "TODSILO.bmp",  "area" : "TZDSILO.bmp" },
+				"blacksmith":     { "animation" : "TBDNBLAK.def", "x" : 544, "y" : 248, "z" : -3, "campaignBonus" : "BoDsmith.pcx", "border" : "TODSMITH.bmp", "area" : "TZDSMITH.bmp" },
+				"special1":       { "animation" : "TBDNSPEC.def", "x" : 746, "y" : 294, "z" : 1,  "campaignBonus" : "BoDmarkA.pcx", "border" : "TODART.bmp",   "area" : "TZDART.bmp" },
+				"horde1":         { "animation" : "TBDNHRD1.def", "x" : 0,   "y" : 326, "z" : 2,  "campaignBonus" : "BoDtrogH.pcx", "border" : "TODTR1HA.bmp", "area" : "TZDTR1HA.bmp", "hidden" : true },
+				"horde1Upgr":     { "animation" : "TBDNHRD2.def", "x" : 0,   "y" : 300, "z" : 2,  "campaignBonus" : "BoDtrogH.pcx", "border" : "TODTR2HA.bmp", "area" : "TZDTR2HA.bmp", "hidden" : true, "builds" : "horde1" },
+				"special2":       { "animation" : "TBDNEXT0.def", "x" : 131, "y" : 26 ,           "campaignBonus" : "BoDvort.pcx",  "border" : "TODVOR1A.bmp", "area" : "TZDVOR1A.bmp" },
+				"special3":       { "animation" : "TBDNEXT1.def", "x" : 687, "y" : 177,           "campaignBonus" : "BoDport.pcx",  "border" : "TODPORTA.bmp", "area" : "TZDPORTA.bmp" },
+				"special4":       { "animation" : "TBDNEXT2.def", "x" : 313, "y" : 298,           "campaignBonus" : "BoDacad.pcx",  "border" : "TODACAD.bmp",  "area" : "TZDACAD.bmp" },
+				"grail":          { "animation" : "TBDNHOLY.def", "x" : 562, "y" : 24,  "z" : 1,  "campaignBonus" : "BoDholy.pcx",  "border" : "TODHOLY.bmp",  "area" : "TZDHOLY.bmp" },
+				"dwellingLvl1":   { "animation" : "TBDNDW_0.def", "x" : 0,   "y" : 326, "z" : 2,  "campaignBonus" : "BoDtrog1.pcx", "border" : "TODTRG1A.bmp", "area" : "TZDTRG1A.bmp" },
+				"dwellingLvl2":   { "animation" : "TBDNDW_1.def", "x" : 0,   "y" : 26,            "campaignBonus" : "BoDharp1.pcx", "border" : "TODHAR1.bmp",  "area" : "TZDHAR1.bmp" },
+				"dwellingLvl3":   { "animation" : "TBDNDW_2.def", "x" : 118, "y" : 308, "z" : 1,  "campaignBonus" : "BoDbeh1.pcx",  "border" : "TODBEH1A.bmp", "area" : "TZDBEH1A.bmp" },
+				"dwellingLvl4":   { "animation" : "TBDNDW_3.def", "x" : 300, "y" : 29,  "z" : -1, "campaignBonus" : "BoDmedu1.pcx", "border" : "TODMED1.bmp",  "area" : "TZDMED1.bmp" },
+				"dwellingLvl5":   { "animation" : "TBDNDW_4.def", "x" : 551, "y" : 186, "z" : 1,  "campaignBonus" : "BoDmino1.pcx", "border" : "TODMIN1.bmp",  "area" : "TZDMIN1.bmp" },
+				"dwellingLvl6":   { "animation" : "TBDNDW_5.def", "x" : 270, "y" : 253, "z" : -1, "campaignBonus" : "BoDmant1.pcx", "border" : "TODMAN1.bmp",  "area" : "TZDMAN1.bmp" },
+				"dwellingLvl7":   { "animation" : "TBDNDW_6.def", "x" : 550, "y" : 0,   "z" : -1, "campaignBonus" : "BoDdrag1.pcx", "border" : "TODDRA1A.bmp", "area" : "TZDDRA1A.bmp" },
+				"dwellingUpLvl1": { "animation" : "TBDNUP_0.def", "x" : 0,   "y" : 300, "z" : 2,  "campaignBonus" : "BoDtrog2.pcx", "border" : "TODTRG2A.bmp", "area" : "TZDTRG2A.bmp" },
+				"dwellingUpLvl2": { "animation" : "TBDNUP_1.def", "x" : 0,   "y" : 26,            "campaignBonus" : "BoDharp2.pcx", "border" : "TODHAR2.bmp",  "area" : "TZDHAR2.bmp" },
+				"dwellingUpLvl3": { "animation" : "TBDNUP_2.def", "x" : 118, "y" : 256, "z" : 1,  "campaignBonus" : "BoDbeh2.pcx",  "border" : "TODBEH2A.bmp", "area" : "TZDBEH2A.bmp" },
+				"dwellingUpLvl4": { "animation" : "TBDNUP_3.def", "x" : 300, "y" : 29,  "z" : -1, "campaignBonus" : "BoDmedu2.pcx", "border" : "TODMED2.bmp",  "area" : "TZDMED2.bmp" },
+				"dwellingUpLvl5": { "animation" : "TBDNUP_4.def", "x" : 519, "y" : 172, "z" : 1,  "campaignBonus" : "BoDmino2.pcx", "border" : "TODMIN2.bmp",  "area" : "TZDMIN2.bmp" },
+				"dwellingUpLvl6": { "animation" : "TBDNUP_5.def", "x" : 270, "y" : 253, "z" : -1, "campaignBonus" : "BoDmant2.pcx", "border" : "TODMAN2.bmp",  "area" : "TZDMAN2.bmp" },
+				"dwellingUpLvl7": { "animation" : "TBDNUP_6.def", "x" : 550, "y" : 0,   "z" : -1, "campaignBonus" : "BoDdrag2.pcx", "border" : "TODDRA2A.bmp", "area" : "TZDDRA2A.bmp" }
 			},
 
 			"musicTheme" : [ "music/Dungeon" ],

+ 35 - 35
config/factions/fortress.json

@@ -80,43 +80,43 @@
 			"structures" :
 			{
 				"extraAnimation": { "animation" : "TBFREXT2.def", "x" : 372, "y" : 227, "z" : -1 },
-				"mageGuild1":     { "animation" : "TBFRMAGE.def", "x" : 0,   "y" : 200, "z" : -1, "border" : "TOFMAG1A.bmp", "area" : "TZFMAG1A.bmp" },
-				"mageGuild2":     { "animation" : "TBFRMAG2.def", "x" : 0,   "y" : 177, "z" : -1, "border" : "TOFMAG2A.bmp", "area" : "TZFMAG2A.bmp" },
-				"mageGuild3":     { "animation" : "TBFRMAG3.def", "x" : 0,   "y" : 135, "z" : -1, "border" : "TOFMAG3A.bmp", "area" : "TZFMAG3A.bmp" },
-				"tavern":         { "animation" : "TBFRTVRN.def", "x" : 634, "y" : 219, "z" : 3,  "border" : "TOFTAVA.bmp",  "area" : "TZFTAVA.bmp" },
-				"shipyard":       { "animation" : "TBFRDOCK.def", "x" : 197, "y" : 294, "z" : 1,  "border" : "TOFDCK2.bmp",  "area" : "TZFDCK2.bmp" },
-				"fort":           { "animation" : "TBFRCSTL.def", "x" : 368, "y" : 118, "z" : -2, "border" : "TOFCAS1.bmp",  "area" : "TZFCAS1.bmp" },
-				"citadel":        { "animation" : "TBFRCAS2.def", "x" : 368, "y" : 98,  "z" : -2, "border" : "TOFCAS2.bmp",  "area" : "TZFCAS2.bmp" },
-				"castle":         { "animation" : "TBFRCAS3.def", "x" : 368, "y" : 55,  "z" : -2, "border" : "TOFCAS3.bmp",  "area" : "TZFCAS3.bmp" },
-				"villageHall":    { "animation" : "TBFRHALL.def", "x" : 166, "y" : 128, "z" : 3,  "border" : "TOFHAL1.bmp",  "area" : "TZFHAL1.bmp" },
-				"townHall":       { "animation" : "TBFRHAL2.def", "x" : 166, "y" : 97,  "z" : 3,  "border" : "TOFHAL2.bmp",  "area" : "TZFHAL2.bmp" },
-				"cityHall":       { "animation" : "TBFRHAL3.def", "x" : 166, "y" : 51,  "z" : 3,  "border" : "TOFHAL3.bmp",  "area" : "TZFHAL3.bmp" },
-				"capitol":        { "animation" : "TBFRHAL4.def", "x" : 166, "y" : 2,   "z" : 3,  "border" : "TOFHAL4.bmp",  "area" : "TZFHAL4.bmp" },
-				"marketplace":    { "animation" : "TBFRMARK.def", "x" : 382, "y" : 219, "z" : 4,  "border" : "TOFMRKAA.bmp", "area" : "TZFMRKAA.bmp" },
-				"resourceSilo":   { "animation" : "TBFRSILO.def", "x" : 448, "y" : 210, "z" : 2,  "border" : "TOFMRK2A.bmp", "area" : "TZFMRK2A.bmp" },
-				"blacksmith":     { "animation" : "TBFRBLAK.def", "x" : 360, "y" : 160, "z" : 1, "border" : "TOFAIDA.bmp",  "area" : "TZFAIDA.bmp" },
-				"special1":       { "animation" : "TBFRSPEC.def", "x" : 703, "y" : 36,  "border" : "TOFCAGE.bmp",  "area" : "TZFCAGE.bmp" },
-				"horde1":         { "animation" : "TBFRHRD1.def", "x" : 641, "y" : 121, "z" : 1,  "border" : "TOFGNL1H.bmp", "area" : "TZFGNL1H.bmp", "hidden" : true },
-				"horde1Upgr":     { "animation" : "TBFRHRD2.def", "x" : 641, "y" : 68,  "z" : 1,  "border" : "TOFGNL2H.bmp", "area" : "TZFGNL2H.bmp", "hidden" : true, "builds" : "horde1" },
+				"mageGuild1":     { "animation" : "TBFRMAGE.def", "x" : 0,   "y" : 200, "z" : -1, "campaignBonus" : "BoFmage1.pcx", "border" : "TOFMAG1A.bmp", "area" : "TZFMAG1A.bmp" },
+				"mageGuild2":     { "animation" : "TBFRMAG2.def", "x" : 0,   "y" : 177, "z" : -1, "campaignBonus" : "BoFmage2.pcx", "border" : "TOFMAG2A.bmp", "area" : "TZFMAG2A.bmp" },
+				"mageGuild3":     { "animation" : "TBFRMAG3.def", "x" : 0,   "y" : 135, "z" : -1, "campaignBonus" : "BoFmage3.pcx", "border" : "TOFMAG3A.bmp", "area" : "TZFMAG3A.bmp" },
+				"tavern":         { "animation" : "TBFRTVRN.def", "x" : 634, "y" : 219, "z" : 3,  "campaignBonus" : "BoFtav.pcx",   "border" : "TOFTAVA.bmp",  "area" : "TZFTAVA.bmp" },
+				"shipyard":       { "animation" : "TBFRDOCK.def", "x" : 197, "y" : 294, "z" : 1,  "campaignBonus" : "BoFship.pcx",  "border" : "TOFDCK2.bmp",  "area" : "TZFDCK2.bmp" },
+				"fort":           { "animation" : "TBFRCSTL.def", "x" : 368, "y" : 118, "z" : -2, "campaignBonus" : "BoFcast1.pcx", "border" : "TOFCAS1.bmp",  "area" : "TZFCAS1.bmp" },
+				"citadel":        { "animation" : "TBFRCAS2.def", "x" : 368, "y" : 98,  "z" : -2, "campaignBonus" : "BoFcast2.pcx", "border" : "TOFCAS2.bmp",  "area" : "TZFCAS2.bmp" },
+				"castle":         { "animation" : "TBFRCAS3.def", "x" : 368, "y" : 55,  "z" : -2, "campaignBonus" : "BoFcast3.pcx", "border" : "TOFCAS3.bmp",  "area" : "TZFCAS3.bmp" },
+				"villageHall":    { "animation" : "TBFRHALL.def", "x" : 166, "y" : 128, "z" : 3,  "campaignBonus" : "BoFhall1.pcx", "border" : "TOFHAL1.bmp",  "area" : "TZFHAL1.bmp" },
+				"townHall":       { "animation" : "TBFRHAL2.def", "x" : 166, "y" : 97,  "z" : 3,  "campaignBonus" : "BoFhall2.pcx", "border" : "TOFHAL2.bmp",  "area" : "TZFHAL2.bmp" },
+				"cityHall":       { "animation" : "TBFRHAL3.def", "x" : 166, "y" : 51,  "z" : 3,  "campaignBonus" : "BoFhall3.pcx", "border" : "TOFHAL3.bmp",  "area" : "TZFHAL3.bmp" },
+				"capitol":        { "animation" : "TBFRHAL4.def", "x" : 166, "y" : 2,   "z" : 3,  "campaignBonus" : "BoFhall4.pcx", "border" : "TOFHAL4.bmp",  "area" : "TZFHAL4.bmp" },
+				"marketplace":    { "animation" : "TBFRMARK.def", "x" : 382, "y" : 219, "z" : 4,  "campaignBonus" : "BoFmark1.pcx", "border" : "TOFMRKAA.bmp", "area" : "TZFMRKAA.bmp" },
+				"resourceSilo":   { "animation" : "TBFRSILO.def", "x" : 448, "y" : 210, "z" : 2,  "campaignBonus" : "BoFmark2.pcx", "border" : "TOFMRK2A.bmp", "area" : "TZFMRK2A.bmp" },
+				"blacksmith":     { "animation" : "TBFRBLAK.def", "x" : 360, "y" : 160, "z" : 1,  "campaignBonus" : "BoFapoth.pcx", "border" : "TOFAIDA.bmp",  "area" : "TZFAIDA.bmp" },
+				"special1":       { "animation" : "TBFRSPEC.def", "x" : 703, "y" : 36,            "campaignBonus" : "BoFcage.pcx",  "border" : "TOFCAGE.bmp",  "area" : "TZFCAGE.bmp" },
+				"horde1":         { "animation" : "TBFRHRD1.def", "x" : 641, "y" : 121, "z" : 1,  "campaignBonus" : "BoFgno1h.pcx", "border" : "TOFGNL1H.bmp", "area" : "TZFGNL1H.bmp", "hidden" : true },
+				"horde1Upgr":     { "animation" : "TBFRHRD2.def", "x" : 641, "y" : 68,  "z" : 1,  "campaignBonus" : "BoFgno2h.pcx", "border" : "TOFGNL2H.bmp", "area" : "TZFGNL2H.bmp", "hidden" : true, "builds" : "horde1" },
 				"ship":           { "animation" : "TBFRBOAT.def", "x" : 197, "y" : 294, "z" : 1,  "border" : "TOFDCK1.bmp",  "area" : "TZFDCK1.bmp", "hidden" : true },
-				"special2":       { "animation" : "TBFREXT0.def", "x" : 341, "y" : 174, "z" : 0, "border" : "TOFCASD.bmp",  "area" : "TZFCASD.bmp" },
-				"special3":       { "animation" : "TBFREXT1.def", "x" : 349, "y" : 79,  "z" : -3, "border" : "TOFCASA.bmp",  "area" : "TZFCASA.bmp" },
-				"grail":          { "animation" : "TBFRHOLY.def", "x" : 468, "y" : 260, "z" : 5,  "border" : "TOFHLYAA.bmp", "area" : "TZFHLYAA.bmp" },
+				"special2":       { "animation" : "TBFREXT0.def", "x" : 341, "y" : 174, "z" : 0,  "campaignBonus" : "BoFcastD.pcx", "border" : "TOFCASD.bmp",  "area" : "TZFCASD.bmp" },
+				"special3":       { "animation" : "TBFREXT1.def", "x" : 349, "y" : 79,  "z" : -3, "campaignBonus" : "BoFcastA.pcx", "border" : "TOFCASA.bmp",  "area" : "TZFCASA.bmp" },
+				"grail":          { "animation" : "TBFRHOLY.def", "x" : 468, "y" : 260, "z" : 5,  "campaignBonus" : "BoFgrail.pcx", "border" : "TOFHLYAA.bmp", "area" : "TZFHLYAA.bmp" },
 				"extraCapitol":   { "animation" : "TBFRWTRW.def", "x" : 320, "y" : 141, "z" : 2 },
-				"dwellingLvl1":   { "animation" : "TBFRDW_0.def", "x" : 641, "y" : 168, "z" : 1,  "border" : "TOFGNL1.bmp",  "area" : "TZFGNL1.bmp" },
-				"dwellingLvl2":   { "animation" : "TBFRDW_1.def", "x" : 141, "y" : 178, "border" : "TOFLIZ1.bmp",  "area" : "TZFLIZ1.bmp" },
-				"dwellingLvl3":   { "animation" : "TBFRDW_3.def", "x" : 192, "y" : 85,  "border" : "TOFFLY1A.bmp", "area" : "TZFFLY1A.bmp" },
-				"dwellingLvl4":   { "animation" : "TBFRDW_4.def", "x" : 0,   "y" : 292, "z" : 1, "border" : "TOFBAS1.bmp",  "area" : "TZFBAS1.bmp" },
-				"dwellingLvl5":   { "animation" : "TBFRDW_2.def", "x" : 15,  "y" : 127, "z" : -2, "border" : "TOFGOR1.bmp",  "area" : "TZFGOR1.bmp" },
-				"dwellingLvl6":   { "animation" : "TBFRDW_5.def", "x" : 0,   "y" : 4,   "border" : "TOFWYV1.bmp",  "area" : "TZFWYV1.bmp" },
-				"dwellingLvl7":   { "animation" : "TBFRDW_6.def", "x" : 612, "y" : 291, "z" : 5,  "border" : "TOFHYD1A.bmp", "area" : "TZFHYD1A.bmp" },
-				"dwellingUpLvl1": { "animation" : "TBFRUP_0.def", "x" : 641, "y" : 107, "z" : 1,  "border" : "TOFGNL2.bmp",  "area" : "TZFGNL2.bmp" },
-				"dwellingUpLvl2": { "animation" : "TBFRUP_1.def", "x" : 125, "y" : 163, "border" : "TOFLIZ2.bmp",  "area" : "TZFLIZ2.bmp" },
-				"dwellingUpLvl3": { "animation" : "TBFRUP_3.def", "x" : 159, "y" : 19,  "border" : "TOFFLY2A.bmp", "area" : "TZFFLY2A.bmp" },
-				"dwellingUpLvl4": { "animation" : "TBFRUP_4.def", "x" : 0,   "y" : 257, "z" : 1, "border" : "TOFBAS2.bmp",  "area" : "TZFBAS2.bmp" },
-				"dwellingUpLvl5": { "animation" : "TBFRUP_2.def", "x" : 15,  "y" : 69,  "z" : -2, "border" : "TOFGOR2.bmp",  "area" : "TZFGOR2.bmp" },
-				"dwellingUpLvl6": { "animation" : "TBFRUP_5.def", "x" : 0,   "y" : 4,   "border" : "TOFWYV2.bmp",  "area" : "TZFWYV2.bmp" },
-				"dwellingUpLvl7": { "animation" : "TBFRUP_6.def", "x" : 587, "y" : 263, "z" : 5,  "border" : "TOFHYD2A.bmp", "area" : "TZFHYD2A.bmp" }
+				"dwellingLvl1":   { "animation" : "TBFRDW_0.def", "x" : 641, "y" : 168, "z" : 1,  "campaignBonus" : "BoFgnol1.pcx", "border" : "TOFGNL1.bmp",  "area" : "TZFGNL1.bmp" },
+				"dwellingLvl2":   { "animation" : "TBFRDW_1.def", "x" : 141, "y" : 178,           "campaignBonus" : "BoFlizr1.pcx", "border" : "TOFLIZ1.bmp",  "area" : "TZFLIZ1.bmp" },
+				"dwellingLvl3":   { "animation" : "TBFRDW_3.def", "x" : 192, "y" : 85,            "campaignBonus" : "BoFfly1.pcx",  "border" : "TOFFLY1A.bmp", "area" : "TZFFLY1A.bmp" },
+				"dwellingLvl4":   { "animation" : "TBFRDW_4.def", "x" : 0,   "y" : 292, "z" : 1,  "campaignBonus" : "BoFbas1.pcx",  "border" : "TOFBAS1.bmp",  "area" : "TZFBAS1.bmp" },
+				"dwellingLvl5":   { "animation" : "TBFRDW_2.def", "x" : 15,  "y" : 127, "z" : -2, "campaignBonus" : "BoFgorg1.pcx", "border" : "TOFGOR1.bmp",  "area" : "TZFGOR1.bmp" },
+				"dwellingLvl6":   { "animation" : "TBFRDW_5.def", "x" : 0,   "y" : 4,             "campaignBonus" : "BoFwyvr1.pcx", "border" : "TOFWYV1.bmp",  "area" : "TZFWYV1.bmp" },
+				"dwellingLvl7":   { "animation" : "TBFRDW_6.def", "x" : 612, "y" : 291, "z" : 5,  "campaignBonus" : "BoFhydr1.pcx", "border" : "TOFHYD1A.bmp", "area" : "TZFHYD1A.bmp" },
+				"dwellingUpLvl1": { "animation" : "TBFRUP_0.def", "x" : 641, "y" : 107, "z" : 1,  "campaignBonus" : "BoFgnol2.pcx", "border" : "TOFGNL2.bmp",  "area" : "TZFGNL2.bmp" },
+				"dwellingUpLvl2": { "animation" : "TBFRUP_1.def", "x" : 125, "y" : 163,           "campaignBonus" : "BoFlizr2.pcx", "border" : "TOFLIZ2.bmp",  "area" : "TZFLIZ2.bmp" },
+				"dwellingUpLvl3": { "animation" : "TBFRUP_3.def", "x" : 159, "y" : 19,            "campaignBonus" : "BoFfly2.pcx",  "border" : "TOFFLY2A.bmp", "area" : "TZFFLY2A.bmp" },
+				"dwellingUpLvl4": { "animation" : "TBFRUP_4.def", "x" : 0,   "y" : 257, "z" : 1,  "campaignBonus" : "BoFbas2.pcx",  "border" : "TOFBAS2.bmp",  "area" : "TZFBAS2.bmp" },
+				"dwellingUpLvl5": { "animation" : "TBFRUP_2.def", "x" : 15,  "y" : 69,  "z" : -2, "campaignBonus" : "BoFgorg2.pcx", "border" : "TOFGOR2.bmp",  "area" : "TZFGOR2.bmp" },
+				"dwellingUpLvl6": { "animation" : "TBFRUP_5.def", "x" : 0,   "y" : 4,             "campaignBonus" : "BoFwyvr2.pcx", "border" : "TOFWYV2.bmp",  "area" : "TZFWYV2.bmp" },
+				"dwellingUpLvl7": { "animation" : "TBFRUP_6.def", "x" : 587, "y" : 263, "z" : 5,  "campaignBonus" : "BoFhydr2.pcx", "border" : "TOFHYD2A.bmp", "area" : "TZFHYD2A.bmp" }
 			},
 
 			"musicTheme" : [ "music/FortressTown" ],

+ 38 - 38
config/factions/inferno.json

@@ -80,44 +80,44 @@
 			},
 			"structures" :
 			{
-				"mageGuild1":     { "animation" : "TBINMAGE.def", "x" : 667, "y" : 127, "border" : "TOIMAG1A.bmp", "area" : "TZIMAG1A.bmp" },
-				"mageGuild2":     { "animation" : "TBINMAG2.def", "x" : 667, "y" : 101, "border" : "TOIMAG2A.bmp", "area" : "TZIMAG2A.bmp" },
-				"mageGuild3":     { "animation" : "TBINMAG3.def", "x" : 667, "y" : 83,  "border" : "TOIMAG3A.bmp", "area" : "TZIMAG3A.bmp" },
-				"mageGuild4":     { "animation" : "TBINMAG4.def", "x" : 667, "y" : 56,  "border" : "TOIMAG4A.bmp", "area" : "TZIMAG4A.bmp" },
-				"mageGuild5":     { "animation" : "TBINMAG5.def", "x" : 667, "y" : 35,  "border" : "TOIMAG5A.bmp", "area" : "TZIMAG5A.bmp" },
-				"tavern":         { "animation" : "TBINTVRN.def", "x" : 105, "y" : 219, "z" : 1,  "border" : "TOITAV.bmp",   "area" : "TZITAV.bmp" },
-				"fort":           { "animation" : "TBINCSTL.def", "x" : 222, "y" : 44,  "z" : -2, "border" : "TOICAS2A.bmp", "area" : "TZICAS2A.bmp" },
-				"citadel":        { "animation" : "TBINCAS2.def", "x" : 222, "y" : 44,  "z" : -2, "border" : "TOICAS1A.bmp", "area" : "TZICAS1A.bmp" },
-				"castle":         { "animation" : "TBINCAS3.def", "x" : 222, "y" : 18,  "z" : -2, "border" : "TOICAS3A.bmp", "area" : "TZICAS3A.bmp" },
-				"villageHall":    { "animation" : "TBINHALL.def", "x" : 0,   "y" : 174, "border" : "TOIHAL1.bmp",  "area" : "TZIHAL1.bmp"  },
-				"townHall":       { "animation" : "TBINHAL2.def", "x" : 0,   "y" : 174, "border" : "TOIHAL2.bmp",  "area" : "TZIHAL2.bmp"  },
-				"cityHall":       { "animation" : "TBINHAL3.def", "x" : 0,   "y" : 174, "border" : "TOIHAL3.bmp",  "area" : "TZIHAL3.bmp"  },
-				"capitol":        { "animation" : "TBINHAL4.def", "x" : 0,   "y" : 131, "border" : "TOIHAL4.bmp",  "area" : "TZIHAL4.bmp"  },
-				"marketplace":    { "animation" : "TBINMARK.def", "x" : 511, "y" : 301, "z" : 4,  "border" : "TOIMAR1.bmp",  "area" : "TZIMAR1.bmp" },
-				"resourceSilo":   { "animation" : "TBINSILO.def", "x" : 497, "y" : 337, "z" : 5,  "border" : "TOIMAR2.bmp",  "area" : "TZIMAR2.bmp" },
-				"blacksmith":     { "animation" : "TBINBLAK.def", "x" : 684, "y" : 253, "z" : 1,  "border" : "TOIBLKA.bmp",  "area" : "TZIBLKA.bmp" },
-				"horde1":         { "animation" : "TBINHRD1.def", "x" : 614, "y" : 256, "border" : "TOIMP1HA.bmp", "area" : "TZIMP1HA.bmp", "hidden" : true },
-				"horde1Upgr":     { "animation" : "TBINHRD2.def", "x" : 614, "y" : 221, "border" : "TOIMP2HA.bmp", "area" : "TZIMP2HA.bmp", "hidden" : true, "builds" : "horde1" },
-				"special2":       { "animation" : "TBINEXT0.def", "x" : 297, "y" : 0,   "z" : -4, "border" : "TOICAB1A.bmp", "area" : "TZICAB1A.bmp" },
-				"special3":       { "animation" : "TBINEXT1.def", "x" : 227, "y" : 174, "z" : -1,  "border" : "TOICASGA.bmp", "area" : "TZICASGA.bmp" },
-				"special4":       { "animation" : "TBINEXT2.def", "x" : 593, "y" : 104, "z" : -1, "border" : "TOIPAIN.bmp",  "area" : "TZIPAIN.bmp"  },
-				"horde2":         { "animation" : "TBINHRD3.def", "x" : 10,  "y" : 301, "border" : "TOIHND1H.bmp", "area" : "TZIHND1H.bmp", "hidden" : true },
-				"horde2Upgr":     { "animation" : "TBINHRD4.def", "x" : 9,   "y" : 273, "border" : "TOIHND2H.bmp", "area" : "TZIHND2H.bmp", "hidden" : true, "builds" : "horde2" },
-				"grail":          { "animation" : "TBINHOLY.def", "x" : 24,  "y" : 10,  "z" : -1, "border" : "TOIHOLY.bmp",  "area" : "TZIHOLY.bmp" },
-				"dwellingLvl1":   { "animation" : "TBINDW_0.def", "x" : 614, "y" : 256, "border" : "TOIMP1A.bmp",  "area" : "TZIMP1A.bmp"  },
-				"dwellingLvl2":   { "animation" : "TBINDW_1.def", "x" : 187, "y" : 248, "z" : 4,  "border" : "TOIGOG1A.bmp", "area" : "TZIGOG1A.bmp" },
-				"dwellingLvl3":   { "animation" : "TBINDW_2.def", "x" : 9,   "y" : 325, "border" : "TOIHND1.bmp",  "area" : "TZIHND1.bmp"  },
-				"dwellingLvl4":   { "animation" : "TBINDW_3.def", "x" : 414, "y" : 204, "z" : 2,  "border" : "TOIDMN1.bmp",  "area" : "TZIDMN1.bmp" },
-				"dwellingLvl5":   { "animation" : "TBINDW_4.def", "x" : 359, "y" : 296, "z" : 3,  "border" : "TOIPIT1.bmp",  "area" : "TZIPIT1.bmp" },
-				"dwellingLvl6":   { "animation" : "TBINDW_5.def", "x" : 220, "y" : 350, "z" : 5,  "border" : "TOIEFR1.bmp",  "area" : "TZIEFR1.bmp" },
-				"dwellingLvl7":   { "animation" : "TBINDW_6.def", "x" : 420, "y" : 153, "z" : -3, "border" : "TOIDVL1.bmp",  "area" : "TZIDVL1.bmp" },
-				"dwellingUpLvl1": { "animation" : "TBINUP_0.def", "x" : 614, "y" : 221, "border" : "TOIMP2A.bmp",  "area" : "TZIMP2A.bmp"  },
-				"dwellingUpLvl2": { "animation" : "TBINUP_1.def", "x" : 187, "y" : 212, "z" : 4,  "border" : "TOIGOG2A.bmp", "area" : "TZIGOG2A.bmp" },
-				"dwellingUpLvl3": { "animation" : "TBINUP_2.def", "x" : 9,   "y" : 273, "border" : "TOIHND2.bmp",  "area" : "TZIHND2.bmp"  },
-				"dwellingUpLvl4": { "animation" : "TBINUP_3.def", "x" : 412, "y" : 197, "z" : 2,  "border" : "TOIDMN2.bmp",  "area" : "TZIDMN2.bmp" },
-				"dwellingUpLvl5": { "animation" : "TBINUP_4.def", "x" : 359, "y" : 244, "z" : 3,  "border" : "TOIPIT2.bmp",  "area" : "TZIPIT2.bmp" },
-				"dwellingUpLvl6": { "animation" : "TBINUP_5.def", "x" : 220, "y" : 282, "z" : 5,  "border" : "TOIEFR2.bmp",  "area" : "TZIEFR2.bmp" },
-				"dwellingUpLvl7": { "animation" : "TBINUP_6.def", "x" : 420, "y" : 105, "z" : -3, "border" : "TOIDVL2.bmp",  "area" : "TZIDVL2.bmp" }
+				"mageGuild1":     { "animation" : "TBINMAGE.def", "x" : 667, "y" : 127,           "campaignBonus" : "BoIMag1.pcx",  "border" : "TOIMAG1A.bmp", "area" : "TZIMAG1A.bmp" },
+				"mageGuild2":     { "animation" : "TBINMAG2.def", "x" : 667, "y" : 101,           "campaignBonus" : "BoIMag2.pcx",  "border" : "TOIMAG2A.bmp", "area" : "TZIMAG2A.bmp" },
+				"mageGuild3":     { "animation" : "TBINMAG3.def", "x" : 667, "y" : 83,            "campaignBonus" : "BoIMag3.pcx",  "border" : "TOIMAG3A.bmp", "area" : "TZIMAG3A.bmp" },
+				"mageGuild4":     { "animation" : "TBINMAG4.def", "x" : 667, "y" : 56,            "campaignBonus" : "BoIMag4.pcx",  "border" : "TOIMAG4A.bmp", "area" : "TZIMAG4A.bmp" },
+				"mageGuild5":     { "animation" : "TBINMAG5.def", "x" : 667, "y" : 35,            "campaignBonus" : "BoIMag5.pcx",  "border" : "TOIMAG5A.bmp", "area" : "TZIMAG5A.bmp" },
+				"tavern":         { "animation" : "TBINTVRN.def", "x" : 105, "y" : 219, "z" : 1,  "campaignBonus" : "BoITav.pcx",   "border" : "TOITAV.bmp",   "area" : "TZITAV.bmp" },
+				"fort":           { "animation" : "TBINCSTL.def", "x" : 222, "y" : 44,  "z" : -2, "campaignBonus" : "BoICas1.pcx",  "border" : "TOICAS2A.bmp", "area" : "TZICAS2A.bmp" },
+				"citadel":        { "animation" : "TBINCAS2.def", "x" : 222, "y" : 44,  "z" : -2, "campaignBonus" : "BoICas2.pcx",  "border" : "TOICAS1A.bmp", "area" : "TZICAS1A.bmp" },
+				"castle":         { "animation" : "TBINCAS3.def", "x" : 222, "y" : 18,  "z" : -2, "campaignBonus" : "BoICas3.pcx",  "border" : "TOICAS3A.bmp", "area" : "TZICAS3A.bmp" },
+				"villageHall":    { "animation" : "TBINHALL.def", "x" : 0,   "y" : 174,           "campaignBonus" : "BoIHal1.pcx",  "border" : "TOIHAL1.bmp",  "area" : "TZIHAL1.bmp"  },
+				"townHall":       { "animation" : "TBINHAL2.def", "x" : 0,   "y" : 174,           "campaignBonus" : "BoIHal2.pcx",  "border" : "TOIHAL2.bmp",  "area" : "TZIHAL2.bmp"  },
+				"cityHall":       { "animation" : "TBINHAL3.def", "x" : 0,   "y" : 174,           "campaignBonus" : "BoIHal3.pcx",  "border" : "TOIHAL3.bmp",  "area" : "TZIHAL3.bmp"  },
+				"capitol":        { "animation" : "TBINHAL4.def", "x" : 0,   "y" : 131,           "campaignBonus" : "BoIHal4.pcx",  "border" : "TOIHAL4.bmp",  "area" : "TZIHAL4.bmp"  },
+				"marketplace":    { "animation" : "TBINMARK.def", "x" : 511, "y" : 301, "z" : 4,  "campaignBonus" : "BoIMrk1.pcx",  "border" : "TOIMAR1.bmp",  "area" : "TZIMAR1.bmp" },
+				"resourceSilo":   { "animation" : "TBINSILO.def", "x" : 497, "y" : 337, "z" : 5,  "campaignBonus" : "BoIMrk2.pcx",  "border" : "TOIMAR2.bmp",  "area" : "TZIMAR2.bmp" },
+				"blacksmith":     { "animation" : "TBINBLAK.def", "x" : 684, "y" : 253, "z" : 1,  "campaignBonus" : "BoIBlak.pcx",  "border" : "TOIBLKA.bmp",  "area" : "TZIBLKA.bmp" },
+				"horde1":         { "animation" : "TBINHRD1.def", "x" : 614, "y" : 256,           "campaignBonus" : "BoIImpH.pcx",  "border" : "TOIMP1HA.bmp", "area" : "TZIMP1HA.bmp", "hidden" : true },
+				"horde1Upgr":     { "animation" : "TBINHRD2.def", "x" : 614, "y" : 221,           "campaignBonus" : "BoIImp2H.pcx", "border" : "TOIMP2HA.bmp", "area" : "TZIMP2HA.bmp", "hidden" : true, "builds" : "horde1" },
+				"special2":       { "animation" : "TBINEXT0.def", "x" : 297, "y" : 0,   "z" : -4, "campaignBonus" : "BoICasB.pcx",  "border" : "TOICAB1A.bmp", "area" : "TZICAB1A.bmp" },
+				"special3":       { "animation" : "TBINEXT1.def", "x" : 227, "y" : 174, "z" : -1, "campaignBonus" : "BoICasG.pcx",  "border" : "TOICASGA.bmp", "area" : "TZICASGA.bmp" },
+				"special4":       { "animation" : "TBINEXT2.def", "x" : 593, "y" : 104, "z" : -1, "campaignBonus" : "BoIMagO.pcx",  "border" : "TOIPAIN.bmp",  "area" : "TZIPAIN.bmp"  },
+				"horde2":         { "animation" : "TBINHRD3.def", "x" : 10,  "y" : 301,           "campaignBonus" : "BoIHndH.pcx",  "border" : "TOIHND1H.bmp", "area" : "TZIHND1H.bmp", "hidden" : true },
+				"horde2Upgr":     { "animation" : "TBINHRD4.def", "x" : 9,   "y" : 273,           "campaignBonus" : "BoIHnd2H.pcx", "border" : "TOIHND2H.bmp", "area" : "TZIHND2H.bmp", "hidden" : true, "builds" : "horde2" },
+				"grail":          { "animation" : "TBINHOLY.def", "x" : 24,  "y" : 10,  "z" : -1, "campaignBonus" : "BoIHoly.pcx",  "border" : "TOIHOLY.bmp",  "area" : "TZIHOLY.bmp" },
+				"dwellingLvl1":   { "animation" : "TBINDW_0.def", "x" : 614, "y" : 256,           "campaignBonus" : "BoIImp1.pcx",  "border" : "TOIMP1A.bmp",  "area" : "TZIMP1A.bmp"  },
+				"dwellingLvl2":   { "animation" : "TBINDW_1.def", "x" : 187, "y" : 248, "z" : 4,  "campaignBonus" : "BoIGog1.pcx",  "border" : "TOIGOG1A.bmp", "area" : "TZIGOG1A.bmp" },
+				"dwellingLvl3":   { "animation" : "TBINDW_2.def", "x" : 9,   "y" : 325,           "campaignBonus" : "BoIHnd1.pcx",  "border" : "TOIHND1.bmp",  "area" : "TZIHND1.bmp"  },
+				"dwellingLvl4":   { "animation" : "TBINDW_3.def", "x" : 414, "y" : 204, "z" : 2,  "campaignBonus" : "BoIDmn1.pcx",  "border" : "TOIDMN1.bmp",  "area" : "TZIDMN1.bmp" },
+				"dwellingLvl5":   { "animation" : "TBINDW_4.def", "x" : 359, "y" : 296, "z" : 3,  "campaignBonus" : "BoIPit1.pcx",  "border" : "TOIPIT1.bmp",  "area" : "TZIPIT1.bmp" },
+				"dwellingLvl6":   { "animation" : "TBINDW_5.def", "x" : 220, "y" : 350, "z" : 5,  "campaignBonus" : "BoIEfr1.pcx",  "border" : "TOIEFR1.bmp",  "area" : "TZIEFR1.bmp" },
+				"dwellingLvl7":   { "animation" : "TBINDW_6.def", "x" : 420, "y" : 153, "z" : -3, "campaignBonus" : "BoIDvl1.pcx",  "border" : "TOIDVL1.bmp",  "area" : "TZIDVL1.bmp" },
+				"dwellingUpLvl1": { "animation" : "TBINUP_0.def", "x" : 614, "y" : 221,           "campaignBonus" : "BoIImp2.pcx",  "border" : "TOIMP2A.bmp",  "area" : "TZIMP2A.bmp"  },
+				"dwellingUpLvl2": { "animation" : "TBINUP_1.def", "x" : 187, "y" : 212, "z" : 4,  "campaignBonus" : "BoIGog2.pcx",  "border" : "TOIGOG2A.bmp", "area" : "TZIGOG2A.bmp" },
+				"dwellingUpLvl3": { "animation" : "TBINUP_2.def", "x" : 9,   "y" : 273,           "campaignBonus" : "BoIHnd2.pcx",  "border" : "TOIHND2.bmp",  "area" : "TZIHND2.bmp"  },
+				"dwellingUpLvl4": { "animation" : "TBINUP_3.def", "x" : 412, "y" : 197, "z" : 2,  "campaignBonus" : "BoIDmn2.pcx",  "border" : "TOIDMN2.bmp",  "area" : "TZIDMN2.bmp" },
+				"dwellingUpLvl5": { "animation" : "TBINUP_4.def", "x" : 359, "y" : 244, "z" : 3,  "campaignBonus" : "BoIPit2.pcx",  "border" : "TOIPIT2.bmp",  "area" : "TZIPIT2.bmp" },
+				"dwellingUpLvl6": { "animation" : "TBINUP_5.def", "x" : 220, "y" : 282, "z" : 5,  "campaignBonus" : "BoIEfr2.pcx",  "border" : "TOIEFR2.bmp",  "area" : "TZIEFR2.bmp" },
+				"dwellingUpLvl7": { "animation" : "TBINUP_6.def", "x" : 420, "y" : 105, "z" : -3, "campaignBonus" : "BoIDvl2.pcx",  "border" : "TOIDVL2.bmp",  "area" : "TZIDVL2.bmp" }
 			},
 
 			"musicTheme" : [ "music/InfernoTown" ],

+ 37 - 37
config/factions/necropolis.json

@@ -81,47 +81,47 @@
 			"structures" :
 			{
 				"extraAnimation": { "animation" : "TBNCEXT2.def", "x" : 25,  "y" : 279, "z" : 9 },
-				"mageGuild1":     { "animation" : "TBNCMAGE.def", "x" : 341, "y" : 116, "z" : -1, "border" : "TONMAG1.bmp",  "area" : "TZNMAG1.bmp" },
-				"mageGuild2":     { "animation" : "TBNCMAG2.def", "x" : 341, "y" : 97,  "z" : -1, "border" : "TONMAG2.bmp",  "area" : "TZNMAG2.bmp" },
-				"mageGuild3":     { "animation" : "TBNCMAG3.def", "x" : 341, "y" : 78,  "z" : -1, "border" : "TONMAG3.bmp",  "area" : "TZNMAG3.bmp" },
-				"mageGuild4":     { "animation" : "TBNCMAG4.def", "x" : 340, "y" : 62,  "z" : -1, "border" : "TONMAG4.bmp",  "area" : "TZNMAG4.bmp" },
-				"mageGuild5":     { "animation" : "TBNCMAG5.def", "x" : 343, "y" : 35,  "z" : -1, "border" : "TONMAG5.bmp",  "area" : "TZNMAG5.bmp" },
-				"tavern":         { "animation" : "TBNCTVRN.def", "x" : 508, "y" : 189, "border" : "TONTAV.bmp",   "area" : "TZNTAV.bmp"  },
-				"shipyard":       { "animation" : "TBNCDOCK.def", "x" : 617, "y" : 265, "z" : -2, "border" : "TONSHPBA.bmp", "area" : "TZNSHPBA.bmp" },
-				"fort":           { "animation" : "TBNCCSTL.def", "x" : 138, "y" : 66,  "border" : "TONCAS1.bmp",  "area" : "TZNCAS1.bmp" },
-				"citadel":        { "animation" : "TBNCCAS2.def", "x" : 139, "y" : 66,  "border" : "TONCAS2.bmp",  "area" : "TZNCAS2.bmp" },
-				"castle":         { "animation" : "TBNCCAS3.def", "x" : 34,  "y" : 18,  "border" : "TONCAS3.bmp",  "area" : "TZNCAS3.bmp" },
-				"villageHall":    { "animation" : "TBNCHALL.def", "x" : 468, "y" : 76,  "z" : -2, "border" : "TONHAL1.bmp",  "area" : "TZNHAL1.bmp" },
-				"townHall":       { "animation" : "TBNCHAL2.def", "x" : 482, "y" : 56,  "z" : -2, "border" : "TONHAL2.bmp",  "area" : "TZNHAL2.bmp" },
-				"cityHall":       { "animation" : "TBNCHAL3.def", "x" : 478, "y" : 26,  "z" : -2, "border" : "TONHAL3.bmp",  "area" : "TZNHAL3.bmp" },
-				"capitol":        { "animation" : "TBNCHAL4.def", "x" : 481, "y" : 26,  "z" : -2, "border" : "TONHAL4.bmp",  "area" : "TZNHAL4.bmp" },
-				"marketplace":    { "animation" : "TBNCMARK.def", "x" : 347, "y" : 215, "z" : 2,  "border" : "TONMRK1.bmp",  "area" : "TZNMRK1.bmp" },
-				"resourceSilo":   { "animation" : "TBNCSILO.def", "x" : 276, "y" : 185, "z" : 1,  "border" : "TONMRK2.bmp",  "area" : "TZNMRK2.bmp" },
-				"blacksmith":     { "animation" : "TBNCBLAK.def", "x" : 382, "y" : 252, "z" : 7,  "border" : "TONSMITA.bmp", "area" : "TZNSMITA.bmp" },
-				"special1":       { "animation" : "TBNCSPEC.def", "x" : 18,  "y" : 0,   "z" : -1, "border" : "TONSHRDA.bmp", "area" : "TZNSHRDA.bmp" },
-				"horde1":         { "animation" : "TBNCHRD1.def", "x" : 80,  "y" : 222, "z" : 5, "border" : "TONSKE1H.bmp", "area" : "TZNSKE1H.bmp", "hidden" : true },
-				"horde1Upgr":     { "animation" : "TBNCHRD2.def", "x" : 64,  "y" : 222, "z" : 5, "border" : "TONSKE2H.bmp", "area" : "TZNSKE2H.bmp", "hidden" : true, "builds" : "horde1" },
+				"mageGuild1":     { "animation" : "TBNCMAGE.def", "x" : 341, "y" : 116, "z" : -1, "campaignBonus" : "BoNmage1.pcx", "border" : "TONMAG1.bmp",  "area" : "TZNMAG1.bmp" },
+				"mageGuild2":     { "animation" : "TBNCMAG2.def", "x" : 341, "y" : 97,  "z" : -1, "campaignBonus" : "BoNmage2.pcx", "border" : "TONMAG2.bmp",  "area" : "TZNMAG2.bmp" },
+				"mageGuild3":     { "animation" : "TBNCMAG3.def", "x" : 341, "y" : 78,  "z" : -1, "campaignBonus" : "BoNmage3.pcx", "border" : "TONMAG3.bmp",  "area" : "TZNMAG3.bmp" },
+				"mageGuild4":     { "animation" : "TBNCMAG4.def", "x" : 340, "y" : 62,  "z" : -1, "campaignBonus" : "BoNmage4.pcx", "border" : "TONMAG4.bmp",  "area" : "TZNMAG4.bmp" },
+				"mageGuild5":     { "animation" : "TBNCMAG5.def", "x" : 343, "y" : 35,  "z" : -1, "campaignBonus" : "BoNmage5.pcx", "border" : "TONMAG5.bmp",  "area" : "TZNMAG5.bmp" },
+				"tavern":         { "animation" : "TBNCTVRN.def", "x" : 508, "y" : 189,           "campaignBonus" : "BoNtav.pcx", "border" : "TONTAV.bmp",   "area" : "TZNTAV.bmp"  },
+				"shipyard":       { "animation" : "TBNCDOCK.def", "x" : 617, "y" : 265, "z" : -2, "campaignBonus" : "BoNship.pcx", "border" : "TONSHPBA.bmp", "area" : "TZNSHPBA.bmp" },
+				"fort":           { "animation" : "TBNCCSTL.def", "x" : 138, "y" : 66,            "campaignBonus" : "BoNcast1.pcx", "border" : "TONCAS1.bmp",  "area" : "TZNCAS1.bmp" },
+				"citadel":        { "animation" : "TBNCCAS2.def", "x" : 139, "y" : 66,            "campaignBonus" : "BoNcast2.pcx", "border" : "TONCAS2.bmp",  "area" : "TZNCAS2.bmp" },
+				"castle":         { "animation" : "TBNCCAS3.def", "x" : 34,  "y" : 18,            "campaignBonus" : "BoNcast3.pcx", "border" : "TONCAS3.bmp",  "area" : "TZNCAS3.bmp" },
+				"villageHall":    { "animation" : "TBNCHALL.def", "x" : 468, "y" : 76,  "z" : -2, "campaignBonus" : "BoNhall1.pcx", "border" : "TONHAL1.bmp",  "area" : "TZNHAL1.bmp" },
+				"townHall":       { "animation" : "TBNCHAL2.def", "x" : 482, "y" : 56,  "z" : -2, "campaignBonus" : "BoNhall2.pcx", "border" : "TONHAL2.bmp",  "area" : "TZNHAL2.bmp" },
+				"cityHall":       { "animation" : "TBNCHAL3.def", "x" : 478, "y" : 26,  "z" : -2, "campaignBonus" : "BoNhall3.pcx", "border" : "TONHAL3.bmp",  "area" : "TZNHAL3.bmp" },
+				"capitol":        { "animation" : "TBNCHAL4.def", "x" : 481, "y" : 26,  "z" : -2, "campaignBonus" : "BoNhall4.pcx", "border" : "TONHAL4.bmp",  "area" : "TZNHAL4.bmp" },
+				"marketplace":    { "animation" : "TBNCMARK.def", "x" : 347, "y" : 215, "z" : 2,  "campaignBonus" : "BoNmark1.pcx", "border" : "TONMRK1.bmp",  "area" : "TZNMRK1.bmp" },
+				"resourceSilo":   { "animation" : "TBNCSILO.def", "x" : 276, "y" : 185, "z" : 1,  "campaignBonus" : "BoNmark2.pcx", "border" : "TONMRK2.bmp",  "area" : "TZNMRK2.bmp" },
+				"blacksmith":     { "animation" : "TBNCBLAK.def", "x" : 382, "y" : 252, "z" : 7,  "campaignBonus" : "BoNsmith.pcx", "border" : "TONSMITA.bmp", "area" : "TZNSMITA.bmp" },
+				"special1":       { "animation" : "TBNCSPEC.def", "x" : 18,  "y" : 0,   "z" : -1, "campaignBonus" : "BoNshrod.pcx", "border" : "TONSHRDA.bmp", "area" : "TZNSHRDA.bmp" },
+				"horde1":         { "animation" : "TBNCHRD1.def", "x" : 80,  "y" : 222, "z" : 5,  "campaignBonus" : "BoNskelH.pcx", "border" : "TONSKE1H.bmp", "area" : "TZNSKE1H.bmp", "hidden" : true },
+				"horde1Upgr":     { "animation" : "TBNCHRD2.def", "x" : 64,  "y" : 222, "z" : 5,  "campaignBonus" : "BoNnecro.pcx", "border" : "TONSKE2H.bmp", "area" : "TZNSKE2H.bmp", "hidden" : true, "builds" : "horde1" },
 				"ship":           { "animation" : "TBNCBOAT.def", "x" : 617, "y" : 265, "z" : -2, "border" : "TONSHPNA.bmp", "area" : "TZNSHPNA.bmp", "hidden" : true },
-				"special2":       { "animation" : "TBNCEXT0.def", "x" : 307, "y" : 61,  "z" : -2, "border" : "TONNECRA.bmp", "area" : "TZNNECRA.bmp" },
-				"special3":       { "animation" : "TBNCEXT1.def", "x" : 247, "y" : 275, "z" : 4,  "border" : "TONSKELT.bmp", "area" : "TZNSKELT.bmp" },
-				"grail":          { "animation" : "TBNCHOLY.def", "x" : 410, "y" : 88,  "border" : "TONHOLYA.bmp", "area" : "TZNHOLYA.bmp" },
+				"special2":       { "animation" : "TBNCEXT0.def", "x" : 307, "y" : 61,  "z" : -2, "campaignBonus" : "BoNnecro.pcx", "border" : "TONNECRA.bmp", "area" : "TZNNECRA.bmp" },
+				"special3":       { "animation" : "TBNCEXT1.def", "x" : 247, "y" : 275, "z" : 4,  "campaignBonus" : "BoNskelT.pcx", "border" : "TONSKELT.bmp", "area" : "TZNSKELT.bmp" },
+				"grail":          { "animation" : "TBNCHOLY.def", "x" : 410, "y" : 88,            "campaignBonus" : "BoNholyG.pcx", "border" : "TONHOLYA.bmp", "area" : "TZNHOLYA.bmp" },
 				"extraTownHall":  { "animation" : "TBNCEXT3.def", "x" : 0,   "y" : 241, "z" : 6 },
 				"extraCityHall":  { "animation" : "TBNCEXT4.def", "x" : 321, "y" : 255, "z" : 6 },
 				"extraCapitol":   { "animation" : "TBNCEXT5.def", "x" : 475, "y" : 257, "z" : 6 },
-				"dwellingLvl1":   { "animation" : "TBNCDW_0.def", "x" : 80,  "y" : 222, "z" : 5, "border" : "TONSKEL1.bmp", "area" : "TZNSKEL1.bmp" },
-				"dwellingLvl2":   { "animation" : "TBNCDW_1.def", "x" : 502, "y" : 223, "z" : 1, "border" : "TONZOMB1.bmp", "area" : "TZNZOMB1.bmp" },
-				"dwellingLvl3":   { "animation" : "TBNCDW_2.def", "x" : 0,   "y" : 187, "z" : 8, "border" : "TONWIGH1.bmp", "area" : "TZNWIGH1.bmp" },
-				"dwellingLvl4":   { "animation" : "TBNCDW_3.def", "x" : 607, "y" : 212, "z" : 2, "border" : "TONVAM1.bmp",  "area" : "TZNVAM1.bmp" },
-				"dwellingLvl5":   { "animation" : "TBNCDW_4.def", "x" : 206, "y" : 207, "z" : 3, "border" : "TONLICH1.bmp", "area" : "TZNLICH1.bmp" },
-				"dwellingLvl6":   { "animation" : "TBNCDW_5.def", "x" : 0,   "y" : 31,  "z" : -2, "border" : "TONBKN1.bmp",  "area" : "TZNBKN1.bmp" },
-				"dwellingLvl7":   { "animation" : "TBNCDW_6.def", "x" : 663, "y" : 25,  "border" : "TONBON1.bmp",  "area" : "TZNBON1.bmp" },
-				"dwellingUpLvl1": { "animation" : "TBNCUP_0.def", "x" : 64,  "y" : 222, "z" : 5, "border" : "TONSKEL2.bmp", "area" : "TZNSKEL2.bmp" },
-				"dwellingUpLvl2": { "animation" : "TBNCUP_1.def", "x" : 498, "y" : 224, "z" : 1, "border" : "TONZOMB2.bmp", "area" : "TZNZOMB2.bmp" },
-				"dwellingUpLvl3": { "animation" : "TBNCUP_2.def", "x" : 0,   "y" : 179, "z" : 8, "border" : "TONWIGH2.bmp", "area" : "TZNWIGH2.bmp" },
-				"dwellingUpLvl4": { "animation" : "TBNCUP_3.def", "x" : 615, "y" : 193, "z" : 2, "border" : "TONVAM2.bmp",  "area" : "TZNVAM2.bmp" },
-				"dwellingUpLvl5": { "animation" : "TBNCUP_4.def", "x" : 222, "y" : 171, "z" : 3, "border" : "TONLICH2.bmp", "area" : "TZNLICH2.bmp" },
-				"dwellingUpLvl6": { "animation" : "TBNCUP_5.def", "x" : 0,   "y" : 30,  "z" : -2, "border" : "TONBKN2.bmp",  "area" : "TZNBKN2.bmp" },
-				"dwellingUpLvl7": { "animation" : "TBNCUP_6.def", "x" : 662, "y" : 23,  "border" : "TONBON2.bmp",  "area" : "TZNBON2.bmp" }
+				"dwellingLvl1":   { "animation" : "TBNCDW_0.def", "x" : 80,  "y" : 222, "z" : 5,  "campaignBonus" : "BoNskel1.pcx", "border" : "TONSKEL1.bmp", "area" : "TZNSKEL1.bmp" },
+				"dwellingLvl2":   { "animation" : "TBNCDW_1.def", "x" : 502, "y" : 223, "z" : 1,  "campaignBonus" : "BoNzomb1.pcx", "border" : "TONZOMB1.bmp", "area" : "TZNZOMB1.bmp" },
+				"dwellingLvl3":   { "animation" : "TBNCDW_2.def", "x" : 0,   "y" : 187, "z" : 8,  "campaignBonus" : "BoNwigh1.pcx", "border" : "TONWIGH1.bmp", "area" : "TZNWIGH1.bmp" },
+				"dwellingLvl4":   { "animation" : "TBNCDW_3.def", "x" : 607, "y" : 212, "z" : 2,  "campaignBonus" : "BoNvamp1.pcx", "border" : "TONVAM1.bmp",  "area" : "TZNVAM1.bmp" },
+				"dwellingLvl5":   { "animation" : "TBNCDW_4.def", "x" : 206, "y" : 207, "z" : 3,  "campaignBonus" : "BoNlich1.pcx", "border" : "TONLICH1.bmp", "area" : "TZNLICH1.bmp" },
+				"dwellingLvl6":   { "animation" : "TBNCDW_5.def", "x" : 0,   "y" : 31,  "z" : -2, "campaignBonus" : "BoNbkni1.pcx", "border" : "TONBKN1.bmp",  "area" : "TZNBKN1.bmp" },
+				"dwellingLvl7":   { "animation" : "TBNCDW_6.def", "x" : 663, "y" : 25,            "campaignBonus" : "BoNbone1.pcx", "border" : "TONBON1.bmp",  "area" : "TZNBON1.bmp" },
+				"dwellingUpLvl1": { "animation" : "TBNCUP_0.def", "x" : 64,  "y" : 222, "z" : 5,  "campaignBonus" : "BoNskel2.pcx", "border" : "TONSKEL2.bmp", "area" : "TZNSKEL2.bmp" },
+				"dwellingUpLvl2": { "animation" : "TBNCUP_1.def", "x" : 498, "y" : 224, "z" : 1,  "campaignBonus" : "BoNzomb2.pcx", "border" : "TONZOMB2.bmp", "area" : "TZNZOMB2.bmp" },
+				"dwellingUpLvl3": { "animation" : "TBNCUP_2.def", "x" : 0,   "y" : 179, "z" : 8,  "campaignBonus" : "BoNwigh2.pcx", "border" : "TONWIGH2.bmp", "area" : "TZNWIGH2.bmp" },
+				"dwellingUpLvl4": { "animation" : "TBNCUP_3.def", "x" : 615, "y" : 193, "z" : 2,  "campaignBonus" : "BoNvamp2.pcx", "border" : "TONVAM2.bmp",  "area" : "TZNVAM2.bmp" },
+				"dwellingUpLvl5": { "animation" : "TBNCUP_4.def", "x" : 222, "y" : 171, "z" : 3,  "campaignBonus" : "BoNlich2.pcx", "border" : "TONLICH2.bmp", "area" : "TZNLICH2.bmp" },
+				"dwellingUpLvl6": { "animation" : "TBNCUP_5.def", "x" : 0,   "y" : 30,  "z" : -2, "campaignBonus" : "BoNbkni2.pcx", "border" : "TONBKN2.bmp",  "area" : "TZNBKN2.bmp" },
+				"dwellingUpLvl7": { "animation" : "TBNCUP_6.def", "x" : 662, "y" : 23,            "campaignBonus" : "BoNbone2.pcx", "border" : "TONBON2.bmp",  "area" : "TZNBON2.bmp" }
 			},
 
 			"musicTheme" : [ "music/NecroTown" ],

+ 38 - 38
config/factions/rampart.json

@@ -80,47 +80,47 @@
 			"structures" :
 			{
 				"extraAnimation": { "animation" : "TBRMEXT2.def", "x" : 327, "y" : 236, "z" : 1 },
-				"mageGuild1":     { "animation" : "TBRMMAGE.def", "x" : 454, "y" : 200, "z" : -1, "border" : "TORMAG1.bmp",  "area" : "TZRMAG1.bmp" },
-				"mageGuild2":     { "animation" : "TBRMMAG2.def", "x" : 438, "y" : 178, "z" : -1, "border" : "TORMAG2.bmp",  "area" : "TZRMAG2.bmp" },
-				"mageGuild3":     { "animation" : "TBRMMAG3.def", "x" : 418, "y" : 153, "z" : -1, "border" : "TORMAG3.bmp",  "area" : "TZRMAG3.bmp" },
-				"mageGuild4":     { "animation" : "TBRMMAG4.def", "x" : 406, "y" : 129, "z" : -1, "border" : "TORMAG4.bmp",  "area" : "TZRMAG4.bmp" },
-				"mageGuild5":     { "animation" : "TBRMMAG5.def", "x" : 384, "y" : 104, "z" : -1, "border" : "TORMAG5.bmp",  "area" : "TZRMAG5.bmp" },
-				"tavern":         { "animation" : "TBRMTVRN.def", "x" : 181, "y" : 229, "z" : 1,  "border" : "TORTAV.bmp",   "area" : "TZRTAV.bmp" },
-				"fort":           { "animation" : "TBRMCSTL.def", "x" : 63,  "y" : 25,  "z" : -4, "border" : "TORCAS1.bmp",  "area" : "TZRCAS1.bmp" },
-				"citadel":        { "animation" : "TBRMCAS2.def", "x" : 79,  "y" : 18,  "z" : -4, "border" : "TORCAS3.bmp",  "area" : "TZRCAS3.bmp" },
-				"castle":         { "animation" : "TBRMCAS3.def", "x" : 79,  "y" : 18,  "z" : -4, "border" : "TORCAS2.bmp",  "area" : "TZRCAS2.bmp" },
-				"villageHall":    { "animation" : "TBRMHALL.def", "x" : 565, "y" : 216, "border" : "TORHAL1.bmp",  "area" : "TZRHAL1.bmp" },
-				"townHall":       { "animation" : "TBRMHAL2.def", "x" : 538, "y" : 187, "border" : "TORHAL2.bmp",  "area" : "TZRHAL2.bmp" },
-				"cityHall":       { "animation" : "TBRMHAL3.def", "x" : 538, "y" : 187, "border" : "TORHAL3.bmp",  "area" : "TZRHAL3.bmp" },
-				"capitol":        { "animation" : "TBRMHAL4.def", "x" : 534, "y" : 187, "border" : "TORHAL4.bmp",  "area" : "TZRHAL4.bmp" },
-				"marketplace":    { "animation" : "TBRMMARK.def", "x" : 129, "y" : 301, "z" : 3,  "border" : "TORMRK1.bmp",  "area" : "TZRMRK1.bmp" },
-				"resourceSilo":   { "animation" : "TBRMSILO.def", "x" : 245, "y" : 324, "z" : 4,  "border" : "TORMRK2.bmp",  "area" : "TZRMRK2.bmp" },
-				"blacksmith":     { "animation" : "TBRMBLAK.def", "x" : 558, "y" : 105, "z" : -3, "border" : "TORAID.bmp",   "area" : "TZRAID.bmp" },
-				"special1":       { "animation" : "TBRMSPEC.def", "x" : 555, "y" : 297, "z" : 2, "border" : "TORGAR1A.bmp", "area" : "TZRGAR1A.bmp" },
-				"horde1":         { "animation" : "TBRMHRD1.def", "x" : 0,   "y" : 154, "z" : -2, "border" : "TORDWF1H.bmp", "area" : "TZRDWF1H.bmp", "hidden" : true },
-				"horde1Upgr":     { "animation" : "TBRMHRD2.def", "x" : 0,   "y" : 143, "z" : -2, "border" : "TORDWF2H.bmp", "area" : "TZRDWF2H.bmp", "hidden" : true, "builds" : "horde1" },
-				"special2":       { "animation" : "TBRMEXT0.def", "x" : 555, "y" : 297, "z" : 2, "border" : "TORGAR2A.bmp", "area" : "TZRGAR2A.bmp" },
-				"special3":       { "animation" : "TBRMEXT1.def", "x" : 0,   "y" : 181, "z" : 1, "border" : "TORDWFT.bmp",  "area" : "TZRDWFT.bmp" },
-				"horde2":         { "animation" : "TBRMHRD3.def", "x" : 47,  "y" : 142, "z" : -1, "border" : "TORTRE1H.bmp", "area" : "TZRTRE1H.bmp", "hidden" : true },
-				"horde2Upgr":     { "animation" : "TBRMHRD4.def", "x" : 47,  "y" : 142, "z" : -1, "border" : "TORTRE2H.bmp", "area" : "TZRTRE2H.bmp", "hidden" : true, "builds" : "horde2" },
-				"grail":          { "animation" : "TBRMHOLY.def", "x" : 0,   "y" : 54,  "z" : -3, "border" : "TORHOLY.bmp",  "area" : "TZRHOLY.bmp" },
+				"mageGuild1":     { "animation" : "TBRMMAGE.def", "x" : 454, "y" : 200, "z" : -1, "campaignBonus" : "BoRMag1.pcx", "border" : "TORMAG1.bmp",  "area" : "TZRMAG1.bmp" },
+				"mageGuild2":     { "animation" : "TBRMMAG2.def", "x" : 438, "y" : 178, "z" : -1, "campaignBonus" : "BoRMag2.pcx", "border" : "TORMAG2.bmp",  "area" : "TZRMAG2.bmp" },
+				"mageGuild3":     { "animation" : "TBRMMAG3.def", "x" : 418, "y" : 153, "z" : -1, "campaignBonus" : "BoRMag3.pcx", "border" : "TORMAG3.bmp",  "area" : "TZRMAG3.bmp" },
+				"mageGuild4":     { "animation" : "TBRMMAG4.def", "x" : 406, "y" : 129, "z" : -1, "campaignBonus" : "BoRMag4.pcx", "border" : "TORMAG4.bmp",  "area" : "TZRMAG4.bmp" },
+				"mageGuild5":     { "animation" : "TBRMMAG5.def", "x" : 384, "y" : 104, "z" : -1, "campaignBonus" : "BoRMag5.pcx", "border" : "TORMAG5.bmp",  "area" : "TZRMAG5.bmp" },
+				"tavern":         { "animation" : "TBRMTVRN.def", "x" : 181, "y" : 229, "z" : 1,  "campaignBonus" : "BoRTav.pcx", "border" : "TORTAV.bmp",   "area" : "TZRTAV.bmp" },
+				"fort":           { "animation" : "TBRMCSTL.def", "x" : 63,  "y" : 25,  "z" : -4, "campaignBonus" : "BoRCas1.pcx", "border" : "TORCAS1.bmp",  "area" : "TZRCAS1.bmp" },
+				"citadel":        { "animation" : "TBRMCAS2.def", "x" : 79,  "y" : 18,  "z" : -4, "campaignBonus" : "BoRCas2.pcx", "border" : "TORCAS3.bmp",  "area" : "TZRCAS3.bmp" },
+				"castle":         { "animation" : "TBRMCAS3.def", "x" : 79,  "y" : 18,  "z" : -4, "campaignBonus" : "BoRCas3.pcx", "border" : "TORCAS2.bmp",  "area" : "TZRCAS2.bmp" },
+				"villageHall":    { "animation" : "TBRMHALL.def", "x" : 565, "y" : 216,           "campaignBonus" : "BoRHal1.pcx", "border" : "TORHAL1.bmp",  "area" : "TZRHAL1.bmp" },
+				"townHall":       { "animation" : "TBRMHAL2.def", "x" : 538, "y" : 187,           "campaignBonus" : "BoRHal2.pcx", "border" : "TORHAL2.bmp",  "area" : "TZRHAL2.bmp" },
+				"cityHall":       { "animation" : "TBRMHAL3.def", "x" : 538, "y" : 187,           "campaignBonus" : "BoRHal3.pcx", "border" : "TORHAL3.bmp",  "area" : "TZRHAL3.bmp" },
+				"capitol":        { "animation" : "TBRMHAL4.def", "x" : 534, "y" : 187,           "campaignBonus" : "BoRHal4.pcx", "border" : "TORHAL4.bmp",  "area" : "TZRHAL4.bmp" },
+				"marketplace":    { "animation" : "TBRMMARK.def", "x" : 129, "y" : 301, "z" : 3,  "campaignBonus" : "BoRMrk1.pcx", "border" : "TORMRK1.bmp",  "area" : "TZRMRK1.bmp" },
+				"resourceSilo":   { "animation" : "TBRMSILO.def", "x" : 245, "y" : 324, "z" : 4,  "campaignBonus" : "BoRMrk2.pcx", "border" : "TORMRK2.bmp",  "area" : "TZRMRK2.bmp" },
+				"blacksmith":     { "animation" : "TBRMBLAK.def", "x" : 558, "y" : 105, "z" : -3, "campaignBonus" : "BoRAid.pcx", "border" : "TORAID.bmp",   "area" : "TZRAID.bmp" },
+				"special1":       { "animation" : "TBRMSPEC.def", "x" : 555, "y" : 297, "z" : 2,  "campaignBonus" : "BoRGar1.pcx", "border" : "TORGAR1A.bmp", "area" : "TZRGAR1A.bmp" },
+				"horde1":         { "animation" : "TBRMHRD1.def", "x" : 0,   "y" : 154, "z" : -2, "campaignBonus" : "BoRDwf1h.pcx", "border" : "TORDWF1H.bmp", "area" : "TZRDWF1H.bmp", "hidden" : true },
+				"horde1Upgr":     { "animation" : "TBRMHRD2.def", "x" : 0,   "y" : 143, "z" : -2, "campaignBonus" : "BoRDwf2h.pcx", "border" : "TORDWF2H.bmp", "area" : "TZRDWF2H.bmp", "hidden" : true, "builds" : "horde1" },
+				"special2":       { "animation" : "TBRMEXT0.def", "x" : 555, "y" : 297, "z" : 2,  "campaignBonus" : "BoRGar2.pcx", "border" : "TORGAR2A.bmp", "area" : "TZRGAR2A.bmp" },
+				"special3":       { "animation" : "TBRMEXT1.def", "x" : 0,   "y" : 181, "z" : 1,  "campaignBonus" : "BoRDwf1t.pcx", "border" : "TORDWFT.bmp",  "area" : "TZRDWFT.bmp" },
+				"horde2":         { "animation" : "TBRMHRD3.def", "x" : 47,  "y" : 142, "z" : -1, "campaignBonus" : "BoRTre1h.pcx", "border" : "TORTRE1H.bmp", "area" : "TZRTRE1H.bmp", "hidden" : true },
+				"horde2Upgr":     { "animation" : "TBRMHRD4.def", "x" : 47,  "y" : 142, "z" : -1, "campaignBonus" : "BoRTre2h.pcx", "border" : "TORTRE2H.bmp", "area" : "TZRTRE2H.bmp", "hidden" : true, "builds" : "horde2" },
+				"grail":          { "animation" : "TBRMHOLY.def", "x" : 0,   "y" : 54,  "z" : -3, "campaignBonus" : "BoRHoly.pcx", "border" : "TORHOLY.bmp",  "area" : "TZRHOLY.bmp" },
 				"extraTownHall":  { "animation" : "TBRMEXT3.def", "x" : 293, "y" : 235, "z" : 2 },
 				"extraCityHall":  { "animation" : "TBRMEXT4.def", "x" : 295, "y" : 191, "z" : 0 },
 				"extraCapitol":   { "animation" : "TBRMEXT5.def", "x" : 260, "y" : 171, "z" : 3 },
-				"dwellingLvl1":   { "animation" : "TBRMDW_0.def", "x" : 0,   "y" : 236, "z" : 2,  "border" : "TORCEN1A.bmp", "area" : "TZRCEN1A.bmp" },
-				"dwellingLvl2":   { "animation" : "TBRMDW_1.def", "x" : 0,   "y" : 154, "z" : -2, "border" : "TORDWF1.bmp",  "area" : "TZRDWF1.bmp" },
-				"dwellingLvl3":   { "animation" : "TBRMDW_2.def", "x" : 668, "y" : 101, "z" : -1, "border" : "TORELF1.bmp",  "area" : "TZRELF1.bmp" },
-				"dwellingLvl4":   { "animation" : "TBRMDW_3.def", "x" : 287, "y" : 73,  "z" : -1, "border" : "TORPEG1A.bmp", "area" : "TZRPEG1A.bmp" },
-				"dwellingLvl5":   { "animation" : "TBRMDW_4.def", "x" : 68,  "y" : 146, "z" : -1, "border" : "TORTRE1.bmp",  "area" : "TZRTRE1.bmp" },
-				"dwellingLvl6":   { "animation" : "TBRMDW_5.def", "x" : 362, "y" : 90,  "z" : -2, "border" : "TORUNI1.bmp",  "area" : "TZRUNI1.bmp" },
-				"dwellingLvl7":   { "animation" : "TBRMDW_6.def", "x" : 502, "y" : 27,  "z" : -5, "border" : "TORDR1AA.bmp", "area" : "TZRDR1AA.bmp" },
-				"dwellingUpLvl1": { "animation" : "TBRMUP_0.def", "x" : 0,   "y" : 236, "z" : 2,  "border" : "TORCEN2A.bmp", "area" : "TZRCEN2A.bmp" },
-				"dwellingUpLvl2": { "animation" : "TBRMUP_1.def", "x" : 0,   "y" : 143, "z" : -2, "border" : "TORDWF2.bmp",  "area" : "TZRDWF2.bmp" },
-				"dwellingUpLvl3": { "animation" : "TBRMUP_2.def", "x" : 665, "y" : 101, "z" : -1, "border" : "TORELF2.bmp",  "area" : "TZRELF2.bmp" },
-				"dwellingUpLvl4": { "animation" : "TBRMUP_3.def", "x" : 287, "y" : 28,  "z" : -1, "border" : "TORPEG2A.bmp", "area" : "TZRPEG2A.bmp" },
-				"dwellingUpLvl5": { "animation" : "TBRMUP_4.def", "x" : 63,  "y" : 146, "z" : -1, "border" : "TORTRE2.bmp",  "area" : "TZRTRE2.bmp" },
-				"dwellingUpLvl6": { "animation" : "TBRMUP_5.def", "x" : 362, "y" : 90,  "z" : -2, "border" : "TORUNI2.bmp",  "area" : "TZRUNI2.bmp" },
-				"dwellingUpLvl7": { "animation" : "TBRMUP_6.def", "x" : 502, "y" : 5,   "z" : -5, "border" : "TORDR2AA.bmp", "area" : "TZRDR2AA.bmp" }
+				"dwellingLvl1":   { "animation" : "TBRMDW_0.def", "x" : 0,   "y" : 236, "z" : 2,  "campaignBonus" : "BoRCen1.pcx", "border" : "TORCEN1A.bmp", "area" : "TZRCEN1A.bmp" },
+				"dwellingLvl2":   { "animation" : "TBRMDW_1.def", "x" : 0,   "y" : 154, "z" : -2, "campaignBonus" : "BoRDwf1.pcx", "border" : "TORDWF1.bmp",  "area" : "TZRDWF1.bmp" },
+				"dwellingLvl3":   { "animation" : "TBRMDW_2.def", "x" : 668, "y" : 101, "z" : -1, "campaignBonus" : "BoRElf1.pcx", "border" : "TORELF1.bmp",  "area" : "TZRELF1.bmp" },
+				"dwellingLvl4":   { "animation" : "TBRMDW_3.def", "x" : 287, "y" : 73,  "z" : -1, "campaignBonus" : "BoRPeg1.pcx", "border" : "TORPEG1A.bmp", "area" : "TZRPEG1A.bmp" },
+				"dwellingLvl5":   { "animation" : "TBRMDW_4.def", "x" : 68,  "y" : 146, "z" : -1, "campaignBonus" : "BoRTre1.pcx", "border" : "TORTRE1.bmp",  "area" : "TZRTRE1.bmp" },
+				"dwellingLvl6":   { "animation" : "TBRMDW_5.def", "x" : 362, "y" : 90,  "z" : -2, "campaignBonus" : "BoRUni1.pcx", "border" : "TORUNI1.bmp",  "area" : "TZRUNI1.bmp" },
+				"dwellingLvl7":   { "animation" : "TBRMDW_6.def", "x" : 502, "y" : 27,  "z" : -5, "campaignBonus" : "BoRDra1.pcx", "border" : "TORDR1AA.bmp", "area" : "TZRDR1AA.bmp" },
+				"dwellingUpLvl1": { "animation" : "TBRMUP_0.def", "x" : 0,   "y" : 236, "z" : 2,  "campaignBonus" : "BoRCen2.pcx", "border" : "TORCEN2A.bmp", "area" : "TZRCEN2A.bmp" },
+				"dwellingUpLvl2": { "animation" : "TBRMUP_1.def", "x" : 0,   "y" : 143, "z" : -2, "campaignBonus" : "BoRDwf2.pcx", "border" : "TORDWF2.bmp",  "area" : "TZRDWF2.bmp" },
+				"dwellingUpLvl3": { "animation" : "TBRMUP_2.def", "x" : 665, "y" : 101, "z" : -1, "campaignBonus" : "BoRElf2.pcx", "border" : "TORELF2.bmp",  "area" : "TZRELF2.bmp" },
+				"dwellingUpLvl4": { "animation" : "TBRMUP_3.def", "x" : 287, "y" : 28,  "z" : -1, "campaignBonus" : "BoRPeg2.pcx", "border" : "TORPEG2A.bmp", "area" : "TZRPEG2A.bmp" },
+				"dwellingUpLvl5": { "animation" : "TBRMUP_4.def", "x" : 63,  "y" : 146, "z" : -1, "campaignBonus" : "BoRTre2.pcx", "border" : "TORTRE2.bmp",  "area" : "TZRTRE2.bmp" },
+				"dwellingUpLvl6": { "animation" : "TBRMUP_5.def", "x" : 362, "y" : 90,  "z" : -2, "campaignBonus" : "BoRUni2.pcx", "border" : "TORUNI2.bmp",  "area" : "TZRUNI2.bmp" },
+				"dwellingUpLvl7": { "animation" : "TBRMUP_6.def", "x" : 502, "y" : 5,   "z" : -5, "campaignBonus" : "BoRDra2.pcx", "border" : "TORDR2AA.bmp", "area" : "TZRDR2AA.bmp" }
 			},
 
 			"musicTheme" : [ "music/Rampart" ],

+ 35 - 35
config/factions/stronghold.json

@@ -80,41 +80,41 @@
 			"structures" :
 			{
 				"extraAnimation": { "animation" : "TBSTEXT3.def", "x" : 23,  "y" : 20 },
-				"mageGuild1":     { "animation" : "TBSTMAGE.def", "x" : 473, "y" : 67,  "z" : -2, "border" : "TOSMAG1.bmp",  "area" : "TZSMAG1.bmp" },
-				"mageGuild2":     { "animation" : "TBSTMAG2.def", "x" : 473, "y" : 37,  "z" : -2, "border" : "TOSMAG2.bmp",  "area" : "TZSMAG2.bmp" },
-				"mageGuild3":     { "animation" : "TBSTMAG3.def", "x" : 473, "y" : 1,   "z" : -2, "border" : "TOSMAG3.bmp",  "area" : "TZSMAG3.bmp" },
-				"tavern":         { "animation" : "TBSTTVRN.def", "x" : 170, "y" : 280, "z" : 2,  "border" : "TOSTAV.bmp",   "area" : "TZSTAV.bmp" },
-				"fort":           { "animation" : "TBSTCSTL.def", "x" : 402, "y" : 148, "z" : -1, "border" : "TOSCA1.bmp",   "area" : "TZSCA1.bmp" },
-				"citadel":        { "animation" : "TBSTCAS2.def", "x" : 402, "y" : 114, "z" : -1, "border" : "TOSCA2.bmp",   "area" : "TZSCA2.bmp" },
-				"castle":         { "animation" : "TBSTCAS3.def", "x" : 402, "y" : 114, "z" : -1, "border" : "TOSCA3.bmp",   "area" : "TZSCA3.bmp" },
-				"villageHall":    { "animation" : "TBSTHALL.def", "x" : 0,   "y" : 259, "border" : "TOSHAL1A.bmp", "area" : "TZSHAL1A.bmp" },
-				"townHall":       { "animation" : "TBSTHAL2.def", "x" : 0,   "y" : 225, "border" : "TOSHAL2A.bmp", "area" : "TZSHAL2A.bmp" },
-				"cityHall":       { "animation" : "TBSTHAL3.def", "x" : 0,   "y" : 201, "border" : "TOSHAL3A.bmp", "area" : "TZSHAL3A.bmp" },
-				"capitol":        { "animation" : "TBSTHAL4.def", "x" : 0,   "y" : 148, "border" : "TOSHAL4A.bmp", "area" : "TZSHAL4A.bmp" },
-				"marketplace":    { "animation" : "TBSTMARK.def", "x" : 397, "y" : 308, "z" : 1,  "border" : "TOSMRK1.bmp",  "area" : "TZSMRK1.bmp" },
-				"resourceSilo":   { "animation" : "TBSTSILO.def", "x" : 458, "y" : 248, "z" : 2,  "border" : "TOSMRK2.bmp",  "area" : "TZSMRK2.bmp" },
-				"blacksmith":     { "animation" : "TBSTBLAK.def", "x" : 660, "y" : 286, "border" : "TOSBLK1.bmp",  "area" : "TZSBLK1.bmp" },
-				"special1":       { "animation" : "TBSTSPEC.def", "x" : 550, "y" : 229, "border" : "TOSCA1EA.bmp", "area" : "TZSCA1EA.bmp" },
-				"horde1":         { "animation" : "TBSTHRD1.def", "x" : 373, "y" : 239, "border" : "TOSGOB1H.bmp", "area" : "TZSGOB1H.bmp", "hidden" : true },
-				"horde1Upgr":     { "animation" : "TBSTHRD2.def", "x" : 373, "y" : 220, "border" : "TOSGOB2H.bmp", "area" : "TZSGOB2H.bmp", "hidden" : true, "builds" : "horde1" },
-				"special2":       { "animation" : "TBSTEXT0.def", "x" : 473, "y" : 282, "z" : 3,  "border" : "TOSMRK1C.bmp", "area" : "TZSMRK1C.bmp" },
-				"special3":       { "animation" : "TBSTEXT1.def", "x" : 617, "y" : 286, "z" : 1,  "border" : "TOSBLK2.bmp",  "area" : "TZSBLK2.bmp" },
-				"special4":       { "animation" : "TBSTEXT2.def", "x" : 313, "y" : 13,  "z" : -1, "border" : "TOSVAH.bmp",   "area" : "TZSVAH.bmp" },
-				"grail":          { "animation" : "TBSTHOLY.def", "x" : 321, "y" : 105, "z" : 3,  "border" : "TOSHOLYA.bmp", "area" : "TZSHOLYA.bmp" },
-				"dwellingLvl1":   { "animation" : "TBSTDW_0.def", "x" : 373, "y" : 239, "border" : "TOSGOB1.bmp",  "area" : "TZSGOB1.bmp" },
-				"dwellingLvl2":   { "animation" : "TBSTDW_1.def", "x" : 266, "y" : 246, "z" : 1,  "border" : "TOSWOL1.bmp",  "area" : "TZSWOL1.bmp" },
-				"dwellingLvl3":   { "animation" : "TBSTDW_2.def", "x" : 566, "y" : 232, "z" : 2,  "border" : "TOSORC1.bmp",  "area" : "TZSORC1.bmp" },
-				"dwellingLvl4":   { "animation" : "TBSTDW_3.def", "x" : 197, "y" : 204, "border" : "TOSOGR1.bmp",  "area" : "TZSOGR1.bmp" },
-				"dwellingLvl5":   { "animation" : "TBSTDW_4.def", "x" : 137, "y" : 30,  "z" : -1, "border" : "TOSROC1.bmp",  "area" : "TZSROC1.bmp" },
-				"dwellingLvl6":   { "animation" : "TBSTDW_5.def", "x" : 622, "y" : 160, "z" : -2, "border" : "TOSCYC1.bmp",  "area" : "TZSCYC1.bmp" },
-				"dwellingLvl7":   { "animation" : "TBSTDW_6.def", "x" : 604, "y" : 0,   "border" : "TOSBEH1A.bmp", "area" : "TZSBEH1A.bmp" },
-				"dwellingUpLvl1": { "animation" : "TBSTUP_0.def", "x" : 373, "y" : 220, "border" : "TOSGOB2.bmp",  "area" : "TZSGOB2.bmp" },
-				"dwellingUpLvl2": { "animation" : "TBSTUP_1.def", "x" : 266, "y" : 225, "z" : 1,  "border" : "TOSWOL2.bmp",  "area" : "TZSWOL2.bmp" },
-				"dwellingUpLvl3": { "animation" : "TBSTUP_2.def", "x" : 566, "y" : 158, "z" : 2,  "border" : "TOSORC2.bmp",  "area" : "TZSORC2.bmp" },
-				"dwellingUpLvl4": { "animation" : "TBSTUP_3.def", "x" : 197, "y" : 137, "border" : "TOSOGR2.bmp",  "area" : "TZSOGR2.bmp" },
-				"dwellingUpLvl5": { "animation" : "TBSTUP_4.def", "x" : 129, "y" : 15,  "z" : -1, "border" : "TOSROC2.bmp",  "area" : "TZSROC2.bmp" },
-				"dwellingUpLvl6": { "animation" : "TBSTUP_5.def", "x" : 616, "y" : 93,  "z" : -2, "border" : "TOSCYC2A.bmp", "area" : "TZSCYC2A.bmp" },
-				"dwellingUpLvl7": { "animation" : "TBSTUP_6.def", "x" : 604, "y" : 0,   "border" : "TOSBEH2A.bmp", "area" : "TZSBEH2A.bmp" }
+				"mageGuild1":     { "animation" : "TBSTMAGE.def", "x" : 473, "y" : 67,  "z" : -2, "campaignBonus" : "BoSmage1.pcx", "border" : "TOSMAG1.bmp",  "area" : "TZSMAG1.bmp" },
+				"mageGuild2":     { "animation" : "TBSTMAG2.def", "x" : 473, "y" : 37,  "z" : -2, "campaignBonus" : "BoSmage2.pcx", "border" : "TOSMAG2.bmp",  "area" : "TZSMAG2.bmp" },
+				"mageGuild3":     { "animation" : "TBSTMAG3.def", "x" : 473, "y" : 1,   "z" : -2, "campaignBonus" : "BoSmage3.pcx", "border" : "TOSMAG3.bmp",  "area" : "TZSMAG3.bmp" },
+				"tavern":         { "animation" : "TBSTTVRN.def", "x" : 170, "y" : 280, "z" : 2,  "campaignBonus" : "BoStav1.pcx",  "border" : "TOSTAV.bmp",   "area" : "TZSTAV.bmp" },
+				"fort":           { "animation" : "TBSTCSTL.def", "x" : 402, "y" : 148, "z" : -1, "campaignBonus" : "BoScas1.pcx",  "border" : "TOSCA1.bmp",   "area" : "TZSCA1.bmp" },
+				"citadel":        { "animation" : "TBSTCAS2.def", "x" : 402, "y" : 114, "z" : -1, "campaignBonus" : "BoScas2.pcx",  "border" : "TOSCA2.bmp",   "area" : "TZSCA2.bmp" },
+				"castle":         { "animation" : "TBSTCAS3.def", "x" : 402, "y" : 114, "z" : -1, "campaignBonus" : "BoScas3.pcx",  "border" : "TOSCA3.bmp",   "area" : "TZSCA3.bmp" },
+				"villageHall":    { "animation" : "TBSTHALL.def", "x" : 0,   "y" : 259,           "campaignBonus" : "BoShall1.pcx", "border" : "TOSHAL1A.bmp", "area" : "TZSHAL1A.bmp" },
+				"townHall":       { "animation" : "TBSTHAL2.def", "x" : 0,   "y" : 225,           "campaignBonus" : "BoShall2.pcx", "border" : "TOSHAL2A.bmp", "area" : "TZSHAL2A.bmp" },
+				"cityHall":       { "animation" : "TBSTHAL3.def", "x" : 0,   "y" : 201,           "campaignBonus" : "BoShall3.pcx", "border" : "TOSHAL3A.bmp", "area" : "TZSHAL3A.bmp" },
+				"capitol":        { "animation" : "TBSTHAL4.def", "x" : 0,   "y" : 148,           "campaignBonus" : "BoShall4.pcx", "border" : "TOSHAL4A.bmp", "area" : "TZSHAL4A.bmp" },
+				"marketplace":    { "animation" : "TBSTMARK.def", "x" : 397, "y" : 308, "z" : 1,  "campaignBonus" : "BoSmrk1.pcx",  "border" : "TOSMRK1.bmp",  "area" : "TZSMRK1.bmp" },
+				"resourceSilo":   { "animation" : "TBSTSILO.def", "x" : 458, "y" : 248, "z" : 2,  "campaignBonus" : "BoSmrk2.pcx",  "border" : "TOSMRK2.bmp",  "area" : "TZSMRK2.bmp" },
+				"blacksmith":     { "animation" : "TBSTBLAK.def", "x" : 660, "y" : 286,           "campaignBonus" : "BoSblak1.pcx", "border" : "TOSBLK1.bmp",  "area" : "TZSBLK1.bmp" },
+				"special1":       { "animation" : "TBSTSPEC.def", "x" : 550, "y" : 229,           "campaignBonus" : "BoSescap.pcx", "border" : "TOSCA1EA.bmp", "area" : "TZSCA1EA.bmp" },
+				"horde1":         { "animation" : "TBSTHRD1.def", "x" : 373, "y" : 239,           "campaignBonus" : "BoSgob1h.pcx", "border" : "TOSGOB1H.bmp", "area" : "TZSGOB1H.bmp", "hidden" : true },
+				"horde1Upgr":     { "animation" : "TBSTHRD2.def", "x" : 373, "y" : 220,           "campaignBonus" : "BoSgob2h.pcx", "border" : "TOSGOB2H.bmp", "area" : "TZSGOB2H.bmp", "hidden" : true, "builds" : "horde1" },
+				"special2":       { "animation" : "TBSTEXT0.def", "x" : 473, "y" : 282, "z" : 3,  "campaignBonus" : "BoSmrk1c.pcx", "border" : "TOSMRK1C.bmp", "area" : "TZSMRK1C.bmp" },
+				"special3":       { "animation" : "TBSTEXT1.def", "x" : 617, "y" : 286, "z" : 1,  "campaignBonus" : "BoSblak2.pcx", "border" : "TOSBLK2.bmp",  "area" : "TZSBLK2.bmp" },
+				"special4":       { "animation" : "TBSTEXT2.def", "x" : 313, "y" : 13,  "z" : -1, "campaignBonus" : "BoSvahal.pcx", "border" : "TOSVAH.bmp",   "area" : "TZSVAH.bmp" },
+				"grail":          { "animation" : "TBSTHOLY.def", "x" : 321, "y" : 105, "z" : 3,  "campaignBonus" : "BoSholy.pcx",  "border" : "TOSHOLYA.bmp", "area" : "TZSHOLYA.bmp" },
+				"dwellingLvl1":   { "animation" : "TBSTDW_0.def", "x" : 373, "y" : 239,           "campaignBonus" : "BoSgob1.pcx",  "border" : "TOSGOB1.bmp",  "area" : "TZSGOB1.bmp" },
+				"dwellingLvl2":   { "animation" : "TBSTDW_1.def", "x" : 266, "y" : 246, "z" : 1,  "campaignBonus" : "BoSwolf1.pcx", "border" : "TOSWOL1.bmp",  "area" : "TZSWOL1.bmp" },
+				"dwellingLvl3":   { "animation" : "TBSTDW_2.def", "x" : 566, "y" : 232, "z" : 2,  "campaignBonus" : "BoSorc1.pcx",  "border" : "TOSORC1.bmp",  "area" : "TZSORC1.bmp" },
+				"dwellingLvl4":   { "animation" : "TBSTDW_3.def", "x" : 197, "y" : 204,           "campaignBonus" : "BoSogre1.pcx", "border" : "TOSOGR1.bmp",  "area" : "TZSOGR1.bmp" },
+				"dwellingLvl5":   { "animation" : "TBSTDW_4.def", "x" : 137, "y" : 30,  "z" : -1, "campaignBonus" : "BoSroc1.pcx",  "border" : "TOSROC1.bmp",  "area" : "TZSROC1.bmp" },
+				"dwellingLvl6":   { "animation" : "TBSTDW_5.def", "x" : 622, "y" : 160, "z" : -2, "campaignBonus" : "BoScyc1.pcx",  "border" : "TOSCYC1.bmp",  "area" : "TZSCYC1.bmp" },
+				"dwellingLvl7":   { "animation" : "TBSTDW_6.def", "x" : 604, "y" : 0,             "campaignBonus" : "BoSbeh1.pcx",  "border" : "TOSBEH1A.bmp", "area" : "TZSBEH1A.bmp" },
+				"dwellingUpLvl1": { "animation" : "TBSTUP_0.def", "x" : 373, "y" : 220,           "campaignBonus" : "BoSgob2.pcx",  "border" : "TOSGOB2.bmp",  "area" : "TZSGOB2.bmp" },
+				"dwellingUpLvl2": { "animation" : "TBSTUP_1.def", "x" : 266, "y" : 225, "z" : 1,  "campaignBonus" : "BoSwolf2.pcx", "border" : "TOSWOL2.bmp",  "area" : "TZSWOL2.bmp" },
+				"dwellingUpLvl3": { "animation" : "TBSTUP_2.def", "x" : 566, "y" : 158, "z" : 2,  "campaignBonus" : "BoSorc2.pcx",  "border" : "TOSORC2.bmp",  "area" : "TZSORC2.bmp" },
+				"dwellingUpLvl4": { "animation" : "TBSTUP_3.def", "x" : 197, "y" : 137,           "campaignBonus" : "BoSogre2.pcx", "border" : "TOSOGR2.bmp",  "area" : "TZSOGR2.bmp" },
+				"dwellingUpLvl5": { "animation" : "TBSTUP_4.def", "x" : 129, "y" : 15,  "z" : -1, "campaignBonus" : "BoSroc2.pcx",  "border" : "TOSROC2.bmp",  "area" : "TZSROC2.bmp" },
+				"dwellingUpLvl6": { "animation" : "TBSTUP_5.def", "x" : 616, "y" : 93,  "z" : -2, "campaignBonus" : "BoScyc2.pcx",  "border" : "TOSCYC2A.bmp", "area" : "TZSCYC2A.bmp" },
+				"dwellingUpLvl7": { "animation" : "TBSTUP_6.def", "x" : 604, "y" : 0,             "campaignBonus" : "BoSbeh2.pcx",  "border" : "TOSBEH2A.bmp", "area" : "TZSBEH2A.bmp" }
 			},
 
 			"musicTheme" : [ "music/Stronghold" ],

+ 37 - 37
config/factions/tower.json

@@ -79,43 +79,43 @@
 			},
 			"structures" :
 			{
-				"mageGuild1":     { "animation" : "TBTWMAGE.def", "x" : 597, "y" : 82,  "z" : -1, "border" : "TOTGLD1.bmp",  "area" : "TZTGLD1.bmp" },
-				"mageGuild2":     { "animation" : "TBTWMAG2.def", "x" : 593, "y" : 65,  "z" : -1, "border" : "TOTGLD2.bmp",  "area" : "TZTGLD2.bmp" },
-				"mageGuild3":     { "animation" : "TBTWMAG3.def", "x" : 593, "y" : 48,  "z" : -1, "border" : "TOTGLD3.bmp",  "area" : "TZTGLD3.bmp" },
-				"mageGuild4":     { "animation" : "TBTWMAG4.def", "x" : 593, "y" : 31,  "z" : -1, "border" : "TOTGLD4.bmp",  "area" : "TZTGLD4.bmp" },
-				"mageGuild5":     { "animation" : "TBTWMAG5.def", "x" : 593, "y" : 14,  "z" : -1, "border" : "TOTGLD5.bmp",  "area" : "TZTGLD5.bmp" },
-				"tavern":         { "animation" : "TBTWTVRN.def", "x" : 375, "y" : 278, "z" : 1, "border" : "TOTTAV.bmp",   "area" : "TZTTAV.bmp" },
-				"fort":           { "animation" : "TBTWCSTL.def", "x" : 304, "y" : 0,   "z" : -1, "border" : "TOTCAS1.bmp",  "area" : "TZTCAS1.bmp" },
-				"citadel":        { "animation" : "TBTWCAS2.def", "x" : 301, "y" : 0,   "z" : -1, "border" : "TOTCAS2.bmp",  "area" : "TZTCAS2.bmp" },
-				"castle":         { "animation" : "TBTWCAS3.def", "x" : 301, "y" : 0,   "z" : -1, "border" : "TOTCAS3.bmp",  "area" : "TZTCAS3.bmp" },
-				"villageHall":    { "animation" : "TBTWHALL.def", "x" : 0,   "y" : 259, "z" : 2,  "border" : "TOTHAL1.bmp",  "area" : "TZTHAL1.bmp" },
-				"townHall":       { "animation" : "TBTWHAL2.def", "x" : 0,   "y" : 220, "z" : 2,  "border" : "TOTHAL2.bmp",  "area" : "TZTHAL2.bmp" },
-				"cityHall":       { "animation" : "TBTWHAL3.def", "x" : 0,   "y" : 82,  "z" : 2,  "border" : "TOTHAL3.bmp",  "area" : "TZTHAL3.bmp" },
-				"capitol":        { "animation" : "TBTWHAL4.def", "x" : 0,   "y" : 82,  "z" : 2,  "border" : "TOTHAL4.bmp",  "area" : "TZTHAL4.bmp" },
-				"marketplace":    { "animation" : "TBTWMARK.def", "x" : 614, "y" : 292, "border" : "TOTMRK.bmp",   "area" : "TZTMRK.bmp" },
-				"resourceSilo":   { "animation" : "TBTWSILO.def", "x" : 763, "y" : 214, "z" : 3, "border" : "TOTMRKS.bmp",  "area" : "TZTMRKS.bmp" },
-				"blacksmith":     { "animation" : "TBTWBLAK.def", "x" : 478, "y" : 211, "border" : "TOTBLKA.bmp",  "area" : "TZTBLKA.bmp" },
-				"special1":       { "animation" : "TBTWSPEC.def", "x" : 674, "y" : 276, "z" : 2, "border" : "TOTMRKA.bmp",  "area" : "TZTMRKA.bmp" },
-				"horde1":         { "animation" : "TBTWHRD1.def", "x" : 0,   "y" : 47,  "border" : "TOTGAR1H.bmp", "area" : "TZTGAR1H.bmp", "hidden" : true },
-				"horde1Upgr":     { "animation" : "TBTWHRD2.def", "x" : 0,   "y" : 28,  "border" : "TOTGAR2H.bmp", "area" : "TZTGAR2H.bmp", "hidden" : true, "builds" : "horde1" },
-				"special2":       { "animation" : "TBTWEXT0.def", "x" : 409, "y" : 82,  "border" : "TOTCASW.bmp",  "area" : "TZTCASW.bmp" },
-				"special3":       { "animation" : "TBTWEXT1.def", "x" : 702, "y" : 115, "border" : "TOTGLDL.bmp",  "area" : "TZTGLDL.bmp" },
-				"special4":       { "animation" : "TBTWEXT2.def", "x" : 592, "y" : 189, "z" : 1,  "border" : "TOTGLDW.bmp",  "area" : "TZTGLDW.bmp" },
-				"grail":          { "animation" : "TBTWHOLY.def", "x" : 237, "y" : 14,  "z" : -2, "border" : "TOTHOLYA.bmp", "area" : "TZTHOLYA.bmp" },
-				"dwellingLvl1":   { "animation" : "TBTWDW_0.def", "x" : 453, "y" : 221, "z" : 1,  "border" : "TOTGRM1A.bmp", "area" : "TZTGRM1A.bmp" },
-				"dwellingLvl2":   { "animation" : "TBTWDW_1.def", "x" : 4,   "y" : 46,  "border" : "TOTGAR1.bmp",  "area" : "TZTGAR1.bmp" },
-				"dwellingLvl3":   { "animation" : "TBTWDW_2.def", "x" : 209, "y" : 177, "z" : 1,  "border" : "TOTGOL1A.bmp", "area" : "TZTGOL1A.bmp" },
-				"dwellingLvl4":   { "animation" : "TBTWDW_3.def", "x" : 613, "y" : 95,  "border" : "TOTMAG1.bmp",  "area" : "TZTMAG1.bmp" },
-				"dwellingLvl5":   { "animation" : "TBTWDW_4.def", "x" : 511, "y" : 75,  "border" : "TOTGEN1.bmp",  "area" : "TZTGEN1.bmp" },
-				"dwellingLvl6":   { "animation" : "TBTWDW_5.def", "x" : 681, "y" : 208, "z" : 2,  "border" : "TOTNAG1.bmp",  "area" : "TZTNAG1.bmp" },
-				"dwellingLvl7":   { "animation" : "TBTWDW_6.def", "x" : 75,  "y" : 144, "z" : -1, "border" : "TOTTIT1.bmp",  "area" : "TZTTIT1.bmp" },
-				"dwellingUpLvl1": { "animation" : "TBTWUP_0.def", "x" : 446, "y" : 221, "z" : 1,  "border" : "TOTGRM2A.bmp", "area" : "TZTGRM2A.bmp" },
-				"dwellingUpLvl2": { "animation" : "TBTWUP_1.def", "x" : 4,   "y" : 28,  "border" : "TOTGAR2.bmp",  "area" : "TZTGAR2.bmp" },
-				"dwellingUpLvl3": { "animation" : "TBTWUP_2.def", "x" : 209, "y" : 177, "z" : 1,  "border" : "TOTGOL2A.bmp", "area" : "TZTGOL2A.bmp" },
-				"dwellingUpLvl4": { "animation" : "TBTWUP_3.def", "x" : 613, "y" : 74,  "border" : "TOTMAG2.bmp",  "area" : "TZTMAG2.bmp" },
-				"dwellingUpLvl5": { "animation" : "TBTWUP_4.def", "x" : 511, "y" : 8,   "border" : "TOTGEN2.bmp",  "area" : "TZTGEN2.bmp" },
-				"dwellingUpLvl6": { "animation" : "TBTWUP_5.def", "x" : 681, "y" : 157, "z" : 2,  "border" : "TOTNAG2.bmp",  "area" : "TZTNAG2.bmp" },
-				"dwellingUpLvl7": { "animation" : "TBTWUP_6.def", "x" : 75,  "y" : 91,  "z" : -1, "border" : "TOTTIT2.bmp",  "area" : "TZTTIT2.bmp" }
+				"mageGuild1":     { "animation" : "TBTWMAGE.def", "x" : 597, "y" : 82,  "z" : -1, "campaignBonus" : "BoTGld1.pcx",  "border" : "TOTGLD1.bmp",  "area" : "TZTGLD1.bmp" },
+				"mageGuild2":     { "animation" : "TBTWMAG2.def", "x" : 593, "y" : 65,  "z" : -1, "campaignBonus" : "BoTGld2.pcx",  "border" : "TOTGLD2.bmp",  "area" : "TZTGLD2.bmp" },
+				"mageGuild3":     { "animation" : "TBTWMAG3.def", "x" : 593, "y" : 48,  "z" : -1, "campaignBonus" : "BoTGld3.pcx",  "border" : "TOTGLD3.bmp",  "area" : "TZTGLD3.bmp" },
+				"mageGuild4":     { "animation" : "TBTWMAG4.def", "x" : 593, "y" : 31,  "z" : -1, "campaignBonus" : "BoTGld4.pcx",  "border" : "TOTGLD4.bmp",  "area" : "TZTGLD4.bmp" },
+				"mageGuild5":     { "animation" : "TBTWMAG5.def", "x" : 593, "y" : 14,  "z" : -1, "campaignBonus" : "BoTGld5.pcx",  "border" : "TOTGLD5.bmp",  "area" : "TZTGLD5.bmp" },
+				"tavern":         { "animation" : "TBTWTVRN.def", "x" : 375, "y" : 278, "z" : 1,  "campaignBonus" : "BoTTav.pcx",   "border" : "TOTTAV.bmp",   "area" : "TZTTAV.bmp" },
+				"fort":           { "animation" : "TBTWCSTL.def", "x" : 304, "y" : 0,   "z" : -1, "campaignBonus" : "BoTCast1.pcx", "border" : "TOTCAS1.bmp",  "area" : "TZTCAS1.bmp" },
+				"citadel":        { "animation" : "TBTWCAS2.def", "x" : 301, "y" : 0,   "z" : -1, "campaignBonus" : "BoTCast2.pcx", "border" : "TOTCAS2.bmp",  "area" : "TZTCAS2.bmp" },
+				"castle":         { "animation" : "TBTWCAS3.def", "x" : 301, "y" : 0,   "z" : -1, "campaignBonus" : "BoTCast3.pcx", "border" : "TOTCAS3.bmp",  "area" : "TZTCAS3.bmp" },
+				"villageHall":    { "animation" : "TBTWHALL.def", "x" : 0,   "y" : 259, "z" : 2,  "campaignBonus" : "BoTHall1.pcx", "border" : "TOTHAL1.bmp",  "area" : "TZTHAL1.bmp" },
+				"townHall":       { "animation" : "TBTWHAL2.def", "x" : 0,   "y" : 220, "z" : 2,  "campaignBonus" : "BoTHall2.pcx", "border" : "TOTHAL2.bmp",  "area" : "TZTHAL2.bmp" },
+				"cityHall":       { "animation" : "TBTWHAL3.def", "x" : 0,   "y" : 82,  "z" : 2,  "campaignBonus" : "BoTHall3.pcx", "border" : "TOTHAL3.bmp",  "area" : "TZTHAL3.bmp" },
+				"capitol":        { "animation" : "TBTWHAL4.def", "x" : 0,   "y" : 82,  "z" : 2,  "campaignBonus" : "BoTHall4.pcx", "border" : "TOTHAL4.bmp",  "area" : "TZTHAL4.bmp" },
+				"marketplace":    { "animation" : "TBTWMARK.def", "x" : 614, "y" : 292,           "campaignBonus" : "BoTMark.pcx",  "border" : "TOTMRK.bmp",   "area" : "TZTMRK.bmp" },
+				"resourceSilo":   { "animation" : "TBTWSILO.def", "x" : 763, "y" : 214, "z" : 3,  "campaignBonus" : "BoTMarkS.pcx", "border" : "TOTMRKS.bmp",  "area" : "TZTMRKS.bmp" },
+				"blacksmith":     { "animation" : "TBTWBLAK.def", "x" : 478, "y" : 211,           "campaignBonus" : "BoTBlack.pcx", "border" : "TOTBLKA.bmp",  "area" : "TZTBLKA.bmp" },
+				"special1":       { "animation" : "TBTWSPEC.def", "x" : 674, "y" : 276, "z" : 2,  "campaignBonus" : "BoTMarkA.pcx", "border" : "TOTMRKA.bmp",  "area" : "TZTMRKA.bmp" },
+				"horde1":         { "animation" : "TBTWHRD1.def", "x" : 0,   "y" : 47,            "campaignBonus" : "BoTGa1H.pcx",  "border" : "TOTGAR1H.bmp", "area" : "TZTGAR1H.bmp", "hidden" : true },
+				"horde1Upgr":     { "animation" : "TBTWHRD2.def", "x" : 0,   "y" : 28,            "campaignBonus" : "BoTGa2h.pcx",  "border" : "TOTGAR2H.bmp", "area" : "TZTGAR2H.bmp", "hidden" : true, "builds" : "horde1" },
+				"special2":       { "animation" : "TBTWEXT0.def", "x" : 409, "y" : 82,            "campaignBonus" : "BoTCastW.pcx", "border" : "TOTCASW.bmp",  "area" : "TZTCASW.bmp" },
+				"special3":       { "animation" : "TBTWEXT1.def", "x" : 702, "y" : 115,           "campaignBonus" : "BoTGldL.pcx",  "border" : "TOTGLDL.bmp",  "area" : "TZTGLDL.bmp" },
+				"special4":       { "animation" : "TBTWEXT2.def", "x" : 592, "y" : 189, "z" : 1,  "campaignBonus" : "BoTGldW.pcx",  "border" : "TOTGLDW.bmp",  "area" : "TZTGLDW.bmp" },
+				"grail":          { "animation" : "TBTWHOLY.def", "x" : 237, "y" : 14,  "z" : -2, "campaignBonus" : "BoTGrail.pcx", "border" : "TOTHOLYA.bmp", "area" : "TZTHOLYA.bmp" },
+				"dwellingLvl1":   { "animation" : "TBTWDW_0.def", "x" : 453, "y" : 221, "z" : 1,  "campaignBonus" : "BoTGrem1.pcx", "border" : "TOTGRM1A.bmp", "area" : "TZTGRM1A.bmp" },
+				"dwellingLvl2":   { "animation" : "TBTWDW_1.def", "x" : 4,   "y" : 46,            "campaignBonus" : "BoTGar1.pcx",  "border" : "TOTGAR1.bmp",  "area" : "TZTGAR1.bmp" },
+				"dwellingLvl3":   { "animation" : "TBTWDW_2.def", "x" : 209, "y" : 177, "z" : 1,  "campaignBonus" : "BoTGolm1.pcx", "border" : "TOTGOL1A.bmp", "area" : "TZTGOL1A.bmp" },
+				"dwellingLvl4":   { "animation" : "TBTWDW_3.def", "x" : 613, "y" : 95,            "campaignBonus" : "BoTMag1.pcx",  "border" : "TOTMAG1.bmp",  "area" : "TZTMAG1.bmp" },
+				"dwellingLvl5":   { "animation" : "TBTWDW_4.def", "x" : 511, "y" : 75,            "campaignBonus" : "BoTGen1.pcx",  "border" : "TOTGEN1.bmp",  "area" : "TZTGEN1.bmp" },
+				"dwellingLvl6":   { "animation" : "TBTWDW_5.def", "x" : 681, "y" : 208, "z" : 2,  "campaignBonus" : "BoTNaga1.pcx", "border" : "TOTNAG1.bmp",  "area" : "TZTNAG1.bmp" },
+				"dwellingLvl7":   { "animation" : "TBTWDW_6.def", "x" : 75,  "y" : 144, "z" : -1, "campaignBonus" : "BoTTit1.pcx",  "border" : "TOTTIT1.bmp",  "area" : "TZTTIT1.bmp" },
+				"dwellingUpLvl1": { "animation" : "TBTWUP_0.def", "x" : 446, "y" : 221, "z" : 1,  "campaignBonus" : "BoTGrem2.pcx", "border" : "TOTGRM2A.bmp", "area" : "TZTGRM2A.bmp" },
+				"dwellingUpLvl2": { "animation" : "TBTWUP_1.def", "x" : 4,   "y" : 28,            "campaignBonus" : "BoTGar2.pcx",  "border" : "TOTGAR2.bmp",  "area" : "TZTGAR2.bmp" },
+				"dwellingUpLvl3": { "animation" : "TBTWUP_2.def", "x" : 209, "y" : 177, "z" : 1,  "campaignBonus" : "BoTGolm2.pcx", "border" : "TOTGOL2A.bmp", "area" : "TZTGOL2A.bmp" },
+				"dwellingUpLvl4": { "animation" : "TBTWUP_3.def", "x" : 613, "y" : 74,            "campaignBonus" : "BoTMag2.pcx",  "border" : "TOTMAG2.bmp",  "area" : "TZTMAG2.bmp" },
+				"dwellingUpLvl5": { "animation" : "TBTWUP_4.def", "x" : 511, "y" : 8,             "campaignBonus" : "BoTGen2.pcx",  "border" : "TOTGEN2.bmp",  "area" : "TZTGEN2.bmp" },
+				"dwellingUpLvl6": { "animation" : "TBTWUP_5.def", "x" : 681, "y" : 157, "z" : 2,  "campaignBonus" : "BoTNaga2.pcx", "border" : "TOTNAG2.bmp",  "area" : "TZTNAG2.bmp" },
+				"dwellingUpLvl7": { "animation" : "TBTWUP_6.def", "x" : 75,  "y" : 91,  "z" : -1, "campaignBonus" : "BoTTit2.pcx",  "border" : "TOTTIT2.bmp",  "area" : "TZTTIT2.bmp" }
 			},
 
 			"musicTheme" : [ "music/TowerTown" ],

+ 5 - 0
config/schemas/townStructure.json

@@ -29,6 +29,11 @@
 			"description" : "Golden border around building, displayed when building is selected",
 			"format" : "imageFile"
 		},
+		"campaignBonus" : {
+			"type" : "string",
+			"description" : "Town building icon for campaigns",
+			"format" : "imageFile"
+		},
 		"x" : {
 			"type" : "number",
 			"description" : "Position on screen"

+ 0 - 2
lib/CMakeLists.txt

@@ -102,7 +102,6 @@ set(lib_MAIN_SRCS
 	entities/artifact/CArtifactInstance.cpp
 	entities/artifact/CArtifactSet.cpp
 	entities/building/CBuilding.cpp
-	entities/building/CBuildingHandler.cpp
 	entities/faction/CFaction.cpp
 	entities/faction/CTown.cpp
 	entities/faction/CTownHandler.cpp
@@ -509,7 +508,6 @@ set(lib_MAIN_HEADERS
 	entities/artifact/CArtifactSet.h
 	entities/artifact/EArtifactClass.h
 	entities/building/CBuilding.h
-	entities/building/CBuildingHandler.h
 	entities/building/TownFortifications.h
 	entities/faction/CFaction.h
 	entities/faction/CTown.h

+ 3 - 3
lib/campaign/CampaignBonus.cpp

@@ -80,7 +80,7 @@ CampaignBonus::CampaignBonus(CBinaryReader & reader, const MapIdentifiersH3M & r
 				case CampaignBonusType::BUILDING:
 				{
 					BuildingID building(reader.readUInt8());
-					data = CampaignBonusBuilding{remapper.remapBuilding(std::nullopt, building)};
+					data = CampaignBonusBuilding{building, remapper.remapBuilding(std::nullopt, building)};
 					break;
 				}
 				case CampaignBonusType::ARTIFACT:
@@ -197,7 +197,7 @@ CampaignBonus::CampaignBonus(const JsonNode & bjson, CampaignStartOptions mode)
 		case CampaignBonusType::BUILDING:
 		{
 			BuildingID building(vstd::find_pos(EBuildingType::names, bjson["buildingType"].String()));
-			data = CampaignBonusBuilding{building};
+			data = CampaignBonusBuilding{building, building};
 			break;
 		}
 		case CampaignBonusType::ARTIFACT:
@@ -292,7 +292,7 @@ JsonNode CampaignBonus::toJson() const
 		case CampaignBonusType::BUILDING:
 		{
 			const auto & bonusValue = getValue<CampaignBonusBuilding>();
-			bnode["buildingType"].String() = EBuildingType::names[bonusValue.building.getNum()];
+			bnode["buildingType"].String() = EBuildingType::names[bonusValue.buildingDecoded.getNum()];
 			break;
 		}
 		case CampaignBonusType::ARTIFACT:

+ 6 - 4
lib/campaign/CampaignBonus.h

@@ -46,11 +46,13 @@ struct CampaignBonusCreatures
 
 struct CampaignBonusBuilding
 {
-	BuildingID building;
+	BuildingID buildingH3M;
+	BuildingID buildingDecoded;
 
 	template <typename Handler> void serialize(Handler &h)
 	{
-		h & building;
+		h & buildingH3M;
+		h & buildingDecoded;
 	}
 };
 
@@ -143,9 +145,9 @@ struct CampaignBonusStartingHero
 class CampaignBonus
 {
 	using Variant = std::variant<
-		CampaignBonusSpell,
+		CampaignBonusSpell, // UNTESTED
 		CampaignBonusCreatures,
-		CampaignBonusBuilding,
+		CampaignBonusBuilding, // UNTESTED - broken, Long Live the King, Liberation last
 		CampaignBonusArtifact,
 		CampaignBonusSpellScroll,
 		CampaignBonusPrimarySkill,

+ 2 - 2
lib/campaign/CampaignState.cpp

@@ -39,9 +39,9 @@ bool CampaignHeader::playerSelectedDifficulty() const
 	return difficultyChosenByPlayer;
 }
 
-bool CampaignHeader::formatVCMI() const
+CampaignVersion CampaignHeader::getFormat() const
 {
-	return version == CampaignVersion::VCMI;
+	return version;
 }
 
 std::string CampaignHeader::getDescriptionTranslated() const

+ 1 - 1
lib/campaign/CampaignState.h

@@ -67,7 +67,7 @@ class DLL_LINKAGE CampaignHeader : public boost::noncopyable
 	TextContainerRegistrable textContainer;
 public:
 	bool playerSelectedDifficulty() const;
-	bool formatVCMI() const;
+	CampaignVersion getFormat() const;
 
 	std::string getDescriptionTranslated() const;
 	std::string getNameTranslated() const;

+ 3 - 0
lib/entities/artifact/CArtifactInstance.cpp

@@ -131,6 +131,9 @@ void CChargedArtifactInstance::onChargesChanged()
 	auto artInst = static_cast<CArtifactInstance*>(this);
 	const auto artType = artInst->getType();
 
+	if(!artType->isCharged())
+		return;
+
 	const auto bonusSelector = artType->getDischargeCondition() == DischargeArtifactCondition::SPELLCAST ?
 		Selector::type()(BonusType::SPELL) : Selector::all;
 

+ 0 - 87
lib/entities/building/CBuildingHandler.cpp

@@ -1,87 +0,0 @@
-/*
- * CBuildingHandler.cpp, part of VCMI engine
- *
- * Authors: listed in file AUTHORS in main folder
- *
- * License: GNU General Public License v2.0 or later
- * Full text of license available in license.txt file, in main folder
- *
- */
-#include "StdInc.h"
-#include "CBuildingHandler.h"
-#include "GameLibrary.h"
-#include "../faction/CTown.h"
-#include "../faction/CTownHandler.h"
-
-VCMI_LIB_NAMESPACE_BEGIN
-
-BuildingID CBuildingHandler::campToERMU(int camp, FactionID townType, const std::set<BuildingID> & builtBuildings)
-{
-	static const std::vector<BuildingID> campToERMU = 
-	{
-		BuildingID::TOWN_HALL, BuildingID::CITY_HALL,
-		BuildingID::CAPITOL, BuildingID::FORT, BuildingID::CITADEL, BuildingID::CASTLE, BuildingID::TAVERN,
-		BuildingID::BLACKSMITH, BuildingID::MARKETPLACE, BuildingID::RESOURCE_SILO, BuildingID::NONE,
-		BuildingID::MAGES_GUILD_1, BuildingID::MAGES_GUILD_2, BuildingID::MAGES_GUILD_3, BuildingID::MAGES_GUILD_4,
-		BuildingID::MAGES_GUILD_5,
-		BuildingID::SHIPYARD, BuildingID::GRAIL,
-		BuildingID::SPECIAL_1, BuildingID::SPECIAL_2, BuildingID::SPECIAL_3, BuildingID::SPECIAL_4	
-	}; //creature generators with banks - handled separately
-	
-	if (camp < campToERMU.size())
-	{
-		return campToERMU[camp];
-	}
-
-	static const std::vector<int> hordeLvlsPerTType[GameConstants::F_NUMBER] = 
-	{
-		{2}, {1}, {1,4}, {0,2},	{0}, {0}, {0}, {0}, {0}
-	};
-
-	int curPos = static_cast<int>(campToERMU.size());
-	for (int i=0; i<(*LIBRARY->townh)[townType]->town->creatures.size(); ++i)
-	{
-		if(camp == curPos) //non-upgraded
-			return BuildingID(30 + i);
-		curPos++;
-		if(camp == curPos) //upgraded
-			return BuildingID(37 + i);
-		curPos++;
-
-		if (i < 5) // last two levels don't have reserved horde ID. Yet another H3C weirdeness
-		{
-			if (vstd::contains(hordeLvlsPerTType[townType.getNum()], i))
-			{
-				if (camp == curPos)
-				{
-					if (hordeLvlsPerTType[townType.getNum()][0] == i)
-					{
-						BuildingID dwellingID(BuildingID::getDwellingFromLevel(hordeLvlsPerTType[townType.getNum()][0], 1));
-
-						if(vstd::contains(builtBuildings, dwellingID)) //if upgraded dwelling is built
-							return BuildingID::HORDE_1_UPGR;
-						else //upgraded dwelling not presents
-							return BuildingID::HORDE_1;
-					}
-					else
-					{
-						if(hordeLvlsPerTType[townType.getNum()].size() > 1)
-						{
-							BuildingID dwellingID(BuildingID::getDwellingFromLevel(hordeLvlsPerTType[townType.getNum()][1], 1));
-
-							if(vstd::contains(builtBuildings, dwellingID)) //if upgraded dwelling is built
-								return BuildingID::HORDE_2_UPGR;
-							else //upgraded dwelling not presents
-								return BuildingID::HORDE_2;
-						}
-					}
-				}
-			}
-			curPos++;
-		}
-	}
-	assert(0);
-	return BuildingID::NONE; //not found
-}
-
-VCMI_LIB_NAMESPACE_END

+ 0 - 22
lib/entities/building/CBuildingHandler.h

@@ -1,22 +0,0 @@
-/*
- * CBuildingHandler.h, part of VCMI engine
- *
- * Authors: listed in file AUTHORS in main folder
- *
- * License: GNU General Public License v2.0 or later
- * Full text of license available in license.txt file, in main folder
- *
- */
-#pragma once
-
-#include "../../constants/EntityIdentifiers.h"
-
-VCMI_LIB_NAMESPACE_BEGIN
-
-class DLL_LINKAGE CBuildingHandler
-{
-public:
-	static BuildingID campToERMU(int camp, FactionID townType, const std::set<BuildingID> & builtBuildings);
-};
-
-VCMI_LIB_NAMESPACE_END

+ 1 - 0
lib/entities/faction/CTown.h

@@ -31,6 +31,7 @@ struct DLL_LINKAGE CStructure
 	int3 pos;
 	AnimationPath defName;
 	ImagePath borderName;
+	ImagePath campaignBonus;
 	ImagePath areaName;
 	std::string identifier;
 

+ 1 - 0
lib/entities/faction/CTownHandler.cpp

@@ -450,6 +450,7 @@ void CTownHandler::loadStructure(CTown &town, const std::string & stringID, cons
 	ret->hiddenUpgrade = source["hidden"].Bool();
 	ret->defName = AnimationPath::fromJson(source["animation"]);
 	ret->borderName = ImagePath::fromJson(source["border"]);
+	ret->campaignBonus = ImagePath::fromJson(source["campaignBonus"]);
 	ret->areaName = ImagePath::fromJson(source["area"]);
 
 	town.clientInfo.structures.emplace_back(ret);

+ 8 - 6
lib/gameState/CGameStateCampaign.cpp

@@ -17,7 +17,6 @@
 #include "../entities/artifact/ArtifactUtils.h"
 #include "../entities/artifact/CArtifact.h"
 #include "../entities/building/CBuilding.h"
-#include "../entities/building/CBuildingHandler.h"
 #include "../entities/hero/CHeroClass.h"
 #include "../entities/hero/CHero.h"
 #include "../mapping/CMapEditManager.h"
@@ -29,6 +28,7 @@
 #include "../StartInfo.h"
 #include "../mapping/CMap.h"
 #include "../CPlayerState.h"
+#include "mapping/MapFormatSettings.h"
 
 #include <vstd/RNG.h>
 #include <vcmi/HeroTypeService.h>
@@ -661,11 +661,13 @@ void CGameStateCampaign::initTowns()
 		if (town->anchorPos() != pi.posOfMainTown)
 			continue;
 
-		BuildingID newBuilding;
-		if(gameState->scenarioOps->campState->formatVCMI())
-			newBuilding = bonusValue.building;
-		else
-			newBuilding = CBuildingHandler::campToERMU(bonusValue.building, town->getFactionID(), town->getBuildings());
+		BuildingID newBuilding = bonusValue.buildingDecoded;
+
+		if (bonusValue.buildingH3M.hasValue())
+		{
+			auto mapping = LIBRARY->mapFormat->getMapping(gameState->scenarioOps->campState->getFormat());
+			newBuilding = mapping.remapBuilding(town->getFactionID(), bonusValue.buildingH3M);
+		}
 
 		// Build granted building & all prerequisites - e.g. Mages Guild Lvl 3 should also give Mages Guild Lvl 1 & 2
 		while(true)

+ 1 - 1
lib/mapping/MapIdentifiersH3M.h

@@ -31,7 +31,7 @@ struct ObjectTypeIdentifier
 	}
 };
 
-class MapIdentifiersH3M
+class DLL_LINKAGE MapIdentifiersH3M
 {
 	std::map<BuildingID, BuildingID> mappingBuilding;
 	std::map<FactionID, std::map<BuildingID, BuildingID>> mappingFactionBuilding;

+ 2 - 1
mapeditor/campaigneditor/startingbonus.cpp

@@ -165,7 +165,7 @@ void StartingBonus::loadBonus()
 			const auto & bonusValue = bonus.getValue<CampaignBonusBuilding>();
 			ui->radioButtonBuilding->setChecked(true);
 			on_radioButtonBuilding_toggled();
-			setComboBoxValue(ui->comboBoxBuildingBuilding, bonusValue.building.getNum());
+			setComboBoxValue(ui->comboBoxBuildingBuilding, bonusValue.buildingDecoded.getNum());
 			break;
 		}
 		case CampaignBonusType::ARTIFACT:
@@ -238,6 +238,7 @@ void StartingBonus::saveBonus()
 		};
 	else if(ui->radioButtonBuilding->isChecked())
 		bonus = CampaignBonusBuilding{
+			BuildingID{},
 			BuildingID(ui->comboBoxBuildingBuilding->currentData().toInt())
 		};
 	else if(ui->radioButtonArtifact->isChecked())