Images
Recapture
Sailed Around The World
Defeated Enemy
First Democratic Nation
First Fascist Nation
First Socialist Nation
First Fundamentalist Nation

Monuments

This is another “eyecandy”-script, which builds monuments on the player’s territory when he accomplishes certain features:

  • Recapture of a City
  • Sailed Around the World
  • Enemy Defeated by Conquest
  • First to Enter a Modern Government

The Script

//--------------------------------------------------------------------------
// MoT Mod for CTP2 (Apolyton Edition) by BureauBert
// v1.1
// http://motmod.ctp2.info
//--------------------------------------------------------------------------
////////////////////////////////////////////////////////////////////////////
// Monuments Code 
// by BureauBert
// This script places monuments on the map when player achieve certain features.
////////////////////////////////////////////////////////////////////////////

///////////////////////////////////
// Functions
///////////////////////////////////

void_f InitMonuments() {
	int_t monCount;

	for(monCount = 0; monCount < g.max_players; monCount = monCount + 1) {
		MON_GovernmentTracker[monCount] = -1;
	}
}

void_f CreateMonument(int_t thePlayer, location_t theLocation, int_t theMonument) {
	int_t monVisiPlayer;
	location_t monVisiCityLoc;
	int_t monCountB;
	int_t monCountC;
	int_t monVisiToBuild;
	location_t monVisiTmpLoc;
	location_t monVisiBuildLoc;
	int_t monLookLoc;
	location_t monCheckLoc;

	monVisiPlayer = thePlayer;
	monVisiCityLoc = theLocation;
	monVisiToBuild = theMonument;

	int_t check;
	int_t timp;
	int_t rand;

	monVisiBuildLoc = monVisiCityLoc;

	for(monCountB = 7; monCountB > -1; monCountB = monCountB - 1){
		if(GetNeighbor(monVisiCityLoc, monCountB, monVisiTmpLoc)) {
			timp = 0;
			if(TerrainType(monVisiTmpLoc) == TerrainDB(TERRAIN_PLAINS)
			|| TerrainType(monVisiTmpLoc) == TerrainDB(TERRAIN_GRASSLAND)
			|| TerrainType(monVisiTmpLoc) == TerrainDB(TERRAIN_DESERT)
			|| TerrainType(monVisiTmpLoc) == TerrainDB(TERRAIN_TUNDRA)
			|| TerrainType(monVisiTmpLoc) == TerrainDB(TERRAIN_HILL)
			|| TerrainType(monVisiTmpLoc) == TerrainDB(TERRAIN_FOREST)
			|| TerrainType(monVisiTmpLoc) == TerrainDB(TERRAIN_JUNGLE)
			){
				for(monCountC = 0; monCountC < MOD_NUMOFTILEIMPS; monCountC = monCountC + 1) {
					if(TileHasImprovement(monVisiTmpLoc, monCountC) && monCountC != TerrainImprovementDB(TILEIMP_TERRAFORM_GRASSLAND)) {
						timp = timp + 1;
					}
					if(TileHasWonder(monVisiTmpLoc) || TileHasNaturalWonder(monVisiTmpLoc) || TileHasCapital(monVisiTmpLoc) || TileHasMonument(monVisiTmpLoc)) {
						timp = timp + 10;
					}
					if(HasGood(monVisiTmpLoc) > -1) {
						timp = timp + 10;
					}
				}
				if(timp < 1) {
					monVisiBuildLoc = monVisiTmpLoc;
					monCountB = -1;
				}
			}
		}
	}
	if(monVisiBuildLoc == monVisiCityLoc) {
		for(monCountB = 7; monCountB > -1; monCountB = monCountB - 1){
			if(GetNeighbor(monVisiCityLoc, monCountB, monVisiTmpLoc)) {
				timp = 0;
				if(TerrainType(monVisiTmpLoc) == TerrainDB(TERRAIN_MOUNTAIN)
				|| TerrainType(monVisiTmpLoc) == TerrainDB(TERRAIN_BROWN_HILL)
				|| TerrainType(monVisiTmpLoc) == TerrainDB(TERRAIN_BROWN_MOUNTAIN)
				|| TerrainType(monVisiTmpLoc) == TerrainDB(TERRAIN_WHITE_HILL)
				|| TerrainType(monVisiTmpLoc) == TerrainDB(TERRAIN_WHITE_MOUNTAIN)
				|| TerrainType(monVisiTmpLoc) == TerrainDB(TERRAIN_GLACIER)
				|| TerrainType(monVisiTmpLoc) == TerrainDB(TERRAIN_SWAMP)
				){
					for(monCountC = 0; monCountC < MOD_NUMOFTILEIMPS; monCountC = monCountC + 1) {
						if(TileHasImprovement(monVisiTmpLoc, monCountC) && monCountC != TerrainImprovementDB(TILEIMP_TERRAFORM_GRASSLAND)) {
							timp = timp + 1;
						}
						if(TileHasWonder(monVisiTmpLoc) || TileHasNaturalWonder(monVisiTmpLoc) || TileHasCapital(monVisiTmpLoc) || TileHasMonument(monVisiTmpLoc)) {
							timp = timp + 10;
						}
						if(HasGood(monVisiTmpLoc) > -1) {
							timp = timp + 10;
						}
					}
					if(timp < 1) {
						monVisiBuildLoc = monVisiTmpLoc;
						monCountB = -1;
					}
				}
			}
		}
	}
	if(monVisiBuildLoc == monVisiCityLoc){
		check = 0;
		GetRandomNeighbor(monVisiCityLoc, monVisiTmpLoc);
		while(check < 8) {
			timp = 0;
			if(IsWater(monVisiTmpLoc) || TileHasWonder(monVisiTmpLoc) || TileHasCapital(monVisiTmpLoc) || TileHasMonument(monVisiTmpLoc) || HasGood(monVisiTmpLoc) > -1) {
				timp = timp + 1;
			}
			if(timp == 0){
				for(monCountB = 0; monCountB < MOD_NUMOFTILEIMPS; monCountB = monCountB + 1) {
					if(TileHasImprovement(monVisiTmpLoc, monCountB)) {
						Event:CutImprovements(monVisiTmpLoc);
					}
				}
				monVisiBuildLoc = monVisiTmpLoc;
				check = 8;
			}
			else {
				GetRandomNeighbor(monVisiCityLoc, monVisiTmpLoc);
				check = check + 1;
			}
		}
	}
	if(monVisiBuildLoc != monVisiCityLoc) {
		rand = Random(2);
		if(rand == 1) {
			Terraform(monVisiBuildLoc, TerrainDB(TERRAIN_PLAINS));
			FinishImprovements(monVisiBuildLoc);
		}
		elseif(rand == 0) {
			Terraform(monVisiBuildLoc, TerrainDB(TERRAIN_GRASSLAND));
			FinishImprovements(monVisiBuildLoc);
		}
	}
	if(monVisiBuildLoc != monVisiCityLoc) {
		if(monVisiToBuild > -1) {
			VIS_VisiStuffPlacement = 1;
			GrantAdvance(monVisiPlayer, AdvanceDB(ADVANCE_SUBNEURAL_ADS));
			Event:CreateImprovement(monVisiPlayer, monVisiBuildLoc, monVisiToBuild, 0);
		}
		FinishImprovements(monVisiBuildLoc);
	}
}


