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

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

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

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

      //тип паровоза нейтралов
int     civil_train_type[]= {0};
      //между какими станциями может ездить цивильный паровоз
      //первая колонка здесь - это точка рождения
int     civil_train_x[]   = {0};
int     civil_train_y[]   = {0};

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

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

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

      //ГАММЫ УРОВНЯ
#define START_DAYNIGHT        1  //начальное время суток, 0-нет, 1-день, 2-вечер, 3-ночь, 4-утро
#define GAMMA1       0x00000000  //гамма дня
#define GAMMA2       0x00272727  //гамма вечера
#define GAMMA3       0x00505050  //гамма ночи
#define GAMMA4       0x00272727  //гамма утра
#define RAIN_GAMMA1  0x00101010  //гамма дождливого дня
#define RAIN_GAMMA2  0x00373737  //гамма дождливого вечера
#define RAIN_GAMMA3  0x00404040  //гамма дождливого ночи  
#define RAIN_GAMMA4  0x00373737  //гамма дождливого утра  

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

//--------------------------- Подкрепления -----------------------------------
#define PLAYER_REINFORCEMENT  0 //количество составов подкреплений для игрока
#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_STAND0_X   105
#define ATA_STAND0_Y   468

#define ATA_STAND1_X  2946 
#define ATA_STAND1_Y   468

#define ATA_STAND2_X  1454 
#define ATA_STAND2_Y   227 

#define ATA_STAND3_X  1597 
#define ATA_STAND3_Y   227 
                      
#define ATA_STAND4_X  1455 
#define ATA_STAND4_Y   492 
                           
#define ATA_STAND5_X  1597 
#define ATA_STAND5_Y   492 
                           
#define ATA_STAND6_X  1527 
#define ATA_STAND6_Y   560 

#define ATA_PATROL0_X1 2551
#define ATA_PATROL0_Y1 1149
#define ATA_PATROL0_X2  414 
#define ATA_PATROL0_Y2 1149 


//#define DRAW_LOGIC_DEBUG 0

//специфичные декларации
#define AI_FORTES_DIFFICULTY        1
#define AI_FORTES                   1    //
#define AI_FORTES_TRAINS_COUNT      2    //макс. количество составов, отбивающих форты и заводы
#define AI_NO_MASTER                0    //нет мастерских
#define NOT_REBUILD                 1    //не ездить на доукомплектовку
#define RENEW_TIMEOUT               30   //задержка производства в секундах
//int this_train1[]={20,5,30,20,0};
//int this_train11[]={25,10,30,25,0};
//int this_train21[]={80,30,10,80,0};
//int this_train51[]={90,10,30,90,0};
//int this_train61[]={82,10,30,82,0};
int this_train51[]={10,90,45,90,0};

#include "maps\script\TrainsTactDeclares.lgc" //Декларации тактики по составам
//--------------------------------- TRAINZ after declares--------------------------------
int start_trains[]=             { ATT_DIFF_DESANT, ATT_HUYACHILO1, ATT_HUYACHILO0, ATT_KAMIKAZE_UNIT, ATT_KAMIKAZE_UNIT, ATT_DIFF_ROCKET, ATT_LIGHT_GUN, ATT_MEDIUM_FIRE, -1};//
int start_trains_task[]=        {      ATA_STAND4,     ATA_STAND0,     ATA_STAND1,        ATA_STAND2,        ATA_STAND3,      ATA_STAND5,    ATA_STAND6,     ATA_PATROL0,  0};//
int start_trains_x[]=           {    ATA_STAND4_X,   ATA_STAND0_X,   ATA_STAND1_X,      ATA_STAND2_X,      ATA_STAND3_X,    ATA_STAND5_X,  ATA_STAND6_X,  ATA_PATROL0_X1,  0};//
int start_trains_y[]=           {    ATA_STAND4_Y,   ATA_STAND0_Y,   ATA_STAND1_Y,      ATA_STAND2_Y,      ATA_STAND3_Y,    ATA_STAND5_Y,  ATA_STAND6_Y,  ATA_PATROL0_Y1,  0};//
int start_trains_renew[]=       {               0,              0,              0,                 0,                 0,               1,             0,               1,  0};//
int start_trains_random_task[]= {            1000,              0,              0,               880,              1260,             620,            20,               0,  0};//

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

int level_queue_times[]   ={            360,/*        420,                480,               520,*/          560,                600,/*               720,*/   0 };
int level_queue_trains[]  ={ ATT_MEDIUM_GUN,/* ATT_REPAIR, ATT_MEDIUM_MORTAIR, ATT_MEDIUM_ROCKET,*/ ATT_HARD_GUN,   ATT_DIFF_MORTAIR,/* ATT_MEDIUM_ROCKET,*/  -1 };
int level_queue_task[]    ={      ATA_FIGHT,/*  ATA_MINER,          ATA_FIGHT,         ATA_FIGHT,*/    ATA_FIGHT,     ATA_FIGHT_FORT,/*         ATA_FIGHT,*/   0 };

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

//----------------------------------------------------------------------------
#include "maps\script\header.lgc"
main()
{
  iff(1)
  {
    InitDefault();
    SetPushLine(1451,2263,1451,2235,0);//enter1
    SetPushLine(1827,2400,1528,2209,1);//enter2
    SetPushLine(1597,2160,1595,2138,0);//enter3
    SetPushLine(1598,  86,1598, 125,0);//exit1
    SetPushLine(1528,  86,1528, 125,0);//exit2
    SetPushLine(1457,  96,1457, 122,0);//exit3
    SetPushLine(1809,1834,1809,1985,1);//our depo
    SetPushLine(1242,1786,1242,1960,1);//our master
    SetPushLine(1243, 512,1243, 370,1);//enemy depo
    SetPushLine(1807, 555,1807, 355,1);//enemy master

    SetCleverEnemyAttack(1);
    //SetEnemyCanAttackNeutralTrains(1);
    SetCleverEnemyAttack(1);//вкл. поиск пути с учетом weaponrange
    //ставим мины
    //Action(Create(186,1695,607,73),act_setarmy,1,0);
    //Action(Create(186,1030,875,73),act_setarmy,1,0);
    SetPosition(1690,2202);
  }
  if( !MenuEnd() )
    if( !MenuTact() )
    {
      GameTact();
      TrainsTact();
      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(1810,1985,150,0);
        LMasterCapture(1241,1967,150,0);
      }
    }
}