home *** CD-ROM | disk | FTP | other *** search
/ GameStar 2006 April / Gamestar_83_2006-04_dvd.iso / Dema / demowot_english.exe / Script / Source / Chapter3 / MS9-C3L1.sma < prev   
Text File  |  2005-03-11  |  37KB  |  1,226 lines

  1. #include "script.inc"
  2. #include "visualeffects.inc"
  3. #include "antiair.inc"
  4.  
  5. #define max_run_once 5
  6.  
  7. #define purple_wpnum        4
  8. #define red_wpnum            4
  9. #define black_wpnum            3
  10. #define brown_wpnum            4
  11. #define green_wpnum            8
  12. #define pink_wpnum            4
  13. #define orange_wpnum        5
  14. #define blue_wpnum            4
  15. #define yellow_wpnum        5
  16.  
  17.  
  18. //Global params
  19. new bool:RunOnce[max_run_once];
  20. new bool:gReconIsDead = false;
  21. new bool:g3FlagCaptured = false;
  22. new bool:gMainForceDead = false;
  23. new bool:gOfficerDied = false;
  24. new Float:gRetreatDelay = 20.0;
  25. new DelayedTime;
  26.  
  27. //ways
  28. new gLinePurple[purple_wpnum][6]         = {{"wpr1"},{"wpr2"},{"wpr3"},{"wpr4"}};
  29. new gLineRed[red_wpnum][6]                 = {{"wpr5"},{"wpr6"},{"wpr7"},{"wpr8"}};
  30. new gLineBlack[black_wpnum][6]             = {{"wpr9"},{"wpr10"},{"wpr11"}};
  31. new gLineBrown[brown_wpnum][6]             = {{"wpr12"},{"wpr13"},{"wpr14"},{"wpr15"}};
  32. new gLineGreen[green_wpnum][6]            = {{"wpr16"},{"wpr17"},{"wpr18"},{"wpr19"},{"wpr20"},{"wpr21"},{"wpr22"},{"wpr23"}};
  33. new gLinePink[pink_wpnum][6]             = {{"wpr24"},{"wpr25"},{"wpr26"},{"wpr27"}};
  34. new gLineOrange[orange_wpnum][6]         = {{"wpr28"},{"wpr29"},{"wpr30"},{"wpr31"},{"wpr32"}};
  35. new gLineBlue[blue_wpnum][6]             = {{"wpr33"},{"wpr34"},{"wpr35"},{"wpr36"}};
  36. new gLineYellow[yellow_wpnum][6]        = {{"wpr38"},{"wpr39"},{"wpr40"},{"wpr41"},{"wpr42"}};
  37.  
  38. enum eWay
  39. {
  40.     purple     = 1,
  41.     red     = 2,
  42.     black     = 3,
  43.     brown     = 4,
  44.     green     = 5,
  45.     pink     = 6,
  46.     orange     = 7,
  47.     blue     = 8,
  48.     yellow    = 9
  49. };
  50.  
  51. //speeches
  52. new iMS09_SP001[]="#iMS09_SP001#";
  53. new iMS09_SP002[]="#iMS09_SP002#";
  54. new iMS09_SP003[]="#iMS09_SP003#";
  55. new iMS09_SP004[]="#iMS09_SP004#";
  56. new iMS09_SP005[]="#iMS09_SP005#";
  57. new iMS09_SP006[]="#iMS09_SP006#";
  58. new iMS09_SP007[]="#iMS09_SP007#";
  59. new iMS09_SP008[]="#iMS09_SP008#";
  60. new iMS09_SP009[]="#iMS09_SP009#";
  61.  
  62. //soundfiles
  63. new gSoundFile1[] = "Sounds\\Game\\Speech\\Mission\\MS09_SP001.mp3";
  64. new gSoundFile2[] = "Sounds\\Game\\Speech\\Mission\\MS09_SP002.mp3";
  65. new gSoundFile3[] = "Sounds\\Game\\Speech\\Mission\\MS09_SP003.mp3";
  66. new gSoundFile4[] = "Sounds\\Game\\Speech\\Mission\\MS09_SP004.mp3";
  67. new gSoundFile5[] = "Sounds\\Game\\Speech\\Mission\\MS09_SP005.mp3";
  68. new gSoundFile6[] = "Sounds\\Game\\Speech\\Mission\\MS09_SP006.mp3";
  69. new gSoundFile7[] = "Sounds\\Game\\Speech\\Mission\\MS09_SP007.mp3";
  70. new gSoundFile8[] = "Sounds\\Game\\Speech\\Mission\\MS09_SP008.mp3";
  71. new gSoundFile9[] = "Sounds\\Game\\Speech\\Mission\\MS09_SP009.mp3";
  72. //============================================================================================================================
  73. public main()
  74.     CommonAKMain();
  75. //============================================================================================================================
  76. public PostGameStart()
  77. {
  78.     CommonAKInit();
  79.     ScenarioMode();
  80.     Add2GermanGroup();
  81.     forbidden_grp_num = 3;
  82.     gForbiddenGroups[0] = "grp_reconz";
  83.     gForbiddenGroups[1] = "grp_hidden";
  84.     gForbiddenGroups[1] = "grp_mainforce";
  85.  
  86.     for(new counter = 0; counter <= max_run_once-1; counter++)
  87.     {
  88.         RunOnce[counter] = false;
  89.     }
  90.  
  91.     SetNationality("grp_canadian", "Canadian");
  92.     SetNationality("grp_intro", "Canadian");
  93.     SetNationality("grp_usa", "American");
  94.     SetNationality("grp_intro2", "American");
  95.     SetSpeedInSelector( "SelectorTeam2", 5.0 );
  96.     FormationMoveToEnt("grp_intro",GetEntity("wp_intro_arrive"),Q_OVERRIDE, MF_DIRECT+MF_OVERRUN);
  97.  
  98.     SetBehav( "grp_melegek",
  99.                  MB_MOVE_IN_VICINITY,
  100.                  FB_FIRE_AT_WILL,
  101.                  UB_EVAC,
  102.                  DB_UNMODIFIED,
  103.                  MOB_WHEN_ENEMY_SEEN,
  104.                  MTP_ATTACK);
  105.     
  106.     SetBehav( "grp_west",
  107.                 MB_MOVE_IN_VICINITY,
  108.                  FB_FIRE_AT_WILL,
  109.                  UB_EVAC,
  110.                  DB_UNMODIFIED,
  111.                  MOB_NEVER,
  112.                  MTP_ATTACK);
  113.  
  114.     SetBehav( "grp_east",
  115.                 MB_MOVE_IN_VICINITY,
  116.                 FB_FIRE_AT_WILL,
  117.                 UB_EVAC,
  118.                 DB_UNMODIFIED,
  119.                 MOB_NEVER,
  120.                 MTP_ATTACK);
  121.     
  122.     CmdGroupSetFB( "grp_emptypanzerz", Q_OVERRIDE, FB_FIRE_AT_WILL, SFBF_EMPTY );
  123.     CmdGroupSetMB( "grp_emptypanzerz", Q_OVERRIDE, MB_MOVE_IN_VICINITY, SMBF_EMPTY );
  124.  
  125.     SetBehav( "grp_panzerz",
  126.                 MB_MOVE_IN_VICINITY,
  127.                 FB_FIRE_AT_WILL,
  128.                 UB_EVAC);
  129.     
  130.     SetBehav( "grp_patrol",
  131.                  MB_MOVE_FREELY,
  132.                  FB_FIRE_AT_WILL,
  133.                  UB_EVAC,
  134.                  DB_UNMODIFIED);
  135.  
  136.     SetBehav( "grp_heavypz",
  137.                  MB_MOVE_FREELY,
  138.                  FB_FIRE_AT_WILL,
  139.                  UB_EVAC,
  140.                  DB_UNMODIFIED);
  141.     
  142.     SetBehav( "grp_repairz",
  143.                  MB_MOVE_IN_VICINITY, 
  144.                 FB_HOLD_FIRE, 
  145.                 UB_EVAC);
  146.  
  147.     SetBehav( "grp_radiocarz",
  148.                  MB_HOLD_POSITION, 
  149.                 FB_HOLD_FIRE,  
  150.                 UB_EVAC);
  151.  
  152.     SetBehav( "grp_hidden",
  153.                  MB_MOVE_FREELY,
  154.                  FB_FIRE_AT_WILL,
  155.                  UB_NEVER,
  156.                  DB_UNMODIFIED,
  157.                  MOB_UNMODIFIED,
  158.                  MTP_DEFEND);
  159.     
  160.     GermanSoldierBehav("SelectorTeam1");
  161.     switch(GetDifficulty())
  162.     {
  163.         case 0:
  164.         {
  165.             DelayedTime = 15;
  166.         }
  167.         case 3:
  168.         {
  169.             DelayedTime = 5;
  170.         }
  171.         default:
  172.         {
  173.             DelayedTime = 10;
  174.         }
  175.     
  176.     }
  177.  
  178.     Intro();
  179.     HackAntiAirInit();
  180.     
  181. // User Events
  182.     AddUserEvent( "GroupEliminated", UE_GROUPELIM_SUCC );
  183.     AddUserEvent( "TeamEliminated", UE_TEAMELIM_SUCC );
  184.     AddUserEvent( "ObjectiveChanged", UE_OBJECTIVE_CHANGED);
  185. // code events
  186.     AddAKEntityEvent( "MineExploded", ANY_ENTITY, MINE_EXPLODE );
  187.     AddAKEntityEvent( "ShowTheStat", ANY_ENTITY, TEST_EVENT );
  188.     AddAKEntityEvent( "HQCaptured", ANY_ENTITY, HQ_TAKEOVER );
  189.     AddAKEntityEvent( "CommandpostTeamchanged", GetEntity( "commandpost" ), UNIT_TEAM_CHANGED );
  190.     AddAKEntityEvent( "CommandPostDestroyed", GetEntity( "commandpost" ), UNIT_DIED );
  191. //     AddAKEntityEvent( "UnitAreaEnter", ANY_ENTITY, UNIT_AREA_ENTER );
  192. //     AddAKEntityEvent( "UnitAreaExit", ANY_ENTITY, UNIT_AREA_EXIT );
  193.     AddAKEntityEvent( "WreckDestruct", ANY_ENTITY, UNIT_DIED );
  194.     AddAKSelectorEvent( "UnmountWestGroup", "grp_west", UNIT_ENEMY_SEEN );
  195.     AddAKSelectorEvent( "UnmountEastGroup", "grp_east", UNIT_ENEMY_SEEN );
  196.     AddAKSelectorEvent( "UnmountWestGroup", "grp_west", UNIT_HIT );
  197.     AddAKSelectorEvent( "UnmountEastGroup", "grp_east", UNIT_HIT );
  198.     AddAKSelectorEvent( "UnmountWestGroup", "grp_westpanzerz", UNIT_HIT );
  199.     AddAKSelectorEvent( "UnmountEastGroup", "grp_eastvehiclez", UNIT_HIT );
  200.     AddAKSelectorEvent( "GermanVehicleTeamChanged", "grp_German", UNIT_TEAM_CHANGED );
  201.  
  202. //    AddAKEntityEvent( "Outro", ANY_ENTITY, TEST_EVENT );
  203.  
  204. // add objectives
  205.     AddObjective( "PRI_1", OT_PRIMARY, "#iMS09_PS01#", "#iMS09_PL01#", OS_SLEEPING );    
  206.     AddObjective( "PRI_2", OT_PRIMARY, "#iMS09_PS02#", "#iMS09_PL02#", OS_SLEEPING );
  207.     AddObjective( "SEC_1", OT_SECONDARY, "#iMS09_SS01#", "#iMS09_SL01#", OS_SLEEPING );
  208.     AddObjective( "HID_1", OT_HIDDEN, "#iMS09_HS01#", "#iMS09_HL01#", OS_SLEEPING );
  209. }
  210. //============================================================================================================================
  211. public TeamEliminated( Team )
  212. {
  213.     new ID = GetMsgParamInt();
  214.     if(ID == 10)
  215.     {
  216.         if(GetObjectiveState( "PRI_1" ) == OS_IN_PROGRESS)
  217.             SetObjectiveState( "PRI_1", OS_FAILED );
  218.         if(GetObjectiveState( "PRI_2" ) == OS_IN_PROGRESS)
  219.             SetObjectiveState( "PRI_2", OS_FAILED );
  220.         if(GetObjectiveState( "SEC_1" ) == OS_IN_PROGRESS)
  221.             SetObjectiveState( "SEC_1", OS_FAILED );
  222.         
  223.         SetCutScene(true, true, true);
  224.         BulletTime(GetLastKilledEntity(), false);
  225.         AddUserEvent( "Defeat", UE_BULLETTIME_END );
  226.     }
  227.  
  228.     if(ID == 20 && RunOnce[1] == false)
  229.     {
  230.         RunOnce[1] = true;
  231.         if(GetDifficulty()  == 0)
  232.             Reinforcement( "help_to_easy", GetEntity( "deploy1" ), GetEntity( "start1" ));
  233.     }
  234. }
  235. public GroupEliminated()
  236. {
  237.     new ID = GetMsgParamInt();
  238.     if(ID == 10)
  239.     {
  240.         DebugMessage( "A felderitok megpusztultak", DL_MESSAGE );
  241.         if( gMainForceDead == false &&
  242.             GetPropertyInt( GetEntity( "hq_north" ), "Team" ) == gPlayerTeam &&
  243.             GetPropertyInt( GetEntity( "hq_west" ), "Team" ) == gPlayerTeam &&
  244.             GetPropertyInt( GetEntity( "hq_east" ), "Team" ) == gPlayerTeam)
  245.         {
  246.             AddTimerEvent( "Retreat", gRetreatDelay, "GameLogic", true );
  247.             AddSoundMessage(iMS09_SP005, gSoundFile5);
  248.             AddSoundMessage(iMS09_SP006, gSoundFile6);
  249.             AddSoundMessage(iMS09_SP008, gSoundFile8);
  250.             AddSoundMessage(iMS09_SP009, gSoundFile9);
  251.             SetObjectiveState( "PRI_2", OS_IN_PROGRESS );
  252.             Reinforcement( "left_reinf", GetEntity( "deploy1" ), GetEntity( "start1" ) );
  253.             Reinforcement( "right_reinf", GetEntity( "deploy2" ), GetEntity( "start2" ) );
  254.             SetNationality("reinforce1", "American");
  255.             SetNationality("reinforce2", "American");
  256.         }
  257.         else
  258.             gReconIsDead = true;
  259.     }
  260.  
  261.     if(ID == 100)
  262.     {
  263.         DebugMessage( "A Hidden group megpusztult", DL_MESSAGE );
  264.         gOfficerDied = true;
  265.     }
  266.     
  267.     if(ID == 1000)
  268.     {
  269.         DebugMessage( "A fo ero elpusztult", DL_MESSAGE );
  270.         gMainForceDead = true;
  271.         if(g3FlagCaptured == true && GetPropertyInt( GetEntity( "hq_base" ), "Team" ) == 1)
  272.         {
  273.             SetObjectiveState( "PRI_1", OS_COMPLETED );
  274.             SetObjectiveState( "PRI_2", OS_COMPLETED );
  275.             Outro();
  276.         }
  277.     }
  278. }
  279. //============================================================================================================================
  280. public Intro()
  281. {
  282.     static counter = 0;
  283.     
  284.     switch(counter)
  285.     {
  286.         case 0:
  287.         {
  288.             SetCutScene(true, true, true);
  289.             TeleportCameraToEnt(GetEntity( "wp_introcam" ));
  290.             CameraFollow( GetEntity( "wp_introcam" ) );
  291.             
  292.             SetCameraSpeed(1.0);
  293.             SetCameraZoomSpeed(3.0);
  294.             SetCameraRotSpeed(3.0);
  295.             
  296.             SetCameraActualPitch(45.0);
  297.             SetCameraActualRotate(180.0);
  298.             SetCameraActualDistance(45.0);
  299.  
  300.             SetCameraTargetPitch(45.0);
  301.             SetCameraTargetRotate(180.0);
  302.             SetCameraTargetDistance(45.0);
  303.             
  304.             SetCameraTargetPitch(45.0);
  305.             SetCameraTargetRotate(269.0);
  306.             SetCameraTargetDistance(15.0);
  307.             
  308.             AddAKEntityEvent( "Intro", ANY_ENTITY, CAMERA_TARGET_REACHED );
  309.         }
  310.         case 1:
  311.         {
  312.             RemoveEvent( "Intro" );
  313.             CameraFollow( GetEntity( "actor" ) );
  314.  
  315.             SetCameraZoomSpeed(1.0);
  316.             SetCameraTargetRotate(359.0)
  317.             SetCameraTargetDistance(45.0);
  318.             
  319.             AddAKEntityEvent( "Intro", GetEntity( "actor" ), UNIT_ARRIVED );
  320.         }
  321.         case 2:
  322.         {
  323.             CameraFollow( DrID:0 );
  324.             TeleportCameraToEnt(GetEntity( "actor" ));
  325.             AddSoundMessage(iMS09_SP001, gSoundFile1);
  326.             AddAKEntityEvent( "Intro", ANY_ENTITY, MESSAGE_END );
  327.  
  328.             SetCameraActualPitch(55.0);
  329.             SetCameraActualRotate(-52.0);
  330.             SetCameraActualDistance(15.0);
  331.             
  332.             SetCameraTargetPitch(55.0);
  333.             SetCameraTargetRotate(-52.0);
  334.             SetCameraTargetDistance(15.0);
  335.         }
  336.         case 3:
  337.         {
  338.             TeleportCameraToEnt(GetEntity( "actor2" ));
  339.             AddSoundMessage(iMS09_SP002, gSoundFile2);
  340.  
  341.             SetCameraActualPitch(59.0);
  342.             SetCameraActualRotate(-16.0);
  343.             SetCameraActualDistance(15.0);
  344.             
  345.             SetCameraTargetPitch(59.0);
  346.             SetCameraTargetRotate(-16.0);
  347.             SetCameraTargetDistance(15.0);
  348.         }
  349.         case 4:
  350.         {
  351.             TeleportCameraToEnt(GetEntity( "actor" ));
  352.             AddSoundMessage(iMS09_SP003, gSoundFile3);
  353.  
  354.             SetCameraActualPitch(55.0);
  355.             SetCameraActualRotate(0.0);
  356.             SetCameraActualDistance(55.0);
  357.             
  358.             SetCameraTargetPitch(55.0);
  359.             SetCameraTargetRotate(0.0);
  360.             SetCameraTargetDistance(55.0);
  361.         }
  362.         case 5:
  363.         {
  364.             SetSpeedInSelector( "SelectorTeam2", 0.0 );
  365.             ResetCameraSpeed();
  366.             SetCutScene(false);
  367.             HQCaptured(DrID:0);
  368.             Patrol();
  369.             
  370.             SetObjectiveState( "PRI_1", OS_IN_PROGRESS );
  371.             SetObjectiveState( "SEC_1", OS_IN_PROGRESS );
  372.             SetObjectiveState( "HID_1", OS_IN_PROGRESS );
  373.             SetAirStrike(gPlayerTeam,2);
  374.             SetAirRecon(gPlayerTeam,3);
  375.             GiveParaTroopers(gPlayerTeam);
  376.         }
  377.     }
  378.     counter++;
  379. }
  380. //============================================================================================================================
  381. stock Move(group[], eWay:way, bool:elore, eQueuing:queue, eMoveFlag:moveflag )
  382. {
  383.     switch(way)
  384.     {
  385.         case 1:
  386.         {
  387.             if(elore)
  388.             {
  389.                 for(new i = 0; i < purple_wpnum; i++)
  390.                     CmdGroupMoveToEnt( group, GetEntity( gLinePurple[i] ), queue, moveflag );
  391.             }
  392.             else
  393.             {
  394.                 for(new i = purple_wpnum-1; i >= 0; i--)
  395.                     CmdGroupMoveToEnt( group, GetEntity( gLinePurple[i] ), queue, moveflag );
  396.             }
  397.         }
  398.         case 2:
  399.         {
  400.             if(elore)
  401.             {
  402.                 for(new i = 0; i < red_wpnum; i++)
  403.                     CmdGroupMoveToEnt( group, GetEntity( gLineRed[i] ), queue, moveflag );
  404.             }
  405.             else
  406.             {
  407.                 for(new i = red_wpnum-1; i >= 0; i--)
  408.                     CmdGroupMoveToEnt( group, GetEntity( gLineRed[i] ), queue, moveflag );
  409.             }
  410.         }
  411.         case 3:
  412.         {
  413.             if(elore)
  414.             {
  415.                 for(new i = 0; i < black_wpnum; i++)
  416.                     CmdGroupMoveToEnt( group, GetEntity( gLineBlack[i] ), queue, moveflag );
  417.             }
  418.             else
  419.             {
  420.                 for(new i = black_wpnum-1; i >= 0; i--)
  421.                     CmdGroupMoveToEnt( group, GetEntity( gLineBlack[i] ), queue, moveflag );
  422.             }
  423.         }
  424.         case 4:
  425.         {
  426.             if(elore)
  427.             {
  428.                 for(new i = 0; i < brown_wpnum; i++)
  429.                     CmdGroupMoveToEnt( group, GetEntity( gLineBrown[i] ), queue, moveflag );
  430.             }
  431.             else
  432.             {
  433.                 for(new i = brown_wpnum-1; i >= 0; i--)
  434.                     CmdGroupMoveToEnt( group, GetEntity( gLineBrown[i] ), queue, moveflag );
  435.             }
  436.         }
  437.         case 5:
  438.         {
  439.             if(elore)
  440.             {
  441.                 for(new i = 0; i < green_wpnum; i++)
  442.                     CmdGroupMoveToEnt( group, GetEntity( gLineGreen[i] ), queue, moveflag );
  443.             }
  444.             else
  445.             {
  446.                 for(new i = green_wpnum-1; i >= 0; i--)
  447.                     CmdGroupMoveToEnt( group, GetEntity( gLineGreen[i] ), queue, moveflag );
  448.             }
  449.         }
  450.         case 6:
  451.         {
  452.             if(elore)
  453.             {
  454.                 for(new i = 0; i < pink_wpnum; i++)
  455.                     CmdGroupMoveToEnt( group, GetEntity( gLinePink[i] ), queue, moveflag );
  456.             }
  457.             else
  458.             {
  459.                 for(new i = pink_wpnum-1; i >= 0; i--)
  460.                     CmdGroupMoveToEnt( group, GetEntity( gLinePink[i] ), queue, moveflag );
  461.             }
  462.         }
  463.         case 7:
  464.         {
  465.             if(elore)
  466.             {
  467.                 for(new i = 0; i < orange_wpnum; i++)
  468.                     CmdGroupMoveToEnt( group, GetEntity( gLineOrange[i] ), queue, moveflag );
  469.             }
  470.             else
  471.             {
  472.                 for(new i = orange_wpnum-1; i >= 0; i--)
  473.                     CmdGroupMoveToEnt( group, GetEntity( gLineOrange[i] ), queue, moveflag );
  474.             }
  475.         }
  476.         case 8:
  477.         {
  478.             if(elore)
  479.             {
  480.                 for(new i = 0; i < blue_wpnum; i++)
  481.                     CmdGroupMoveToEnt( group, GetEntity( gLineBlue[i] ), queue, moveflag );
  482.             }
  483.             else
  484.             {
  485.                 for(new i = blue_wpnum-1; i >= 0; i--)
  486.                     CmdGroupMoveToEnt( group, GetEntity( gLineBlue[i] ), queue, moveflag );
  487.             }
  488.         }
  489.         case 9:
  490.         {
  491.             if(elore)
  492.             {
  493.                 for(new i = 0; i < yellow_wpnum; i++)
  494.                     CmdGroupMoveToEnt( group, GetEntity( gLineYellow[i] ), queue, moveflag );
  495.             }
  496.             else
  497.             {
  498.                 for(new i = yellow_wpnum-1; i >= 0; i--)
  499.                     CmdGroupMoveToEnt( group, GetEntity( gLineYellow[i] ), queue, moveflag );
  500.             }
  501.         }
  502.     }
  503. }
  504. //============================================================================================================================
  505. public SetNationality(group[], nationality[])
  506. {
  507.     new Iterator:i = Iterate( group );
  508.  
  509.     while(ItNext(i))
  510.     {
  511.         new DrID:Unit = ItEntity(i);
  512.         SetPropertyString( Unit, "Nationality", nationality );
  513.     }
  514. }
  515. //============================================================================================================================
  516. public Victory()
  517. {
  518.     RemoveEvent( "Victory" );
  519.     
  520.     SetAlliance( gPlayerTeam, 1, AL_ENEMY );
  521.     SetAlliance( 1, gPlayerTeam, AL_ENEMY );
  522.     AddDebriefing("#iMISSION09_DB_P#");
  523.     if(GetObjectiveState( "SEC_1" ) == OS_COMPLETED)
  524.         AddDebriefing("#iMISSION09_DB_S#");
  525.  
  526.     if(GetObjectiveState( "HID_1" ) != OS_COMPLETED)
  527.     {
  528.         SetObjectiveState( "HID_1", OS_FAILED );
  529.         SetGlobalVariable("gvMS09_SecretDocuments", 0);
  530.     }
  531.     else
  532.         AddDebriefing("#iMISSION09_DB_H#");
  533.     
  534.     EndMission( MS_ACCOMPLISHED );
  535. }
  536.  
  537. public Defeat()
  538. {
  539.     RemoveEvent( "Defeat" );
  540.     if(GetObjectiveState( "HID_1" ) == OS_IN_PROGRESS)
  541.     {
  542.         SetObjectiveState( "HID_1", OS_FAILED );
  543.         SetGlobalVariable("gvMS09_SecretDocuments", 0);
  544.     }
  545.  
  546.     SetAlliance( gPlayerTeam, 1, AL_ENEMY );
  547.     SetAlliance( 1, gPlayerTeam, AL_ENEMY );
  548.     AddDebriefing("#iMISSION_DB_F#");
  549.     EndMission( MS_FAILED );
  550. }
  551. //============================================================================================================================
  552. public ShowTheStat()
  553. {
  554.     ShowTheStats();
  555. }
  556. //============================================================================================================================
  557. public MineExploded(DrID:mine)
  558. {
  559.     if(IsInSelector( mine, "grp_mines" ))
  560.     {
  561.         RemoveEvent( "MineExploded" );
  562.         AddSoundMessage(iMS09_SP004, gSoundFile4);
  563.     }
  564. }
  565. //============================================================================================================================
  566. public UnmountWestGroup()
  567. {
  568.     RemoveEvent( "UnmountWestGroup" );
  569.     CmdGroupUnmount( "grp_west", Q_OVERRIDE );
  570.     SetBehav( "grp_west", MB_UNMODIFIED, FB_UNMODIFIED, UB_UNMODIFIED, DB_UNMODIFIED, MOB_AT_WILL);
  571. }
  572.  
  573. public UnmountEastGroup()
  574. {
  575.     RemoveEvent( "UnmountEastGroup" );
  576.     CmdGroupUnmount( "grp_east1", Q_OVERRIDE );
  577.     CmdGroupUnmount( "grp_east2", Q_OVERRIDE );
  578.     CmdGroupUnmount( "grp_east3", Q_OVERRIDE );
  579.     SetBehav( "grp_east1", MB_UNMODIFIED, FB_UNMODIFIED, UB_UNMODIFIED, DB_UNMODIFIED, MOB_AT_WILL);
  580.     SetBehav( "grp_east2", MB_UNMODIFIED, FB_UNMODIFIED, UB_UNMODIFIED, DB_UNMODIFIED, MOB_AT_WILL);
  581.     SetBehav( "grp_east3", MB_UNMODIFIED, FB_UNMODIFIED, UB_UNMODIFIED, DB_UNMODIFIED, MOB_AT_WILL);
  582. }
  583. //============================================================================================================================
  584. public HQCaptured(DrID:HQ)
  585. {
  586.     new info[255];
  587.     new tmpstr1[255];
  588.     new tmpstr2[255];
  589.     new tmpstr3[255];
  590.     new tmpstr4[255];
  591.     new tmpstr5[255];
  592.     new tmpstr6[255];
  593.     new Northroad[]    = "#d##iMS09_MSG001#";
  594.     new Westroad[]    = "#d##iMS09_MSG002#";
  595.     new Eastroad[]    = "#d##iMS09_MSG003#";
  596.     new Base[]         = "#d##iMS09_MSG004#";
  597.     new allied[]    = "#d##cgreen##iMS00_MSG001##b#";
  598.     new axis[]        = "#d##cred##iMS00_MSG002##b#";
  599.  
  600.     new DrID:northHQ = GetEntity( "hq_north" );
  601.     new DrID:westHQ = GetEntity( "hq_west" );
  602.     new DrID:eastHQ = GetEntity( "hq_east" );
  603.     new DrID:baseHQ = GetEntity( "hq_base" );
  604.  
  605.     static PlayerHQ = 0;
  606.  
  607.     if(GetPropertyInt( northHQ, "Team" ) == gPlayerTeam)
  608.     {
  609.         ConcatString( tmpstr1, 100, Northroad, allied );
  610.         if(HQ == northHQ)
  611.             PlayerHQ++;
  612.     }
  613.     else
  614.     {
  615.         ConcatString( tmpstr1, 100, Northroad, axis );
  616.         if(HQ == northHQ)
  617.             PlayerHQ--;
  618.     }
  619.     
  620.     if(GetPropertyInt( westHQ, "Team" ) == gPlayerTeam)
  621.     {
  622.         ConcatString( tmpstr2, 100, Westroad, allied );
  623.         if(HQ == westHQ)
  624.             PlayerHQ++;
  625.     }
  626.     else
  627.     {
  628.         ConcatString( tmpstr2, 100, Westroad, axis );
  629.         if(HQ == westHQ)
  630.             PlayerHQ--;
  631.     }
  632.     
  633.     if(GetPropertyInt( eastHQ, "Team" ) == gPlayerTeam)
  634.     {
  635.         ConcatString( tmpstr3, 100, Eastroad, allied );
  636.         if(HQ == eastHQ)
  637.             PlayerHQ++;
  638.     }
  639.     else
  640.     {
  641.         ConcatString( tmpstr3, 100, Eastroad, axis );
  642.         if(HQ == eastHQ)
  643.             PlayerHQ--;
  644.     }
  645.     
  646.     if(GetPropertyInt( baseHQ, "Team" ) == gPlayerTeam)
  647.     {
  648.         ConcatString( tmpstr4, 100, Base, allied );
  649.         if(HQ == baseHQ)
  650.             PlayerHQ++;
  651.     }
  652.     else
  653.     {
  654.         ConcatString( tmpstr4, 100, Base, axis );
  655.         if(HQ == baseHQ)
  656.             PlayerHQ--;
  657.     }
  658.     ConcatString( tmpstr5, 250, tmpstr1, tmpstr2 );
  659.     ConcatString( tmpstr6, 250, tmpstr3, tmpstr4 );
  660.     ConcatString( info, 250, tmpstr5, tmpstr6 );
  661.     
  662.     SetShortInfo(info);
  663.  
  664.  
  665.     if(HQ != DrID:0 && HQ != GetEntity( "zaszlo" ))
  666.     {
  667.         switch(PlayerHQ)
  668.         {
  669.             case 0:
  670.             {
  671.                 SetObjectiveState( "PRI_1", OS_FAILED );
  672.                 if(GetObjectiveState( "PRI_2" ) == OS_IN_PROGRESS)
  673.                     SetObjectiveState( "PRI_2", OS_FAILED );
  674.                 if(GetObjectiveState( "SEC_1" ) == OS_IN_PROGRESS)
  675.                     SetObjectiveState( "SEC_1", OS_FAILED );
  676.                 if(GetObjectiveState( "HID_1" ) == OS_IN_PROGRESS)
  677.                 {
  678.                     SetObjectiveState( "HID_1", OS_FAILED );
  679.                     SetGlobalVariable("gvMS09_SecretDocuments", 0);
  680.                 }
  681.                 SetCutScene(true);
  682.                 BulletTime( HQ, false);
  683.                 AddUserEvent( "Defeat", UE_BULLETTIME_END );
  684.             }
  685.             case 3:
  686.             {
  687.                 if(GetPropertyInt( baseHQ, "Team" ) == 1)
  688.                 {
  689.                     if(RunOnce[0] == false)
  690.                     {
  691.                         RunOnce[0] = true;
  692. //                         if(GetPropertyInt( GetEntity( "westscout" ), "Team" ) == 1)
  693. //                         {
  694.                         Move("grp_westscout", green, true, Q_ENQUEUE, MF_OVERRUN|MF_KEEP_FORMATION|MF_ATTACKMOVE);
  695.                         Move("grp_westscout", brown, true, Q_ENQUEUE, MF_OVERRUN|MF_KEEP_FORMATION|MF_ATTACKMOVE);
  696. //                         }
  697.                         
  698. //                         if(GetPropertyInt( GetEntity( "northscout" ), "Team" ) == 1)
  699. //                         {
  700.                         Move("grp_northscout", purple, true, Q_ENQUEUE, MF_OVERRUN|MF_KEEP_FORMATION|MF_ATTACKMOVE);
  701.                         Move("grp_northscout", red, true, Q_ENQUEUE, MF_OVERRUN|MF_KEEP_FORMATION|MF_ATTACKMOVE);
  702. //                         }
  703.             
  704. //                         if(GetPropertyInt( GetEntity( "eastscout" ), "Team" ) == 1)
  705. //                         {
  706.                         Move("grp_eastscout", pink, true, Q_ENQUEUE, MF_OVERRUN|MF_KEEP_FORMATION|MF_ATTACKMOVE);
  707.                         Move("grp_eastscout", blue, true, Q_ENQUEUE, MF_OVERRUN|MF_KEEP_FORMATION|MF_ATTACKMOVE);
  708. //                         }
  709.                         if(gReconIsDead == true && gMainForceDead == false)
  710.                         {
  711.                             AddTimerEvent( "Retreat", gRetreatDelay, "GameLogic", true );
  712.                             AddSoundMessage(iMS09_SP005, gSoundFile5);
  713.                             AddSoundMessage(iMS09_SP006, gSoundFile6);
  714.                             AddSoundMessage(iMS09_SP008, gSoundFile8);
  715.                             AddSoundMessage(iMS09_SP009, gSoundFile9);
  716.                             SetObjectiveState( "PRI_2", OS_IN_PROGRESS );
  717.                             Reinforcement( "left_reinf", GetEntity( "deploy1" ), GetEntity( "start1" ) );
  718.                             Reinforcement( "right_reinf", GetEntity( "deploy2" ), GetEntity( "start2" ) );
  719.                             SetNationality("reinforce1", "American");
  720.                             SetNationality("reinforce2", "American");
  721.                         }
  722.                         SetObjectiveState( "SEC_1", OS_COMPLETED );
  723.                         g3FlagCaptured = true;
  724.                     }
  725.                 }    
  726.             }
  727.             case 4:
  728.             {
  729.                 SetObjectiveState( "PRI_1", OS_COMPLETED );
  730.                 SetObjectiveState( "PRI_2", OS_COMPLETED );
  731.                 if(GetObjectiveState( "SEC_1" ) == OS_IN_PROGRESS)
  732.                     SetObjectiveState( "SEC_1", OS_COMPLETED );
  733.                 SetCutScene(true);
  734.                 BulletTime( HQ, false );
  735.                 AddUserEvent( "Victory", UE_BULLETTIME_END );
  736.             }
  737.         }
  738.         
  739.         if(g3FlagCaptured == true &&
  740.             GetPropertyInt( HQ, "Team" ) != gPlayerTeam && 
  741.             (HQ == northHQ 
  742.             ||
  743.             HQ == westHQ 
  744.             ||
  745.             HQ == eastHQ))
  746.         {
  747.             SetCutScene(true);
  748.             BulletTime( HQ, false );
  749.             SetObjectiveState( "PRI_1", OS_FAILED );
  750.             SetObjectiveState( "PRI_2", OS_FAILED );
  751.             AddUserEvent( "Defeat", UE_BULLETTIME_END );
  752.         }
  753.     }
  754. }
  755. //============================================================================================================================
  756. public Patrol()
  757. {
  758.     Move("grp_patrol", pink, true, Q_CYCLE, MF_OVERRUN|MF_ATTACKMOVE);
  759.     Move("grp_patrol", orange, false, Q_CYCLE, MF_OVERRUN|MF_ATTACKMOVE);
  760.     Move("grp_patrol", black, true, Q_CYCLE, MF_OVERRUN|MF_ATTACKMOVE);
  761.     Move("grp_patrol", green, false, Q_CYCLE, MF_OVERRUN|MF_ATTACKMOVE);
  762.     Move("grp_patrol", yellow, true, Q_CYCLE, MF_OVERRUN|MF_ATTACKMOVE);
  763. }
  764. //============================================================================================================================
  765. public Retreat()
  766. {
  767.     RemoveEvent( "Retreat" );
  768.  
  769.     new northMP = CountMPInSelector("area_north", true, gPlayerTeam);
  770.     new westMP = CountMPInSelector("area_west", true, gPlayerTeam);
  771.     new eastMP = CountMPInSelector("area_east", true, gPlayerTeam);
  772.     DebugMessageP1( "NorthMP:", northMP, DL_MESSAGE );    
  773.     DebugMessageP1( "WestMP:", westMP, DL_MESSAGE );    
  774.     DebugMessageP1( "EastMP:", eastMP, DL_MESSAGE );    
  775.  
  776.     new Float:SpdLimit = GetSlowestSpeedInGroup("grp_mainforce");
  777.     new str[250];
  778.     Float2Str( SpdLimit, str, 250 );
  779. //     ShowShortMessage(str);
  780.     SetSpeedInSelector( "grp_mainforce", SpdLimit );
  781.     
  782.     CmdGroupDigout("grp_heavypz", Q_OVERRIDE);
  783.     
  784.     switch(GetDifficulty())
  785.     {
  786.         case 0,1://easy, normal
  787.         {
  788.             if(northMP > westMP && northMP > eastMP)// north road
  789.             {
  790.                 AddTimerEvent( "DelayedRetreatNorth", DelayedTime );
  791.                 CmdGroupMoveToEnt( "grp_patrol", GetEntity( "hq_north" ), Q_OVERRIDE, MF_ATTACKMOVE );
  792.             }
  793.             if(westMP > northMP && westMP > eastMP)// west road
  794.             {
  795.                 AddTimerEvent( "DelayedRetreatWest", DelayedTime );
  796.                 CmdGroupMoveToEnt( "grp_patrol", GetEntity( "hq_west" ), Q_OVERRIDE, MF_ATTACKMOVE );
  797.             }
  798.             if(eastMP > westMP && eastMP > northMP)// east road
  799.             {
  800.                 AddTimerEvent( "DelayedRetreatEast", DelayedTime );
  801.                 CmdGroupMoveToEnt( "grp_patrol", GetEntity( "hq_east" ), Q_OVERRIDE, MF_ATTACKMOVE );
  802.             }
  803.             if(northMP > eastMP && northMP == westMP)
  804.             {
  805.                 switch(Rnd(1,2))
  806.                 {
  807.                     case 1:// north road
  808.                     {
  809.                         AddTimerEvent( "DelayedRetreatNorth", DelayedTime );
  810.                         CmdGroupMoveToEnt( "grp_patrol", GetEntity( "hq_north" ), Q_OVERRIDE, MF_ATTACKMOVE );
  811.                     }
  812.                     case 2:// west road
  813.                     {
  814.                         AddTimerEvent( "DelayedRetreatWest", DelayedTime );
  815.                         CmdGroupMoveToEnt( "grp_patrol", GetEntity( "hq_west" ), Q_OVERRIDE, MF_ATTACKMOVE );
  816.                     }
  817.                 }
  818.             }
  819.             if(northMP > westMP && northMP == eastMP)
  820.             {
  821.                 switch(Rnd(1,2))
  822.                 {
  823.                     case 1:// north road
  824.                     {
  825.                         AddTimerEvent( "DelayedRetreatNorth", DelayedTime );
  826.                         CmdGroupMoveToEnt( "grp_patrol", GetEntity( "hq_north" ), Q_OVERRIDE, MF_ATTACKMOVE );
  827.                     }
  828.                     case 2:// east road
  829.                     {
  830.                         AddTimerEvent( "DelayedRetreatEast", DelayedTime );
  831.                         CmdGroupMoveToEnt( "grp_patrol", GetEntity( "hq_east" ), Q_OVERRIDE, MF_ATTACKMOVE );
  832.                     }
  833.                 }
  834.             }
  835.             if(westMP > northMP && westMP == eastMP)
  836.             {
  837.                 switch(Rnd(1,2))
  838.                 {
  839.                     case 1:// west road
  840.                     {
  841.                         AddTimerEvent( "DelayedRetreatWest", DelayedTime );
  842.                         CmdGroupMoveToEnt( "grp_patrol", GetEntity( "hq_west" ), Q_OVERRIDE, MF_ATTACKMOVE );
  843.                     }
  844.                     case 2:// east road
  845.                     {
  846.                         AddTimerEvent( "DelayedRetreatEast", DelayedTime );
  847.                         CmdGroupMoveToEnt( "grp_patrol", GetEntity( "hq_east" ), Q_OVERRIDE, MF_ATTACKMOVE );
  848.                     }
  849.                 }
  850.             }
  851.         }
  852.         case 2://hard
  853.         {
  854.             switch(Rnd(1,3))
  855.             {
  856.                 case 1:
  857.                 {
  858.                     AddTimerEvent( "DelayedRetreatNorth", DelayedTime );
  859.                     CmdGroupMoveToEnt( "grp_patrol", GetEntity( "hq_north" ), Q_OVERRIDE, MF_ATTACKMOVE );
  860.                 }
  861.                 case 2:
  862.                 {
  863.                     AddTimerEvent( "DelayedRetreatWest", DelayedTime );
  864.                     CmdGroupMoveToEnt( "grp_patrol", GetEntity( "hq_west" ), Q_OVERRIDE, MF_ATTACKMOVE );
  865.                 }
  866.                 case 3:
  867.                 {
  868.                     AddTimerEvent( "DelayedRetreatEast", DelayedTime );
  869.                     CmdGroupMoveToEnt( "grp_patrol", GetEntity( "hq_east" ), Q_OVERRIDE, MF_ATTACKMOVE );
  870.                 }
  871.             }
  872.         }
  873.         case 3://extreme
  874.         {
  875.             if(northMP < westMP && northMP < eastMP)// north road
  876.             {
  877.                 AddTimerEvent( "DelayedRetreatNorth", DelayedTime );
  878.                 CmdGroupMoveToEnt( "grp_patrol", GetEntity( "hq_north" ), Q_OVERRIDE, MF_ATTACKMOVE );
  879.             }
  880.             if(westMP < northMP && westMP < eastMP)// west road
  881.             {
  882.                 AddTimerEvent( "DelayedRetreatWest", DelayedTime );
  883.                 CmdGroupMoveToEnt( "grp_patrol", GetEntity( "hq_west" ), Q_OVERRIDE, MF_ATTACKMOVE );
  884.             }
  885.             if(eastMP < westMP && eastMP < northMP)// east road
  886.             {
  887.                 AddTimerEvent( "DelayedRetreatEast", DelayedTime );
  888.                 CmdGroupMoveToEnt( "grp_patrol", GetEntity( "hq_east" ), Q_OVERRIDE, MF_ATTACKMOVE );
  889.             }
  890.             if(northMP < eastMP && northMP == westMP)
  891.             {
  892.                 switch(Rnd(1,2))
  893.                 {
  894.                     case 1:// north road
  895.                     {
  896.                         AddTimerEvent( "DelayedRetreatNorth", DelayedTime );
  897.                         CmdGroupMoveToEnt( "grp_patrol", GetEntity( "hq_north" ), Q_OVERRIDE, MF_ATTACKMOVE );
  898.                     }
  899.                     case 2:// west road
  900.                     {
  901.                         AddTimerEvent( "DelayedRetreatWest", DelayedTime );
  902.                         CmdGroupMoveToEnt( "grp_patrol", GetEntity( "hq_west" ), Q_OVERRIDE, MF_ATTACKMOVE );
  903.                     }
  904.                 }
  905.             }
  906.             if(northMP < westMP && northMP == eastMP)
  907.             {
  908.                 switch(Rnd(1,2))
  909.                 {
  910.                     case 1:// north road
  911.                     {
  912.                         AddTimerEvent( "DelayedRetreatNorth", DelayedTime );
  913.                         CmdGroupMoveToEnt( "grp_patrol", GetEntity( "hq_north" ), Q_OVERRIDE, MF_ATTACKMOVE );
  914.                     }
  915.                     case 2:// east road
  916.                     {
  917.                         AddTimerEvent( "DelayedRetreatEast", DelayedTime );
  918.                         CmdGroupMoveToEnt( "grp_patrol", GetEntity( "hq_east" ), Q_OVERRIDE, MF_ATTACKMOVE );
  919.                     }
  920.                 }
  921.             }
  922.             if(westMP < northMP && westMP == eastMP)
  923.             {
  924.                 switch(Rnd(1,2))
  925.                 {
  926.                     case 1:// west road
  927.                     {
  928.                         AddTimerEvent( "DelayedRetreatWest", DelayedTime );
  929.                         CmdGroupMoveToEnt( "grp_patrol", GetEntity( "hq_west" ), Q_OVERRIDE, MF_ATTACKMOVE );
  930.                     }
  931.                     case 2:// east road
  932.                     {
  933.                         AddTimerEvent( "DelayedRetreatEast", DelayedTime );
  934.                         CmdGroupMoveToEnt( "grp_patrol", GetEntity( "hq_east" ), Q_OVERRIDE, MF_ATTACKMOVE );
  935.                     }
  936.                 }
  937.             }
  938.         }
  939.     }
  940. }
  941. //============================================================================================================================
  942. public DelayedRetreatNorth()
  943. {
  944.     static counter = 0;
  945.     new newgroup[250];
  946.     counter++;
  947.     if(CountLivingInSelector( "grp_temp" ))
  948.     {
  949.         new DrID:NearestUnit = GetNearestEntity(GetEntity( "wpr1" ),"grp_temp");
  950.         RemoveFromGroup( ",grp_temp", NearestUnit );
  951.         Int2Str( counter, newgroup, 250);
  952.         AddToGroup( newgroup, NearestUnit );
  953.         
  954.         if(IsEntityComp(NearestUnit, "cTurretController"))
  955.         {
  956.             SetBehav2Ent( NearestUnit,    
  957.             MB_MOVE_FREELY, 
  958.             FB_FIRE_AT_WILL, 
  959.             UB_UNMODIFIED, 
  960.             DB_VEHICLE);
  961.         }
  962.         else
  963.         {
  964.             SetBehav2Ent( NearestUnit,MB_MOVE_FREELY, FB_RETURN_FIRE);
  965.         }
  966.  
  967.         Move(newgroup, purple, true, Q_ENQUEUE, MF_OVERRUN|MF_ATTACKMOVE);
  968.         Move(newgroup, red, true, Q_ENQUEUE, MF_OVERRUN|MF_ATTACKMOVE);
  969.     }
  970.     else
  971.         RemoveEvent( "DelayedRetreatNorth" );
  972. }
  973. public DelayedRetreatWest()
  974. {
  975.     static counter = 0;
  976.     new newgroup[250];
  977.     counter++;
  978.     if(CountLivingInSelector( "grp_temp" ))
  979.     {
  980.         new DrID:NearestUnit = GetNearestEntity(GetEntity( "wpr16" ),"grp_temp");
  981.         RemoveFromGroup( ",grp_temp", NearestUnit );
  982.         Int2Str( counter, newgroup, 250);
  983.         AddToGroup( newgroup, NearestUnit );
  984.         
  985.         if(IsEntityComp(NearestUnit, "cTurretController"))
  986.         {
  987.             SetBehav2Ent( NearestUnit,    
  988.             MB_MOVE_FREELY, 
  989.             FB_UNMODIFIED, 
  990.             UB_UNMODIFIED, 
  991.             DB_VEHICLE);
  992.         }
  993.         else
  994.         {
  995.             SetBehav2Ent( NearestUnit,MB_MOVE_FREELY, FB_RETURN_FIRE);
  996.         }
  997.  
  998.         Move(newgroup, green, true, Q_ENQUEUE, MF_OVERRUN|MF_ATTACKMOVE);
  999.         Move(newgroup, brown, true, Q_ENQUEUE, MF_OVERRUN|MF_ATTACKMOVE);
  1000.     }
  1001.     else
  1002.         RemoveEvent( "DelayedRetreatWest" );
  1003. }
  1004. public DelayedRetreatEast()
  1005. {
  1006.     static counter = 0;
  1007.     new newgroup[250];
  1008.     counter++;
  1009.     if(CountLivingInSelector( "grp_temp" ))
  1010.     {
  1011.         new DrID:NearestUnit = GetNearestEntity(GetEntity( "wpr24" ),"grp_temp");
  1012.         RemoveFromGroup( ",grp_temp", NearestUnit );
  1013.         Int2Str( counter, newgroup, 250);
  1014.         AddToGroup( newgroup, NearestUnit );
  1015.     
  1016.         if(IsEntityComp(NearestUnit, "cTurretController"))
  1017.         {
  1018.             SetBehav2Ent( NearestUnit,    
  1019.             MB_MOVE_FREELY, 
  1020.             FB_UNMODIFIED, 
  1021.             UB_UNMODIFIED, 
  1022.             DB_VEHICLE);
  1023.         }
  1024.         else
  1025.         {
  1026.             SetBehav2Ent( NearestUnit,MB_MOVE_FREELY, FB_RETURN_FIRE);
  1027.         }
  1028.  
  1029.         Move(newgroup, pink, true, Q_ENQUEUE, MF_OVERRUN|MF_ATTACKMOVE);
  1030.         Move(newgroup, blue, true, Q_ENQUEUE, MF_OVERRUN|MF_ATTACKMOVE);
  1031.     }
  1032.     else
  1033.         RemoveEvent( "DelayedRetreatEast" );
  1034. }
  1035. //============================================================================================================================
  1036. public Outro()
  1037. {
  1038.     RemoveEvent( "GroupEliminated" );
  1039.     RemoveEvent( "HQCaptured" );    
  1040.     SetPropertyInt( GetEntity( "hq_base" ), "Team", gPlayerTeam );
  1041.     SetPropertyString( GetEntity( "hq_base" ), "Nationality", "American" );
  1042.     SetPropertyBool( GetEntity( "hq_base" ), "FixedOwner", true );
  1043.     new Float:fowpos[vec3];
  1044.     GetPropertyVec3(GetEntity( "hq_base" ), "LogicalPos_", fowpos );
  1045.     new DrID:Fow = CreateEntity( "fowbacon_180", fowpos );
  1046.     SetPropertyInt( Fow, "Team", gPlayerTeam );
  1047.     SetPropertyBool( Fow, "GadgetsVisible", false );
  1048.         
  1049.     new wpname[5][10] = {{"wp_actor1"},{"wp_actor2"},{"wp_actor3"},{"wp_actor4"},{"wp_actor5"}}; 
  1050.     new Float:pos[vec3];
  1051.     
  1052.     for(new k = 0; k<5; k++)
  1053.     {
  1054.         GetPropertyVec3( GetEntity( wpname[k] ), "LogicalPos_", pos );
  1055.         CreateEntity( "al_m4 fireFly", pos );
  1056.     }
  1057.     
  1058.     new wpname2[10][20] = {{"wp_pow1"},{"wp_pow2"},{"wp_pow3"},{"wp_pow4"},{"wp_pow5"},{"wp_pow6"},{"wp_pow7"},{"wp_pow8"},{"wp_pow9"},{"wp_pow10"}}; 
  1059.     new Float:pos2[vec3];
  1060.     for(new p = 0; p<10; p++)
  1061.     {
  1062.         GetPropertyVec3( GetEntity( wpname2[p] ), "LogicalPos_", pos2 );
  1063.         new DrID:nemetkatana = CreateEntity( "ax_rifleman", pos2 );
  1064.         AddToGroup( "POW", nemetkatana );
  1065.     }
  1066.  
  1067.     SetAlliance( 1, gPlayerTeam, AL_NEUTRAL );
  1068.     SetAlliance( gPlayerTeam, 1, AL_NEUTRAL );
  1069.     CmdGroupSetMS( "POW", Q_OVERRIDE, MS_WALK );
  1070.     Move("POW", pink, true, Q_ENQUEUE, MF_OVERRUN);
  1071.     Move("POW", blue, true, Q_ENQUEUE, MF_OVERRUN);
  1072.  
  1073.       SetCutScene(true, true, true);
  1074.     FadeOut(0.5);
  1075.     AddTimerEvent( "CameraOutro", 2.0, "GameLogic", true );
  1076. }
  1077.  
  1078. public CameraOutro()
  1079. {
  1080.     RemoveEvent( "CameraOutro" );
  1081.     FadeIn(0.5);
  1082.     AddSoundMessage(iMS09_SP007, gSoundFile7);
  1083.     AddAKEntityEvent( "Victory", ANY_ENTITY, MESSAGE_END );
  1084.     TeleportCameraToEnt(GetEntity( "hq_base" ));
  1085.     
  1086.     SetCameraRotSpeed(5.0);
  1087.     
  1088.     CameraSet(0.0, 55.0, 50.0)
  1089.     SetCameraTargetRotate( -86.0 );
  1090.     SetCameraTargetPitch( 55.0 );
  1091.     SetCameraTargetDistance( 30.0 );
  1092.     
  1093. }
  1094. //============================================================================================================================
  1095. public CommandPostDestroyed(DrID:CommandPost)
  1096. {
  1097.     RemoveEvent( "CommandPostDestroyed" );
  1098.     
  1099.     if(GetObjectiveState( "HID_1" ) == OS_IN_PROGRESS)
  1100.     {
  1101.         SetObjectiveState( "HID_1", OS_FAILED );
  1102.         SetGlobalVariable("gvMS09_SecretDocuments", 0);
  1103.     }
  1104.     HideEntity( GetEntity( "zaszlo" ));
  1105. }
  1106.  
  1107. public CommandpostTeamchanged(DrID:commandpost)
  1108. {
  1109.     if(GetPropertyInt( commandpost, "Team" ) == gPlayerTeam && gOfficerDied == true)
  1110.     {
  1111.         if(GetObjectiveState( "HID_1" ) == OS_IN_PROGRESS)
  1112.         {
  1113.             SetObjectiveState( "HID_1", OS_COMPLETED );
  1114.             SetGlobalVariable("gvMS09_SecretDocuments", 1);
  1115.         }
  1116.         SetPropertyInt( GetEntity( "zaszlo" ), "Team", gPlayerTeam );
  1117.         SetPropertyString( GetEntity( "zaszlo" ), "Nationality", "American" );
  1118.     }
  1119. }
  1120. //============================================================================================================================
  1121. // public UnitAreaEnter(DrID:Unit)
  1122. // {
  1123. //     new compositeID[250];
  1124. //     GetPropertyString( GetMsgParamObject(), "CompositeID", 240, compositeID );
  1125. //     if(CompareString( compositeID, "area_roads") == 0)
  1126. //     {
  1127. //         if(IsInstanceOf( Unit, GetClassID( "cVehicle" )))
  1128. //         {
  1129. //             AddAKEntityEvent( "WreckDestruct", Unit, UNIT_DIED, 0.1 );
  1130. //         }
  1131. //     }
  1132. // }
  1133. // public UnitAreaExit(DrID:Unit)
  1134. // {
  1135. //     new compositeID[250];
  1136. //     GetPropertyString( GetMsgParamObject(), "CompositeID", 240, compositeID );
  1137. //     if(CompareString( compositeID, "area_roads") == 0)
  1138. //     {
  1139. //         if(IsInstanceOf( Unit, GetClassID( "cVehicle" )))
  1140. //         {
  1141. //             RemoveEvent( "WreckDestruct" );
  1142. //         }
  1143. //     }
  1144. // }
  1145. //============================================================================================================================
  1146. public WreckDestruct(DrID:diedunit)
  1147. {
  1148.     WreckDestructor(diedunit, "area_roads");
  1149. }
  1150. //============================================================================================================================
  1151.  
  1152. // public UnitTeamChanged(DrID:Vehicle)
  1153. // {
  1154. //     if(IsInstanceOf( Vehicle, GetClassID( "cVehicle" )))
  1155. //     {
  1156. //         if(GetPropertyInt( Vehicle, "Team" ) == gPlayerTeam && GetPropertyInt( Vehicle, "LastTeam" ) == 1)
  1157. //         {
  1158. //             new squadname[250];
  1159. //             GetPropertyString( Vehicle, "SquadName", 250, squadname );
  1160. //             
  1161. //             if(CompareString( squadname, "sq_panzerz") == 0)
  1162. //                 SetPropertyString( Vehicle, "SquadName", "" );
  1163. //             SetPropertyString( Vehicle, "Group", "" );        
  1164. //         }
  1165. //     }
  1166. // }
  1167. //============================================================================================================================
  1168.  
  1169. public GermanSoldierBehav(Selector[])
  1170. {
  1171.     new Iterator:i = Iterate(Selector);
  1172.     while(ItNext( i ))
  1173.     {
  1174.         new DrID:soldier = ItEntity( i );
  1175.         if(IsInstanceOf( soldier, GetClassID( "cSoldier" )))
  1176.         {
  1177.             new groupname[250];
  1178.             GetPropertyString( soldier, "Group", 200, groupname );
  1179.             if(CompareString( groupname, "") == 0)
  1180.             {
  1181.                 SetBehav2Ent( soldier,    MB_MOVE_IN_VICINITY, FB_FIRE_AT_WILL, UB_EVAC, DB_UNMODIFIED, MOB_WHEN_INJURED, MTP_ATTACK);
  1182.             }
  1183.         }
  1184.     }
  1185. }
  1186. //============================================================================================================================
  1187. public ScenarioMode()
  1188. {
  1189.     new Iterator:i = Iterate( "StartingPlayerUnits" );
  1190.     while(ItNext( i ))
  1191.     {
  1192.         AddToGroup( "grp_intro2", ItEntity( i ) );    
  1193.     }
  1194.     ItStop( i );
  1195. }
  1196. //============================================================================================================================
  1197. public Add2GermanGroup()
  1198. {
  1199.     new Iterator:i = Iterate( "SelectorTeam1" );
  1200.     while(ItNext( i ))
  1201.     {
  1202.         if(IsInstanceOf( ItEntity( i ), GetClassID( "cVehicle" )))
  1203.             AddToGroup( "grp_German", ItEntity( i ) );
  1204.     }
  1205.     ItStop( i );
  1206.  
  1207.     new Iterator:t = Iterate( "SelectorTeam0" );
  1208.     while(ItNext( t ))
  1209.     {
  1210.         if(IsInstanceOf( ItEntity( t ), GetClassID( "cVehicle" )))
  1211.         {
  1212.             new NationalitySTR[50];
  1213.             GetPropertyString( ItEntity( t ), "Nationality", 50, NationalitySTR );
  1214.             if(CompareString( NationalitySTR, "German") == 0)
  1215.                 AddToGroup( "grp_German", ItEntity( t ) );
  1216.         }
  1217.     }
  1218.     ItStop( t );
  1219. }
  1220.  
  1221. public GermanVehicleTeamChanged(DrID:gervehicle)
  1222. {
  1223. //     DebugMessage( "German vehicle is team changed!", DL_MESSAGE );
  1224.     GroupRemover(gervehicle);
  1225. }
  1226.