///////////////////////////////////
// Featured Events
///////////////////////////////////

// Recapture City 

HandleEvent(CaptureCity) 'CityRecaptureTracker' post {
	MON_RecaptureCity = city[0];
	MON_RecapturePlayer = city[0].owner;
}

HandleEvent(AccomplishFeat) 'CityRecaptureMonument' post {
	int_t monTheFeature;
	int_t monThePlayer;
	location_t monTheLocation;
	int_t monTheMonument;

	monTheFeature = value[0].value;

	if(monTheFeature == FeatDB(FEAT_CITY_RECAPTURED)) {
		monTheLocation = MON_RecaptureCity.location;
		monThePlayer = MON_RecapturePlayer;
		monTheMonument = TerrainimprovementDB(TILEIMP_RECAPTURED);
		CreateMonument(monThePlayer, monTheLocation, monTheMonument);

		// DisableTrigger('CityRecaptureTracker');
		// DisableTrigger('CityRecaptureMonument');
	}
}

// Sailed around the world

HandleEvent(AccomplishFeat) 'SailedAroundTheWorldMonument' post {
	int_t monTheFeature;
	int_t monThePlayer;
	location_t monTheLocation;
	int_t monTheMonument;
	int_t monCities;
	int_t monCityCycle;
	city_t monCheckCity;
	city_t monCity;
	int_t monCitySize;

	monTheFeature = value[0].value;
	monThePlayer = value[1].value;

	if(monTheFeature == FeatDB(FEAT_SAILED_AROUND_WORLD)) {
		monTheMonument = TerrainimprovementDB(TILEIMP_SAILED);
		monCities = Cities(monThePlayer);
		monCitySize = 0;

		for(monCityCycle = 0; monCityCycle < monCities; monCityCycle = monCityCycle + 1) {
			if(GetCityByIndex(monThePlayer, monCityCycle, monCheckCity)) {
				if(IsCoastalCity(monCheckCity) && monCheckCity.population > monCitySize) {
					monCitySize = monCheckCity.population;
					monTheLocation = monCheckCity.location;
					monCity = monCheckCity;
				}
			}
		}
		if(CityIsValid(monCity)) {
			CreateMonument(monThePlayer, monTheLocation, monTheMonument);
		}
		// DisableTrigger('SailedAroundTheWorldMonument');
	}
}

