//----------------------------- Общее ----------------------------------------
#define music0 "music\\mus07.ogg" //проигрываемая на уровне музыка
#define music1 "music\\mus09.ogg" //проигрываемая на уровне музыка

#define LEVEL                10  //номер уровня, считая от 0
#define MONEY               300  //начальное количество денег на данном уровне
#define DEMO                  0  //есть ли проигрывание скриптовой сцены
#define BONUS_TIME_LIMIT     40  //макс время прохождения в минутах

//----------------------------- НЕЙТРАЛЫ -------------------------------------
#define MUXI                  0  //количество мух на карте
#define MUXI_NVID           268  //тип мух
#define TYKVA_COUNT          20  //количество тыкв

#define CIVIL                 0  //нейтралы на карте
#define CIVIL_TRAIN_RANDOM    0  //обход нейтралами своих целей по рэндому
#define CIVIL_TRAIN_REBIRTH   0  //1 - нейтралы будут перерождаться

//тип паровоза нейтралов
int civil_train_type[]={0};
int civil_train_x[]={0};
int civil_train_y[]={0};

//----------------------------- Погода ---------------------------------------
#define RAIN                  0  //дождь, 0-нет 1-время от времени 2-все время
#define RAIN_TYPE             1  //вид осадков, 0-дождь, 1-снег, 2-облака, 3-тучи, 4-метеориты
#define RAIN_ROUND_POWER      10 //интенсивность кругов на воде во время дождя (0-нет)
#define NUKE                  0  //вспышки молнии во время дождя
#define NUKE_TIME             5  //перерыв между молниями (случайный), сек
#define NO_RAIN_TIME         30  //перерыв между дождями (случайный), сек
#define RAIN_TIME            30  //продолжительность дождя (случайная), сек

#define SQUALL                1  //порывы ветра
                               
#define TORNADO               1  //торнадо

#define QUAKE_DELAY           0  //примерное время, через которое случается землетрясение, если 0, то их нет
                                 //в каких единицах???

#define WATER_Z               50 //если определена эта константа, то у нас юниты "тонут" на карте
      //ГАММЫ УРОВНЯ
#define START_DAYNIGHT        1  //начальное время суток, 0-нет, 1-день, 2-вечер, 3-ночь, 4-утро
#define GAMMA1       0x00000000  //гамма дня
#define GAMMA2       0x0000253f  //гамма вечера
#define GAMMA3       0x00715131  //гамма ночи
#define GAMMA4       0x001422f1  //гамма утра
#define RAIN_GAMMA1  0x00221400  //гамма дождливого дня
#define RAIN_GAMMA2  0x00453934  //гамма дождливого вечера
#define RAIN_GAMMA3  0x00796259  //гамма дождливого ночи  
#define RAIN_GAMMA4  0x003c25f7  //гамма дождливого утра  

#define ENV_SOUND_DAY       141  //PlaySFX(141) звуковое окружение днем (номер звука)
#define ENV_SOUND_NIGHT     140  //PlaySFX(140) звуковое окружение ночью (номер звука)
#define ENV_SOUND_FREQ      30   //частота появления звуков окружения (чем больше число тем реже звуки)

//--------------------------- Подкрепления -----------------------------------
#define PLAYER_REINFORCEMENT  2 //количество составов подкреплений для игрока
#define AI_REINFORCEMENT      1 //количество составов подкреплений для AI
int     player_reinforcement_train[]={5,0};

//----------------------------------------------------------------------------
      //ЛИМИТЫ ЮНИТОВ НА КАРТЕ
//#define LIMIT05               5
//#define LIMIT10               5
//#define LIMIT20              10
//#define LIMIT25              10
//#define LIMIT30              10
//#define LIMIT35              10
//#define LIMIT40              10
//#define LIMIT45               5
//#define LIMIT62               1
//#define LIMIT75               1
//#define LIMIT80              10
//#define LIMIT82               5
//#define LIMIT85               5
//#define LIMIT90               5
//#define LIMIT97               5
//#define LIMITALL             20
//--------------------------------- TRAINZ before declares-------------------------------

#define ATA_PATROL0_X1 2894
#define ATA_PATROL0_Y1  667
#define ATA_PATROL0_X2 2058
#define ATA_PATROL0_Y2  499

#define ATA_PATROL1_X1 1168
#define ATA_PATROL1_Y1  773
#define ATA_PATROL1_X2 1797
#define ATA_PATROL1_Y2 1410

#define ATA_STAND0_X 263
#define ATA_STAND0_Y 222
 
