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;
}