// Conquered enemy by force

HandleEvent(AccomplishFeat) 'ConqueredByForceMonument' post {
	int_t monTheFeature;
	int_t monThePlayer;
	location_t monTheLocation;
	int_t monTheMonument;
	int_t monCityIdx;
	city_t monCity;

	monTheFeature = value[0].value;
	monThePlayer = value[1].value;

	if(monTheFeature == FeatDB(FEAT_CONQUERED_BY_FORCE)) {
		monTheMonument = TerrainimprovementDB(TILEIMP_CONQUERED);
		monCityIdx = GetCapital(monThePlayer);
		if(GetCityByIndex(monThePlayer, monCityIdx, monCity) && CityIsValid(monCity)) {
			monTheLocation = monCity.location;
			CreateMonument(monThePlayer, monTheLocation, monTheMonument);
		}
		// DisableTrigger('ConqueredByForceMonument');
	}
}

// First players to adopt modern governments

HandleEvent(BeginTurn) 'GovernmentMonumentsGovTracker' pre {
	int_t monThePlayer;

	monThePlayer = player[0].owner;

	MON_GovernmentTracker[monThePlayer] = player[0].government;
	return CONTINUE;
}


HandleEvent(EndTurn) 'FirstSocialistMonument' pre {
	int_t monThePlayer;
	int_t monNewGovernment;
	location_t monTheLocation;
	int_t monTheMonument;
	int_t monCityIdx;
	city_t monCity;

	monThePlayer = player[0].owner;
	monNewGovernment = player[0].government;

	if(monNewGovernment != MON_GovernmentTracker[monThePlayer]
	&& monNewGovernment == GovernmentDB(GOVERNMENT_COMMUNISM)
	) {
		monTheMonument = TerrainimprovementDB(TILEIMP_SOCIALIST);
		monCityIdx = GetCapital(monThePlayer);
		if(GetCityByIndex(monThePlayer, monCityIdx, monCity) && CityIsValid(monCity)) {
			monTheLocation = monCity.location;
			CreateMonument(monThePlayer, monTheLocation, monTheMonument);
		}
		DisableTrigger('FirstSocialistMonument');
	}
	return CONTINUE;
}

