// by Peter Triggs // thanks to Tamerlin for working out the update data paths and, especially, Pedrunn, //who worked out how to do some programming things, and whose solution I've 'borrowed'. // Unit Updater Globals int_t UPDATE_TYPES_ARRAY[]; // an array of types of obsolete units that we find int_t NUM_UPDATE_TYPES; // the number of types in UPDATE_TYPES_ARRAY[] int_t UPDATE_TYPES_INDEX;// an index for UPDATE_TYPES_ARRAY int_t OTHER_TYPES; unit_t OBS_UNIT_ARRAY[];//an array of obsolete units that we find int_t NUM_OBS_UNITS;// the number of units in OBS_UNIT_ARRAY[], used in messages int_t OBS_UNIT_INDEX;// an index for OBS_UNIT_ARRAY int_t OBS_UNIT_INDEX_PLUS;// the ordinal of the above int_t EN_ADV[]; int_t EN_ADV_INDEX; int_t OLD_UNIT_TYPE[];// the UnitDB index of the unit that's become obsolete int_t NEW_UNIT_TYPE[];// the UnitDB index of the unit that's become available int_t PER_UNIT_UPDATE_COST[];// How much it costs to update a unit of type OLD_UNIT_TYPE // to a unit of NEW_UNIT_TYPE[] int_t TOTAL_COST;// Total Cost of updating a bunch of units of some given type HandleEvent(BeginTurn) 'InitUpdateArrays' pre { //DATA ARRAYS: EN_ADV[0]=AdvanceDB(ADVANCE_FEUDALISM); OLD_UNIT_TYPE[0]=UnitDB(UNIT_HOPLITE); NEW_UNIT_TYPE[0]=UnitDB(UNIT_PIKEMEN); PER_UNIT_UPDATE_COST[0]=380; EN_ADV[1]=AdvanceDB(ADVANCE_GUNPOWDER); OLD_UNIT_TYPE[1]=UnitDB(UNIT_PIKEMEN); NEW_UNIT_TYPE[1]=UnitDB(UNIT_INFANTRYMAN); PER_UNIT_UPDATE_COST[1]=1000; EN_ADV[2]=AdvanceDB(ADVANCE_INDUSTRIAL_REVOLUTION); OLD_UNIT_TYPE[2]=UnitDB(UNIT_INFANTRYMAN); NEW_UNIT_TYPE[2]=UnitDB(UNIT_MACHINE_GUNNER); PER_UNIT_UPDATE_COST[2]=1200; EN_ADV[3]=AdvanceDB(ADVANCE_ADV_INFANTRY_TACTICS); OLD_UNIT_TYPE[3]=UnitDB(UNIT_MACHINE_GUNNER); NEW_UNIT_TYPE[3]=UnitDB(UNIT_MARINE); PER_UNIT_UPDATE_COST[3]=1000; EN_ADV[4]=AdvanceDB(ADVANCE_CHAOS_THEORY); OLD_UNIT_TYPE[4]=UnitDB(UNIT_MARINE); NEW_UNIT_TYPE[4]=UnitDB(UNIT_HOVER_INFANTRY); PER_UNIT_UPDATE_COST[4]=2500; EN_ADV[5]=AdvanceDB(ADVANCE_CAVALRY_TACTICS); OLD_UNIT_TYPE[5]=UnitDB(UNIT_KNIGHT); NEW_UNIT_TYPE[5]=UnitDB(UNIT_CAVALRY); PER_UNIT_UPDATE_COST[5]=1200; EN_ADV[6]=AdvanceDB(ADVANCE_TANK_WARFARE); OLD_UNIT_TYPE[6]=UnitDB(UNIT_CAVALRY); NEW_UNIT_TYPE[6]=UnitDB(UNIT_TANK); PER_UNIT_UPDATE_COST[6]=2000; EN_ADV[7]=AdvanceDB(ADVANCE_FUSION); OLD_UNIT_TYPE[7]=UnitDB(UNIT_TANK); NEW_UNIT_TYPE[7]=UnitDB(UNIT_FUSION_TANK); PER_UNIT_UPDATE_COST[7]=5250; EN_ADV[8]=AdvanceDB(ADVANCE_SUPERSONIC_FLIGHT); OLD_UNIT_TYPE[8]=UnitDB(UNIT_FIGHTER); NEW_UNIT_TYPE[8]=UnitDB(UNIT_INTERCEPTOR); PER_UNIT_UPDATE_COST[8]=2500; EN_ADV[9]=AdvanceDB(ADVANCE_ADVANCED_COMPOSITES); OLD_UNIT_TYPE[9]=UnitDB(UNIT_INTERCEPTOR); NEW_UNIT_TYPE[9]=UnitDB(UNIT_STEALTH_FIGHTER); PER_UNIT_UPDATE_COST[9]=2815; EN_ADV[10]=AdvanceDB(ADVANCE_ADVANCED_COMPOSITES); OLD_UNIT_TYPE[10]=UnitDB(UNIT_BOMBER); NEW_UNIT_TYPE[10]=UnitDB(UNIT_STEALTH_BOMBER); PER_UNIT_UPDATE_COST[10]=3375; EN_ADV[11]=AdvanceDB(ADVANCE_HORSE_RIDING); OLD_UNIT_TYPE[11]=UnitDB(UNIT_ARCHER); NEW_UNIT_TYPE[11]=UnitDB(UNIT_MOUNTED_ARCHER); PER_UNIT_UPDATE_COST[11]=340; EN_ADV[12]=AdvanceDB(ADVANCE_CAVALRY_TACTICS); OLD_UNIT_TYPE[12]=UnitDB(UNIT_MOUNTED_ARCHER); NEW_UNIT_TYPE[12]=UnitDB(UNIT_CAVALRY); PER_UNIT_UPDATE_COST[12]=1200; EN_ADV[13]=AdvanceDB(ADVANCE_EUGENICS); OLD_UNIT_TYPE[13]=UnitDB(UNIT_DIPLOMAT); NEW_UNIT_TYPE[13]=UnitDB(UNIT_EMPATHIC_DIPLOMAT); PER_UNIT_UPDATE_COST[13]=1500; EN_ADV[14]=AdvanceDB(ADVANCE_NAVAL_TACTICS); OLD_UNIT_TYPE[14]=UnitDB(UNIT_FIRE_TRIREME); NEW_UNIT_TYPE[14]=UnitDB(UNIT_SHIP_OF_THE_LINE); PER_UNIT_UPDATE_COST[14]=1200; EN_ADV[15]=AdvanceDB(ADVANCE_MODERN_METALLURGY); OLD_UNIT_TYPE[15]=UnitDB(UNIT_SHIP_OF_THE_LINE); NEW_UNIT_TYPE[15]=UnitDB(UNIT_IRONCLAD); PER_UNIT_UPDATE_COST[15]=1500; EN_ADV[16]=AdvanceDB(ADVANCE_ADV_NAVAL_TACTICS); OLD_UNIT_TYPE[16]=UnitDB(UNIT_IRONCLAD); NEW_UNIT_TYPE[16]=UnitDB(UNIT_BATTLESHIP); PER_UNIT_UPDATE_COST[16]=3500; EN_ADV[17]=AdvanceDB(ADVANCE_PLASMA_WEAPONRY); OLD_UNIT_TYPE[17]=UnitDB(UNIT_BATTLESHIP); NEW_UNIT_TYPE[17]=UnitDB(UNIT_PLASMA_DESTROYER); PER_UNIT_UPDATE_COST[17]=4500; EN_ADV[18]=AdvanceDB(ADVANCE_PLASMA_WEAPONRY); OLD_UNIT_TYPE[18]=UnitDB(UNIT_DESTROYER); NEW_UNIT_TYPE[18]=UnitDB(UNIT_PLASMA_DESTROYER); PER_UNIT_UPDATE_COST[18]=4500; EN_ADV[19]=AdvanceDB(ADVANCE_CANNON_MAKING); OLD_UNIT_TYPE[19]=UnitDB(UNIT_CATAPULT); NEW_UNIT_TYPE[19]=UnitDB(UNIT_CANNON); PER_UNIT_UPDATE_COST[19]=1200; EN_ADV[20]=AdvanceDB(ADVANCE_EXPLOSIVES); OLD_UNIT_TYPE[20]=UnitDB(UNIT_CANNON); NEW_UNIT_TYPE[20]=UnitDB(UNIT_ARTILLERY); PER_UNIT_UPDATE_COST[20]=1500; EN_ADV[21]=AdvanceDB(ADVANCE_RADAR); OLD_UNIT_TYPE[21]=UnitDB(UNIT_ARTILLERY); NEW_UNIT_TYPE[21]=UnitDB(UNIT_MOBILE_SAM); PER_UNIT_UPDATE_COST[21]=2000; EN_ADV[22]=AdvanceDB(ADVANCE_CYBERNETICS); OLD_UNIT_TYPE[22]=UnitDB(UNIT_MOBILE_SAM); NEW_UNIT_TYPE[22]=UnitDB(UNIT_WAR_WALKER); PER_UNIT_UPDATE_COST[22]=3500; EN_ADV[23]=AdvanceDB(ADVANCE_HULL_MAKING); OLD_UNIT_TYPE[23]=UnitDB(UNIT_CATAMARAN); NEW_UNIT_TYPE[23]=UnitDB(UNIT_LONGSHIP); PER_UNIT_UPDATE_COST[23]=630; EN_ADV[24]=AdvanceDB(ADVANCE_OCEAN_FARING); OLD_UNIT_TYPE[24]=UnitDB(UNIT_LONGSHIP); NEW_UNIT_TYPE[24]=UnitDB(UNIT_CARRACK); PER_UNIT_UPDATE_COST[24]=920; EN_ADV[25]=AdvanceDB(ADVANCE_INTERNAL_COMBUSTION); OLD_UNIT_TYPE[25]=UnitDB(UNIT_CARRACK); NEW_UNIT_TYPE[25]=UnitDB(UNIT_TROOP_SHIP); PER_UNIT_UPDATE_COST[25]=1200; EN_ADV[26]=AdvanceDB(ADVANCE_NUCLEAR_POWER); OLD_UNIT_TYPE[26]=UnitDB(UNIT_SUBMARINE); NEW_UNIT_TYPE[26]=UnitDB(UNIT_NUCLEAR_SUBMARINE); PER_UNIT_UPDATE_COST[26]=1800; EN_ADV[27]=AdvanceDB(ADVANCE_GENETICS); OLD_UNIT_TYPE[27]=UnitDB(UNIT_NUCLEAR_SUBMARINE); NEW_UNIT_TYPE[27]=UnitDB(UNIT_MOREY_STRIKER); PER_UNIT_UPDATE_COST[27]=3500; EN_ADV[28]=AdvanceDB(ADVANCE_MASS_MEDIA); OLD_UNIT_TYPE[28]=UnitDB(UNIT_CLERIC); NEW_UNIT_TYPE[28]=UnitDB(UNIT_TELEVANGELIST); PER_UNIT_UPDATE_COST[28]=1200; EN_ADV[29]=AdvanceDB(ADVANCE_NEURAL_INTERFACE); OLD_UNIT_TYPE[29]=UnitDB(UNIT_SPY); NEW_UNIT_TYPE[29]=UnitDB(UNIT_CYBER_NINJA); PER_UNIT_UPDATE_COST[29]=2500; EN_ADV[30]=AdvanceDB(ADVANCE_SMART_MATERIALS); OLD_UNIT_TYPE[30]=UnitDB(UNIT_KRAKEN); NEW_UNIT_TYPE[30]=UnitDB(UNIT_DREADNAUGHT); PER_UNIT_UPDATE_COST[30]=6000; // Templates for adding more data: //EN_ADV[]=AdvanceDB(ADVANCE_); //OLD_UNIT_TYPE[]=UnitDB(UNIT_); //NEW_UNIT_TYPE[]=UnitDB(UNIT_); //PER_UNIT_UPDATE_COST[]= ; //EN_ADV[]=AdvanceDB(ADVANCE_); //OLD_UNIT_TYPE[]=UnitDB(UNIT_); //NEW_UNIT_TYPE[]=UnitDB(UNIT_); //PER_UNIT_UPDATE_COST[]=; DisableTrigger('InitUpdateArrays'); } HandleEvent(GrantAdvance)'Human_UnitUpdater' post { int_t i; int_t j; int_t theAdvance; city_t tmpCity; unit_t tmpUnit; if (IsHumanPlayer(player[0])){ theAdvance=value[0]; if(UPDATE_TYPES_ARRAY.#>0){ // re-initialize UPDATE_TYPES_ARRAY for (i=0; i49 && UnitDB(tmpUnit.type).powerpoints <90){ // land unit if (TileHasImprovement(tmpUnit.location, TerrainImprovementDB(TILEIMP_FORTIFICATIONS))){ NUM_OBS_UNITS =1; j=player[0].units; } } elseif (UnitDB(tmpUnit.type).powerpoints >9 && UnitDB(tmpUnit.type).powerpoints <30){// air unit if (TileHasImprovement(tmpUnit.location, TerrainImprovementDB(TILEIMP_AIR_BASES))){ NUM_OBS_UNITS =1; j=player[0].units; } } } } if (NUM_OBS_UNITS){ // we found some but just keep track of which TYPES of units we need to update // this tells us that we've got some units of this type that need updating UPDATE_TYPES_ARRAY[UPDATE_TYPES_INDEX]=i; UPDATE_TYPES_INDEX=UPDATE_TYPES_INDEX+1; NUM_UPDATE_TYPES=UPDATE_TYPES_INDEX; } } } if (NUM_UPDATE_TYPES){ OTHER_TYPES=NUM_UPDATE_TYPES-1; message(player[0],'FoundObsUnits'); } } } HandleEvent(GrantAdvance)'AI_UnitUpdater' post { int_t theAdvance; int_t locChk; int_t locOwner; int_t i; int_t j; army_t tmpArmy; unit_t tmpUnit; city_t tmpCity; location_t tmpLoc; theAdvance=value[0]; if (!IsHumanPlayer(player[0])) {// update AI player's units automatically for(i=0; i 0) {// re-initialize OBS_UNIT_ARRAY for(j= 0; j< OBS_UNIT_ARRAY.#; j= j+1) { OBS_UNIT_ARRAY[j] = 0; } } //find all of the player's (obsolete) units of type OLD_UNIT_TYPE[i] // and put them in an array NUM_OBS_UNITS=0; for(j = 0; j < player[0].units; j = j + 1) { GetUnitByIndex(player[0], j, tmpUnit); if(tmpUnit.type == OLD_UNIT_TYPE[i]) { locChk=0; locOwner=CellOwner(tmpUnit.location); if (locOwner == -1){ locChk=1; } elseif (!IsHumanPlayer(locOwner)) {// IsHumanPlayer(-1) causes IPF locChk=1; } if (locChk){//on unowned or non-human ground OBS_UNIT_ARRAY[NUM_OBS_UNITS] = tmpUnit; NUM_OBS_UNITS =NUM_OBS_UNITS +1; } } } // now check and update all buildqueues for(j=0; j 0) {// re-initialize OBS_UNIT_ARRAY for(j = 0; j < OBS_UNIT_ARRAY.#; j = j + 1) { OBS_UNIT_ARRAY[j] = 0; } } //find all of the player's updatable obsolete units of type // OLD_UNIT_TYPE[UPDATE_TYPES_ARRAY[UPDATE_TYPES_INDEX]] and put them in an array NUM_OBS_UNITS=0; for(j = 0; j < player[0].units; j = j + 1) { GetUnitByIndex(player[0], j, tmpUnit); if(tmpUnit.type == OLD_UNIT_TYPE[UPDATE_TYPES_ARRAY[UPDATE_TYPES_INDEX]]) { if (GetCityByLocation(tmpUnit.location,tmpCity)){ OBS_UNIT_ARRAY[NUM_OBS_UNITS] = tmpUnit; NUM_OBS_UNITS = NUM_OBS_UNITS + 1; } elseif (UnitDB(tmpUnit.type).powerpoints >49 && UnitDB(tmpUnit.type).powerpoints <90){ // land unit if (TileHasImprovement(tmpUnit.location, TerrainImprovementDB(TILEIMP_FORTIFICATIONS))){ OBS_UNIT_ARRAY[NUM_OBS_UNITS] = tmpUnit; NUM_OBS_UNITS = NUM_OBS_UNITS + 1; } } elseif (UnitDB(tmpUnit.type).powerpoints >9 && UnitDB(tmpUnit.type).powerpoints <30){// air unit if (TileHasImprovement(tmpUnit.location, TerrainImprovementDB(TILEIMP_AIR_BASES))){ OBS_UNIT_ARRAY[NUM_OBS_UNITS] = tmpUnit; NUM_OBS_UNITS = NUM_OBS_UNITS + 1; } } } } TOTAL_COST=NUM_OBS_UNITS * PER_UNIT_UPDATE_COST[UPDATE_TYPES_ARRAY[UPDATE_TYPES_INDEX]]; if (TOTAL_COST <= PlayerGold(player[0]) ){ message(player[0], 'ObsUnitsCostOK'); } elseif (PER_UNIT_UPDATE_COST[UPDATE_TYPES_ARRAY[UPDATE_TYPES_INDEX]]<=PlayerGold(player[0])) { message(player[0], 'ObsUnitsCostNotEnoughGold'); } else{ message(player[0], 'NoMoreGold'); } } messagebox 'ObsUnitsCostOK' { if (UPDATE_TYPES_INDEX+1 < NUM_UPDATE_TYPES){ if (NUM_OBS_UNITS==1){ Text (ID_ObsUnitsCostOKandOneUnitButMoreTypesM) ; } else{ Text (ID_ObsUnitsCostOKandMoreTypesM) ; } Button(ID_NEXT_TYPE ){ Kill(); UPDATE_TYPES_INDEX=UPDATE_TYPES_INDEX+1; OTHER_TYPES=OTHER_TYPES-1; message(player[0], 'ObsUnitsTypesNext'); } } else{ if (NUM_OBS_UNITS==1){ Text (ID_ObsUnitsCostOKandOneUnitM) ; } else{ Text (ID_ObsUnitsCostOKM) ; } Button(ID_NO ){ Kill(); } } Button(ID_YES){ int_t k; location_t tmpLoc; city_t tmpCity; For(k=0; kOBS_UNIT_INDEX) { OBS_UNIT_ARRAY[i-1]=copy_array[i]; } } NUM_OBS_UNITS=NUM_OBS_UNITS-1; AddGold(player[0], -PER_UNIT_UPDATE_COST[UPDATE_TYPES_ARRAY[UPDATE_TYPES_INDEX]]); Kill(); if( PER_UNIT_UPDATE_COST[UPDATE_TYPES_ARRAY[UPDATE_TYPES_INDEX]]OBS_UNIT_INDEX) { OBS_UNIT_ARRAY[i-1]=copy_array[i]; } } NUM_OBS_UNITS=NUM_OBS_UNITS-1; Kill(); if (OBS_UNIT_INDEX0){ Button(ID_BACK){ Deselect(); Kill(); OBS_UNIT_INDEX=OBS_UNIT_INDEX-1; OBS_UNIT_INDEX_PLUS=OBS_UNIT_INDEX+1;//this unit's position in the OBS_UNIT_ARRAY message(player[0], 'PartialUpdate'); } } } messagebox 'NoMoreGold' { Show(); Text (ID_NoMoreGoldM) ; // "Sire, I regret to inform you that the treasury is bare." Button(ID_YES){ Kill(); } } messagebox 'ObsUnitsCostNotEnoughGold' { if (UPDATE_TYPES_INDEX+1 < NUM_UPDATE_TYPES){ //if there's another type Text (ID_ObsUnitsCostNotEnoughGoldandMoreTypesM) ; Button(ID_NEXT_TYPE ){ UPDATE_TYPES_INDEX=UPDATE_TYPES_INDEX+1; OTHER_TYPES=OTHER_TYPES-1; Kill(); message(player[0], 'ObsUnitsTypesNext'); } } else{ Text (ID_ObsUnitsCostNotEnoughGoldM) ; Button(ID_NO){ Kill(); // that's it, then } } Button(ID_YES){ Kill(); OBS_UNIT_INDEX=0; OBS_UNIT_INDEX_PLUS=1; message(player[0], 'PartialUpdate'); } } ///////////////////////////////////////////////////////// //Pedrunn's HasDataBaseAdvance function return's 1 if thePlayer has the advance whose // advanceDB value is theAdvance int_f APOL_HasDataBaseAdvance(int_t thePlayer , int_t theAdvance) { int_t tmpAdvance; int_t tmpPlayer; tmpPlayer = thePlayer; tmpAdvance = theAdvance; if(tmpAdvance == AdvanceDB(ADVANCE_ADV_INFANTRY_TACTICS)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_ADV_INFANTRY_TACTICS)) { return 1; } } if(tmpAdvance == AdvanceDB(ADVANCE_ADV_NAVAL_TACTICS)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_ADV_NAVAL_TACTICS)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_ADV_URBAN_PLANNING)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_ADV_URBAN_PLANNING)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_ADVANCED_COMPOSITES)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_ADVANCED_COMPOSITES)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_AERODYNAMICS)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_AERODYNAMICS)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_AGE_OF_REASON)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_AGE_OF_REASON)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_AGRICULTURAL_REVOLUTION)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_AGRICULTURAL_REVOLUTION)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_AGRICULTURE)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_AGRICULTURE)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_AI_SURVEILLANCE)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_AI_SURVEILLANCE)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_ALCHEMY)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_ALCHEMY)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_ARCOLOGIES)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_ARCOLOGIES)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_BALLISTICS)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_BALLISTICS)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_BANKING)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_BANKING)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_BRONZE_WORKING)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_BRONZE_WORKING)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_BUREAUCRACY)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_BUREAUCRACY)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_CANNON_MAKING)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_CANNON_MAKING)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_CAVALRY_TACTICS)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_CAVALRY_TACTICS)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_CHAOS_THEORY)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_CHAOS_THEORY)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_CHEMISTRY)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_CHEMISTRY)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_CLASSICAL_EDUCATION)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_CLASSICAL_EDUCATION)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_COMMUNISM)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_COMMUNISM)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_COMPUTER)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_COMPUTER)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_CONCRETE)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_CONCRETE)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_CONSERVATION)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_CONSERVATION)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_CORPORATE_REPUBLIC)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_CORPORATE_REPUBLIC)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_CORPORATION)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_CORPORATION)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_CRIMINAL_CODE)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_CRIMINAL_CODE)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_CYBERNETICS)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_CYBERNETICS)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_DEMOCRACY)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_DEMOCRACY)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_DIGITAL_ENCRYPTION)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_DIGITAL_ENCRYPTION)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_DRAMA)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_DRAMA)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_ECONOMICS)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_ECONOMICS)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_ECOTOPIA)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_ECOTOPIA)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_ELECTRICITY)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_ELECTRICITY)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_EUGENICS)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_EUGENICS)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_EXPLOSIVES)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_EXPLOSIVES)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_FASCISM)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_FASCISM)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_FEUDALISM)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_FEUDALISM)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_FUEL_CELLS)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_FUEL_CELLS)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_FUSION)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_FUSION)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_GAIA_CONTROLLER)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_GAIA_CONTROLLER)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_GAIA_THEORY)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_GAIA_THEORY)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_GENETIC_TAILORING)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_GENETIC_TAILORING)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_GENETICS)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_GENETICS)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_GEOMETRY)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_GEOMETRY)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_GLOBAL_COMMUNICATIONS)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_GLOBAL_COMMUNICATIONS)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_GLOBAL_DEFENSE)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_GLOBAL_DEFENSE)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_GLOBAL_ECONOMICS)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_GLOBAL_ECONOMICS)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_GUIDED_WEAPON_SYSTEMS)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_GUIDED_WEAPON_SYSTEMS)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_GUNPOWDER)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_GUNPOWDER)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_HORSE_RIDING)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_HORSE_RIDING)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_HT_SUPERCONDUCTOR)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_HT_SUPERCONDUCTOR)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_HULL_MAKING)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_HULL_MAKING)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_HUMAN_CLONING)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_HUMAN_CLONING)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_INDUSTRIAL_REVOLUTION)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_INDUSTRIAL_REVOLUTION)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_INTERNAL_COMBUSTION)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_INTERNAL_COMBUSTION)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_IRON_WORKING)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_IRON_WORKING)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_JET_PROPULSION)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_JET_PROPULSION)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_JURISPRUDENCE)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_JURISPRUDENCE)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_LIFE_EXTENSION)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_LIFE_EXTENSION)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_LIQUID_BREATHING_APPARATUS)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_LIQUID_BREATHING_APPARATUS)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_MASONRY)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_MASONRY)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_MASS_MEDIA)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_MASS_MEDIA)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_MASS_PRODUCTION)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_MASS_PRODUCTION)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_MASS_TRANSIT)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_MASS_TRANSIT)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_MEDICINE)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_MEDICINE)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_MODERN_METALLURGY)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_MODERN_METALLURGY)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_MONARCHY)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_MONARCHY)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_NANO_ASSEMBLY)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_NANO_ASSEMBLY)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_NANO_MACHINES)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_NANO_MACHINES)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_NANO_WARFARE)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_NANO_WARFARE)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_NATIONALISM)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_NATIONALISM)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_NAVAL_AVIATION)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_NAVAL_AVIATION)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_NAVAL_TACTICS)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_NAVAL_TACTICS)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_NEURAL_INTERFACE)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_NEURAL_INTERFACE)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_NEURAL_REPROGRAMMING)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_NEURAL_REPROGRAMMING)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_NUCLEAR_POWER)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_NUCLEAR_POWER)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_OCEAN_FARING)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_OCEAN_FARING)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_OIL_REFINING)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_OIL_REFINING)) { return 1; } } if(tmpAdvance == AdvanceDB(ADVANCE_OPTICS)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_OPTICS)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_PHARMACEUTICALS)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_PHARMACEUTICALS)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_PHILOSOPHY)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_PHILOSOPHY)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_PHYSICS)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_PHYSICS)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_PLASMA_WEAPONRY)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_PLASMA_WEAPONRY)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_PRINTING_PRESS)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_PRINTING_PRESS)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_QUANTUM_MECHANICS)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_QUANTUM_MECHANICS)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_RADAR)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_RADAR)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_RAILROAD)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_RAILROAD)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_RELIGION)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_RELIGION)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_ROBOTICS)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_ROBOTICS)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_SHIP_BUILDING)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_SHIP_BUILDING)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_SLAVE_LABOR)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_SLAVE_LABOR)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_SMART_MATERIALS)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_SMART_MATERIALS)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_SPACE_FLIGHT)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_SPACE_FLIGHT)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_STONE_WORKING)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_STONE_WORKING)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_SUBNEURAL_ADS)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_SUBNEURAL_ADS)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_SUPERSONIC_FLIGHT)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_SUPERSONIC_FLIGHT)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_TANK_WARFARE)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_TANK_WARFARE)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_TECHNOCRACY)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_TECHNOCRACY)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_THEOLOGY)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_THEOLOGY)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_TOOLMAKING)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_TOOLMAKING)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_TRADE)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_TRADE)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_ULTRAPRESSURE_MACHINERY)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_ULTRAPRESSURE_MACHINERY)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_UNIFIED_PHYSICS)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_UNIFIED_PHYSICS)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_VERTICAL_FLIGHT_AIRCRAFT)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_VERTICAL_FLIGHT_AIRCRAFT)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_VIRTUAL_DEMOCRACY)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_VIRTUAL_DEMOCRACY)) { return 1; } } elseif(tmpAdvance == AdvanceDB(ADVANCE_WRITING)) { if(HasAdvance(tmpPlayer, ID_ADVANCE_WRITING)) { return 1; } } else{ return 0; } } HandleEvent(SleepUnit) 'UpdateUnit' pre { int_t i; int_t possUpdate; int_t tmpPlayer; unit_t tmpUnit; city_t tmpCity; tmpPlayer=unit[0].owner; tmpUnit=unit[0]; possUpdate=0; if (GetCityByLocation(tmpUnit.location,tmpCity)){ possUpdate=1; } elseif (UnitDB(tmpUnit.type).powerpoints >49 && UnitDB(tmpUnit.type).powerpoints <90){ // land unit if (TileHasImprovement(tmpUnit.location, TerrainImprovementDB(TILEIMP_FORTIFICATIONS))){ possUpdate=1; } } elseif (UnitDB(tmpUnit.type).powerpoints >9 && UnitDB(tmpUnit.type).powerpoints <30){// air unit if (TileHasImprovement(tmpUnit.location, TerrainImprovementDB(TILEIMP_AIR_BASES))){ possUpdate=1; } } if (possUpdate){ //location ok for (i=0;i49 && UnitDB(tmpUnit.type).powerpoints <90){ // land unit if (TileHasImprovement(tmpUnit.location, TerrainImprovementDB(TILEIMP_FORTIFICATIONS))){ possUpdate=1; } } elseif (UnitDB(tmpUnit.type).powerpoints >9 && UnitDB(tmpUnit.type).powerpoints <30){// air unit if (TileHasImprovement(tmpUnit.location, TerrainImprovementDB(TILEIMP_AIR_BASES))){ possUpdate=1; } } if (possUpdate){ //location ok for (i=0;i