#define ATA_STAND1_X 274
#define ATA_STAND1_Y 293

#define ATA_STAND2_X  176
#define ATA_STAND2_Y 1869

#define ATA_STAND3_X  108
#define ATA_STAND3_Y 1869

#define REBUILD_ADDON 6
int this_train19[]={25,25,45,0}; //ATT_DEFENCE_MORTAIR
int this_train1[]={10,20,20,20,0}; //ATT_MEDIUM_GUN
//#define DRAW_LOGIC_DEBUG 0
#define AI_FORTES             1
#define AI_FORTES_DIFFICULTY  1
#define NOT_REBUILD           1 //не ездить на доукомплектовку
#define RENEW_TIMEOUT        30 //задержка производства в секундах

#include "maps\script\TrainsTactDeclares.lgc" //Декларации тактики по составам
//--------------------------------- TRAINZ after declares--------------------------------

int start_trains[]=            { ATT_LIGHT_FIRE, ATT_LIGHT_FIRE, ATT_MEDIUM_GUN, ATT_DIFF_DESANT, ATT_DIFF_DESANT, ATT_DIFF_DESANT, -1};
int start_trains_task[]=       {    ATA_PATROL0,    ATA_PATROL1,     ATA_STAND0,      ATA_STAND1,      ATA_STAND2,      ATA_STAND3,  0};
int start_trains_x[]=          { ATA_PATROL0_X1, ATA_PATROL1_X1,   ATA_STAND0_X,    ATA_STAND1_X,    ATA_STAND2_X,    ATA_STAND3_X,  0};
int start_trains_y[]=          { ATA_PATROL0_Y1, ATA_PATROL1_Y1,   ATA_STAND0_Y,    ATA_STAND1_Y,    ATA_STAND2_Y,    ATA_STAND3_Y,  0};
int start_trains_renew[]=      {              1,              1,              0,               0,               0,               0,  0};
int start_trains_random_task[]={              0,              0,            240,             280,             200,             340,  0}; //проставляем время в секундах - периодичность нападения

int level_queue_times[]   ={  0};
int level_queue_trains[]  ={ -1};
int level_queue_task[]    ={  0};

#define FIRSTCONTACTTIME     60   //(сек) время, за которое мочим игрока при встрече в секундах (по рэндому, может начаться чуть позже)
#define FIRSTATTACKTIME      90   //(сек) время первой атаки в секундах (по рэндому, может начаться чуть позже)
#define STG_DESTROY_TIME     60   //(мин) время, по прошествии которого мы точно забеспокоимся о выносе игрока (по рэндому, может начаться чуть позже)

//----------------------------------------------------------------------------
#include "maps\script\header.lgc"
main()
{
  iff(1)
  {
    InitDefault();
    SetPushLine(2787,2426,2965,2179,1);//enter
    SetPushLine(  53,  31,  86,  50,0);//exit
    SetPushLine(3034,1706,2925,1782,1);//our depo
    SetPushLine(2451,2157,2324,2220,1);//our master
    SetPushLine(2243,1912,2287,1881,0);//our master exit 2
    SetPushLine(  13, 307, 152, 401,1);//enemy depo
    SetPushLine( 761, 215, 511,  67,1);//enemy master
    SetCleverEnemyAttack(1);//вкл. поиск пути с учетом weaponrange
    SetPosition(MapSizeX(),MapSizeY());
  }
  if( !MenuEnd() )
    if( !MenuTact() )
    {
      GameTact();
      TrainsTact();
      int i;
      for(i=0;i<ARR_LENGTH;i++)
        if(ai_trains_task2[i]==ATA_STAND2 || ai_trains_task2[i]==ATA_STAND3)
           ai_trains_task2[i]=ATA_FIGHT;

       
      if( OneTimeIn5Second() )
      {
        //если у игрока не осталось паровозов  и нет депо - рождаем паровоз, чтобы легче дышалось
        if( (GetVid(5,VID_COUNT0)+GetVid(10,VID_COUNT0))==0 && GetVid(102,VID_COUNT2) )
          AddReinforcement();
        if( !NoArmyUnits(1) )//количество юнитов в армии 1
          Win();//победил
        if( !NoArmyUnits(0) )//количество юнитов в армии 0
          if( IsNoDepo() )   //депо нет, либо нет денег на производство юнитов и депо не работает
            Loose();         //проиграл

      }
      if( OneTimeInSecond() )
      {
        LDepoCapture(2987,1849,150,0);
        LMasterCapture(2538,2059,100,0);
      }
    }
}