HandleEvent(EndTurn) 'FirstDemocratMonument' pre {
	int_t monThePlayer;
	int_t monNewGovernment;
	location_t monTheLocation;
	int_t monTheMonument;
	int_t monCityIdx;
	city_t monCity;

	monThePlayer = player[0].owner;
	monNewGovernment = player[0].government;

	if(monNewGovernment != MON_GovernmentTracker[monThePlayer]
	&& monNewGovernment == GovernmentDB(GOVERNMENT_DEMOCRACY)
	) {
		monTheMonument = TerrainimprovementDB(TILEIMP_DEMOCRATIC);
		monCityIdx = GetCapital(monThePlayer);
		if(GetCityByIndex(monThePlayer, monCityIdx, monCity) && CityIsValid(monCity)) {
			monTheLocation = monCity.location;
			CreateMonument(monThePlayer, monTheLocation, monTheMonument);
		}
		DisableTrigger('FirstDemocratMonument');
	}
	return CONTINUE;
}

HandleEvent(EndTurn) 'FirstFundamentalistMonument' pre {
	int_t monThePlayer;
	int_t monNewGovernment;
	location_t monTheLocation;
	int_t monTheMonument;
	int_t monCityIdx;
	city_t monCity;

	monThePlayer = player[0].owner;
	monNewGovernment = player[0].government;

	if(monNewGovernment != MON_GovernmentTracker[monThePlayer]
	&& monNewGovernment == GovernmentDB(GOVERNMENT_FUNDAMENTALISM)
	) {
		monTheMonument = TerrainimprovementDB(TILEIMP_FUNDAMENTALIST);
		monCityIdx = GetCapital(monThePlayer);
		if(GetCityByIndex(monThePlayer, monCityIdx, monCity) && CityIsValid(monCity)) {
			monTheLocation = monCity.location;
			CreateMonument(monThePlayer, monTheLocation, monTheMonument);
		}
		DisableTrigger('FirstFundamentalistMonument');
	}
	return CONTINUE;
}

HandleEvent(EndTurn) 'FirstFascistMonument' pre {
	int_t monThePlayer;
	int_t monNewGovernment;
	location_t monTheLocation;
	int_t monTheMonument;
	int_t monCityIdx;
	city_t monCity;

	monThePlayer = player[0].owner;
	monNewGovernment = player[0].government;

	if(monNewGovernment != MON_GovernmentTracker[monThePlayer]
	&& monNewGovernment == GovernmentDB(GOVERNMENT_FASCISM)
	) {
		monTheMonument = TerrainimprovementDB(TILEIMP_FASCIST);
		monCityIdx = GetCapital(monThePlayer);
		if(GetCityByIndex(monThePlayer, monCityIdx, monCity) && CityIsValid(monCity)) {
			monTheLocation = monCity.location;
			CreateMonument(monThePlayer, monTheLocation, monTheMonument);
		}
		DisableTrigger('FirstFascistMonument');
	}
	return CONTINUE;
}

///////////////////////////////////
// Pillage Protection
///////////////////////////////////

HandleEvent(PillageOrder) 'MonumentsPillageProtectA' pre {
	location_t monLoc;

	monLoc = army[0].location;

	if(TileHasMonument(monLoc)) {
		return STOP;
	}
	else {
		return CONTINUE;
	}
}

HandleEvent(PillageUnit) 'MonumentsPillageProtectB' pre {
	location_t monLoc;
	
	monLoc = unit[0].location;

	if(TileHasMonument(monLoc)) {
		return STOP;
	}
	else {
		return CONTINUE;
	}
}

HandleEvent(CutImprovements)'MonumentsPillageProtectC' pre {
	location_t monLoc;
	
	monLoc = location[0];

	if(TileHasMonument(monLoc)) {
		return STOP;
	}
	else {
		return CONTINUE;
	}
}

// prevent overbuilding of visible wonders
		
HandleEvent(CreateImprovement) 'MonumentsOverbuildProtection' pre {	
	if(TileHasMonument(location[0])) {
		return STOP;
	}
	return CONTINUE;
}