//////////////////////////////////////////////////////////////////////////////// //Martin Gühmann's GM1_Goods.slc v.1.1 for GoodMod // //////////////////////////////////////////////////////////////////////////////// //This script file creates on every good tile an "good tileimprovement". // //Unfortunatly I wasn't able to find a possibility to create on every good // //a player independant tile improvement directly. It is also not possible to // //create a tile improvement like a fort outside of the vision range of a unit.// //My conclusion was to create first a Barbarian unit in the neighbourhood of a// //good tile (it could be that on the good tile is a settler) and create under // //the unit a border expanding tile improvement without an own graphic. My // //obversation was that a tile improvement loose its owner if the borders // //arround are deleted. So afterwards the first tile improvement is finished // //on the good tile the actual good tile improvement is created and the frist // //tile improvement is be pillaged. Unfortunatly the game crashes if you put // //the creation of the second improvement and the deletion of the first // //improvement into one event handler, therefore both events can be now found // //in different event handler. I disabled the possibility to create a city in // //first turn, because as long as the temporary tile improvement is on the map // //you get some wired things with the borders. If a settler tries to settle it // //will be stopped but if you get a city from a goody hut you will loose it. // //////////////////////////////////////////////////////////////////////////////// HandleEvent(BeginTurn)'MG_NewGoodImprovement' pre { int_t i; int_t j; location_t MGGoodLoc; location_t MGUnitLoc; unit_t MGGoodUnit; if (GetCurrentRound () <= 1) { GrantAdvance(0, AdvanceDB(ADVANCE_SUBNEURAL_ADS)); for (i=0; i<=GetMapWidth()-1 ; i=i+1) { for (j=0; j<=GetMapHeight()-1 ; j=j+1) { MakeLocation(MGGoodLoc, i, j); if (HasGood(MGGoodLoc)>-1) { GetRandomNeighbor(MGGoodLoc, MGUnitLoc); CreateUnit(0, UnitDB(UNIT_BOMBER), MGUnitLoc, 1, MGGoodUnit); Event:CreateImprovement(0,MGUnitLoc, 40,0 ); Event: DisbandUnit(MGGoodUnit); // FinishImprovements(MGUnitLoc); // doesn't work here DisableTrigger('MG_NewGoodImprovement'); DisableTrigger('MG_CutUnitImprovement'); // EnableTrigger('MG_FinishGoodImprovement'); } } } } elseif (GetCurrentRound () > 1) {//if someone reloads slic DisableTrigger('MG_NewGoodImprovement'); DisableTrigger('MG_CutUnitImprovement'); DisableTrigger('MG_ReplaceGoodImprovement'); } } //HandleEvent(BeginTurnImprovements)'MG_FinishGoodImprovement' post {//only works for the good improvements but not for the test improvement //now obsolete //int_t i; //int_t j; //int_t k; //location_t MGGoodLoc; // if (GetCurrentRound () <= 1) { // for (i=0; i<=GetMapWidth()-1 ; i=i+1) { // for (j=0; j<=GetMapHeight()-1 ; j=j+1) { // MakeLocation(MGGoodLoc, i, j); // if (TileHasImprovement(MGGoodLoc, 40)) {//again it doesn't work // FinishImprovements(MGGoodLoc); // } // elseif (HasGood(MGGoodLoc)>-1) {//one turn less but the price is too high // FinishImprovements(MGGoodLoc); // } // } // } // } //} HandleEvent(BeginTurnImprovements)'MG_ReplaceGoodImprovement' post { int_t i; int_t j; location_t MGGoodLoc; if (GetCurrentRound () <= 1) { for (i=0; i<=GetMapWidth()-1 ; i=i+1) { for (j=0; j<=GetMapHeight()-1 ; j=j+1) { MakeLocation(MGGoodLoc, i, j); if (HasGood(MGGoodLoc)==0) {//TERRAIN_ARCTIC_MOUNTAIN_GOOD_ONE // Rubies Event:CreateImprovement(0,MGGoodLoc, 41,0 ); // Event:CutImprovements(MGUnitLoc); I don't know why this causes a game crach but MG_CutUnitImprovement solved this problem. Event:CreateImprovement(0,MGGoodLoc, 45,0 ); } elseif (HasGood(MGGoodLoc)==1) {//TERRAIN_ARCTIC_MOUNTAIN_GOOD_TWO // Diamonds Event:CreateImprovement(0,MGGoodLoc, 42,0 ); Event:CreateImprovement(0,MGGoodLoc, 46,0 ); } elseif (HasGood(MGGoodLoc)==2) {//TERRAIN_ARCTIC_MOUNTAIN_GOOD_THREE // Bauxite Event:CreateImprovement(0,MGGoodLoc, 43,0 ); // Event:CreateImprovement(0,MGGoodLoc, 47,0 ); } elseif (HasGood(MGGoodLoc)==3) {//TERRAIN_ARCTIC_MOUNTAIN_GOOD_FOUR // Emerals Event:CreateImprovement(0,MGGoodLoc, 44,0 ); Event:CreateImprovement(0,MGGoodLoc, 48,0 ); } elseif (HasGood(MGGoodLoc)==4) {//TERRAIN_DESERT_GOOD_ONE // Glass Event:CreateImprovement(0,MGGoodLoc, 41,0 ); } elseif (HasGood(MGGoodLoc)==5) {//TERRAIN_DESERT_GOOD_TWO // Oil Event:CreateImprovement(0,MGGoodLoc, 42,0 ); } elseif (HasGood(MGGoodLoc)==6) {//TERRAIN_DESERT_GOOD_THREE // Dates Event:CreateImprovement(0,MGGoodLoc, 43,0 ); } elseif (HasGood(MGGoodLoc)==7) {//TERRAIN_DESERT_GOOD_FOUR // Camels Event:CreateImprovement(0,MGGoodLoc, 44,0 ); } elseif (HasGood(MGGoodLoc)==8) {//TERRAIN_FOREST_GOOD_ONE // Hardwood Event:CreateImprovement(0,MGGoodLoc, 41,0 ); } elseif (HasGood(MGGoodLoc)==9) {//TERRAIN_FOREST_GOOD_TWO // Bear Event:CreateImprovement(0,MGGoodLoc, 42,0 ); } elseif (HasGood(MGGoodLoc)==10) {//TERRAIN_FOREST_GOOD_THREE // Apples Event:CreateImprovement(0,MGGoodLoc, 43,0 ); } elseif (HasGood(MGGoodLoc)==11) {//TERRAIN_FOREST_GOOD_FOUR // Beavers Event:CreateImprovement(0,MGGoodLoc, 44,0 ); } elseif (HasGood(MGGoodLoc)==12) {//TERRAIN_GRASSLAND_GOOD_ONE // Cotton/Flax Event:CreateImprovement(0,MGGoodLoc, 41,0 ); } elseif (HasGood(MGGoodLoc)==13) {//TERRAIN_GRASSLAND_GOOD_TWO // Tobacco Event:CreateImprovement(0,MGGoodLoc, 42,0 ); } elseif (HasGood(MGGoodLoc)==14) {//TERRAIN_GRASSLAND_GOOD_THREE // Potatoes Event:CreateImprovement(0,MGGoodLoc, 43,0 ); } elseif (HasGood(MGGoodLoc)==15) {//TERRAIN_GRASSLAND_GOOD_FOUR // Poppies Event:CreateImprovement(0,MGGoodLoc, 44,0 ); } elseif (HasGood(MGGoodLoc)==16) {//TERRAIN_HILL_GOOD_ONE // Coffee Event:CreateImprovement(0,MGGoodLoc, 41,0 ); } elseif (HasGood(MGGoodLoc)==17) {//TERRAIN_HILL_GOOD_TWO // Grapes Event:CreateImprovement(0,MGGoodLoc, 42,0 ); } elseif (HasGood(MGGoodLoc)==18) {//TERRAIN_HILL_GOOD_THREE // Uranium Event:CreateImprovement(0,MGGoodLoc, 43,0 ); } elseif (HasGood(MGGoodLoc)==19) {//TERRAIN_HILL_GOOD_FOUR // Olives Event:CreateImprovement(0,MGGoodLoc, 44,0 ); } elseif (HasGood(MGGoodLoc)==20) {//TERRAIN_JUNGLE_GOOD_ONE // Medicinal Herbs Event:CreateImprovement(0,MGGoodLoc, 41,0 ); } elseif (HasGood(MGGoodLoc)==21) {//TERRAIN_JUNGLE_GOOD_TWO // Jade Event:CreateImprovement(0,MGGoodLoc, 42,0 ); } elseif (HasGood(MGGoodLoc)==22) {//TERRAIN_JUNGLE_GOOD_THREE // Banannas Event:CreateImprovement(0,MGGoodLoc, 43,0 ); } elseif (HasGood(MGGoodLoc)==23) {//TERRAIN_JUNGLE_GOOD_FOUR // Sugar Event:CreateImprovement(0,MGGoodLoc, 44,0 ); } elseif (HasGood(MGGoodLoc)==24) {//TERRAIN_MOUNTAIN_GOOD_ONE // Tea Event:CreateImprovement(0,MGGoodLoc, 41,0 ); } elseif (HasGood(MGGoodLoc)==25) {//TERRAIN_MOUNTAIN_GOOD_TWO // Emeralds Event:CreateImprovement(0,MGGoodLoc, 42,0 ); } elseif (HasGood(MGGoodLoc)==26) {//TERRAIN_MOUNTAIN_GOOD_THREE // Coal Event:CreateImprovement(0,MGGoodLoc, 43,0 ); } elseif (HasGood(MGGoodLoc)==27) {//TERRAIN_MOUNTAIN_GOOD_FOUR // Gold Event:CreateImprovement(0,MGGoodLoc, 44,0 ); } elseif (HasGood(MGGoodLoc)==28) {//TERRAIN_PLAINS_GOOD_ONE // Spices Event:CreateImprovement(0,MGGoodLoc, 41,0 ); } elseif (HasGood(MGGoodLoc)==29) {//TERRAIN_PLAINS_GOOD_TWO // Elephant Event:CreateImprovement(0,MGGoodLoc, 42,0 ); } elseif (HasGood(MGGoodLoc)==30) {//TERRAIN_PLAINS_GOOD_THREE // Wheat Event:CreateImprovement(0,MGGoodLoc, 43,0 ); } elseif (HasGood(MGGoodLoc)==31) {//TERRAIN_PLAINS_GOOD_FOUR // Buffalo Event:CreateImprovement(0,MGGoodLoc, 44,0 ); } elseif (HasGood(MGGoodLoc)==32) {//TERRAIN_SWAMP_GOOD_ONE // Alligator Event:CreateImprovement(0,MGGoodLoc, 41,0 ); } elseif (HasGood(MGGoodLoc)==33) {//TERRAIN_SWAMP_GOOD_TWO // Rice Event:CreateImprovement(0,MGGoodLoc, 42,0 ); } elseif (HasGood(MGGoodLoc)==34) {//TERRAIN_SWAMP_GOOD_THREE // Chilli Event:CreateImprovement(0,MGGoodLoc, 43,0 ); } elseif (HasGood(MGGoodLoc)==35) {//TERRAIN_SWAMP_GOOD_FOUR // Peat Event:CreateImprovement(0,MGGoodLoc, 44,0 ); } elseif (HasGood(MGGoodLoc)==36) {//TERRAIN_TUNDRA_GOOD_ONE // Caribou Event:CreateImprovement(0,MGGoodLoc, 41,0 ); } elseif (HasGood(MGGoodLoc)==37) {//TERRAIN_WATER_DEEP_GOOD_ONE // Whales Event:CreateImprovement(0,MGGoodLoc, 45,0 ); } elseif (HasGood(MGGoodLoc)==38) {//TERRAIN_WATER_DEEP_GOOD_TWO // Giant Squid Event:CreateImprovement(0,MGGoodLoc, 46,0 ); } elseif (HasGood(MGGoodLoc)==39) {//TERRAIN_WATER_DEEP_GOOD_THREE // Tuna Event:CreateImprovement(0,MGGoodLoc, 47,0 ); } elseif (HasGood(MGGoodLoc)==40) {//TERRAIN_WATER_SHALLOW_GOOD_ONE // Crabs Event:CreateImprovement(0,MGGoodLoc, 45,0 ); } elseif (HasGood(MGGoodLoc)==41) {//TERRAIN_WATER_SHALLOW_GOOD_TWO // Pearls Event:CreateImprovement(0,MGGoodLoc, 46,0 ); } elseif (HasGood(MGGoodLoc)==42) {//TERRAIN_WATER_SHALLOW_GOOD_THREE // Salmon Event:CreateImprovement(0,MGGoodLoc, 47,0 ); } elseif (HasGood(MGGoodLoc)==43) {//TERRAIN_WATER_SHALLOW_GOOD_FOUR // Lobster Event:CreateImprovement(0,MGGoodLoc, 48,0 ); } elseif (HasGood(MGGoodLoc)==44) {//TERRAIN_BROWN_HILL_GOOD_ONE // Copper Event:CreateImprovement(0,MGGoodLoc, 41,0 ); } elseif (HasGood(MGGoodLoc)==45) {//TERRAIN_BROWN_HILL_GOOD_TWO // Silver Event:CreateImprovement(0,MGGoodLoc, 42,0 ); } elseif (HasGood(MGGoodLoc)==46) {//TERRAIN_WATER_BEACH_GOOD_ONE // Crab Event:CreateImprovement(0,MGGoodLoc, 45,0 ); } elseif (HasGood(MGGoodLoc)==47) {//TERRAIN_WATER_BEACH_GOOD_TWO // Fish Event:CreateImprovement(0,MGGoodLoc, 46,0 ); } elseif (HasGood(MGGoodLoc)==48) {//TERRAIN_BROWN_MOUNTAIN_GOOD_ONE // Iron Ore Event:CreateImprovement(0,MGGoodLoc, 41,0 ); } elseif (HasGood(MGGoodLoc)==49) {//TERRAIN_BROWN_MOUNTAIN_GOOD_TWO // Silver Event:CreateImprovement(0,MGGoodLoc, 42,0 ); } elseif (HasGood(MGGoodLoc)==50) {//TERRAIN_WHITE_HILL_GOOD_ONE // Sapphires Event:CreateImprovement(0,MGGoodLoc, 41,0 ); Event:CreateImprovement(0,MGGoodLoc, 45,0 ); } elseif (HasGood(MGGoodLoc)==51) {//TERRAIN_WHITE_HILL_GOOD_TWO // Emerals Event:CreateImprovement(0,MGGoodLoc, 42,0 ); } elseif (HasGood(MGGoodLoc)==52) {//TERRAIN_GLACIER_GOOD_ONE // Seals Event:CreateImprovement(0,MGGoodLoc, 41,0 ); } elseif (HasGood(MGGoodLoc)==53) {//TERRAIN_GLACIER_GOOD_TWO // Walrus Event:CreateImprovement(0,MGGoodLoc, 42,0 ); } EnableTrigger('MG_CutUnitImprovement'); } } } } HandleEvent(SettleOrder)'MG_SettleDenied' pre {// to avoid some problems with the above code that is too slow anyway if (GetCurrentRound () <= 1) { Message ((IsHumanPlayer(g.player)), 'MG_StopSettling'); return STOP; } } messagebox 'MG_StopSettling' { Show(); Title(ID_MGSTOPSETTLING_TITLE); Text(ID_MGSTOPSETTLING); } HandleEvent(CreateCity)'MG_CreateCityDenied' pre { if (GetCurrentRound () <= 1) { return STOP; } } HandleEvent(FinishBuildPhase)'MG_CutUnitImprovement' post { int_t i; int_t j; location_t MGUnitLoc; if (GetCurrentRound () <= 1) { for (i=0; i<=GetMapWidth()-1 ; i=i+1) { for (j=0; j<=GetMapHeight()-1 ; j=j+1) { MakeLocation(MGUnitLoc, i, j); if (TileHasImprovement(MGUnitLoc, 40)) { Event:CutImprovements(MGUnitLoc); DisableTrigger('MG_CutUnitImprovement'); DisableTrigger('MG_NewGoodImprovement'); // DisableTrigger('MG_CreateCityDenied'); // DisableTrigger('MG_SettleDenied'); RemoveAdvance(0, AdvanceDB(ADVANCE_SUBNEURAL_ADS)); } } } } } HandleEvent(BeginTurn) 'GoodMod_BeginGame' pre { if(IsHumanPlayer(g.player)) { Message ((IsHumanPlayer(g.player)), 'GoodMod_Begin'); DisableTrigger('GoodMod_BeginGame'); } } messagebox 'GoodMod_Begin' { Show(); Title(ID_GOODMOD_START_TITLE); Text(ID_GOODMOD_START); } //HandleEvent(CutImprovements)'MG_PillageImprovement' pre {//should avoid pillaging unowned tileimprovements, because of a bug, but doesn't work; hope the AI doesn't waste its time to pillage unowned tileimps //int_t i; //int_t j; //int_t k; //location_t MGGoodLoc; // for (i=0; i<=GetMapWidth()-1 ; i=i+1) { // for (j=0; j<=GetMapHeight()-1 ; j=j+1) { // MakeLocation(MGGoodLoc, i, j); // for (k=-1; k<=40 ; k=k+1) { // if (CellOwner(MGGoodLoc)==k+1) {//doesn't work // return CONTINUE; // } // elseif (CellOwner(MGGoodLoc)<0) {//that's means if the cell is owned by someone // return STOP; // } // } // } // } //}