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