Advertisement
Guest User

WestWood MX0 Scripts

a guest
Jul 5th, 2012
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 180.25 KB | None | 0 0
  1. const char *Conversations[4] =
  2. {
  3.     "Mx0_A04_CON015",
  4.     "MX0_A04_CON016",
  5.     "MX0_A04_CON017",
  6.     "MX0_A04_CON018"
  7. };
  8.  
  9. class MX0_Area4_Controller_DLS : public ScriptImpClass
  10. {
  11.     void Register_Auto_Save_Variables();
  12.     void Created(GameObject *obj);
  13.     void Custom(GameObject *obj,int type,int param,GameObject *sender);
  14.     void Timer_Expired(GameObject *obj,int number);
  15.     int ReceivedParam;
  16.     bool DidAttachScripts;
  17.     int SenderID1;
  18.     int SenderID2;
  19.     int SenderID3;
  20.     int SenderID4;
  21.     int SenderID5;
  22.     int SenderID6;
  23.     int SenderID7;
  24.     int SenderID8;
  25.     int SenderID9;
  26.     int SenderID10;
  27.     int SenderID11;
  28.     int SenderID12;
  29.     int SenderID13;
  30.     int SenderID14;
  31.     int SenderID15;
  32.     bool ObeliskDestroyed;
  33.     int SenderID17;
  34.     bool DidSendCustoms2;
  35.     int GDI_ReinforceIndex;
  36.     int SenderID18;
  37.     int SenderID19;
  38.     int ConversationTwiddler;
  39.     bool DidSendCustom;
  40. };
  41.  
  42. void MX0_Area4_Controller_DLS::Register_Auto_Save_Variables()
  43. {
  44.     Auto_Save_Variable(&ReceivedParam, 4, 1);
  45.     Auto_Save_Variable(&DidAttachScripts, 1, 2);
  46.     Auto_Save_Variable(&SenderID1, 4, 3);
  47.     Auto_Save_Variable(&SenderID2, 4, 4);
  48.     Auto_Save_Variable(&SenderID3, 4, 5);
  49.     Auto_Save_Variable(&SenderID4, 4, 6);
  50.     Auto_Save_Variable(&SenderID5, 4, 7);
  51.     Auto_Save_Variable(&SenderID6, 4, 8);
  52.     Auto_Save_Variable(&SenderID7, 4, 9);
  53.     Auto_Save_Variable(&SenderID8, 4, 10);
  54.     Auto_Save_Variable(&SenderID9, 4, 11);
  55.     Auto_Save_Variable(&SenderID10, 4, 12);
  56.     Auto_Save_Variable(&SenderID11, 4, 13);
  57.     Auto_Save_Variable(&SenderID12, 4, 14);
  58.     Auto_Save_Variable(&SenderID13, 4, 15);
  59.     Auto_Save_Variable(&SenderID14, 4, 16);
  60.     Auto_Save_Variable(&SenderID15, 4, 17);
  61.     Auto_Save_Variable(&ObeliskDestroyed, 1, 18);
  62.     Auto_Save_Variable(&SenderID17, 4, 19);
  63.     Auto_Save_Variable(&DidSendCustoms2, 1, 20);
  64.     Auto_Save_Variable(&GDI_ReinforceIndex, 4, 21);
  65.     Auto_Save_Variable(&SenderID18, 4, 22);
  66.     Auto_Save_Variable(&SenderID19, 4, 23);
  67.     Auto_Save_Variable(&ConversationTwiddler, 4, 24);
  68.     Auto_Save_Variable(&DidSendCustom, 1, 25);
  69. }
  70.  
  71. void MX0_Area4_Controller_DLS::Created(GameObject *obj)
  72. {
  73.     ReceivedParam = 0;
  74.     DidAttachScripts = false;
  75.     Commands->Scale_AI_Awareness(3.000000, 1.000000);
  76.     SenderID17 = 0;
  77.     ObeliskDestroyed = false;
  78.     GDI_ReinforceIndex = 0;
  79.     ConversationTwiddler = 0;
  80.     DidSendCustom = false;
  81. }
  82.  
  83. void MX0_Area4_Controller_DLS::Custom(GameObject *obj,int type,int param,GameObject *sender)
  84. {
  85.     if(type == 445018)
  86.     {
  87.         GameObject *SenderID12Obj = Commands->Find_Object(SenderID12));
  88.         Commands->Destroy_Object(SenderID12Obj);
  89.     }
  90.     else if(type == 445000)
  91.     {
  92.         ReceivedParam = param;
  93.         if(param == 1 && !DidAttachedScripts)
  94.         {
  95.             DidAttachScripts = true;
  96.             Commands->Start_Timer(obj, this, 3, 0);
  97.             GameObject *SenderID1Obj = Commands->Find_Object(SenderID1);
  98.             Commands->Attach_Script(SenderID1Obj, "MX0_Vehicle_DLS", "1500018, 1500019, 0, 0, 0.5f");
  99.             Commands->Attach_Script(SenderID1Obj, "MX0_GDI_Killed_DLS", "1");
  100.             GameObject *SenderID2Obj = Commands->Find_Object(SenderID2);
  101.             Commands->Attach_Script(SenderID2Obj, "MX0_Vehicle_DLS", "1500022, 1500023, 0, 0, 1.0f");
  102.             Commands->Attach_Script(SenderID2Obj, "MX0_GDI_Killed_DLS", "2");
  103.             Commands->Attach_Script(SenderID2Obj, "M00_Damage_Modifier_DME", ".10f,1,1,1,1");
  104.             GameObject *SenderID3Obj = Commands->Find_Object(SenderID3);
  105.             Commands->Attach_Script(SenderID3Obj, "MX0_Vehicle_DLS", "1500027, 1500028, 1500029, 0, 1.0f");
  106.             GameObject *SenderID9Obj = Commands->Find_Object(SenderID9);
  107.             Commands->Attach_Script(SenderID9Obj, "MX0_GDI_Soldier_DLS", "1500049, 1500050, 0, 0, 0.8f");
  108.             GameObject *RocketSoldier = Commands->Create_Object("GDI_RocketSoldier_0", Vector3(51.644001, 27.306000, 4.850000));
  109.             Commands->Attach_Script(RocketSoldier, "M00_Send_Object_ID", "1500017, 12, 0.0f");
  110.             Commands->Attach_Script(RocketSoldier, "MX0_GDI_Soldier_DLS", "1500053, 1500070, 0, 0, 0.8f");
  111.             Commands->Send_Custom_Event(obj, SenderID1Obj, 445002, 445010, 0);
  112.         }
  113.     }
  114.     else if(type == 9035)
  115.     {
  116.         switch(param)
  117.         {
  118.             case 1:
  119.                 SenderID1 = Commands->Get_ID(sender);
  120.                 break;
  121.             case 3:
  122.                 SenderID2 = Commands->Get_ID(sender);
  123.                 break;
  124.             case 4:
  125.                 SenderID3 = Commands->Get_ID(sender);
  126.                 break;
  127.             case 5:
  128.                 SenderID4 = Commands->Get_ID(sender);
  129.                 break;
  130.             case 6:
  131.                 SenderID5 = Commands->Get_ID(sender);
  132.                 break;
  133.             case 8:
  134.                 SenderID6 = Commands->Get_ID(sender);
  135.                 break;
  136.             case 9:
  137.                 SenderID7 = Commands->Get_ID(sender);
  138.                 break;
  139.             case 10:
  140.                 SenderID8 = Commands->Get_ID(sender);
  141.                 break;
  142.             case 11:
  143.                 SenderID9 = Commands->Get_ID(sender);
  144.                 break;
  145.             case 12:
  146.                 SenderID10 = Commands->Get_ID(sender);
  147.                 break;
  148.             case 13:
  149.                 SenderID11 = Commands->Get_ID(sender);
  150.                 break;
  151.             case 14:
  152.                 SenderID12 = Commands->Get_ID(sender);
  153.                 break;
  154.             case 15:
  155.                 SenderID13 = Commands->Get_ID(sender);
  156.                 break;
  157.             case 16:
  158.                 SenderID14 = Commands->Get_ID(sender);
  159.                 break;
  160.             case 17:
  161.                 SenderID15 = Commands->Get_ID(sender);
  162.                 break;
  163.             case 18:
  164.                 SenderID17 = Commands->Get_ID(sender);
  165.                 break;
  166.             case 19:
  167.                 SenderID18 = Commands->Get_ID(sender);
  168.                 break;
  169.             case 20:
  170.                 SenderID19 = Commands->Get_ID(sender);
  171.                 break;
  172.             default:
  173.                 break;
  174.         }
  175.     }
  176.     else if(type == 445007)
  177.     {
  178.         GameObject *SearchObj1 = Commands->Find_Object(1500015);
  179.         Commands->Send_Custom_Event(obj, SearchObj1, 445007, SenderID14, 0);
  180.         GameObject *SearchObj2 = Commands->Find_Object(1500016);
  181.         Commands->Send_Custom_Event(obj, SearchObj2, 445007, SenderID14, 0);
  182.     }
  183.     else if(type == 445008)
  184.     {
  185.         GameObject *SenderID15Obj = Commands->Find_Object(SenderID15);
  186.         Commands->Apply_Damage(SenderID15Obj, 50000, "STEEL", 0);
  187.     }
  188.     else if(type == 445009)
  189.         Commands->Mission_Complete(true);
  190.     else if(type == 445019)
  191.     {
  192.         GDI_ReinforceIndex++;
  193.         if(GDI_ReinforceIndex == 2)
  194.         {
  195.             SenderID19 = 0;
  196.             GameObject *SearchObj1 = Commands->Find_Object(1500102);
  197.             Vector3 SearchObjPos = Commands->Get_Position(SearchObj1);
  198.             GameObject *CinObject = Commands->Create_Object("Invisible_Object", SearchObjPos);
  199.             Commands->Set_Facing(CinObject, Commands->Get_Facing(SearchObj1));
  200.             Commands->Attach_Script(CinObject, "Test_Cinematic", "MX0_GDI_Reinforce_Area4.txt");
  201.         }
  202.     }
  203. }
  204.  
  205. void MX0_Area4_Controller_DLS::Timer_Expired(GameObject *obj,int number)
  206. {
  207.     if(number == 0)
  208.     {
  209.         if(ReceivedParam <= 0)
  210.         {
  211.             if(!DidSendCustom)
  212.             {
  213.                 DidSendCustom = true;
  214.                 GameObject *SenderID1Obj = Find_Object(SenderID1);
  215.                 Commands->Send_Custom_Event(obj, SenderID1Obj, 445002, 445020, 0);
  216.             }
  217.             Commands->Start_Timer(obj, this, 2, 0);
  218.         }
  219.         else
  220.         {
  221.             GameObject *SenderID1Obj = Commands->Find_Object(SenderID1);
  222.             Commands->Send_Custom_Event(obj, SenderID1Obj, 445001, 1, 0);
  223.             GameObject *SenderID2Obj = Commands->Find_Object(SenderID2);
  224.             Commands->Send_Custom_Event(obj, SenderID2Obj, 445001, 1, 0);
  225.             GameObject *SenderID3Obj = Commands->Find_Object(SenderID3);
  226.             Commands->Send_Custom_Event(obj, SenderID3Obj, 445001, 1, 0);
  227.             GameObject *SenderID9Obj = Commands->Find_Object(SenderID9);
  228.             Commands->Send_Custom_Event(obj, SenderID9Obj, 445006, 1, 0);
  229.             GameObject *SenderID10Obj = Commands->Find_Object(SenderID10);
  230.             Commands->Send_Custom_Event(obj, SenderID10Obj, 445006, 1, 0);
  231.             GameObject *SenderID11Obj = Commands->Find_Object(SenderID11);
  232.             Commands->Send_Custom_Event(obj, SenderID11Obj, 445006, 1, 0);
  233.             GameObject *SenderID4Obj = Commands->Find_Object(SenderID4);
  234.             Commands->Attach_Script(SenderID4Obj, "MX0_Vehicle_DLS", "1500033, 1500034, 0, 0, 0.4f");
  235.             GameObject *SenderID5Obj = Commands->Find_Object(SenderID5);
  236.             Commands->Attach_Script(SenderID5Obj, "MX0_Vehicle_DLS", "0, 0, 0, 0, 0.0f");
  237.             GameObject *SenderID15Obj = Commands->Find_Object(SenderID15);
  238.             Commands->Attach_Script(SenderID15Obj, "MX0_Vehicle_DLS", "1500084, 1500085, 0, 0, 1.0f");
  239.             Commands->Start_Timer(obj, this, 2, 1);
  240.             Commands->Send_Custom_Event(obj, SenderID1Obj, 9037, 0, 0);
  241.             Commands->Send_Custom_Event(obj, SenderID9Obj, 445002, 445012, 4.000000);
  242.         }
  243.     }
  244.     else if(number == 1)
  245.     {
  246.         if(ReceivedParam <= 1)
  247.         {
  248.             GameObject *SenderID10Obj = Commands->Find_Object(SenderID10);
  249.             Commands->Send_Custom_Event(obj, SenderID10Obj, 445002, 445021, 0);
  250.             Commands->Start_Timer(obj, this, 6, 1);
  251.         }
  252.         else
  253.         {
  254.             GameObject *SenderID4Obj = Commands->Find_Object(SenderID4);
  255.             Commands->Send_Custom_Event(obj, SenderID4Obj, 445001, 1, 0);
  256.             GameObject *SearchObj1 = Commands->Find_Object(1500020);
  257.             Commands->Send_Custom_Event(obj, SearchObj1, 445003, 1, 0);
  258.             Commands->Start_Timer(obj, this, 0, 2);
  259.             GameObject *SenderID9Obj = Commands->Find_Object(SenderID9);
  260.             Commands->Send_Custom_Event(obj, SenderID9Obj, 445002, 445013, 4.000000);
  261.             GameObject *SenderID10Obj = Commands->Find_Object(SenderID10);
  262.             Commands->Send_Custom_Event(obj, SenderID10Obj, 445006, 1, 0);
  263.             GameObject *SenderID11Obj = Commands->Find_Object(SenderID11);
  264.             Commands->Send_Custom_Event(obj, SenderID11Obj, 445006, 1, 0);
  265.             int Random = Commands->Get_Random_Int(0, 3);
  266.             GameObject *SenderID18Obj = Commands->Find_Object(SenderID18);
  267.             Commands->Send_Custom_Event(obj, SenderID18Obj, 445006, Random, 0);
  268.             GameObject *SenderID19Obj = Commands->Find_Object(SenderID19);
  269.             Commands->Send_Custom_Event(obj, SenderID19Obj, 445006, Random, 0);
  270.         }
  271.     }
  272.     else if(number == 2)
  273.     {
  274.         if(ReceivedParam == 1)
  275.         {
  276.             if(ConversationTwiddler == 4)
  277.                     ConversationTwiddler = 0;
  278.             int Conversation = Commands->Create_Conversation(Conversations[ConversationTwiddler], 100, 200, false);
  279.             Commands->Join_Conversation(obj, Conversation, false, true, true);
  280.             Commands->Start_Conversation(Conversation, 10);
  281.             ConversationTwiddler++;
  282.             Commands->Start_Timer(obj, this, 5, 2);
  283.         }
  284.         else if(ReceivedParam == 2)
  285.             Commands->Start_Timer(obj, this, 5, 2);
  286.         else if(ReceivedParam == 3)
  287.         {
  288.             Commands->Enable_Spawner(1500042, true);
  289.             Commands->Enable_Spawner(1500044, true);
  290.             GameObject *SearchObj1 = Find_Object(1500039);
  291.             Commands->Send_Custom_Event(obj, SearchObj1, 445002, 1, 0);
  292.             GameObject *SenderID3Obj = Commands->Find_Object(SenderID3);
  293.             Commands->Send_Custom_Event(obj, SenderID3Obj, 445001, 2, 0);
  294.             GameObject *SenderID15Obj = Commands->Find_Object(SenderID15);
  295.             Commands->Send_Custom_Event(obj, SenderID15Obj, 445001, 1, 0);
  296.             Commands->Start_Timer(obj, this, 8, 3);
  297.             GameObject *SearchObj2 = Commands->Find_Object(1500102);
  298.             Vector3 SearchObj2Pos = Commands->Get_Position(SearchObj2);
  299.             GameObject *CinObject = Commands->Create_Object("Invisible_Object", SearchObj2Pos);
  300.             GameObject *SearchObj3 = Commands->Find_Object(1500102);
  301.             Commands->Set_Facing(CinObject, Commands->Get_Facing(SearchObj3));
  302.             Commands->Attach_Script(CinObject, "Test_Cinematic", "MX0_GDI_Reinforce_Area4.txt");
  303.             GameObject *SenderID10Obj = Commands->Find_Object(SenderID10);
  304.             Commands->Send_Custom_Event(obj, SenderID10Obj, 445006, 1, 0);
  305.             GameObject *SenderID11Obj = Commands->Find_Object(SenderID11);
  306.             Commands->Send_Custom_Event(obj, SenderID11Obj, 445006, 1, 0);
  307.             int Random = Commands->Get_Random_Int(0, 3);
  308.             GameObject *SenderID18Obj = Commands->Find_Object(SenderID18);
  309.             Commands->Send_Custom_Event(obj, SenderID18Obj, 445006, Random, 0);
  310.             GameObject *SenderID19Obj = Commands->Find_Object(SenderID19);
  311.             Commands->Send_Custom_Event(obj, SenderID19Obj, 445006, Random, 0);
  312.         }
  313.     }
  314.     else if(number == 3)
  315.     {
  316.         if(ReceivedParam == 1)
  317.         {
  318.             if(ConversationTwiddler == 4)
  319.                 ConversationTwiddler = 0;
  320.             int Conversation = Commands->Create_Conversation(Conversations[ConversationTwiddler], 100, 200, false);
  321.             Commands->Join_Conversation(obj, Conversation, false, true, true);
  322.             Commands->Start_Conversation(Conversation, 10);
  323.             ConversationTwiddler++;
  324.             Commands->Start_Timer(obj, this, 5, 3);
  325.         }
  326.         else if(ReceivedParam == 2)
  327.             Commands->Start_Timer(obj, this, 5, 3);
  328.         else if(ReceivedParam == 3)
  329.         {
  330.             Commands->Create_2D_Sound("MX0_A4_Orca_Mix");
  331.             GameObject *CinObject = Create_Object("Invisible_Object", Vector3(0,0,0));
  332.             Commands->Set_Facing(CinObject, 0);
  333.             Commands->Attach_Script(CinObject, "Test_Cinematic", "X0E_Obelisk.txt");
  334.             GameObject *SenderID13Obj = Commands->Find_Object(SenderID13);
  335.             Commands->Destroy_Object(SenderID13Obj);
  336.             Commands->Start_Timer(obj, this, 5, 7);
  337.             Commands->Start_Timer(obj, this, 10, 8);
  338.             ObeliskDestroyed = true;
  339.             Commands->Start_Timer(obj, this, 8, 10);
  340.             Commands->Start_Timer(obj, v5, 2, 4);
  341.             GameObject *SenderID10Obj = Commands->Find_Object(SenderID10);
  342.             Commands->Send_Custom_Event(obj, SenderID10Obj, 445006, 1, 0);
  343.             GameObject *SenderID11Obj = Commands->Find_Object(SenderID11);
  344.             Commands->Send_Custom_Event(obj, SenderID11Obj, 445006, 1, 0);
  345.             int Random = Commands->Get_Random_Int(0, 3);
  346.             GameObject *SenderID18Obj = Commands->Find_Object(SenderID18);
  347.             Commands->Send_Custom_Event(obj, SenderID18Obj, 445006, Random, 0);
  348.             GameObject *SenderID19Obj = Commands->Find_Object(SenderID19);
  349.             Commands->Send_Custom_Event(obj, SenderID19Obj, 445006, Random, 0);
  350.         }
  351.     }
  352.     else if(number == 4)
  353.     {
  354.         if(ReceivedParam == 1)
  355.         {
  356.             if(ConversationTwiddler == 4)
  357.                 ConversationTwiddler = 0;
  358.             int Conversation = Commands->Create_Conversation(Conversations[ConversationTwiddler], 100, 200, false);
  359.             Commands->Join_Conversation(obj, Conversation, false, true, true);
  360.             Commands->Start_Conversation(Conversation, 10);
  361.             ConversationTwiddler++;
  362.             Commands->Start_Timer(obj, this, 5, 4);
  363.         }
  364.         else if(ReceivedParam == 2)
  365.             Commands->Start_Timer(obj, this, 5, 4);
  366.         else if(ReceivedParam == 3)
  367.         {
  368.             if(Commands->Find_Object(1500015) || Commands->Find_Object(1500016))
  369.             {
  370.                 Commands->Start_Timer(obj, this, 5, 7);
  371.                 Commands->Start_Timer(obj, this, 10, 8);
  372.                 ObeliskDestroyed = false;
  373.                 if(!DidSendCustoms2)
  374.                 {
  375.                     DidSendCustoms2 = true;
  376.                     GameObject *SenderID10Obj = Commands->Find_Object(SenderID10);
  377.                     Commands->Send_Custom_Event(obj, SenderID10Obj, 445002, 445015, 9);
  378.                     GameObject *SearchObj1 = Commands->Find_Object(1500015);
  379.                     Commands->Send_Custom_Event(obj, SearchObj1, 9037, 0, 0);
  380.                     GameObject *SearchObj2 = Commands->Find_Object(1500016);
  381.                     Commands->Send_Custom_Event(obj, SearchObj2, 9037, 0, 0);
  382.                     Commands->Start_Timer(obj, this, 20, 12);
  383.                     Commands->Start_Timer(obj, this, 24, 13);
  384.                 }
  385.                 Commands->Start_Timer(obj, this, 5, 4);
  386.             }
  387.             else
  388.             {
  389.                 GameObject *SenderID10Obj = Commands->Find_Object(SenderID10);
  390.                 Commands->Send_Custom_Event(obj, SenderID10Obj, 445002, 445016, 0);
  391.                 GameObject *SenderID9Obj = Commands->Find_Object(SenderID9);
  392.                 Commands->Send_Custom_Event(obj, SenderID9Obj, 445002, 445017, 2);
  393.                 GameObject *SenderID6Obj = Commands->Find_Object(SenderID6);
  394.                 Commands->Send_Custom_Event(obj, SenderID6Obj, 445002, SenderID8, 0);
  395.                 GameObject *SenderID7Obj = Commands->Find_Object(SenderID7);
  396.                 Commands->Send_Custom_Event(obj, SenderID7Obj, 445002, SenderID8, 0);
  397.                 Commands->Start_Timer(obj, this, 5, 5);
  398.             }
  399.         }
  400.     }
  401.     else if(number == 5)
  402.     {
  403.         if(ReceivedParam == 1)
  404.         {
  405.             if(ConversationTwiddler == 4)
  406.                 ConversationTwiddler = 0;
  407.             int Conversation = Commands->Create_Conversation(Conversations[ConversationTwiddler], 100, 200, false);
  408.             Commands->Join_Conversation(obj, Conversation, false, true, true);
  409.             Commands->Start_Conversation(Conversation, 10);
  410.             ConversationTwiddler++;
  411.             Commands->Start_Timer(obj, this, 5, 5);
  412.         }
  413.         else if(ReceivedParam == 2)
  414.             Commands->Start_Timer(obj, this, 5, 5);
  415.         else if(ReceivedParam == 3)
  416.         {
  417.             Commands->Fade_Background_Music("Renegade_A10_Outro.mp3", 1, 1);
  418.             int MX0_A04_CON010 = Commands->Create_Conversation("MX0_A04_CON010", 100, 200, false);
  419.             Commands->Join_Conversation(0, MX0_A04_CON010, false, true, true);
  420.             Commands->Start_Conversation(MX0_A04_CON010, 1);
  421.             Commands->Start_Timer(obj, this, 5, 11);
  422.             GameObject *CinObject = Commands->Create_Object("Invisible_Object", Vector3(0,0,0));
  423.             Commands->Set_Facing(CinObject, 0);
  424.             Commands->Attach_Script(CinObject, "Test_Cinematic", "X0D_A10_Crash.txt");
  425.             Commands->Start_Timer(obj, this, 6, 6);
  426.             GameObject *SenderID10Obj = Commands->Find_Object(SenderID10);
  427.             Commands->Send_Custom_Event(obj, SenderID10Obj, 445006, 1, 0);
  428.             GameObject *SenderID11Obj = Commands->Find_Object(SenderID11);
  429.             Commands->Send_Custom_Event(obj, SenderID11Obj, 445006, 1, 0);
  430.             int Random = Commands->Get_Random_Int(0, 3);
  431.             GameObject *SenderID18Obj = Commands->Find_Object(SenderID18);
  432.             Commands->Send_Custom_Event(obj, SenderID18Obj, 445006, Random, 0);
  433.             GameObject *SenderID19Obj = Commands->Find_Object(SenderID19);
  434.             Commands->Send_Custom_Event(obj, SenderID19Obj, 445006, Random, 0);
  435.         }
  436.     }
  437.     else if(number == 6)
  438.     {
  439.         int MX0_A04_CON012 = Commands->Create_Conversation("MX0_A04_CON012", 100, 200, false);
  440.         Commands->Join_Conversation(0, MX0_A04_CON012, false, true, true);
  441.         Commands->Start_Conversation(MX0_A04_CON012, 1);
  442.         GameObject *SearchObj1 = Commands->Find_Object(1500087);
  443.         Vector3 SearchObj1Pos = Commands->Get_Position(SearchObj1);
  444.         GameObject *RocketSoldier = Commands->Create_Object("Nod_RocketSoldier_1Off", SearchObj1Pos);
  445.         Commands->Attach_Script(RocketSoldier, "MX0_Plant_Ion_Beacon_DLS", "");
  446.         Commands->Start_Timer(obj, this, 22, 14);
  447.         Commands->Start_Timer(obj, this, 25, 9);
  448.         GameObject *SenderID10Obj = Commands->Find_Object(SenderID10);
  449.         Commands->Send_Custom_Event(obj, SenderID10Obj, 445006, 1, 0);
  450.         GameObject *SenderID11Obj = Commands->Find_Object(SenderID11);
  451.         Commands->Send_Custom_Event(obj, SenderID11Obj, 445006, 1, 0);
  452.         int Random = Commands->Get_Random_Int(0, 3);
  453.         GameObject *SenderID18Obj = Commands->Find_Object(SenderID18);
  454.         Commands->Send_Custom_Event(obj, SenderID18Obj, 445006, Random, 0);
  455.         GameObject *SenderID19Obj = Commands->Find_Object(SenderID19);
  456.         Commands->Send_Custom_Event(obj, SenderID19Obj, 445006, Random, 0);
  457.     }
  458.     else if(number == 7)
  459.     {
  460.         if(ObeliskDestroyed)
  461.         {
  462.             GameObject *CinObject = Commands->Create_Object("Invisible_Object", Vector3(0,0,0));
  463.             Commands->Set_Facing(CinObject, 0);
  464.             Commands->Attach_Script(CinObject, "Test_Cinematic", "X0C_Flyovers_01.txt");
  465.         }
  466.     }
  467.     else if(number == 8)
  468.     {
  469.         if(ObeliskDestroyed)
  470.         {
  471.             GameObject *CinObject = Commands->Create_Object("Invisible_Object", Vector3(0,0,0));
  472.             Commands->Set_Facing(CinObject, 0);
  473.             Commands->Attach_Script(CinObject, "Test_Cinematic", "X0C_Flyovers_02.txt");
  474.         }
  475.     }
  476.     else if(number == 9)
  477.     {
  478.         GameObject *SenderID17Obj = Commands->Find_Object(SenderID17);
  479.         Commands->Destroy_Object(SenderID17Obj);
  480.         GameObject *CinObject = Commands->Create_Object("Invisible_Object", Vector3(0,0,0));
  481.         Commands->Set_Facing(CinObject, 0);
  482.         Commands->Attach_Script(CinObject, "Test_Cinematic", "X0Z_Finale.txt");
  483.     }
  484.     else if(number == 10)
  485.     {
  486.         int MX0_A04_CON005 = Commands->Create_Conversation("MX0_A04_CON005", 100, 200, false);
  487.         Commands->Join_Conversation(0, MX0_A04_CON005, false, true, true);
  488.         Commands->Start_Conversation(MX0_A04_CON005, 1);
  489.         GameObject *SenderID10Obj = Commands->Find_Object(SenderID10));
  490.         Commands->Send_Custom_Event(obj, SenderID10Obj, 445002, 445014, 3);
  491.     }
  492.     else if(number == 11)
  493.     {
  494.         int MX0_A04_CON011 = Commands->Create_Conversation("MX0_A04_CON011", 100, 200, false);
  495.         Commands->Join_Conversation(0, MX0_A04_CON011, false, true, true);
  496.         Commands->Start_Conversation(MX0_A04_CON011, 1);
  497.     }
  498.     else if(number == 12)
  499.     {
  500.         GameObject *SearchObj1 = Commands->Find_Object(1500015);
  501.         Commands->Apply_Damage(SearchObj1, 50000, "STEEL", 0);
  502.     }
  503.     else if(number == 13)
  504.     {
  505.         GameObject *SearchObj1 = Commands->Find_Object(1500016);
  506.         Commands->Apply_Damage(SearchObj1, 50000, "STEEL", 0);
  507.     }
  508.     else if(number == 14)
  509.     {
  510.         Commands->Set_Screen_Fade_Color(1, 1, 1, 0.200000);
  511.         Commands->Set_Screen_Fade_Opacity(1, 0.200000);
  512.     }
  513. }
  514.  
  515. class MX0_Area4_Zone_DLS : public ScriptImpClass
  516. {
  517.     void Entered(GameObject *obj,GameObject *enterer);
  518.     bool SendCustom;
  519. };
  520.  
  521. void MX0_Area4_Zone_DLS::Entered(GameObject *obj,GameObject *enterer)
  522. {
  523.     if(Commands->Is_A_Star(enterer) && SendCustom)
  524.     {
  525.         int Area = Get_Int_Parameter("Area");
  526.         GameObject *SearchObj = Commands->Find_Object(1500017);
  527.         Commands->Send_Custom_Event(SearchObj, SearchObj, 445000, Area, 0);
  528.         SendCustom = false;
  529.     }
  530. }
  531.  
  532. class MX0_Vehicle_DLS : public ScriptImpClass
  533. {
  534.     void Register_Auto_Save_Variables();
  535.     void Created(GameObject *obj);
  536.     void Enemy_Seen(GameObject *obj,GameObject *enemy);
  537.     void Custom(GameObject *obj,int type,int param,GameObject *sender);
  538.     void Action_Complete(GameObject *obj,int action_id,ActionCompleteReason complete_reason);
  539.     int Attack_Loc0;
  540.     int Attack_Loc1;
  541.     int Attack_Loc2;
  542.     int Attack_Loc3;
  543.     int AttackIndex;
  544.     float Speed;
  545.     int AttackArray[4];
  546. };
  547.  
  548. void MX0_Vehicle_DLS::Register_Auto_Save_Variables()
  549. {
  550.     Auto_Save_Variable(&AttackArray, 16, 1);
  551.     Auto_Save_Variable(&AttackIndex, 4, 2);
  552.     Auto_Save_Variable(&Speed, 4, 3);
  553. }
  554.  
  555. void MX0_Vehicle_DLS::Created(GameObject *obj)
  556. {
  557.     Commands->Enable_Enemy_Seen(obj, true);
  558.     Commands->Enable_Engine(obj, true);
  559.     Attack_Loc0 = Get_Int_Parameter("Attack_Loc0");
  560.     Attack_Loc1 = Get_Int_Parameter("Attack_Loc1");
  561.     Attack_Loc2 = Get_Int_Parameter("Attack_Loc2");
  562.     Attack_Loc3 = Get_Int_Parameter("Attack_Loc3");
  563.     AttackArray[0] = Attack_Loc0;
  564.     AttackArray[1] = Attack_Loc1;
  565.     AttackArray[2] = Attack_Loc2;
  566.     AttackArray[3] = Attack_Loc3;
  567.     AttackIndex = 0;
  568.     Speed = Get_Float_Parameter("Speed");
  569.     ActionParamsStruct Params;
  570.     Params.Set_Basic(this, 95, 10);
  571.     Params.Set_Movement(Commands->Find_Object(1500024), Speed, 5.000000); // wouldnt make much sense going to there but i was just guessing.
  572.     Params.Set_Attack(Commands->Get_Position(Commands->Find_Object(Attack_Loc0)), 1000, 0, true);
  573.     Params.AttackForceFire = true; // probably.
  574.     Commands->Action_Attack(obj, Params);
  575. }
  576.  
  577. void MX0_Vehicle_DLS::Enemy_Seen(GameObject *obj,GameObject *enemy)
  578. {
  579.     int EnemyID = Commands->Get_ID(enemy);
  580.     int ID = Commands->Get_ID(obj);
  581.     Commands->Debug_Message("ID %d sees Enemy ID %d \n", ID, EnemyID);
  582.     ActionParamsStruct Params;
  583.     Params.Set_Basic(this, 95, 10);
  584.     Params.Set_Attack(enemy, 200, 5, true);
  585.     Params.MoveSpeed = Speed;
  586.     Params.MoveArrivedDistance = 5.000000;
  587.     // probably missing things.
  588.     Commands->Action_Attack(obj, Params);
  589. }
  590.  
  591. void MX0_Vehicle_DLS::Custom(GameObject *obj,int type,int param,GameObject *sender)
  592. {
  593.     if(type == 445001)
  594.     {
  595.         AttackIndex = param;
  596.         ActionParamsStruct Params;
  597.         Params.Set_Basic(this, 95, 10);
  598.         Params.Set_Attack(Commands->Get_Position(Commands->Find_Object(AttackArray[AttackIndex])), 1000, 0, true);
  599.         Params.MoveSpeed = Speed;
  600.         Params.MoveArrivedDistance = 5.000000;
  601.         Params.AttackForceFire = true; // probably.
  602.         Commands->Action_Attack(obj, Params);
  603.         Commands->Debug_Message("Attack_Loc [%d] = %d \n", AttackIndex, AttackArray[AttackIndex]);
  604.     }
  605.     else if(type == 445002)
  606.     {
  607.         if(param == 445010)
  608.         {
  609.             int MX0_A04_CON001 = Commands->Create_Conversation("MX0_A04_CON001", 100, 200, false);
  610.             Commands->Join_Conversation(obj, MX0_A04_CON001, false, true, true);
  611.             Commands->Start_Conversation(MX0_A04_CON001, 0);
  612.             Commands->Monitor_Conversation(obj, MX0_A04_CON001);
  613.         }
  614.         else if(param == 445020)
  615.         {
  616.             int MX0_A04_CON013 = Commands->Create_Conversation("MX0_A04_CON013", 100, 200, false);
  617.             Commands->Join_Conversation(obj, MX0_A04_CON013, false, true, true);
  618.             Commands->Start_Conversation(MX0_A04_CON013, 10);
  619.         }
  620.     }
  621. }
  622.  
  623. void MX0_Vehicle_DLS::Action_Complete(GameObject *obj,int action_id,ActionCompleteReason complete_reason)
  624. {
  625.     if(action_id == 0)
  626.     {
  627.         if(complete_reason == ACTION_COMPLETE_CONVERSATION_ENDED)
  628.         {
  629.             int MX0_A04_CON002 = Commands->Create_Conversation("MX0_A04_CON002", 100, 200, false);
  630.             Commands->Join_Conversation(0, MX0_A04_CON002, false, true, true);
  631.             Commands->Start_Conversation(MX0_A04_CON002, 1);
  632.         }
  633.     }
  634.     else if(action_id == 1)
  635.     {
  636.         if(complete_reason == ACTION_COMPLETE_CONVERSATION_ENDED)
  637.         {
  638.             int MX0_A04_CON003 = Commands->Create_Conversation("MX0_A04_CON003", 100, 200, false);
  639.             Commands->Join_Conversation(obj, MX0_A04_CON003, false, true, true);
  640.             Commands->Start_Conversation(MX0_A04_CON003, 1);
  641.         }
  642.     }
  643.     else if(action_id == 10)
  644.         Commands->Debug_Message("Action_Complete");
  645. }
  646.  
  647. class MX0_Obelisk_Weapon_DLS : public ScriptImpClass
  648. {
  649.     void Register_Auto_Save_Variables();
  650.     void Created(GameObject *obj);
  651.     void Custom(GameObject *obj,int type,int param,GameObject *sender);
  652.     void Timer_Expired(GameObject *obj,int number);
  653.     void Action_Complete(GameObject *obj,int action_id,ActionCompleteReason complete_reason);
  654.     void Destroyed(GameObject *obj);
  655.     bool AttackEnabled;
  656.     int AttackObjID;
  657.     int EffectID;
  658.     int SenderID1;
  659.     int SenderID2;
  660.     int SenderID3;
  661. };
  662.  
  663. void MX0_Obelisk_Weapon_DLS::Register_Auto_Save_Variables()
  664. {
  665.     Auto_Save_Variable(&AttackEnabled, 1, 1);
  666.     Auto_Save_Variable(&AttackObjID, 4, 2);
  667.     Auto_Save_Variable(&EffectID, 4, 3);
  668.     Auto_Save_Variable(&SenderID1, 4, 4);
  669.     Auto_Save_Variable(&SenderID2, 4, 5);
  670.     Auto_Save_Variable(&SenderID3, 4, 6);
  671. }
  672.  
  673. void MX0_Obelisk_Weapon_DLS::Created(GameObject *obj)
  674. {
  675.     EffectID = 0;
  676.     AttackObjID = 0;
  677.     AttackEnabled = true;
  678.     Commands->Set_Player_Type(obj, 0);
  679.     Commands->Set_Is_Rendered(obj, false);
  680.     Commands->Enable_Hibernation(obj, false);
  681.     Vector3 Pos = Commands->Get_Position(obj);
  682.     GameObject *Effect = Commands->Create_Object("Obelisk Effect", Pos);
  683.     if(Effect)
  684.     {
  685.         EffectID = Commands->Get_ID(Effect);
  686.         Commands->Set_Animation_Frame(Effect, "OBL_POWERUP.OBL_POWERUP", 0);
  687.     }
  688. }
  689.  
  690. void MX0_Obelisk_Weapon_DLS::Custom(GameObject *obj,int type,int param,GameObject *sender)
  691. {
  692.     if(type == 445003)
  693.         Commands->Send_Custom_Event(obj, obj, 2, SenderID1, 0);
  694.     else if(type == 445004)
  695.         Commands->Send_Custom_Event(obj, obj, 2, SenderID2, 1);
  696.     else if(type == 445005)
  697.         Commands->Send_Custom_Event(obj, obj, 2, SenderID3, 0);
  698.     else if(type == 9035)
  699.     {
  700.         if(param == 1)
  701.             SenderID1 = Commands->Get_ID(sender);
  702.         else if(param == 2)
  703.             SenderID2 = Commands->Get_ID(sender);
  704.         else if(param == 3)
  705.             SenderID3 = Commands->Get_ID(sender);
  706.     }
  707.     else if(type == 1)
  708.     {
  709.         if(param)
  710.         {
  711.             Commands->Enable_Enemy_Seen(obj, true);
  712.             AttackEnabled = true;
  713.         }
  714.         else
  715.         {
  716.             Commands->Enable_Enemy_Seen(obj, false);
  717.             AttackEnabled = false;
  718.             ActionParamsStruct Params;
  719.             Params.Set_Basic(this, 100, 0);
  720.             Params.Set_Attack(obj, 0, 0, true);
  721.             Commands->Action_Attack(obj, Params);
  722.             Commands->Action_Reset(obj, 100);
  723.             if(EffectID)
  724.             {
  725.                 GameObject *Effect = Commands->Find_Object(EffectID);
  726.                 if(Effect)
  727.                     Commands->Set_Animation_Frame(Effect, "OBL_POWERUP.OBL_POWERUP", 0);
  728.             }
  729.         }
  730.     }
  731.     else if(type == 2)
  732.     {
  733.         if(AttackEnabled)
  734.         {
  735.             GameObject *SearchObj = Commands->Find_Object(param);
  736.             if(SearchObj)
  737.             {
  738.                 Vector3 SearchObjPos = Commands->Get_Position(SearchObj);
  739.                 Vector3 Pos = Commands->Get_Position(obj);
  740.                 float Distance = Commands->Get_Distance(SearchObjPos, Pos);
  741.                 float Max_Range = Get_Float_Parameter("Max_Range");
  742.                 if(Distance <= 15.0 || Distance >= Max_Range)
  743.                 {
  744.                     if(EffectID)
  745.                     {
  746.                         GameObject *Effect = Commands->Find_Object(EffectID);
  747.                         if(Effect)
  748.                             Commands->Set_Animation_Frame(Effect, "OBL_POWERUP.OBL_POWERUP", 0);
  749.                         Commands->Action_Reset(obj, 100);
  750.                     }
  751.                 }
  752.                 else
  753.                 {
  754.                     AttackObjID = param;
  755.                     AttackEnabled = false;
  756.                     Commands->Start_Timer(obj, this, 2.500000, 1);
  757.                     GameObject *Effect = Commands->Find_Object(EffectID);
  758.                     if(Effect)
  759.                         Commands->Set_Animation_Frame(Effect, "OBL_POWERUP.OBL_POWERUP", 1);
  760.                     Commands->Create_Sound("Obelisk_Warm_Up", Pos, obj);
  761.                 }
  762.             }
  763.         }
  764.     }
  765. }
  766.  
  767. void MX0_Obelisk_Weapon_DLS::Timer_Expired(GameObject *obj,int number)
  768. {
  769.     if(number == 1)
  770.     {
  771.         GameObject *SearchObj = Commands->Find_Object(AttackObjID);
  772.         if(SearchObj)
  773.         {
  774.             Vector3 Pos = Commands->Get_Position(obj);
  775.             Vector3 SearchObjPos = Commands->Get_Position(SearchObj);
  776.             float Distance = Commands->Get_Distance(Pos, SearchObjPos);
  777.             float Max_Range = Get_Float_Parameter("Max_Range");
  778.             if(Distance <= 15.0 || Distance >= Max_Range)
  779.             {
  780.                 if(EffectID)
  781.                 {
  782.                     GameObject *Effect = Commands->Find_Object(EffectID);
  783.                     if(Effect)
  784.                         Commands->Set_Animation_Frame(Effect, "OBL_POWERUP.OBL_POWERUP", 0);   
  785.                 }
  786.                 Commands->Action_Reset(obj, 100);
  787.                 AttackEnabled = true;
  788.             }
  789.             else
  790.             {
  791.                 ActionParamsStruct Params;
  792.                 Params.Set_Basic(this, 100, 0);
  793.                 Params.Set_Attack(SearchObj, 1000, 0, true);
  794.                 Commands->Action_Attack(obj, Params);
  795.                 AttackObjID = 0;
  796.                 Commands->Start_Timer(obj, this, 2, 2);
  797.            
  798.             }
  799.         }
  800.         else
  801.         {
  802.             if(EffectID)
  803.             {
  804.                 GameObject *Effect = Commands->Find_Object(EffectID);
  805.                 if(Effect)
  806.                     Commands->Set_Animation_Frame(Effect, "OBL_POWERUP.OBL_POWERUP", 0);   
  807.             }
  808.             Commands->Action_Reset(obj, 100);
  809.             AttackEnabled = true;
  810.         }
  811.     }
  812.     else if(number == 2)
  813.     {
  814.         if(EffectID)
  815.         {
  816.             GameObject *Effect = Commands->Find_Object(EffectID);
  817.             if(Effect)
  818.                 Commands->Set_Animation_Frame(Effect, "OBL_POWERUP.OBL_POWERUP", 0);   
  819.         }
  820.         AttackEnabled = true;
  821.     }
  822. }
  823.  
  824. void MX0_Obelisk_Weapon_DLS::Action_Complete(GameObject *obj,int action_id,ActionCompleteReason complete_reason)
  825. {
  826.     if(!action_id)
  827.         Commands->Debug_Message("Action_Complete Obelisk Firing");
  828. }
  829.  
  830. void MX0_Obelisk_Weapon_DLS::Destroyed(GameObject *obj)
  831. {
  832.     if(EffectID)
  833.     {
  834.         GameObject *Effect = Commands->Find_Object(EffectID);
  835.         if(Effect)
  836.             Commands->Set_Animation_Frame(Effect, "OBL_POWERUP.OBL_POWERUP", 0);   
  837.     }
  838. }
  839.  
  840. class MX0_GDI_Killed_DLS : public ScriptImpClass
  841. {
  842.     void Damaged(GameObject *obj,GameObject *damager,float amount);
  843.     void Killed(GameObject *obj,GameObject *killer);
  844. };
  845.  
  846. void MX0_GDI_Killed_DLS::Damaged(GameObject *obj,GameObject *damager,float amount)
  847. {
  848.     // Probably Damaged, but I'm not entirely sure.
  849.     GameObject *SearchObj = Find_Object(1500020);
  850.     if(damager == SearchObj && SearchObj)
  851.         Commands->Apply_Damage(obj, 50000, "STEEL", 0);
  852. }
  853.  
  854. void MX0_GDI_Killed_DLS::Killed(GameObject *obj,GameObject *killer)
  855. {
  856.     // Probably Killed.
  857.     int Unit_ID = Get_Int_Parameter(a1, "Unit_ID") - 1;
  858.     if(Unit_ID)
  859.     {
  860.         if(Unit_ID - 1)
  861.         {
  862.             if (!(Unit_ID - 2))
  863.             {
  864.                 GameObject *SearchObj = Find_Object(1500017);
  865.                 Commands->Send_Custom_Event(obj, SearchObj, 445019, 1, 1);
  866.             }
  867.         }
  868.         else
  869.         {
  870.             Vector3 Pos = Commands->Get_Position(obj);
  871.             GameObject *DesMed = Commands->Create_Object("MX0_GDI_Medium_Tank_Destroyed", Pos);
  872.             Commands->Set_Facing(DesMed, Commands->Get_Facing(obj));
  873.         }
  874.     }
  875.     else
  876.     {
  877.         Vector3 Pos = Commands->Get_Position(obj);
  878.         GameObject *Officer = Commands->Create_Object("GDI_Minigunner_1Off", Pos);
  879.         Commands->Set_Facing(Officer, 0);
  880.         Commands->Attach_Script(Officer, "M00_Send_Object_ID", "1500020, 2, 0.0f");
  881.         Commands->Attach_Script(Officer, "MX0_GDI_Soldier_DLS", "0,0,0,0,0.0f");
  882.         Commands->Send_Custom_Event(obj, Officer, 445002, 445011, 0);
  883.         GameObject *SearchObj = Commands->Find_Object(1500020);
  884.         Commands->Send_Custom_Event(obj, SearchObj, 445004, 1, 1065353216);
  885.     }
  886. }
  887.  
  888. class MX0_GDI_Soldier_DLS : public ScriptImpClass
  889. {
  890.     void Register_Auto_Save_Variables();
  891.     void Created(GameObject *obj);
  892.     void Enemy_Seen(GameObject *obj,GameObject *enemy);
  893.     void Custom(GameObject *obj,int type,int param,GameObject *sender);
  894.     void Timer_Expired(GameObject *obj,int number);
  895.     void Action_Complete(GameObject *obj,int action_id,ActionCompleteReason complete_reason);
  896. };
  897.  
  898. void MX0_GDI_Soldier_DLS::Register_Auto_Save_Variables()
  899. {
  900.     Auto_Save_Variable(&AttackArray, 16, 1);
  901.     Auto_Save_Variable(&AttackIndex, 4, 2);
  902.     Auto_Save_Variable(&Speed, 4, 3);
  903.     Auto_Save_Variable(&MoveAttemptCount, 4, 4);
  904. }
  905.  
  906. void MX0_GDI_Soldier_DLS::Created(GameObject *obj)
  907. {
  908.     Commands->Enable_Enemy_Seen(obj, true);
  909.     Commands->Enable_Engine(obj, true);
  910.     AttackArray[0] = Get_Int_Parameter("Attack_Loc0");
  911.     AttackArray[1] = Get_Int_Parameter("Attack_Loc1");
  912.     AttackArray[2] = Get_Int_Parameter("Attack_Loc2");
  913.     AttackArray[3] = Get_Int_Parameter("Attack_Loc3");
  914.     AttackIndex = 0;
  915.     Speed = Get_Float_Parameter("Speed");
  916.     ActionParamsStruct Params;
  917.     Params.Set_Basic(this, 95, 10);
  918.     Params.Set_Attack(Commands->Get_Position(Commands->Find_Object(AttackArray[0])), 1000, 0, true);
  919.     Params.MoveSpeed = Speed;
  920.     Params.AttackForceFire = true;
  921.     Commands->Action_Attack(obj, Params);
  922. }
  923.  
  924. void MX0_GDI_Soldier_DLS::Enemy_Seen(GameObject *obj,GameObject *enemy)
  925. {
  926.     int EnemyID = Commands->Get_ID(enemy);
  927.     int ID = Commands->Get_ID(obj);
  928.     Commands->Debug_Message("ID %d sees Enemy ID %d \n", ID, EnemyID);
  929.     ActionParamsStruct Params;
  930.     Params.Set_Basic(this, 95, 10);
  931.     Params.Set_Attack(enemy, 200.000000, 5.000000, true);
  932.     Params.MoveSpeed = Speed;
  933.     Params.MoveArrivedDistance = 5.000000;
  934.     Commands->Action_Attack(obj, Params);
  935. }
  936.  
  937. void MX0_GDI_Soldier_DLS::Custom(GameObject *obj,int type,int param,GameObject *sender)
  938. {
  939.     if(type == 445006)
  940.     {
  941.         AttackIndex = param;
  942.         ActionParamsStruct Params;
  943.         Params.Set_Basic(this, 95, 10);
  944.         Params.Set_Attack(Commands->Get_Position(Commands->Find_Object(AttackArray[AttackIndex])), 1000, 0, true);
  945.         Params.MoveSpeed = Speed;
  946.         Params.MoveArrivedDistance = 5.000000;
  947.         Params.AttackForceFire = true;
  948.         Params.MoveCrouched = Commands->Get_Random_Int(0, 1);
  949.         Commands->Action_Attack(obj, Params);
  950.         Commands->Debug_Message("Attack_Loc [%d] = %d \n", AttackIndex, AttackArray[AttackIndex]);
  951.     }
  952.     else if(type == 445002)
  953.     {
  954.         switch(param)
  955.         {
  956.             case 445011:
  957.                 Commands->Innate_Disable(obj);
  958.                 ActionParamsStruct Params;
  959.                 Params.Set_Basic(this, 100, 1);
  960.                 Params.Set_Animation("H_A_A0A0_L51", true);
  961.                 Commands->Action_Play_Animation(obj, Params);
  962.                 int MX0_A04_CON019 = Commands->Create_Conversation("MX0_A04_CON019", 100, 200, false);
  963.                 Commands->Join_Conversation(obj, MX0_A04_CON019, false, true, true);
  964.                 Commands->Start_Conversation(MX0_A04_CON019, 10);
  965.                 break;
  966.             case 445012:
  967.                 int MX0_A04_CON003 = Commands->Create_Conversation("MX0_A04_CON003", 100, 200, false);
  968.                 Commands->Join_Conversation(obj, MX0_A04_CON003, false, true, true);
  969.                 Commands->Start_Conversation(MX0_A04_CON003, 445012);
  970.                 Commands->Fade_Background_Music("Level 0 Nod base.mp3", 2, 2);
  971.                 break;
  972.             case 445013:
  973.                 int MX0_A04_CON004 = Commands->Create_Conversation("MX0_A04_CON004", 100, 200, false);
  974.                 Commands->Join_Conversation(obj, MX0_A04_CON004, false, true, true);
  975.                 Commands->Start_Conversation(MX0_A04_CON004, 445013);
  976.                 break;
  977.             case 445014:
  978.                 int MX0_A04_CON006 = Commands->Create_Conversation("MX0_A04_CON006", 100, 200, false);
  979.                 Commands->Join_Conversation(obj, MX0_A04_CON006, false, true, true);
  980.                 Commands->Start_Conversation(MX0_A04_CON006, 445014);
  981.                 break;
  982.             case 445015:
  983.                 int MX0_A04_CON007 = Commands->Create_Conversation("MX0_A04_CON007", 100, 200, false);
  984.                 Commands->Join_Conversation(obj, MX0_A04_CON007, false, true, true);
  985.                 Commands->Start_Conversation(MX0_A04_CON007, 445015);
  986.                 break;
  987.             case 445016:
  988.                 int MX0_A04_CON008 = Commands->Create_Conversation("MX0_A04_CON008", 100, 200, false);
  989.                 Commands->Join_Conversation(obj, MX0_A04_CON008, false, true, true);
  990.                 Commands->Start_Conversation(MX0_A04_CON008, 445016);
  991.                 break;
  992.             case 445017:
  993.                 int MX0_A04_CON009 = Commands->Create_Conversation("MX0_A04_CON009", 100, 200, false);
  994.                 Commands->Join_Conversation(obj, MX0_A04_CON009, false, true, true);
  995.                 Commands->Start_Conversation(MX0_A04_CON009, 445017);
  996.                 break;
  997.             case 445021:
  998.                 int MX0_A04_CON014 = Commands->Create_Conversation("MX0_A04_CON014", 100, 200, false);
  999.                 Commands->Join_Conversation(obj, MX0_A04_CON014, false, true, true);
  1000.                 Commands->Start_Conversation(MX0_A04_CON014, 445021);
  1001.                 break;
  1002.             default:
  1003.                 break;
  1004.         }
  1005.     }
  1006. }
  1007.  
  1008. void MX0_GDI_Soldier_DLS::Timer_Expired(GameObject *obj,int number)
  1009. {
  1010.     if(number == 445006) // never happens
  1011.     {
  1012.         ActionParamsStruct Params;
  1013.         Params.Set_Basic(this, 95, 445006);
  1014.         Params.Set_Attack(Commands->Get_Position(Commands->Find_Object(AttackArray[AttackIndex])), 1000, 0, true);
  1015.         Params.MoveSpeed = Speed;
  1016.         Params.MoveArrivedDistance = 5.000000;
  1017.         Params.AttackForceFire = true;
  1018.         Commands->Action_Attack(obj, Params);
  1019.     }
  1020. }
  1021.  
  1022. void MX0_GDI_Soldier_DLS::Action_Complete(GameObject *obj,int action_id,ActionCompleteReason complete_reason)
  1023. {
  1024.     if(action_id == 445006) // this actually never happens.
  1025.     {
  1026.         if(complete_reason && MoveAttemptCount < 4)
  1027.         {
  1028.             MoveAttemptCount++;
  1029.             Commands->Start_Timer(obj, this, 4, 445006);
  1030.             Commands->Debug_Message("Attempt %d for MX0_SOLDIER_MOVE on loc %d"); // They didnt put the variables in here.
  1031.         }
  1032.     }
  1033.     else if(action_id == 10)
  1034.         Commands->Debug_Message("Action_Complete");
  1035. }
  1036.  
  1037. class MX0_Gun_Emplacement_DLS : public ScriptImpClass
  1038. {
  1039.     void Custom(GameObject *obj,int type,int param,GameObject *sender);
  1040.     void Timer_Expired(GameObject *obj,int number);
  1041.     bool AttackingRight;
  1042. };
  1043.  
  1044. void MX0_Gun_Emplacement_DLS::Custom(GameObject *obj,int type,int param,GameObject *sender)
  1045. {
  1046.     if(type == 445002)
  1047.         Timer_Expired(obj, 0); // Direct call upon Timer_Expired event of this script.
  1048. }
  1049.  
  1050. void MX0_Gun_Emplacement_DLS::Timer_Expired(GameObject *obj,int number)
  1051. {
  1052.     if(!number)
  1053.     {
  1054.         GameObject *AttackObj = 0;
  1055.         if(AttackingRight)
  1056.         {
  1057.             AttackingRight = false;
  1058.             AttackObj = Commands->Find_Object(Get_Int_Parameter("Left_Point"));
  1059.         }
  1060.         else
  1061.         {
  1062.             AttackingRight = true;
  1063.             AttackObj = Commands->Find_Object(Get_Int_Parameter("Right_Point"));
  1064.         }
  1065.         ActionParamsStruct Params;
  1066.         Params.Set_Basic(this, 95, 10);
  1067.         Params.Set_Attack(AttackObj, 1000, 0, true);
  1068.         Params.AttackForceFire = true;
  1069.         Commands->Action_Attack(obj, Params);
  1070.         Commands->Start_Timer(obj, this, 4, 0);
  1071.     }
  1072. }
  1073.  
  1074. class MX0_Nod_RocketSoldier_DLS : public ScriptImpClass
  1075. {
  1076.     void Created(GameObject *obj);
  1077.     void Custom(GameObject *obj,int type,int param,GameObject *sender);
  1078.     void Action_Complete(GameObject *obj,int action_id,ActionCompleteReason complete_reason);
  1079.     void Enemy_Seen(GameObject *obj,GameObject *enemy);
  1080. };
  1081.  
  1082. void MX0_Nod_RocketSoldier_DLS::Created(GameObject *obj)
  1083. {
  1084.     ActionParamsStruct Params;
  1085.     Params.Set_Basic(this, 95, 0);
  1086.     Params.Set_Movement(Commands->Find_Object(Get_Int_Parameter("Stationary_Point")), 0.800000, 1.000000);
  1087.     Commands->Action_Goto(obj, Params);
  1088. }
  1089.  
  1090. void MX0_Nod_RocketSoldier_DLS::Custom(GameObject *obj,int type,int param,GameObject *sender)
  1091. {
  1092.     if(type == 445002)
  1093.     {
  1094.         ActionParamsStruct Params;
  1095.         Params.Set_Basic(this, 95, 10);
  1096.         Params.Set_Attack(Commands->Find_Object(param), 150.000000, 0, true);
  1097.         Commands->Action_Attack(obj, Params);
  1098.     }
  1099. }
  1100.  
  1101. void MX0_Nod_RocketSoldier_DLS::Action_Complete(GameObject *obj,int action_id,ActionCompleteReason complete_reason)
  1102. {
  1103.     if(!action_id && !complete_reason)
  1104.         Commands->Set_Innate_Is_Stationary(obj, true);
  1105. }
  1106.  
  1107. void MX0_Nod_RocketSoldier_DLS::Enemy_Seen(GameObject *obj,GameObject *enemy)
  1108. {
  1109.     // Most likely Enemy_Seen but its nowhere in this script activated, maybe in another script?
  1110.     ActionParamsStruct Params;
  1111.     Params.Set_Basic(this, 95, 10);
  1112.     Params.Set_Attack(enemy, 150.000000, 0, true);
  1113.     Commands->Action_Attack(obj, Params);
  1114. }
  1115.  
  1116. class MX0_SAM_DLS : public ScriptImpClass
  1117. {
  1118.     void Custom(GameObject *obj,int type,int param,GameObject *sender);
  1119. };
  1120.  
  1121. void MX0_SAM_DLS::Custom(GameObject *obj,int type,int param,GameObject *sender)
  1122. {
  1123.     if(type == 445007)
  1124.     {
  1125.         ActionParamsStruct Params;
  1126.         Params.Set_Basic(this, 95, 1);
  1127.         Params.Set_Attack(Commands->Find_Object(1500081), 250.000000, 0, true);
  1128.         Params.AttackForceFire = true;
  1129.         Commands->Action_Attack(obj, Params);
  1130.     }
  1131. }
  1132.  
  1133. class MX0_Nod_Bunker_DLS : public ScriptImpClass
  1134. {
  1135.     void Enemy_Seen(GameObject *obj, GameObject *enemy);
  1136. };
  1137.  
  1138. void MX0_Nod_Bunker_DLS::Enemy_Seen(GameObject *obj, GameObject *enemy)
  1139. {
  1140.     // VERY unsure if this is Enemy_Seen i had no clues to find it out really...
  1141.     ActionParamsStruct Params;
  1142.     Params.Set_Basic(this, 95, 10);
  1143.     Params.Set_Attack(enemy, 1000, 0, false);
  1144.     Commands->Action_Attack(obj, Params);
  1145. }
  1146.  
  1147. class MX0_Plant_Ion_Beacon_DLS : public ScriptImpClass
  1148. {
  1149.     void Created(GameObject *obj);
  1150. };
  1151.  
  1152. void MX0_Plant_Ion_Beacon_DLS::Created(GameObject *obj)
  1153. {
  1154.     Commands->Give_PowerUp(obj, "POW_IonCannonBeacon_Ai", false);
  1155.     Commands->Select_Weapon(obj, "Weapon_IonCannonBeacon_Ai");
  1156.     ActionParamsStruct Params;
  1157.     Params.Set_Basic(this, 95, 10);
  1158.     Params.Set_Attack(Commands->Get_Position(obj), 5.000000, 0, true);
  1159.     Params.AttackForceFire = true;
  1160.     Commands->Action_Attack(obj, Params);
  1161. }
  1162.  
  1163. class MX0_Explosive_Barrels_DLS : public ScriptImpClass
  1164. {
  1165.     void Sound_Heard(GameObject *obj,const CombatSound & sound);
  1166.     void Killed(GameObject *obj,GameObject *killer);
  1167. };
  1168.  
  1169. void MX0_Explosive_Barrels_DLS::Sound_Heard(GameObject *obj,const CombatSound & sound)
  1170. {
  1171.     // Probably this event so the barrels around the barrel being shot explode aswell.
  1172.     if(sound.sound == Get_Int_Parameter("Logical_Sound"))
  1173.         Commands->Apply_Damage(obj, 50000, "STEEL", 0);
  1174. }
  1175.  
  1176. void MX0_Explosive_Barrels_DLS::Killed(GameObject *obj,GameObject *killer)
  1177. {
  1178.     Vector3 Pos = Commands->Get_Position(obj);
  1179.     Commands->Create_Explosion("Air Explosions Twiddler", Pos, obj);
  1180.     Commands->Create_Logical_Sound(obj, Get_Int_Parameter("Logical_Sound"), Pos, Get_Float_Parameter("Radius"));
  1181. }
  1182.  
  1183. class MX0_MissionStart_DME : public ScriptImpClass
  1184. {
  1185.     void Register_Auto_Save_Variables();
  1186.     void Created(GameObject *obj);
  1187.     void Action_Complete(GameObject *obj,int action_id,ActionCompleteReason complete_reason);
  1188.     void Timer_Expired(GameObject *obj,int number);
  1189.     void Custom(GameObject *obj,int type,int param,GameObject *sender);
  1190.     int ParamObjID1;
  1191.     int ParamObjID2;
  1192.     bool DidGotParamObjID1;
  1193.     int ParamObjID3;
  1194.     int Sniper1ID;
  1195.     int Sniper2ID;
  1196.     int ConversationTwiddler;
  1197.     bool DidStartMX0CON006;
  1198. };
  1199.  
  1200. void MX0_MissionStart_DME::Register_Auto_Save_Variables()
  1201. {
  1202.     Auto_Save_Variable(&ParamObjID1, 4, 1);
  1203.     Auto_Save_Variable(&ParamObjID2, 4, 2);
  1204.     Auto_Save_Variable(&DidGotParamObjID1, 1, 3);
  1205.     Auto_Save_Variable(&ParamObjID3, 4, 4);
  1206.     Auto_Save_Variable(&Sniper1ID, 4, 5);
  1207.     Auto_Save_Variable(&Sniper2ID, 4, 6);
  1208.     Auto_Save_Variable(&ConversationTwiddler, 4, 7);
  1209.     Auto_Save_Variable(&DidStartMX0CON006, 1, 8);
  1210. }
  1211.  
  1212. void MX0_MissionStart_DME::Created(GameObject *obj)
  1213. {
  1214.     DidStartMX0CON006 = false;
  1215.     Vector3 Pos = Commands->Get_Position(obj);
  1216.     GameObject *Star = Commands->Get_A_Star(Pos);
  1217.     Commands->Select_Weapon(Star, "");
  1218.     Commands->Fade_Background_Music("renegade_intro_no_vox.mp3", 0, 1);
  1219.     GameObject *CinObject = Commands->Create_Object("Invisible_Object", Vector3(0,0,0)); // Or Commands->Get_Position(Commands->Find_Object(1200001))
  1220.     Commands->Attach_Script(CinObject, "Test_Cinematic", "X00_Intro.txt");
  1221. }
  1222.  
  1223. void MX0_MissionStart_DME::Action_Complete(GameObject *obj,int action_id,ActionCompleteReason complete_reason)
  1224. {
  1225.     if(action_id == 100001)
  1226.         Commands->Start_Timer(obj, this, 2, 119);
  1227.     else if(action_id == 100002)
  1228.         Commands->Start_Timer(obj, this, 2, 120);
  1229.     else if(action_id == 100004)
  1230.     {
  1231.         GameObject *SearchObj = Commands->Find_Object(1200015);
  1232.         Commands->Send_Custom_Event(obj, SearchObj, 110, 0, 0);
  1233.     }
  1234. }
  1235.  
  1236. void MX0_MissionStart_DME::Timer_Expired(GameObject *obj,int number)
  1237. {
  1238.     if(number == 142)
  1239.     {
  1240.         int MX0_ENGINEER1_048 = Commands->Create_Conversation("MX0_ENGINEER1_048", 97, 2000, false);
  1241.         GameObject *SearchObj = Commands->Find_Object(ParamObjID1);
  1242.         Commands->Join_Conversation(SearchObj, MX0_ENGINEER1_048, false, true, true);
  1243.         Vector3 Pos = Commands->Get_Position(obj);
  1244.         GameObject *Star = Commands->Get_A_Star(Pos);
  1245.         Commands->Join_Conversation(Star, MX0_ENGINEER1_048, true, true, true);
  1246.         Commands->Start_Conversation(MX0_ENGINEER1_048, 100048);
  1247.         Commands->Monitor_Conversation(obj, MX0_ENGINEER1_048);
  1248.     }
  1249.     else if(number == 136)
  1250.     {
  1251.         GameObject *SearchObj1 = Commands->Find_Object(Sniper1ID);
  1252.         if(SearchObj1)
  1253.         {
  1254.             GameObject *SearchObj2 = Commands->Find_Object(ParamObjID1);
  1255.             Commands->Send_Custom_Event(obj, SearchObj2, 136, Sniper1ID, 0);
  1256.             GameObject *SearchObj3 = Commands->Find_Object(ParamObjID2);
  1257.             Commands->Send_Custom_Event(obj, SearchObj3, 136, Sniper1ID, 0);
  1258.             Commands->Start_Timer(obj, this, 3, 136);
  1259.         }
  1260.     }
  1261.     else if(number == 134)
  1262.     {
  1263.         GameObject *SearchObj = Commands->Find_Object(1100000);
  1264.         Commands->Send_Custom_Event(obj, SearchObj, 202, 0, 0);
  1265.     }
  1266.     else if(number == 133)
  1267.     {
  1268.         GameObject *SearchObj1 = Commands->Find_Object(1200043);
  1269.         Vector3 SearchObj1Pos = Commands->Get_Position(SearchObj1);
  1270.         GameObject *SearchObj2 = Commands->Find_Object(1200044);
  1271.         Vector3 SearchObj2Pos = Commands->Get_Position(SearchObj2);
  1272.         GameObject *Sniper1 = Commands->Create_Object("NOD_Minigunner_2SF", SearchObj1Pos);
  1273.         Commands->Attach_Script(Sniper1, "M00_Soldier_Powerup_Disable", "");
  1274.         Commands->Attach_Script(Sniper1, "M00_Send_Object_ID", "1200001, 1, 0.0f");
  1275.         Commands->Attach_Script(Sniper1, "MX0_SniperAction", "1200045");
  1276.         Commands->Attach_Script(Sniper1, "MX0_KillNotify", "");
  1277.         Sniper1ID = Commands->Get_ID(Sniper1);
  1278.         GameObject *Sniper2 = Commands->Create_Object("NOD_Minigunner_2SF", SearchObj2Pos);
  1279.         Commands->Attach_Script(Sniper2, "M00_Soldier_Powerup_Disable", "");
  1280.         Commands->Attach_Script(Sniper2, "M00_Send_Object_ID", "1200001, 2, 0.0f");
  1281.         Commands->Attach_Script(Sniper2, "MX0_SniperAction", "1200045");
  1282.         Sniper2ID = Commands->Get_ID(Sniper2);
  1283.     }
  1284.     else if(number == 124)
  1285.     {
  1286.         GameObject *SearchObj1 = Commands->Find_Object(Sniper1ID);
  1287.         if(SearchObj1)
  1288.         {
  1289.             GameObject *SearchObj2 = Commands->Find_Object(1200001);
  1290.             Commands->Send_Custom_Event(obj, SearchObj2, 100007, 0, 0);
  1291.         }
  1292.     }
  1293.     else if(number == 119)
  1294.         Commands->Send_Custom_Event(obj, obj, 100002, 0, 0); // Right..... its there and its no mistake but its just inefficient.
  1295.     else if(number == 120)
  1296.     {
  1297.         if(ParamObjID3 <= 1)
  1298.         {
  1299.             Commands->Send_Custom_Event(obj, obj, 100003, 0, 0);
  1300.             Commands->Start_Timer(obj, this, 5, 120);
  1301.         }
  1302.     }
  1303.     else if(number == 127)
  1304.         Commands->Set_HUD_Help_Text(8576, Vector3(0.196000, 0.882000, 0.196000));
  1305.     else if(number == 128)
  1306.         Commands->Set_HUD_Help_Text(8577, Vector3(0.196000, 0.882000, 0.196000));
  1307.     else if(number == 118)
  1308.         Commands->Set_HUD_Help_Text(8578, Vector3(0.196000, 0.882000, 0.196000));
  1309.     else if(number == 117)
  1310.     {
  1311.         Commands->Set_Background_Music("Level0_pt1_music.mp3");
  1312.         Vector3 Pos = Commands->Get_Position(obj);
  1313.         GameObject *Star = Commands->Get_A_Star(Pos);
  1314.         Commands->Give_PowerUp(Star, "POW_AutoRifle_Player", false);
  1315.         Commands->Give_PowerUp(Star, "POW_AutoRifle_Player", false);
  1316.         Commands->Select_Weapon(Star, "Weapon_AutoRifle_Player");
  1317.         Commands->Attach_Script(Star, "Havoc_Script", "");
  1318.     }
  1319. }
  1320.  
  1321. void MX0_MissionStart_DME::Custom(GameObject *obj,int type,int param,GameObject *sender)
  1322. {
  1323.     if(type == 138)
  1324.     {
  1325.         if(!DidStartMX0CON006)
  1326.         {
  1327.             int MX0CON018 = Commands->Create_Conversation("MX0CON018", 97, 2000, false);
  1328.             GameObject *SearchObj = Commands->Find_Object(ParamObjID1);
  1329.             Commands->Join_Conversation(SearchObj, MX0CON018, false, true, true);
  1330.             Vector3 Pos = Commands->Get_Position(obj);
  1331.             GameObject *Star = Commands->Get_A_Star(Pos);
  1332.             Commands->Join_Conversation(Star, MX0CON018, true, true, true);
  1333.             Commands->Start_Conversation(MX0CON018, 100018);
  1334.             Commands->Monitor_Conversation(obj, MX0CON018);
  1335.             Commands->Start_Timer(obj, this, 3, 142);
  1336.         }
  1337.     }
  1338.     else if(type == 136)
  1339.         Commands->Start_Timer(obj, this, 2, 136);
  1340.     else if(type == 114)
  1341.     {
  1342.         GameObject *SearchObj1 = Commands->Find_Object(Sniper1ID);
  1343.         Commands->Send_Custom_Event(obj, SearchObj1, 114, 0, 0);
  1344.         GameObject *SearchObj2 = Commands->Find_Object(Sniper2ID);
  1345.         Commands->Send_Custom_Event(obj, SearchObj2, 114, 0, 0);
  1346.     }
  1347.     else if(type == 223)
  1348.          Commands->Send_Custom_Event(obj, sender, 223, Sniper1ID, 0);
  1349.     else if(type == 224)
  1350.         Commands->Send_Custom_Event(obj, sender, 224, Sniper2ID, 0);
  1351.     else if(type == 9035)
  1352.     {
  1353.         if(param == 1)
  1354.             Sniper1ID = Commands->Get_ID(sender);
  1355.         else
  1356.         {
  1357.             Sniper2ID = Commands->Get_ID(sender);
  1358.             Commands->Start_Timer(obj, this, 2, 134);
  1359.         }
  1360.     }
  1361.     else if(type == 99)
  1362.     {
  1363.         ParamObjID3 = 0;
  1364.         // These are all CORRECT floats.
  1365.         GameObject *Blocker1 = Commands->Create_Object("Large_Blocker", Vector3(-148.070999f, -31.267000f, -0.306000f));
  1366.         Commands->Set_Facing(Blocker1, -30.000000f);
  1367.         Commands->Set_Is_Rendered(Blocker1, false);
  1368.         GameObject *Blocker2 = Commands->Create_Object("Large_Blocker", Vector3(-148.233994f, -31.542000f, 1.357000f));
  1369.         Commands->Set_Facing(Blocker2, -30.000000f);
  1370.         Commands->Set_Is_Rendered(Blocker2, false);
  1371.         Commands->Start_Timer(obj, this, 0.500000, 117);
  1372.         Commands->Start_Timer(obj, this, 3, 127);
  1373.         Commands->Start_Timer(obj, this, 6, 128);
  1374.         Commands->Start_Timer(obj, this, 9, 118);
  1375.         Commands->Start_Timer(obj, this, 1, 133);
  1376.     }
  1377.     else if(type == 130)
  1378.     {
  1379.         GameObject *SearchObj1 = Commands->Find_Object(ParamObjID1);
  1380.         Commands->Send_Custom_Event(obj, SearchObj1, 131, 0, 0);
  1381.         GameObject *SearchObj2 = Commands->Find_Object(ParamObjID2);
  1382.         Commands->Send_Custom_Event(obj, SearchObj2, 131, 0, 0);
  1383.     }
  1384.     else if(type == 132)
  1385.     {
  1386.         GameObject *SearchObj = Commands->Find_Object(ParamObjID1);
  1387.         Commands->Send_Custom_Event(obj, SearchObj, 132, 0, 0);
  1388.     }
  1389.     else if(type == 111)
  1390.     {
  1391.         GameObject *SearchObj1 = Commands->Find_Object(ParamObjID1);
  1392.         Commands->Send_Custom_Event(obj, SearchObj1, 112, 0, 0);
  1393.         GameObject *SearchObj2 = Commands->Find_Object(ParamObjID2);
  1394.         Commands->Send_Custom_Event(obj, SearchObj2, 112, 0, 0);
  1395.     }
  1396.     else if(type == 102)
  1397.     {
  1398.         ParamObjID3 = param;
  1399.         GameObject *SearchObj1 = Commands->Find_Object(ParamObjID1);
  1400.         Commands->Send_Custom_Event(obj, SearchObj1, 108, param, 0);
  1401.         GameObject *SearchObj2 = Commands->Find_Object(ParamObjID2);
  1402.         Commands->Send_Custom_Event(obj, SearchObj2, 108, param, 0);
  1403.     }
  1404.     else if(type == 103)
  1405.     {
  1406.         if(DidGotParamObjID1)
  1407.             ParamObjID2 = param; // Engineer2
  1408.         else
  1409.         {
  1410.             DidGotParamObjID1 = true;
  1411.             ParamObjID1 = param; // Engineer1
  1412.         }
  1413.     }
  1414.     else if(type == 104)
  1415.     {
  1416.         if(param == 1)
  1417.             Commands->Send_Custom_Event(obj, sender, 105, ParamObjID1, 0);
  1418.         else if(param == 2)
  1419.             Commands->Send_Custom_Event(obj, sender, 106, ParamObjID2, 0);
  1420.     }
  1421.     else if(type == 100001)
  1422.     {
  1423.         int MX0CON001 = Commands->Create_Conversation("MX0CON001", 99, 2000, false);
  1424.         GameObject *SearchObj = Commands->Find_Object(ParamObjID2);
  1425.         Commands->Join_Conversation(SearchObj, MX0CON001, false, true, true);
  1426.         Commands->Start_Conversation(MX0CON001, 100001);
  1427.         Commands->Monitor_Conversation(obj, MX0CON001);
  1428.     }
  1429.     else if(number == 100002)
  1430.     {
  1431.         int MX0CON002 = Commands->Create_Conversation("MX0CON002", 97, 2000, false);
  1432.         GameObject *SearchObj1 = Commands->Find_Object(ParamObjID1);
  1433.         Commands->Join_Conversation(SearchObj1, MX0CON002, false, true, true);
  1434.         Vector3 Pos = Commands->Get_Position(obj);
  1435.         GameObject *Star = Commands->Get_A_Star(Pos);
  1436.         Commands->Join_Conversation_Facing(SearchObj1, MX0CON002, Commands->Get_ID(Star));
  1437.         GameObject *SearchObj2 = Commands->Find_Object(ParamObjID2);
  1438.         Commands->Join_Conversation(SearchObj2, MX0CON002, false, true, true);
  1439.         Commands->Join_Conversation_Facing(SearchObj2, MX0CON002, Commands->Get_ID(Star));
  1440.         Commands->Join_Conversation(Star, MX0CON002, true, true, true);
  1441.         Commands->Start_Conversation(MX0CON002, 100002);
  1442.         Commands->Monitor_Conversation(obj, MX0CON002);
  1443.     }
  1444.     else if(number == 100003)
  1445.     {
  1446.         const char *MX0CON003_Conversations[4] =
  1447.         {
  1448.             "MX0CON003",
  1449.             "MX0CON003alt1",
  1450.             "MX0CON003alt2",
  1451.             "MX0CON003alt3"
  1452.         };
  1453.         int Random = Commands->Get_Random_Int(0, 4);
  1454.         int Conversation = Commands->Create_Conversation(MX0CON003_Conversations[Random], 97, 2000, false);
  1455.         GameObject *SearchObj = Commands->Find_Object(ParamObjID2);
  1456.         Commands->Join_Conversation(SearchObj, Conversation, false, true, true);
  1457.         Vector3 Pos = Commands->Get_Position(obj);
  1458.         GameObject *Star = Commands->Get_A_Star(Pos);
  1459.         Commands->Join_Conversation_Facing(SearchObj, Conversation, Commands->Get_ID(Star));
  1460.         Commands->Join_Conversation(Star, Conversation, true, true, true);
  1461.         Commands->Start_Conversation(Conversation, 100003);
  1462.         Commands->Monitor_Conversation(obj, Conversation);
  1463.     }
  1464.     else if(number == 100004)
  1465.     {
  1466.         int MX0CON004 = Commands->Create_Conversation("MX0CON004", 95, 2000, false);
  1467.         GameObject *SearchObj1 = Commands->Find_Object(ParamObjID1);
  1468.         Commands->Join_Conversation(SearchObj1, MX0CON004, true, true, true);
  1469.         Vector3 Pos = Commands->Get_Position(obj);
  1470.         GameObject *Star = Commands->Get_A_Star(Pos);
  1471.         Commands->Join_Conversation_Facing(SearchObj, MX0CON004, Commands->Get_ID(Star));
  1472.         Commands->Join_Conversation(Star, MX0CON004, true, true, true);
  1473.         Commands->Start_Conversation(MX0CON004, 100004);
  1474.         Commands->Monitor_Conversation(obj, MX0CON004);
  1475.         Commands->Innate_Disable(SearchObj1);
  1476.         GameObject *SearchObj2 = Commands->Find_Object(ParamObjID2);
  1477.         Commands->Innate_Disable(SearchObj2);
  1478.     }
  1479.     else if(number == 100005)
  1480.     {
  1481.         int MX0CON005 = Commands->Create_Conversation("MX0CON005", 97, 2000, false);
  1482.         GameObject *SearchObj = Commands->Find_Object(ParamObjID2);
  1483.         Commands->Join_Conversation(SearchObj, MX0CON005, false, true, true);
  1484.         Vector3 Pos = Commands->Get_Position(obj);
  1485.         GameObject *Star = Commands->Get_A_Star(Pos);
  1486.         Commands->Join_Conversation_Facing(SearchObj, MX0CON005, Commands->Get_ID(Star));
  1487.         Commands->Join_Conversation(Star, MX0CON005, true, true, true);
  1488.         Commands->Start_Conversation(MX0CON005, 100005);
  1489.         Commands->Monitor_Conversation(obj, MX0CON005);
  1490.     }
  1491.     else if(number == 100006)
  1492.     {
  1493.         GameObject *SearchObj1 = Commands->Find_Object(Sniper1ID);
  1494.         if(SearchObj1)
  1495.         {
  1496.             GameObject *SearchObj2 = Commands->Find_Object(ParamObjID2);
  1497.             Commands->Send_Custom_Event(obj, SearchObj2, 125, 0, 0);
  1498.             Commands->Start_Timer(obj, this, 5, 124);
  1499.             int MX0CON006 = Commands->Create_Conversation("MX0CON006", 97, 2000, false);
  1500.             Vector3 Pos = Commands->Get_Position(obj);
  1501.             GameObject *Star = Commands->Get_A_Star(Pos);
  1502.             Commands->Join_Conversation_Facing(SearchObj, MX0CON006, Commands->Get_ID(Star));
  1503.             Commands->Join_Conversation(Star, MX0CON006, true, true, true);
  1504.             Commands->Start_Conversation(MX0CON006, 100006);
  1505.             Commands->Monitor_Conversation(obj, MX0CON006);
  1506.             DidStartMX0CON006 = true;
  1507.         }
  1508.     }
  1509.     else if(type == 100007)
  1510.     {
  1511.         if(Commands->Find_Object(Sniper1ID))
  1512.         {
  1513.             const char *MX0CON0_Conversations[6] =
  1514.             {
  1515.                 "MX0CON012",
  1516.                 "MX0CON013",
  1517.                 "MX0CON014",
  1518.                 "MX0CON015",
  1519.                 "MX0CON016",
  1520.                 "MX0CON017"
  1521.             };
  1522.             GameObject *SearchObj = 0;
  1523.             if(ConversationTwiddler == 0 || ConversationTwiddler == 2 || ConversationTwiddler == 4)
  1524.                 GameObject *SearchObj = Commands->Find_Object(ParamObjID1);
  1525.             if(ConversationTwiddler == 1 || ConversationTwiddler == 3 || ConversationTwiddler == 5)
  1526.                 GameObject *SearchObj = Commands->Find_Object(ParamObjID2);
  1527.             int Conversation = Commands->Create_Conversation(MX0CON0_Conversations[ConversationTwiddler], 97, 2000, false);
  1528.             Commands->Join_Conversation(SearchObj, Conversation, false, true, true);
  1529.             Vector3 Pos = Commands->Get_Position(obj);
  1530.             GameObject *Star = Commands->Get_A_Star(Pos);
  1531.             Commands->Join_Conversation(Star, Conversation, true, true, true);
  1532.             Commands->Start_Conversation(Conversation, 100007);
  1533.             Commands->Monitor_Conversation(obj, Conversation);
  1534.             if(ConversationTwiddler < 5)
  1535.                 ConversationTwiddler++;
  1536.             if(ConversationTwiddler >= 5)
  1537.                 ConversationTwiddler = 0;
  1538.             Commands->Start_Timer(obj, this, 5, 124);
  1539.         }
  1540.     }
  1541. }
  1542.  
  1543. class MX0_Engineer1 : public ScriptImpClass
  1544. {
  1545.     void Created(GameObject *obj);
  1546.     void Timer_Expired(GameObject *obj,int number);
  1547.     void Action_Complete(GameObject *obj,int action_id,ActionCompleteReason complete_reason);
  1548.     void Damaged(GameObject *obj,GameObject *damager,float amount);
  1549.     void Animation_Complete(GameObject *obj,const char *animation_name);
  1550.     void Custom(GameObject *obj,int type,int param,GameObject *sender);
  1551.     float Health;
  1552.     int Unknown1;
  1553.     int Unknown2;
  1554.     bool DoingDmgAnim;
  1555.     float Health2;
  1556. };
  1557.  
  1558. void MX0_Engineer1::Created(GameObject *obj)
  1559. {
  1560.     DoingDmgAnim = false;
  1561.     Unknown2 = 0;
  1562.     Unknown3 = 0;
  1563.     Health = Commands->Get_Health(obj;
  1564.     Commands->Start_Timer(obj, this, 4, 121);
  1565.     Commands->Start_Timer(obj, this, 4, 122);
  1566.     int ID = Commands->Get_ID(obj);
  1567.     GameObject *SearchObj = Commands->Find_Object(1200001);
  1568.     Commands->Send_Custom_Event(obj, SearchObj, 103, ID, 0);
  1569. }
  1570.  
  1571. void MX0_Engineer1::Timer_Expired(GameObject *obj,int number)
  1572. {
  1573.     if(number == 116)
  1574.     {
  1575.         ActionParamsStruct Params;
  1576.         Params.Set_Basic(this 96, 101);
  1577.         Params.Set_Movement(Commands->Get_Position(Commands->Find_Object(Unknown3)), 0.800000, 1.000000);
  1578.         Commands->Action_Goto(obj, Params);
  1579.     }
  1580.     else if(number == 121)
  1581.         Commands->Set_Innate_Is_Stationary(obj, true);
  1582.     else if(number == 122)
  1583.     {
  1584.         ActionParamsStruct Params;
  1585.         Params.Set_Basic(this 96, 101);
  1586.         Params.Set_Movement(Commands->Get_Position(Commands->Find_Object(1200029)), 0.800000, 0.800000);
  1587.         Commands->Action_Goto(obj, Params);
  1588.     }
  1589. }
  1590.  
  1591. void MX0_Engineer1::Action_Complete(GameObject *obj,int action_id,ActionCompleteReason complete_reason)
  1592. {
  1593.     if(action_id == 113)
  1594.     {
  1595.         ActionParamsStruct Params;
  1596.         Params.Set_Basic(this, 96, 101);
  1597.         Params.Set_Movement(Commands->Get_Position(Commands->Find_Object(1200029)), 0.800000, 0.800000);
  1598.         Commands->Action_Goto(obj, Params);
  1599.     }
  1600.     else if(action_id == 135)
  1601.         DoingDmgAnim = false;
  1602.     else if(action_id == 101)
  1603.     {
  1604.         int ActionID = Commands->Get_ActionID(obj);
  1605.         if(ActionID != 101 && complete_reason == 1)
  1606.             Commands->Start_Timer(obj, this, 5, 116);
  1607.         if(Unknown2 == 3 && !complete_reason)
  1608.         {
  1609.             GameObject *SearchObj = Commands->Find_Object(1200001);
  1610.             Commands->Send_Custom_Event(obj, SearchObj, 100004, 0, 0);
  1611.         }
  1612.     }
  1613. }
  1614.  
  1615. void MX0_Engineer1::Damaged(GameObject *obj,GameObject *damager,float amount)
  1616. {
  1617.  
  1618.     Health2 = Commands->Get_Health(obj);
  1619.     float CalcHealth = Health - Get_Float_Parameter("Damage_multiplier") * (Health - Health2);
  1620.     Commands->Set_Health(obj, CalcHealth);
  1621.     Health2 = CalcHealth;
  1622.     Health = CalcHealth;
  1623.     Vector3 Pos = Commands->Get_Position(obj);
  1624.     GameObject *Star = Commands->Get_A_Star(Pos);
  1625.     if(damager == Star && !DoingDmgAnim)
  1626.     {
  1627.         DoingDmgAnim = true;
  1628.         const char *HitConversation[4] =
  1629.         {
  1630.             "MX0CON008",
  1631.             "MX0CON009",
  1632.             "MX0CON010",
  1633.             "MX0CON011"
  1634.         };
  1635.         int Random = Commands->Get_Random_Int(0, 4);
  1636.         int Conversation = Commands->Create_Conversation(HitConversation[Random], 97, 2000, false);
  1637.         Commands->Join_Conversation(obj, Conversation, false, true, true);
  1638.         Commands->Join_Conversation(Star, Conversation, true, true, true);
  1639.         Commands->Start_Conversation(Conversation, 100008);
  1640.         Commands->Monitor_Conversation(obj, Conversation);
  1641.         ActionParamsStruct Params;
  1642.         Params.Set_Basic(this, 100, 135);
  1643.         Params.Set_Animation("H_A_J21C", false);
  1644.         Commands->Action_Play_Animation(obj, Params);
  1645.     }
  1646. }
  1647.  
  1648. void MX0_Engineer1::Animation_Complete(GameObject *obj,const char *animation_name)
  1649. {
  1650.     if(strcmp(animation_name, "H_A_J21C") == 0)
  1651.         DoingDmgAnim = false;
  1652. }
  1653.  
  1654. void MX0_Engineer1::Custom(GameObject *obj,int type,int param,GameObject *sender)
  1655. {
  1656.     if(type == 136)
  1657.     {
  1658.         GameObject *SearchObj1 = Commands->Find_Object(param);
  1659.         Commands->Unlock_Soldier_Facing(obj);
  1660.         if(SearchObj1)
  1661.         {
  1662.             Commands->Lock_Soldier_Facing(obj, SearchObj1, true);
  1663.             int GotoLoc[3] =
  1664.             {
  1665.                 1200010,
  1666.                 1200022,
  1667.                 1200039
  1668.             };
  1669.             int Random = Commands->Get_Random_Int(0, 3);
  1670.             ActionParamsStruct Params;
  1671.             Params.Set_Basic(this, 97, 137);
  1672.             Params.Set_Movement(Commands->Find_Object(GotoLoc[Random]), 0.300000, 0.200000, true);
  1673.             Commands->Action_Goto(obj, Params);
  1674.         }
  1675.     }
  1676.     else if(type == 131)
  1677.     {
  1678.         Commands->Action_Reset(obj, 100);
  1679.         ActionParamsStruct Params;
  1680.         Params.Set_Basic(this, 97, 131);
  1681.         Params.Set_Movement(Commands->Find_Object(1200006), 0.800000, 1.000000);
  1682.         Commands->Action_Goto(obj, Params);
  1683.     }
  1684.     else if(type == 132)
  1685.     {
  1686.         Vector3 Pos = Commands->Get_Position(obj);
  1687.         GameObject *Star = Commands->Get_A_Star(Pos);
  1688.         Commands->Lock_Soldier_Facing(obj, Star, true);
  1689.         ActionParamsStruct Params;
  1690.         Params.Set_Basic(this, 97, 113);
  1691.         Params.Set_Animation("h_a_b0c0", true);
  1692.         Commands->Action_Play_Animation(obj, Params);
  1693.     }
  1694.     else if(type == 112)
  1695.     {
  1696.         ActionParamsStruct Params;
  1697.         Params.Set_Basic(this, 95, 1);
  1698.         Params.Set_Movement(Commands->Find_Object(1200021), 1.200000, 1.000000, true);
  1699.         Params.Set_Attack(Commands->Find_Object(1200017), 250.000000, 0, true);
  1700.         Params.AttackForceFire = true;
  1701.         Commands->Action_Attack(obj, Params);
  1702.     }
  1703.     else if(type == 108)
  1704.         *((_DWORD *)this + 9) = param;
  1705.     else if(type == 100)
  1706.     {
  1707.         ActionParamsStruct Params;
  1708.         Params.Set_Basic(this, 96, 101);
  1709.         Params.Set_Movement(Commands->Get_Position(Commands->Find_Object(param)), 0.800000, 0.800000);
  1710.         Commands->Action_Goto(obj, Params);
  1711.     }
  1712. }
  1713.  
  1714. class MX0_Engineer2 : public ScriptImpClass
  1715. {
  1716.     void Register_Auto_Save_Variables();
  1717.     void Created(GameObject *obj);
  1718.     void Action_Complete(GameObject *obj,int action_id,ActionCompleteReason complete_reason);
  1719.     void Timer_Expired(GameObject *obj,int number);
  1720.     void Damaged(GameObject *obj,GameObject *damager,float amount);
  1721.     void Animation_Complete(GameObject *obj,const char *animation_name);
  1722.     void Custom(GameObject *obj,int type,int param,GameObject *sender);
  1723.     float Health2;
  1724.     float Health;
  1725.     int Unknown1;
  1726.     int Unknown2;
  1727.     bool DoingDmgAnim;
  1728.     int Unknown3;
  1729. };
  1730.  
  1731. void MX0_Engineer2::Register_Auto_Save_Variables()
  1732. {
  1733.     Auto_Save_Variable(&Health2, 4, 1);
  1734.     Auto_Save_Variable(&Health, 4, 2);
  1735.     Auto_Save_Variable(&Unknown1, 4, 3);
  1736.     Auto_Save_Variable(&Unknown2, 4, 4);
  1737.     Auto_Save_Variable(&DoingDmgAnim, 1, 5);
  1738.     Auto_Save_Variable(&Unknown3, 4, 6);
  1739. }
  1740.  
  1741. void MX0_Engineer2::Created(GameObject *obj)
  1742. {
  1743.     Unknown3 = 0;
  1744.     Unknown1 = 0;
  1745.     Unknown2 = 0;
  1746.     Health = Commands->Get_Health(obj);
  1747.     DoingDmgAnim = false;
  1748.     Commands->Start_Timer(obj, this, 4, 121);
  1749.     Commands->Start_Timer(obj, this, 3.500000, 123);
  1750.     int ID = Commands->Get_ID(obj);
  1751.     GameObject *SearchObj = Commands->Find_Object(1200001);
  1752.     Commands->Send_Custom_Event(obj, SearchObj, 103, ID, 0);
  1753. }
  1754.  
  1755. void MX0_Engineer2::Action_Complete(GameObject *obj,int action_id,ActionCompleteReason complete_reason)
  1756. {
  1757.     if(action_id == 113)
  1758.     {
  1759.         ActionParamsStruct Params;
  1760.         Params.Set_Basic(this, 96, 101);
  1761.         Params.Set_Movement(Commands->Get_Position(Commands->Find_Object(1200026)), 0.800000, 0.800000);
  1762.         Commands->Action_Goto(obj, Params);
  1763.         Commands->Send_Custom_Event(obj, obj, 100005, 0, 0.600000);
  1764.     }
  1765.     else if(action_id == 135)
  1766.         DoingDmgAnim = false;
  1767.     else if(action_id == 101)
  1768.     {
  1769.         int ActionID = Commands->Get_ActionID(obj);
  1770.         if(ActionID != 101 && !Commands->Is_Performing_Pathfind_Action(obj) && (complete_reason == 1 || complete_reason == 3))
  1771.             Commands->Start_Timer(obj, this, 5, 116);
  1772.         if(Unknown1 == 4 && !complete_reason)
  1773.         {
  1774.             GameObject *SearchObj = Commands->Find_Object(1200001);
  1775.             Commands->Send_Custom_Event(obj, SearchObj, 132, 0, 0);
  1776.             Vector3 Pos = Commands->Get_Position(obj);
  1777.             GameObject *Star = Commands->Get_A_Star(Pos);
  1778.             Commands->Lock_Soldier_Facing(obj, Star, true);
  1779.             ActionParamsStruct Params;
  1780.             Params.Set_Basic(this, 97, 113);
  1781.             Params.Set_Animation("h_a_b0c0", true);
  1782.             Commands->Action_Play_Animation(obj, Params);
  1783.         }
  1784.     }
  1785. }
  1786.  
  1787. void MX0_Engineer2::Timer_Expired(GameObject *obj,int number)
  1788. {
  1789.     if(number == 137)
  1790.     {
  1791.         GameObject *SearchObj = Commands->Find_Object(Unknown3);
  1792.         Commands->Unlock_Soldier_Facing(obj);
  1793.         if(SearchObj)
  1794.         {
  1795.             Commands->Lock_Soldier_Facing(obj, SearchObj, true);
  1796.             int GotoLoc[3] =
  1797.             {
  1798.                 1200011,
  1799.                 1200021,
  1800.                 1200040
  1801.             };
  1802.             int Random = Commands->Get_Random_Int(0, 3);
  1803.             ActionParamsStruct Params;
  1804.             Params.Set_Basic(this, 97, 137);
  1805.             Params.Set_Movement(Commands->Find_Object(GotoLoc[Random]), 0.300000, 0.200000, true);
  1806.             Commands->Action_Goto(obj, Params);
  1807.         }
  1808.     }
  1809.     else if(number == 116)
  1810.     {
  1811.         ActionParamsStruct Params;
  1812.         Params.Set_Basic(this, 96, 101);
  1813.         Params.Set_Movement(Commands->Get_Position(Commands->Find_Object(Unknown2)), 0.800000, 1.000000);
  1814.         Commands->Action_Goto(obj, Params);
  1815.     }
  1816.     else if(number == 121)
  1817.         Commands->Set_Innate_Is_Stationary(obj, true);
  1818.     else if(number == 123)
  1819.     {
  1820.         ActionParamsStruct Params;
  1821.         Params.Set_Basic(this, 98, 113);
  1822.         Params.Set_Animation("H_A_A0A0_L32", false);
  1823.         Commands->Action_Play_Animation(obj, Params);
  1824.     }
  1825. }
  1826.  
  1827. void MX0_Engineer2::Damaged(GameObject *obj,GameObject *damager,float amount)
  1828. {
  1829.     Health2 = Commands->Get_Health(obj);
  1830.     float CalcHealth = Health - Get_Float_Parameter("Damage_multiplier") * (Health - Health2);
  1831.     Commands->Set_Health(obj, CalcHealth);
  1832.     Health = CalcHealth;
  1833.     Health2 = CalcHealth;
  1834.     Vector3 Pos = Commands->Get_Position(obj);
  1835.     GameObject *Star = Commands->Get_A_Star(Pos);
  1836.     if(damager == Star && !DoingDmgAnim)
  1837.     {
  1838.         DoingDmgAnim = true;
  1839.         const char *HitConversation[4] =
  1840.         {
  1841.             "MX0CON008",
  1842.             "MX0CON009",
  1843.             "MX0CON010",
  1844.             "MX0CON011"
  1845.         };
  1846.         int Random = Commands->Get_Random_Int(0, 4);
  1847.         int Conversation = Commands->Create_Conversation(HitConversation[Random], 97, 2000, false);
  1848.         Commands->Join_Conversation(obj, Conversation, false, true, true);
  1849.         Commands->Join_Conversation(Star, Conversation, true, true, true);
  1850.         Commands->Start_Conversation(Conversation, 100008);
  1851.         Commands->Monitor_Conversation(obj, Conversation);
  1852.         ActionParamsStruct Params;
  1853.         Params.Set_Basic(this, 100, 135);
  1854.         Params.Set_Animation("H_A_J21C", false);
  1855.         Commands->Action_Play_Animation(obj, Params);
  1856.     }
  1857. }
  1858.  
  1859. void MX0_Engineer2::Animation_Complete(GameObject *obj,const char *animation_name)
  1860. {
  1861.     if(strcmp(animation_name, "H_A_J21C") == 0)
  1862.         DoingDmgAnim = false;
  1863. }
  1864.  
  1865. void MX0_Engineer2::Custom(GameObject *obj,int type,int param,GameObject *sender)
  1866. {
  1867.     if(type == 136)
  1868.     {
  1869.         Unknown3 = param;
  1870.         Commands->Start_Timer(obj, this, 5, 137);
  1871.     }
  1872.     else if(type == 131)
  1873.     {
  1874.         Commands->Action_Reset(obj, 100);
  1875.         ActionParamsStruct Params;
  1876.         Params.Set_Basic(this, 97, 131);
  1877.         Params.Set_Movement(Commands->Find_Object(1200007), 0.800000, 1.000000);
  1878.         Commands->Action_Goto(obj, Params);
  1879.     }
  1880.     else if(type == 125)
  1881.     {
  1882.         Vector3 Pos = Commands->Get_Position(obj);
  1883.         GameObject *Star = Commands->Get_A_Star(Pos);
  1884.         Vector3 StarPos = Commands->Get_Position(Star);
  1885.         float Facing = atan2(StarPos.X - Pos.X, StarPos.Y, Pos.Y) * 57.295776; //  I did not check if this calculation makes any sense i just simply read what it said.
  1886.         Commands->Set_Facing(obj, Facing);
  1887.         Commands->Action_Reset(obj, 100);
  1888.         Commands->Set_Animation(obj, "H_A_A0A0_L53", false, "", 0, -1, true); // or -4? dunno if that makes sense
  1889.     }
  1890.     else if(type == 112)
  1891.     {
  1892.         ActionParamsStruct Params;
  1893.         Params.Set_Basic(this, 95, 1);
  1894.         Params.Set_Movement(Commands->Find_Object(1200022), 1.200000, 1.000000, true);
  1895.         Params.Set_Attack(Commands->Find_Object(1200017), 250.000000, 0, true);
  1896.         Params.AttackForceFire = true;
  1897.         Commands->Action_Attack(obj, Params);
  1898.     }
  1899.     else if(type == 108)
  1900.         Unknown1 = param;
  1901.     else if(type == 100)
  1902.     {
  1903.         Unknown2 = param;
  1904.         ActionParamsStruct Params;
  1905.         Params.Set_Basic(this 96, 101);
  1906.         Params.Set_Movement(Commands->Get_Position(Commands->Find_Object(Unknown2)), 0.800000, 0.800000);
  1907.         Commands->Action_Goto(obj, Params);
  1908.     }
  1909. }
  1910.  
  1911. class MX0_Engineer_Return : public ScriptImpClass
  1912. {
  1913.     void Killed(GameObject *obj, GameObject *killer);
  1914.     bool Unknown;
  1915. };
  1916.  
  1917. void MX0_Engineer_Return::Killed(GameObject *obj, GameObject *killer)
  1918. {
  1919.     // Could be any event but im guessing on Killed.
  1920.     if(!Unknown)
  1921.     {
  1922.         Unknown = true;
  1923.         GameObject *SearchObj = Commands->Find_Object(1200001);
  1924.         Commands->Send_Custom_Event(obj, this, 130, 1, 0);
  1925.     }
  1926. }
  1927.  
  1928. class MX0_Engineer_Goto : public ScriptImpClass
  1929. {
  1930.     void Custom(GameObject *obj,int type,int param,GameObject *sender);
  1931.     void Entered(GameObject *obj, GameObject *enterer);
  1932.     bool DidSend;
  1933. };
  1934.  
  1935. void MX0_Engineer_Goto::Custom(GameObject *obj,int type,int param,GameObject *sender)
  1936. {
  1937.     if(type == 105)
  1938.     {
  1939.         GameObject *SearchObj = Commands->Find_Object(param);
  1940.         Commands->Send_Custom_Event(obj, SearchObj, 100, Get_Int_Parameter("GotoDest1"), 0);
  1941.     }
  1942.     else if(type == 106)
  1943.     {
  1944.         GameObject *SearchObj = Commands->Find_Object(param);
  1945.         Commands->Send_Custom_Event(obj, SearchObj, 100, Get_Int_Parameter("GotoDest2"), 0);
  1946.     }
  1947. }
  1948.  
  1949. void MX0_Engineer_Goto::Entered(GameObject *obj, GameObject *enterer)
  1950. {
  1951.     if(!DidSend)
  1952.     {
  1953.         DidSend = true;
  1954.         GameObject *SearchObj = Commands->Find_Object(1200001);
  1955.         Commands->Send_Custom_Event(obj, SearchObj, 102, Get_Int_Parameter("Count"), 0);
  1956.         Commands->Send_Custom_Event(obj, SearchObj, 104, 1, 0);
  1957.         Commands->Send_Custom_Event(obj, SearchObj, 104, 2, 0);
  1958.     }
  1959. }
  1960.  
  1961. class MX0_Engineer_Goto2 : public ScriptImpClass
  1962. {
  1963.     void Custom(GameObject *obj,int type,int param,GameObject *sender);
  1964.     void Timer_Expired(GameObject *obj,int number);
  1965.     void Entered(GameObject *obj,GameObject *enterer);
  1966.     bool DidSend;
  1967. };
  1968.  
  1969. void MX0_Engineer_Goto2::Custom(GameObject *obj,int type,int param,GameObject *sender)
  1970. {
  1971.     if(type == 105)
  1972.     {
  1973.         GameObject *SearchObj = Commands->Find_Object(param);
  1974.         Commands->Send_Custom_Event(obj, SearchObj, 100, Get_Int_Parameter("GotoDest1"), 0);
  1975.     }
  1976.     else if(type == 106)
  1977.     {
  1978.         GameObject *SearchObj = Commands->Find_Object(param);
  1979.         Commands->Send_Custom_Event(obj, SearchObj, 100, Get_Int_Parameter("GotoDest2"), 0);
  1980.     }
  1981.     else if(type == 110)
  1982.     {
  1983.         GameObject *SearchObj = Commands->Find_Object(1200001);
  1984.         Commands->Send_Custom_Event(obj, SearchObj, 115, 1, 0);
  1985.         Commands->Send_Custom_Event(obj, SearchObj, 102, Get_Int_Parameter("Count"), 0);
  1986.         Commands->Send_Custom_Event(obj, SearchObj, 104, 1, 0);
  1987.         Commands->Send_Custom_Event(obj, SearchObj, 104, 2, 0);
  1988.     }
  1989. }
  1990.  
  1991. void MX0_Engineer_Goto2::Timer_Expired(GameObject *obj,int number)
  1992. {
  1993.     if(number == 126)
  1994.         Commands->Set_HUD_Help_Text(8579, Vector3(0.196000, 0.882000, 0.196000));
  1995. }
  1996.  
  1997. void MX0_Engineer_Goto2::Entered(GameObject *obj,GameObject *enterer)
  1998. {
  1999.     if(!DidSend)
  2000.     {
  2001.         DidSend = true;
  2002.         if(Get_Int_Parameter("Count") == 5)
  2003.         {
  2004.             Commands->Start_Timer(obj, this, 3, 126);
  2005.             GameObject *SearchObj = Commands->Find_Object(1200001);
  2006.             Commands->Send_Custom_Event(obj, SearchObj, 136, 0, 0);
  2007.             Commands->Send_Custom_Event(obj, SearchObj, 100006, 1, 0);
  2008.         }
  2009.     }
  2010. }
  2011.  
  2012. class MX0_Kill_Sniper : public ScriptImpClass
  2013. {
  2014.     void Killed(GameObject *obj,GameObject *killer);
  2015.     bool DidSend;
  2016. };
  2017.  
  2018. void MX0_Kill_Sniper::Killed(GameObject *obj,GameObject *killer)
  2019. {
  2020.     // Killed assumed.
  2021.     if(!DidSend)
  2022.     {
  2023.         DidSend = true;
  2024.         GameObject *SearchObj1 = Commands->Find_Object(1200017);
  2025.         if(SearchObj1)
  2026.         {
  2027.             GameObject *SearchObj2 = Commands->Find_Object(1200001);
  2028.             Commands->Send_Custom_Event(obj, SearchObj2, 111, 0, 0);
  2029.         }
  2030.     }
  2031. }
  2032.  
  2033. class MX0_NOD_TroopDrop : public ScriptImpClass
  2034. {
  2035.     void Timer_Expired(GameObject *obj,int number);
  2036.     void Entered(GameObject *obj,GameObject *enterer);
  2037.     bool DidSend;
  2038. };
  2039.  
  2040. void MX0_NOD_TroopDrop::Timer_Expired(GameObject *obj,int number)
  2041. {
  2042.     if(number == 109)
  2043.     {
  2044.         GameObject *CinPosObj1 = Commands->Find_Object(1200018);
  2045.         Vector3 CinPos1 = Commands->Get_Position(CinPosObj1);
  2046.         GameObject *CinObject1 = Commands->Create_Object("Invisible_Object", CinPos1);
  2047.         Commands->Set_Facing(CinObject1, Commands->Get_Facing(CinPosObj1));
  2048.         Commands->Attach_Script(CinObject1, "Test_Cinematic", "MX0_C130Troopdrop.txt");
  2049.         GameObject *CinPosObj2 = Commands->Find_Object(1200020);
  2050.         Vector3 CinPos2 = Commands->Get_Position(CinPosObj1);
  2051.         GameObject *CinObject2 = Commands->Create_Object("Invisible_Object", CinPos2);
  2052.         Commands->Set_Facing(CinObject2, Commands->Get_Facing(CinPosObj2));
  2053.         Commands->Attach_Script(CinObject2, "Test_Cinematic", "MX0_C130Troopdrop2.txt");
  2054.     }
  2055. }
  2056.  
  2057. void MX0_NOD_TroopDrop::Entered(GameObject *obj,GameObject *enterer)
  2058. {
  2059.     if(!DidSend)
  2060.     {
  2061.         DidSend = true;
  2062.         GameObject *CinPosObj1 = Commands->Find_Object(1200018);
  2063.         Vector3 CinPos1 = Commands->Get_Position(CinPosObj1);
  2064.         GameObject *CinObject1 = Commands->Create_Object("Invisible_Object", CinPos1);
  2065.         Commands->Set_Facing(CinObject1, Commands->Get_Facing(CinPosObj1));
  2066.         Commands->Attach_Script(CinObject1, "Test_Cinematic", "MX0_C130Troopdrop.txt");
  2067.         GameObject *CinPosObj2 = Commands->Find_Object(1200020);
  2068.         Vector3 CinPos2 = Commands->Get_Position(CinPosObj1);
  2069.         GameObject *CinObject2 = Commands->Create_Object("Invisible_Object", CinPos2);
  2070.         Commands->Set_Facing(CinObject2, Commands->Get_Facing(CinPosObj2));
  2071.         Commands->Attach_Script(CinObject2, "Test_Cinematic", "MX0_C130Troopdrop2.txt");
  2072.         Commands->Start_Timer(obj, this, 3, 109);
  2073.         GameObject *SearchObj = Commands->Find_Object(1200001);
  2074.         Commands->Send_Custom_Event(obj, SearchObj, 114, 0, 0);
  2075.     }
  2076. }
  2077.  
  2078. class MX0_AmbientBattle : public ScriptImpClass
  2079. {
  2080.     void Created(GameObject *obj);
  2081.     void Timer_Expired(GameObject *obj,int number);
  2082.     void Custom(GameObject *obj,int type,int param,GameObject *sender);
  2083.     int SoundID;
  2084. };
  2085.  
  2086. void MX0_AmbientBattle::Created(GameObject *obj)
  2087. {
  2088.     Timer_Expired(obj, 107);
  2089. }
  2090.  
  2091. void MX0_AmbientBattle::Timer_Expired(GameObject *obj,int number)
  2092. {
  2093.     if(number == 107)
  2094.     {
  2095.         SoundID = Commands->Create_Sound("MX0_AmbientBattle_DME", Commands->Get_Position(obj), obj);
  2096.         Commands->Monitor_Sound(obj, SoundID);
  2097.     }
  2098. }
  2099.  
  2100. void MX0_AmbientBattle::Custom(GameObject *obj,int type,int param,GameObject *sender)
  2101. {
  2102.     if(type == 1000000001 && param == SoundID)
  2103.         Commands->Start_Timer(obj, this, 3, 107);
  2104. }
  2105.  
  2106. class MX0_SniperAction : public ScriptImpClass
  2107. {
  2108.     void Created(GameObject *obj);
  2109.     void Custom(GameObject *obj,int type,int param,GameObject *sender);
  2110.     void Damaged(GameObject *obj,GameObject *damager,float amount);
  2111.     void Timer_Expired(GameObject *obj,int number);
  2112.     float Health;
  2113. };
  2114.  
  2115. void MX0_SniperAction::Created(GameObject *obj)
  2116. {
  2117.     Health = Commands->Get_Health(obj);
  2118.     Commands->Innate_Disable(obj);
  2119. }
  2120.  
  2121. void MX0_SniperAction::Custom(GameObject *obj,int type,int param,GameObject *sender)
  2122. {
  2123.     if(type == 114)
  2124.         Commands->Start_Timer(obj, this, 5, 108);
  2125. }
  2126.  
  2127. void MX0_SniperAction::Damaged(GameObject *obj,GameObject *damager,float amount)
  2128. {
  2129.     Vector3 Pos = Commands->Get_Position(obj);
  2130.     GameObject *Star = Commands->Get_A_Star(Pos);
  2131.     if(damager == Star)
  2132.     {
  2133.         Commands->Apply_Damage(obj, 10000, "BlamoKiller", Star);
  2134.         bool Encyclopedia = Commands->Reveal_Encyclopedia_Character(41);
  2135.         if(Encyclopedia)
  2136.             Commands->Display_Encyclopedia_Event_UI();
  2137.     }
  2138.     else
  2139.         Commands->Apply_Damage(obj, 10000, "BlamoKiller", 0);
  2140. }
  2141.  
  2142. void MX0_SniperAction::Timer_Expired(GameObject *obj,int number)
  2143. {
  2144.     if(number == 108)
  2145.     {
  2146.         ActionParamsStruct Params;
  2147.         Params.Set_Basic(this, 99, 1);
  2148.         Params.Set_Attack(Commadns->Find_Object(Get_Int_Parameter("FaceObj")), 250.000000, 0, true);
  2149.         Params.AttackForceFire = true;
  2150.         Commands->Action_Attack(obj, Params);
  2151.     }
  2152. }
  2153.  
  2154. class MX0_KillNotify : public ScriptImpClass
  2155. {
  2156.     void Custom(GameObject *obj,int type,int param,GameObject *sender);
  2157.     void Timer_Expired(GameObject *obj,int number);
  2158.     void Killed(GameObject *obj,GameObject *killer);
  2159.     int Unknown;
  2160. };
  2161.  
  2162. void MX0_KillNotify::Custom(GameObject *obj,int type,int param,GameObject *sender)
  2163. {
  2164.     if(type == 114)
  2165.     {
  2166.         Commands->Start_Timer(obj, this, 3, 139);
  2167.         Commands->Start_Timer(obj, this, 7, 140);
  2168.     }
  2169. }
  2170.  
  2171. void MX0_KillNotify::Timer_Expired(GameObject *obj,int number)
  2172. {
  2173.     if(number == 139)
  2174.     {
  2175.         int MX0CON020 = Commands->Create_Conversation("MX0CON020", 95, 2000, false);
  2176.         Commands->Join_Conversation(obj, MX0CON020, true, true, true);
  2177.         Commands->Start_Conversation(MX0CON020, 100020);
  2178.         Commands->Monitor_Conversation(obj, MX0CON020);
  2179.     }
  2180.     else if(number == 140)
  2181.     {
  2182.         int MX0CON021 = Commands->Create_Conversation("MX0CON021", 99, 2000, false);
  2183.         Commands->Join_Conversation(obj, MX0CON021, true, true, true);
  2184.         Commands->Start_Conversation(MX0CON021, 100021);
  2185.         Commands->Monitor_Conversation(obj, MX0CON021);
  2186.         Commands->Start_Timer(obj, this, 5, 141);
  2187.     }
  2188.     else if(number == 141)
  2189.     {
  2190.         if(Unknown)
  2191.         {
  2192.             const char *Conversations[6] =
  2193.             {
  2194.                 "Mx0_NODSNIPER_Alt01",
  2195.                 "Mx0_NODSNIPER_Alt02",
  2196.                 "Mx0_NODSNIPER_Alt03",
  2197.                 "Mx0_NODSNIPER_Alt04",
  2198.                 "Mx0_NODSNIPER_Alt05",
  2199.                 "Mx0_NODSNIPER_Alt06"
  2200.             };
  2201.             int Random = Commands->Get_Random_Int(0, 6);
  2202.             int Conversation = Commands->Create_Conversation(Conversations[Random], 95, 2000, false);
  2203.             Commands->Join_Conversation(obj, Conversation, true, true, true);
  2204.             Commands->Start_Conversation(Conversation, 100021);
  2205.             Commands->Monitor_Conversation(obj, Conversation);
  2206.             Commands->Start-Timer(obj, this, 5, 141);
  2207.         }
  2208.     }
  2209. }
  2210.  
  2211. void MX0_KillNotify::Killed(GameObject *obj,GameObject *killer)
  2212. {
  2213.     // Killed assumed
  2214.     Vector3 Pos = Commands->Get_Position(obj);
  2215.     GameObject *Star = Commands->Get_A_Star(Pos);
  2216.     if(killer == Star)
  2217.     {
  2218.         GameObject *SearchObj = Commands->Find_Object(1200001);
  2219.         Commands->Send_Custom_Event(obj, SearchObj, 138, 0, 0);
  2220.     }
  2221. }
  2222.  
  2223. class DAK_MX0_Sec_3_Humvee : public ScriptImpClass
  2224. {
  2225.     void Unknown(int this, int a2, int a3);
  2226. };
  2227.  
  2228. void DAK_MX0_Sec_3_Humvee::Unknown(int this, int a2, int a3)
  2229. {
  2230.     //Commands->Find_Object is used too, but I couldn't really identify what object was being looked for. The only valid IDs I could find were the waypath IDs.
  2231.     ActionParamsStruct Params;
  2232.     Params.Set_Basic(this, 100, 100);
  2233.     Params.Set_Movement(0, 0.500000, 5.000000);
  2234.     Params.WaypathID = 1400035; // assumed
  2235.     Params.WaypointStartID = 1400037; // assumed
  2236.     Params.WaypointEndID = 1400038; // assumed
  2237.     Params.MovePathfind = true; // assumed
  2238.     Commands->Action_Goto(obj, Params);
  2239.     Commands->Debug_Message("***** DAK_MX0_Sec_3_Humvee:Entered code exectued.\n");
  2240. }
  2241.  
  2242. class MX0_A03_NOD_PLACED_MINIGUNNER : public ScriptImpClass
  2243. {
  2244.     void Created(GameObject *obj);
  2245.     void Custom(GameObject *obj,int type,int param,GameObject *sender);
  2246. };
  2247.  
  2248. void MX0_A03_NOD_PLACED_MINIGUNNER::Created(GameObject *obj)
  2249. {
  2250.     Vector3 Pos = Commands->Get_Position(obj);
  2251.     Commands->Set_Innate_Soldier_Home_Location(obj, Pos, 5.000000);
  2252.     Commands->Innate_Disable(obj);
  2253.     Commands->Set_Innate_Is_Stationary(obj, true);
  2254. }
  2255.  
  2256. void MX0_A03_NOD_PLACED_MINIGUNNER::Custom(GameObject *obj,int type,int param,GameObject *sender)
  2257. {
  2258.     // Custom assumed
  2259.     if(type == 417)
  2260.     {
  2261.         Commands->Innate_Enable(obj);
  2262.         Commands->Set_Innate_Is_Stationary(obj, false);
  2263.     }
  2264. }
  2265.  
  2266. class MX0_GDI_ORCA : public ScriptImpClass
  2267. {
  2268.     void Created(GameObject *obj);
  2269.     void Action_Complete(GameObject *obj,int action_id,ActionCompleteReason complete_reason);
  2270.     void Entered(GameObject *obj,GameObject *enterer);
  2271.     void Custom(GameObject *obj,int type,int param,GameObject *sender);
  2272.     bool Trigger;
  2273.     int FindObjID; 
  2274. };
  2275.  
  2276. void MX0_GDI_ORCA::Created(GameObject *obj)
  2277. {
  2278.     Trigger = true;
  2279. }
  2280.  
  2281. void MX0_GDI_ORCA::Action_Complete(GameObject *obj,int action_id,ActionCompleteReason complete_reason)
  2282. {
  2283.     if(action_id == 1 && complete_reason == ACTION_COMPLETE_CONVERSATION_ENDED)
  2284.     {
  2285.         GameObject *CinObject = Commands->Create_Object("Invisible_Object", Vector3(0,0,0));
  2286.         Commands->Attach_Script(CinObject, "Test_Cinematic", "X0F_Harvester.txt");
  2287.         Commands->Send_Custom_Event(obj, obj, 1, 0, 1.500000);
  2288.         GameObject *Harvester = Commands->Find_Object(1400001);
  2289.         Commands->Commands->Send_Custom_Event(obj, Harvester, 413, 4, 7);
  2290.         Commands->Send_Custom_Event(obj, Harvester, 413, 3, 9);
  2291.         Commands->Send_Custom_Event(obj, Harvester, 413, 3, 10);
  2292.         Commands->Send_Custom_Event(obj, obj, 2, 0, 9.500000);
  2293.     }
  2294. }
  2295.  
  2296. void MX0_GDI_ORCA::Entered(GameObject *obj,GameObject *enterer)
  2297. {
  2298.     if(Trigger)
  2299.     {
  2300.         Commands->Fade_Background_Music("Level 0 Tiberium.mp3", 2, 2);
  2301.         int MX0_A03_02 = Commands->Create_Conversation("MX0_A03_02", 0, 0, false);
  2302.         Commands->Join_Conversation(0, MX0_A03_02, true, true, true);
  2303.         Commands->Start_Conversation(MX0_A03_02, 1);
  2304.         Commands->Monitor_Conversation(obj, MX0_A03_02);
  2305.         GameObject *SearchObj = Commands->Find_Object(1400057);
  2306.         Commands->Attach_Script(SearchObj, "Test_Cinematic", "XG_A03_Tank_Drop.txt");
  2307.         Trigger = false;
  2308.     }
  2309. }
  2310.  
  2311. void MX0_GDI_ORCA::Custom(GameObject *obj,int type,int param,GameObject *sender)
  2312. {
  2313.     if(type == 1)
  2314.     {
  2315.         int MX0_A03_03 = Commands->Create_Conversation("MX0_A03_03", 0, 0, true);
  2316.         Commands->Join_Conversation(0, MX0_A03_03, true, true, true);
  2317.         Commands->Start_Conversation(MX0_A03_03, 1);
  2318.     }
  2319.     else if(type == 2)
  2320.     {
  2321.         GameObject *SearchObj = Commands->Find_Object(1400041);
  2322.         Commands->Send_Custom_Event(obj, SearchObj, 9035, 12, 0);
  2323.         GameObject *SearchObj2 = Commands->Find_Object(FindObjID);
  2324.         int MX0_A03_04 = Commands->Create_Conversation("MX0_A03_04", 0, 0, 1);
  2325.         Commands->Join_Conversation(SearchObj2, MX0_A03_04, false, false, true);
  2326.         Commands->Join_Conversation(0, MX0_A03_04, true, true, true);
  2327.         Commadns->Start_Conversation(MX0_A03_04, 2);
  2328.         Commands->Send_Custom_Event(obj, SearchObj2, 5, 0, 0);
  2329.         Commands->Send_Custom_Event(obj, SerachObj2, 3, 0, 10);
  2330.     }
  2331.     else if(type == 3)
  2332.         FindObjID = param;
  2333. }
  2334.  
  2335. class MX0_NOD_INFANTRY : public ScriptImpClass
  2336. {
  2337.     void Created(GameObject *obj);
  2338.     void Animation_Complete(GameObject *obj,const char *animation_name);
  2339.     void Action_Complete(GameObject *obj,int action_id,ActionCompleteReason complete_reason);
  2340.     void Custom(GameObject *obj,int type,int param,GameObject *sender);
  2341.     void Killed(GameObject *obj,GameObject *killer);
  2342.     int troop_num;
  2343. };
  2344.  
  2345. void MX0_NOD_INFANTRY::Created(GameObject *obj)
  2346. {
  2347.     troop_num = Get_Int_Parameter("troop_num");
  2348.     GameObject *SearchObj = Commands->Find_Object(1400041);
  2349.     Commands->Send_Custom_Event(obj, SearchObj, 406, 0, 0);
  2350.     if(troop_num)
  2351.         Commands->Attach_Script(obj, "M00_Send_Object_ID", "1400041,15,0");
  2352.     else
  2353.         Commands->Attach_Script(obj, "M00_Send_Object_ID", "1400041,17,0");
  2354. }
  2355.  
  2356. void MX0_NOD_INFANTRY::Animation_Complete(GameObject *obj,const char *animation_name)
  2357. {
  2358.     if(strcmp("S_A_Human.H_A_TroopDrop", animation_name) == 0)
  2359.         Commands->Send_Custom_Event(obj, obj, 1, 0, 0.330000);
  2360. }
  2361.  
  2362. void MX0_NOD_INFANTRY::Action_Complete(GameObject *obj,int action_id,ActionCompleteReason complete_reason)
  2363. {
  2364.     if(!action_id)
  2365.         Commands->Set_Innate_Is_Stationary(obj, true);
  2366. }
  2367.  
  2368. void MX0_NOD_INFANTRY::Custom(GameObject *obj,int type,int param,GameObject *sender)
  2369. {
  2370.     if(type)
  2371.     {
  2372.         if(type == 1)
  2373.         {
  2374.             Commands->Action_Reset(obj, 100);
  2375.             if(troop_num == 1)
  2376.             {
  2377.                 ActionParamsStruct Params;
  2378.                 Params.Set_Basic(this, 90, 0);
  2379.                 Params.Set_Movement(Commands->Find_Object(1400153), 0.800000, 0.250000);
  2380.                 Commands->Action_Goto(obj, Params);
  2381.             }  
  2382.             else
  2383.             {
  2384.                 ActionParamsStruct Params;
  2385.                 Params.Set_Basic(this, 90, 0);
  2386.                 Params.Set_Movement(Commands->Find_Object(1400155), 0.800000, 0.250000);
  2387.                 Commands->Action_Goto(obj, Params);
  2388.             }
  2389.         }
  2390.     }
  2391.     else
  2392.     {
  2393.         if(sender)
  2394.         {
  2395.             ActionParamsStruct Params;
  2396.             Params.Set_Basic(this, 90, 1);
  2397.             Params.Set_Attack(sender, 100.000000, 0.750000, true);
  2398.             Commands->Action_Attack(obj, Params);
  2399.         }
  2400.     }
  2401. }
  2402.  
  2403. void MX0_NOD_INFANTRY::Killed(GameObject *obj,GameObject *killer)
  2404. {
  2405.     // Killed assumed
  2406.     GameObject *SearchObj = Commands->Find_Object(1400041);
  2407.     Commands->Send_Custom_Event(obj, SearchObj, 407, 0, 2); // 0 param assumed
  2408. }
  2409.  
  2410. class MX0_A03_GDI_INFANTRY : public ScriptImpClass
  2411. {
  2412.     void Created(GameObject *obj);
  2413.     void Action_Complete(GameObject *obj,int action_id,ActionCompleteReason complete_reason);
  2414.     void Custom(GameObject *obj,int type,int param,GameObject *sender);
  2415.     int troop_num;
  2416.     int VehicleID;
  2417. };
  2418.  
  2419. void MX0_A03_GDI_INFANTRY::Created(GameObject *obj)
  2420. {
  2421.     troop_num = Get_Int_Parameter("troop_num");
  2422.     Commands->Attach_Script(obj, "M00_Damage_Modifier_DME", "0.15,0,1,1,1");
  2423.     if(troop_num == 1)
  2424.     {
  2425.         Commands->Attach_Script(obj, "M00_Send_Object_ID", "1400041,3,0");
  2426.         Commands->Action_Reset(obj, 100);
  2427.         ActionParamsStruct Params;
  2428.         Params.Set_Basic(this, 91, 0);
  2429.         Params.Set_Movement(Commands->Find_Object(1400138), 0.800000, 0.250000);
  2430.         Commands->Action_Goto(obj, Params);
  2431.     }
  2432.     else if(troop_num == 2)
  2433.     {
  2434.         Commands->Attach_Script(obj, "M00_Send_Object_ID", "1400041,5,0");
  2435.         Commands->Action_Reset(obj, 100);
  2436.         ActionParamsStruct Params;
  2437.         Params.Set_Basic(this, 91, 0);
  2438.         Params.Set_Movement(Commands->Find_Object(1400139), 0.800000, 0.250000);
  2439.         Commands->Action_Goto(obj, Params);
  2440.     }
  2441.     else if(troop_num == 3)
  2442.     {
  2443.         Commands->Attach_Script(obj, "M00_Send_Object_ID", "1400041,7,0");
  2444.         Commands->Action_Reset(obj, 100);
  2445.         VehicleID = 1400001; // Harvester
  2446.         ActionParamsStruct Params;
  2447.         Params.Set_Basic(this, 91, 1);
  2448.         Params.Set_Movement(Commands->Find_Object(1400140), 0.800000, 0.250000);
  2449.         Commands->Action_Goto(obj, Params);
  2450.     }
  2451. }
  2452.  
  2453. void MX0_A03_GDI_INFANTRY::Action_Complete(GameObject *obj,int action_id,ActionCompleteReason complete_reason)
  2454. {
  2455.     if(action_id)
  2456.     {
  2457.         if(action_id == 1)
  2458.         {
  2459.             Commands->Set_Innate_Is_Stationary(obj, true);
  2460.             Commands->Send_Custom_Event(obj, obj, 0, 0, 0);
  2461.         }
  2462.         else if(action_id == 2)
  2463.         {
  2464.             VehicleID = 1400081; // Buggy
  2465.             Commands->Send_Custom_Event(obj, obj, 0, 0, 0);
  2466.         }
  2467.     }
  2468.     else
  2469.         Commands->Set_Innate_Is_Stationary(obj, true);
  2470. }
  2471.  
  2472. void MX0_A03_GDI_INFANTRY::Custom(GameObject *obj,int type,int param,GameObject *sender)
  2473. {
  2474.     if(!type)
  2475.     {
  2476.         GameObject *Vehicle = Commands->Find_Object(VehicleID);
  2477.         if(Vehicle)
  2478.         {
  2479.             ActionParamsStruct Params;
  2480.             Params.Set_Basic(this, 90, 2);
  2481.             Params.Set_Attack(Vehicle, 60.000000, 0.250000, true);
  2482.             Commands->Action_Attack(obj, Params);
  2483.         }
  2484.     }
  2485. }
  2486.  
  2487. class MX0_A03_GDI_TROOP_DROP_ZONE_DAK : public ScriptImpClass
  2488. {
  2489.     void Created(GameObject *obj);
  2490.     bool CanDrop;  
  2491. };
  2492.  
  2493. void MX0_A03_GDI_TROOP_DROP_ZONE_DAK::Created(GameObject *obj)
  2494. {
  2495.     //Created assumed
  2496.     if(CanDrop)
  2497.     {
  2498.         GameObject *DropLocation = Commands->Find_Object(1400053);
  2499.         Commands->Attach_Script(DropLocation, "Test_Cinematic", "MX0_A03_GDI_TroopDrop.txt");
  2500.         CanDrop = false;
  2501.     }
  2502. }
  2503.  
  2504. class MX0_A03_GDI_TANK_DROP_ZONE_DAK : public ScriptImpClass
  2505. {
  2506.     void Created(GameObject *obj);
  2507.     bool CanDrop;
  2508. };
  2509.  
  2510. void MX0_A03_GDI_TANK_DROP_ZONE_DAK::Created(GameObject *obj)
  2511. {
  2512.     //Created assumed
  2513.     if(CanDrop)
  2514.     {
  2515.         GameObject *DropLocation = Commands->Find_Object(1400057);
  2516.         Commands->Attach_Script(DropLocation, "Test_Cinematic", "XG_A03_Tank_Drop.txt");
  2517.         CanDrop = false;
  2518.     }
  2519. }
  2520.  
  2521. class MX0_A03_CONTROLLER_DAK : public ScriptImpClass
  2522. {
  2523.     void Register_Auto_Save_Variables();
  2524.     void Created(GameObject *obj);
  2525.     void Custom(GameObject *obj,int type,int param,GameObject *sender);
  2526.     int SenderID1;
  2527.     int SenderID2;
  2528.     int SenderID3;
  2529.     int SenderID4;
  2530.     int SenderID5;
  2531.     int SenderID6;
  2532.     int SenderID7;
  2533.     int Counter1;
  2534.     int Counter2;
  2535.     int SenderID8;
  2536.     int SenderID9;
  2537.     int Unknown;
  2538.     bool Received408;
  2539.     bool Received415;
  2540.     bool Toggle405;
  2541.     int Counter3;
  2542. };
  2543.  
  2544. void MX0_A03_CONTROLLER_DAK::Register_Auto_Save_Variables()
  2545. {
  2546.     Auto_Save_Variable(&SenderID1, 4, 1);
  2547.     Auto_Save_Variable(&SenderID5, 4, 2);
  2548.     Auto_Save_Variable(&SenderID6, 4, 3);
  2549.     Auto_Save_Variable(&SenderID7, 4, 4);
  2550.     Auto_Save_Variable(&SenderID4, 4, 5);
  2551.     Auto_Save_Variable(&SenderID2, 4, 6);
  2552.     Auto_Save_Variable(&SenderID3, 4, 7);
  2553.     Auto_Save_Variable(&Counter1, 4, 8);
  2554.     Auto_Save_Variable(&Counter2, 4, 9);
  2555.     Auto_Save_Variable(&SenderID8, 4, 10);
  2556.     Auto_Save_Variable(&SenderID9, 4, 11);
  2557.     Auto_Save_Variable(&Unknown, 4, 12);
  2558.     Auto_Save_Variable(&Received408, 1, 14);
  2559.     Auto_Save_Variable(&Counter3, 4, 15);
  2560.     Auto_Save_Variable(&Received415, 1, 16);
  2561.     Auto_Save_Variable(&Toggle405, 1, 17);
  2562. }
  2563.  
  2564. void MX0_A03_CONTROLLER_DAK::Created(GameObject *obj)
  2565. {
  2566.     Counter3 = 1;
  2567.     Received408 = false;
  2568.     Received415 = false;
  2569.     Counter1 = 0;
  2570.     Counter2 = 0;
  2571.     Toggle405 = true;
  2572. }
  2573.  
  2574. void MX0_A03_CONTROLLER_DAK::Custom(GameObject *obj,int type,int param,GameObject *sender)
  2575. {
  2576.     if(!type)
  2577.     {
  2578.         if(Received408 && Received415 && Toggle405)
  2579.         {
  2580.             Commands->Send_Custom_Event(obj, obj, 405, 0, 0);
  2581.             GameObject *SearchObj = Commands->Find_Object(1400069);
  2582.             Commands->Send_Custom_Event(obj, SearchObj, 414, 0, 0);
  2583.         }
  2584.     }
  2585.     else if(type == 403)
  2586.         Counter1++;
  2587.     else if(type == 404)
  2588.         Counter1--;
  2589.     else if(type == 406)
  2590.         Counter2++;
  2591.     else if(type == 407)
  2592.     {
  2593.         Counter2--;
  2594.         if(!Counter2 && Counter3 < 5 && !Received408)
  2595.         {
  2596.             GameObject *SearchObj = Commands->Find_Object(1400152);
  2597.             Vector3 Pos = Commands->Get_Position(SearchObj);
  2598.             GameObject *CinObject = Commands->Create_Object("Invisible_Object", Pos);
  2599.             Commands->Attach_Script(CinObject, "Test_Cinematic", "MX0_A03_NOD_LedgeDrop.txt");
  2600.             Counter3++;
  2601.         }
  2602.     }
  2603.     else if(type == 401)
  2604.     {
  2605.         Commands->Scale_AI_Awareness(2.000000, 1.000000);
  2606.         GameObject *SearchObj1 = Commands->Find_Object(1400042);
  2607.         if(SearchObj1)
  2608.         {
  2609.             Commands->Debug_Message("***** sending custom, dropping humvee, attaching script\n");
  2610.             Commands->Attach_Script(SearchObj1, "Test_Cinematic", "XG_A03_HumveeDrop_B.txt");
  2611.         }
  2612.         GameObject *Buggy = Commands->Find_Object(1400081);
  2613.         Commands->Send_Custom_Event(obj, Buggy, 1, 0, 0);
  2614.         GameObject *SearchObj2 = Commands->Find_Object(SenderID2);
  2615.         Commands->Attach_Script(SearchObj2, "MX0_A03_GDI_TROOPER_ONE", "");
  2616.         Commands->Send_Custom_Event(obj, SearchObj2, 1, 0, 2);
  2617.         GameObject SearchObj3 = Commands->Find_Object(1400150);
  2618.         Commands->Send_Custom_Event(obj, SearchObj3, 417, 0, 0);
  2619.     }
  2620.     else if(type == 415)
  2621.     {
  2622.         Received415 = true;
  2623.         Commands->Send_Custom_Event(obj, obj, 0, 0, 0);
  2624.     }
  2625.     else if(type == 9035)
  2626.     {
  2627.         switch(param)
  2628.         {
  2629.             case 1:
  2630.                 SenderID1 = Commands->Get_ID(sender);
  2631.                 break;
  2632.             case 2:
  2633.                 Commands->Send_Custom_Event(obj, sender, 9035, SenderID1, 0);
  2634.                 break;
  2635.             case 3:
  2636.                 SenderID5 = Commands->Get_ID(sender);
  2637.                 break;
  2638.             case 4:
  2639.                 Commands->Send_Custom_Event(obj, sender, 9035, SenderID5, 0);
  2640.                 break;
  2641.             case 5:
  2642.                 SenderID6 = Commands->Get_ID(sender);
  2643.                 break;
  2644.             case 6:
  2645.                 Commands->Send_Custom_Event(obj, sender, 9035, SenderID6, 0);
  2646.                 break;
  2647.             case 7:
  2648.                 SenderID7 = Commands->Get_ID(sender);
  2649.                 break;
  2650.             case 8:
  2651.                 Commands->Send_Custom_Event(obj, sender, 9035, SenderID7, 0);
  2652.                 break;
  2653.             case 9:
  2654.                 SenderID4 = Commands->Get_ID(sender);
  2655.                 break;
  2656.             case 10:
  2657.                 Commands->Send_Custom_Event(obj, sender, 9035, SenderID4, 0);
  2658.                 break;
  2659.             case 11:
  2660.                 SenderID2 = Commands->Get_ID(sender);
  2661.                 Commands->Debug_Message("***** DAK ***** A03: recieved trooper1 ID.\n");
  2662.                 break;
  2663.             case 12:
  2664.                 Commands->Send_Custom_Event(obj, sender, 9035, SenderID2, 0);
  2665.                 break;
  2666.             case 13:
  2667.                 SenderID3 = Commands->Get_ID(sender);
  2668.                 Commands->Attach_Script(obj, "M00_Send_Object_ID", "1500017,10,1.0f");
  2669.                 break;
  2670.             case 14:
  2671.                 Commands->Send_Custom_Event(obj, sender, 9035, SenderID3, 0);
  2672.                 break;
  2673.             case 15:
  2674.                 SenderID8 = Commands->Get_ID(sender);
  2675.                 break;
  2676.             case 16:
  2677.                 Commands->Send_Custom_Event(obj, sender, 9035, SenderID8, 0);
  2678.                 break;
  2679.             case 17:
  2680.                 SenderID9 = Commands->Get_ID(sender);
  2681.                 break;
  2682.             case 18:
  2683.                 Commands->Send_Custom_Event(obj, sender, 9035, SenderID9, 0);
  2684.                 break;
  2685.         }
  2686.     }
  2687.     else if(type == 408) // Guessed it was kinda weird how it was put together but i think its 408
  2688.     {
  2689.         Received408 = true;
  2690.         GameObject *SearchObj1 = Commands->Find_Object(SenderID2);
  2691.         if(Toggle405)
  2692.         {
  2693.             if(SearchObj1)
  2694.             {
  2695.                 GameObject *SearchObj2 = COmmands->Find_Object(SenderID2);
  2696.                 int MX0_A03_08 = Commands->Create_Conversation("MX0_A03_08", 0, 0, false);
  2697.                 Commands->Join_Conversatoin(SearchObj2, MX0_A03_08, false, false, true);
  2698.                 Commands->Start_Conversation(MX0_A03_08, 0);
  2699.             }
  2700.             else
  2701.                 Commands->Send_Custom_Event(obj, obj, 0, 0, 0);
  2702.         }
  2703.         Commands->Send_Custom_Event(obj, SearchObj1, 4, 0, 0);
  2704.         Commands->Send_Custom_Event(obj, obj, 0, 0, 0);
  2705.     }
  2706.     else if(type == 405) // Guessed it was kinda weird how it was put together but i think its 405
  2707.     {
  2708.         Toggle405 = false;
  2709.         GameObject *SearchObj1 = Commands->Find_Object(1500051);
  2710.         Vector3 Pos = Commands->Get_Position(SearchObj1);
  2711.         GameObject *CinObject = Commands->Create_Object("Invisible_Object", Pos);
  2712.         Commands->Set_Facing(CinObject, 0);
  2713.         Commands->Attach_Script(CinObject, "Test_Cinematic", "MX0_GDI_TroopDrop_Area4.txt");
  2714.         GameObject *SearchObj2 = Commands->Find_Object(SenderID4);
  2715.         if(SearchObj2)
  2716.         {
  2717.             Commands->Action_Reset(SearchObj2, 100);
  2718.             ActionParamsStruct Params;
  2719.             Params.Set_Basic(this, 91, 1);
  2720.             Params.Set_Movement(0, 1.000000, 1.000000);
  2721.             Params.WaypathID = 1400058;
  2722.             Params.MovePathfind = true;
  2723.             Commands->Action_Goto(SearchObj2, Params);
  2724.         }
  2725.         GameObject *SearchObj3 = Commands->Find_Object(SenderID1);
  2726.         Commands->Send_Custom_Event(obj, SearchObj3, 3, 0, 1.250000);
  2727.         GameObject *SearchObj4 = Commands->Find_Object(SenderID2);
  2728.         Commadns->Send_Custom_Event(obj, SearchObj4, 2, 0, 0);
  2729.     }
  2730. }
  2731.  
  2732. class MX0_A03_HUMVEE : public ScriptImpClass
  2733. {
  2734.     void Register_Auto_Save_Variables();
  2735.     void Created(GameObject *obj);
  2736.     void Action_Complete(GameObject *obj,int action_id,ActionCompleteReason complete_reason);
  2737.     void Custom(GameObject *obj,int type,int param,GameObject *sender);
  2738.     int Targets[4];
  2739.     int TargetIndex;
  2740.     int CurTarget;
  2741. };
  2742.  
  2743. void MX0_A03_HUMVEE::Register_Auto_Save_Variables()
  2744. {
  2745.     Auto_Save_Variable(&Targets, 12, 1);
  2746.     Auto_Save_Variable(&TargetIndex, 4, 2);
  2747.     Auto_Save_Variable(&CurTarget, 4, 3);
  2748. }
  2749.  
  2750. void MX0_A03_HUMVEE::Created(GameObject *obj)
  2751. {
  2752.     TargetIndex = 1;
  2753.     Targets[1] = 1400081; // Buggy
  2754.     Targets[2] = 1400001; // Harvy
  2755.     Commands->Attach_Script(obj, "M00_Send_Object_ID", "1400041,1,0");
  2756.     Commands->Attach_Script(obj, "M00_Send_Object_ID", "1500017,1,1.0f");
  2757.     Commands->Attach_Script(obj, "M00_Send_Object_ID", "1500020,1,1.0f");
  2758.     int MX0_A03_01 = Commands->Create_Conversation("MX0_A03_01", 0, 0, false);
  2759.     Commands->Join_Conversation(0, MX0_A03_01, true, true, true);
  2760.     Commands->Start_Conversation(MX0_A03_01, 1);
  2761.     ActionParamsStruct Params;
  2762.     Params.Set_Basic(this, 90, 0);
  2763.     Params.Set_Movement(0, 0.500000, 1.000000);
  2764.     Params.WaypathID = 1400043;
  2765.     Params.MovePathfind = true;
  2766.     Commands->Action_Goto(obj, Params);
  2767. }
  2768.  
  2769. void MX0_A03_HUMVEE::Action_Complete(GameObject *obj,int action_id,ActionCompleteReason complete_reason)
  2770. {
  2771.     if(action_id == 0)
  2772.     {
  2773.         CurTarget = Targets[TargetIndex];
  2774.         GameObject *TargetObj  = Commands->Find_Object(CurTarget);
  2775.         if(TargetObj)
  2776.         {
  2777.             ActionParamsStruct Params;
  2778.             Params.Set_Basic(this, 90, 1);
  2779.             Params.Set_Attack(TargetObj, 60.000000, 0.250000, true);
  2780.             Commands->Action_Attack(obj, Params);
  2781.         }
  2782.     }
  2783.     else if(action_id == 1)
  2784.     {
  2785.         TargetIndex++;
  2786.         CurTarget = Targets[TargetIndex];
  2787.         GameObject *TargetObj  = Commands->Find_Object(CurTarget);
  2788.         if(TargetObj)
  2789.         {
  2790.             ActionParamsStruct Params;
  2791.             Params.Set_Basic(this, 90, 1);
  2792.             Params.Set_Attack(TargetObj, 60.000000, 0.250000, true);
  2793.             Commands->Action_Attack(obj, Params);
  2794.         }
  2795.         else
  2796.             Commands->Innate_Enable(obj);
  2797.     }
  2798. }
  2799.  
  2800. void MX0_A03_HUMVEE::Custom(GameObject *obj,int type,int param,GameObject *sender)
  2801. {
  2802.     if(type == 1)
  2803.     {
  2804.         ActionParamsStruct Params;
  2805.         Params.Set_Basic(this, 90, 1);
  2806.         Params.Set_Attack(0, 20.000000, 0, true);
  2807.         Commands->Modify_Action(obj, 1, Params, false, true);
  2808.         float Random = Commands->Get_Random(1.000000, 3.000000);
  2809.         Commands->Send_Custom_Event(obj, obj, 2, 0, Random);
  2810.     }
  2811.     else if(type == 2)
  2812.     {
  2813.         GameObject *TargetObj  = Commands->Find_Object(CurTarget);
  2814.         if(TargetObj)
  2815.         {
  2816.             ActionParamsStruct Params;
  2817.             Params.Set_Basic(this, 90, 1);
  2818.             Params.Set_Attack(TargetObj, 60.000000, 0.250000, true); // Most likely...
  2819.             Commands->Modify_Action(obj, 1, Params, false, true);
  2820.             float Random = Commands->Get_Random(3.000000, 6.000000);
  2821.             Commands->Send_Custom_Event(obj, obj, 1, 0, Random);
  2822.         }
  2823.     }
  2824.     else if(type == 3)
  2825.     {
  2826.         Commands->Debug_Message("***** DAK ***** Humvee: Recieved custom to move to section 4.\n");
  2827.         Commands->Action_Reset(obj, 100);
  2828.         ActionParamsStruct Params;
  2829.         Params.Set_Basic(this, 90, 2);
  2830.         Params.Set_Movement(0, 0.500000, 1.000000);
  2831.         Params.WaypathID = 1400070;
  2832.         Params.MovePathfind = true;
  2833.         Commands->Action_Goto(obj, Params);
  2834.     }
  2835. }
  2836.  
  2837. class MX0_A03_TANK : public ScriptImpClass
  2838. {
  2839.     void Register_Auto_Save_Variables();
  2840.     void Created(GameObject *obj);
  2841.     void Action_Complete(GameObject *obj,int action_id,ActionCompleteReason complete_reason);
  2842.     void Custom(GameObject *obj,int type,int param,GameObject *sender);
  2843.     int Targets[5];
  2844.     int TargetIndex;
  2845.     int CurTarget;  
  2846. };
  2847.  
  2848. void MX0_A03_TANK::Register_Auto_Save_Variables()
  2849. {
  2850.     Auto_Save_Variable(&Targets, 20, 1);
  2851.     Auto_Save_Variable(&TargetIndex, 4, 2);
  2852.     Auto_Save_Variable(&CurTarget, 4, 3);
  2853. }
  2854.  
  2855. void MX0_A03_TANK::Created(GameObject *obj)
  2856. {
  2857.     TargetIndex = 1;
  2858.     Commands->Attach_Script(obj, "M00_Send_Object_ID", "1400041,9,0");
  2859.     Commands->Attach_Script(obj, "M00_Send_Object_ID", "1500017,3,1.0f");
  2860.     Commands->Attach_Script(obj, "M00_Send_Object_ID", "1500020,3,1.0f");
  2861.     Targets[1] = 1400144; // Left turret
  2862.     Targets[2] = 1400146; // Right turret
  2863.     Targets[3] = 1400001; // Harvy
  2864.     Targets[4] = 1400081; // Buggy
  2865.     Commands->Send_Custom_Event(obj, obj, 0, 0, 1.000000);
  2866. }
  2867.  
  2868. void MX0_A03_TANK::Action_Complete(GameObject *obj,int action_id,ActionCompleteReason complete_reason)
  2869. {
  2870.     if(!action_id)
  2871.     {
  2872.         TargetIndex++;
  2873.         Commands->Send_Custom_Event(obj, obj, 0, 0, 1.000000);
  2874.     }
  2875. }
  2876.  
  2877. void MX0_A03_TANK::Custom(GameObject *obj,int type,int param,GameObject *sender)
  2878. {
  2879.     if(!type)
  2880.     {
  2881.         CurTarget = Targets[TargetIndex];
  2882.         GameObject *TargetObj  = Commands->Find_Object(CurTarget);
  2883.         if(TargetObj)
  2884.         {
  2885.             ActionParamsStruct Params;
  2886.             Params.Set_Basic(this, 90, 0);
  2887.             Params.Set_Attack(TargetObj, 60.000000, 0.250000, true);
  2888.             Commands->Action_Attack(obj, Params);
  2889.         }
  2890.     }
  2891. }
  2892.  
  2893. class MX0_A03_NOD_BUGGIE : public ScriptImpClass
  2894. {
  2895.     void Custom(GameObject *obj,int type,int param,GameObject *sender);
  2896.     void Action_Complete(GameObject *obj,int action_id,ActionCompleteReason complete_reason);
  2897.     void Killed(GameObject *obj,GameObject *killer);
  2898. };
  2899.  
  2900. void MX0_A03_NOD_BUGGIE::Custom(GameObject *obj,int type,int param,GameObject *sender)
  2901. {
  2902.     if(type == 1)
  2903.     {
  2904.         ActionParamsStruct Params;
  2905.         Params.Set_Basic(this, 0, 0); // 0 priority is strange, but I couldn't really find another one.
  2906.         Params.Set_Movement(0, 0.250000, 1.000000);
  2907.         Params.WaypathID = 1400096;
  2908.         Params.MovePathfind = true;
  2909.         Commands->Action_Goto(obj, Params);
  2910.     }
  2911. }
  2912.  
  2913. void MX0_A03_NOD_BUGGIE::Action_Complete(GameObject *obj,int action_id,ActionCompleteReason complete_reason)
  2914. {
  2915.     if(!action_id)
  2916.     {
  2917.         ActionParamsStruct Params;
  2918.         Params.Set_Basic(this, 0, 0); // 0 priority is strange, but I couldn't really find another one.
  2919.         Params.Set_Movement(0, 0.330000, 1.000000);
  2920.         Params.WaypathID = 1400096;
  2921.         Params.MovePathfind = true;
  2922.         Commands->Action_Goto(obj, Params);
  2923.     }
  2924. }
  2925.  
  2926. void MX0_A03_NOD_BUGGIE::Killed(GameObject *obj,GameObject *killer)
  2927. {
  2928.     Vector3 Pos = Commands->Get_Position(obj);
  2929.     GameObject *Minigunner = Commands->Create_Object("Nod_Minigunner_0", Pos);
  2930.     Commands->Attach_Script(Minigunner, "MX0_A03_NOD_TROOPER_TIB_DEATH", "");
  2931. }
  2932.  
  2933. class MX0_A03_NOD_TROOPER_TIB_DEATH : public ScriptImpClass
  2934. {
  2935.     void Killed(GameObject *obj,GameObject *killer);
  2936.     void Custom(GameObject *obj,int type,int param,GameObject *sender);
  2937.     int ParamNumber;
  2938. };
  2939.  
  2940. void MX0_A03_NOD_TROOPER_TIB_DEATH::Killed(GameObject *obj,GameObject *killer)
  2941. {
  2942.     GameObject *Controller = Commands->Find_Object(1400041);
  2943.     Commands->Send_Custom_Event(obj, Controller, 415, 0, 2.000000);
  2944. }
  2945.  
  2946. void MX0_A03_NOD_TROOPER_TIB_DEATH::Custom(GameObject *obj,int type,int param,GameObject *sender)
  2947. {
  2948.     if(type == 9035)
  2949.         ParamNumber = param;
  2950. }
  2951.  
  2952. class MX0_A03_NOD_HARVESTER : public ScriptImpClass
  2953. {
  2954.     void Created(GameObject *obj);
  2955.     void Action_Complete(GameObject *obj,int action_id,ActionCompleteReason complete_reason);
  2956.     void Animation_Complete(GameObject *obj,const char *animation_name);
  2957.     void Custom(GameObject *obj,int type,int param,GameObject *sender);
  2958.     void Killed(GameObject *obj,GameObject *killer);
  2959.     bool WayBegin;
  2960. };
  2961.  
  2962. void MX0_A03_NOD_HARVESTER::Created(GameObject *obj)
  2963. {
  2964.     Commands->Set_Health(obj, 1200.000000);
  2965.     WayBegin = false;
  2966.     ActionParamsStruct Params;
  2967.     Params.Set_Basic(this, 0, 0);
  2968.     Params.Set_Movement(0, 0.250000, 1.000000);
  2969.     Params.WaypathID = 1400093;
  2970.     Params.MovePathfind = true;
  2971.     Commands->Action_Goto(obj, Params);
  2972. }
  2973.  
  2974. void MX0_A03_NOD_HARVESTER::Action_Complete(GameObject *obj,int action_id,ActionCompleteReason complete_reason)
  2975. {
  2976.     Commands->Set_Animation(obj, "V_NOD_HRVSTR.V_NOD_HRVSTR", false, "", 0, -1, false); // or -4 dunno if that makes sense
  2977. }
  2978.  
  2979. void MX0_A03_NOD_HARVESTER::Animation_Complete(GameObject *obj,const char *animation_name)
  2980. {
  2981.     if(WayBegin)
  2982.     {
  2983.         WayBegin = false;
  2984.         ActionParamsStruct Params;
  2985.         Params.Set_Basic(this, 0, 0);
  2986.         Params.Set_Movement(0, 0.250000, 1.000000);
  2987.         Params.WaypathID = 1400093;
  2988.         Params.MovePathfind = true;
  2989.         Commands->Action_Goto(obj, Params);
  2990.     }
  2991.     else
  2992.     {
  2993.         WayBegin = true;
  2994.         ActionParamsStruct Params;
  2995.         Params.Set_Basic(this, 0, 0);
  2996.         Params.Set_Movement(0, 0.250000, 1.000000);
  2997.         Params.WaypathID = 1400093;
  2998.         Params.WaypointStartID = 1400095;
  2999.         Params.WaypointEndID = 1400094;
  3000.         Params.MovePathfind = true;
  3001.         Commands->Action_Goto(obj, Params);
  3002.     }
  3003. }
  3004.  
  3005. void MX0_A03_NOD_HARVESTER::Custom(GameObject *obj,int type,int param,GameObject *sender)
  3006. {
  3007.     if(type == 413)
  3008.         Commands->Apply_Damage(obj, 200, "EXPLOSIVE", 0);
  3009. }
  3010.  
  3011. void MX0_A03_NOD_HARVESTER::Killed(GameObject *obj,GameObject *killer)
  3012. {
  3013.     GameObject *Controller = Commands->Find_Object(1400041);
  3014.     Commands->Send_Custom_Event(obj, Controller, 408, 0, 0);
  3015. }
  3016.  
  3017. class MX0_A03_GDI_TROOPER_ONE : public ScriptImpClass
  3018. {
  3019.     void Created(GameObject *obj);
  3020.     void Action_Complete(GameObject *obj,int action_id,ActionCompleteReason complete_reason);
  3021.     void Custom(GameObject *obj,int type,int param,GameObject *sender);
  3022.     bool HarvyAlive;
  3023. };
  3024.  
  3025. void MX0_A03_GDI_TROOPER_ONE::Created(GameObject *obj)
  3026. {
  3027.     Commands->Attach_Script(obj, "M00_Send_Object_ID", "1500017,3,1.0f");
  3028.     Commands->Innate_Disable(obj);
  3029.     HarvyAlive = true;
  3030. }
  3031.  
  3032. void MX0_A03_GDI_TROOPER_ONE::Action_Complete(GameObject *obj,int action_id,ActionCompleteReason complete_reason)
  3033. {
  3034.     if(action_id == 1)
  3035.     {
  3036.         Commands->Set_Innate_Is_Stationary(obj, true);
  3037.         Commands->Innate_Enable(obj);
  3038.     }
  3039. }
  3040.  
  3041. void MX0_A03_GDI_TROOPER_ONE::Custom(GameObject *obj,int type,int param,GameObject *sender)
  3042. {
  3043.     if(type == 1)
  3044.     {
  3045.         Commands->Action_Reset(obj, 100);
  3046.         ActionParamsStruct Params;
  3047.         Params.Set_Basic(this, 91, 0);
  3048.         Params.Set_Movement(0, 0.800000, 1.000000);
  3049.         Params.WaypathID = 1400117;
  3050.         Params.MovePathfind = true;
  3051.         Commands->Action_Goto(obj, Params);
  3052.     }
  3053.     else if(type == 2)
  3054.     {
  3055.         Commands->Action_Reset(obj, 100);
  3056.         ActionParamsStruct Params;
  3057.         Params.Set_Basic(this, 91, 2);
  3058.         Params.Set_Movement(0, 0.800000, 1.000000);
  3059.         Params.WaypathID = 1400132;
  3060.         Params.MovePathfind = true;
  3061.         Commands->Action_Goto(obj, Params);
  3062.     }
  3063.     else if(type == 3)
  3064.     {
  3065.         if(HarvyAlive)
  3066.         {
  3067.             int MX0_A03_05 = Commands->Create_Conversation("MX0_A03_05", 0, 0, true);
  3068.             Commands->Join_Conversation(obj, MX0_A03_05, false, false, true);
  3069.             Commands->Start_Conversation(MX0_A03_05, 0);
  3070.             Commands->Send_Custom_Event(obj, obj, 3, 0, 7.000000);
  3071.         }
  3072.     }
  3073.     else if(type == 4)
  3074.         HarvyAlive = false;
  3075.     else if(type == 5)
  3076.     {
  3077.         Commands->Action_Reset(obj, 100);
  3078.         GameObject *Buggy = Commands->Find_Object(1400081);
  3079.         if(Buggy)
  3080.         {
  3081.             ActionParamsStruct Params;
  3082.             Params.Set_Basic(90, 3);
  3083.             Params.Set_Attack(Buggy, 60.000000, 0.250000, true);
  3084.             Commands->Action_Attack(obj, Params);
  3085.         }
  3086.     }
  3087.     else if(type == 0)
  3088.     {
  3089.         Commands->Action_Reset(obj, 100);
  3090.         ActionParamsStruct Params;
  3091.         Params.Set_Basic(this, 91, 1);
  3092.         Params.Set_Movement(0, 0.800000, 1.000000);
  3093.         Params.WaypathID = 1400124;
  3094.         Params.MovePathfind = true;
  3095.         Commands->Action_Goto(obj, Params);
  3096.     }
  3097. }
  3098.  
  3099. class MX0_A03_HAVOC_TANK : public ScriptImpClass
  3100. {
  3101.     void Custom(GameObject *obj,int type,int param,GameObject *sender);
  3102.     bool Trigger;
  3103. };
  3104.  
  3105. void MX0_A03_HAVOC_TANK::Custom(GameObject *obj,int type,int param,GameObject *sender)
  3106. {
  3107.     if(type == CUSTOM_EVENT_VEHICLE_ENTERED && Trigger)
  3108.     {
  3109.         GameObject *Controller = Commands->Find_Object(1400041);
  3110.         Commands->Send_Custom_Event(obj, Controller, 401, 0, 0);
  3111.         Trigger = false;
  3112.     }
  3113. }
  3114.  
  3115. class MX0_A03_FIRST_PLAYER_ZONE : public ScriptImpClass
  3116. {
  3117.     void Register_Auto_Save_Variables();
  3118.     void Entered(GameObject *obj,GameObject *enterer);
  3119.     int UnknownID;
  3120.     bool Trigger;
  3121. };
  3122.  
  3123. void MX0_A03_FIRST_PLAYER_ZONE::Register_Auto_Save_Variables()
  3124. {
  3125.     Auto_Save_Variable(&UnknownID, 4, 1);
  3126.     Auto_Save_Variable(&Trigger, 1, 1);
  3127. }
  3128.  
  3129. void MX0_A03_FIRST_PLAYER_ZONE::Entered(GameObject *obj,GameObject *enterer)
  3130. {
  3131.     if(Trigger)
  3132.     {
  3133.         Trigger = false;
  3134.         GameObject *Controller = Commands->Find_Object(1400041);
  3135.         GameObject *SearchObj = Commands->Find_Object(UnknownID);
  3136.         if(SearchObj)
  3137.         {
  3138.             Commands->Action_Reset(SearchObj, 100);
  3139.             Commands->Send_Custom_Event(obj, SearchObj, 0, 0, 0);
  3140.         }
  3141.         GameObject *DropLocationObj = Commands->Find_Object(1400152);
  3142.         Vector3 DropLocation = Commands->Get_Position(DropLocationObj);
  3143.         GameObject *CinObject = Commands->Create_Object("Invisible_Object", DropLocation);
  3144.         Commands->Attach_Script(CinObject, "Test_Cinematic", "MX0_A03_NOD_LedgeDrop.txt");
  3145.     }
  3146. }
  3147.  
  3148. class MX0_A03_TROOPER_ONE_TEST : public ScriptImpClass
  3149. {
  3150.     void Created(GameObject *obj);
  3151. };
  3152.  
  3153. void MX0_A03_TROOPER_ONE_TEST::Created(GameObject *obj)
  3154. {
  3155.     // Created assumed
  3156.     Commands->Attach_Script(obj, "M00_Send_Object_ID", "1400041,11,0.0f");
  3157. }
  3158.  
  3159. class MX0_A03_NOD_TURRET : public ScriptImpClass
  3160. {
  3161.     void Created(GameObject *obj);
  3162.     void Killed(GameObject *obj,GameObject *killer);
  3163. };
  3164.  
  3165. void MX0_A03_NOD_TURRET::Created(GameObject *obj)
  3166. {
  3167.     GameObject *Controller = Commands->Find_Object(1400041);
  3168.     Commands->Send_Custom_Event(obj, Controller, 403, 0, 0);
  3169. }
  3170.  
  3171. void MX0_A03_NOD_TURRET::Killed(GameObject *obj,GameObject *killer)
  3172. {
  3173.     GameObject *Controller = Commands->Find_Object(1400041);
  3174.     Commands->Send_Custom_Event(obj, Controller, 404, 0, 0);
  3175. }
  3176.  
  3177. class MX0_A03_END_ZONE : public ScriptImpClass
  3178. {
  3179.     void Entered(GameObject *obj,GameObject *enterer);
  3180.     void Custom(GameObject *obj,int type,int param,GameObject *sender);
  3181.     int UnknownID;
  3182.     bool Trigger;
  3183. };
  3184.  
  3185. void MX0_A03_END_ZONE::Entered(GameObject *obj,GameObject *enterer)
  3186. {
  3187.     if(Trigger)
  3188.     {
  3189.         Trigger = false;
  3190.         GameObject *Controller = Commands->Find_Object(1400041);
  3191.         Commands->Send_Custom_Event(obj, Controller, 9035, 12, 0);
  3192.         GameObject *SearchObj = Commands->Find_Object(UnknownID);
  3193.         Commands->Send_Custom_Event(obj, SearchObj, 4, 0, 0);
  3194.         Commands->Send_Custom_Event(obj, Controller, 405, 1, 0);
  3195.     }
  3196. }
  3197.  
  3198. void MX0_A03_END_ZONE::Custom(GameObject *obj,int type,int param,GameObject *sender)
  3199. {
  3200.     if(type == 414)
  3201.         Trigger = false;
  3202.     else if(type == 9035)
  3203.         UnknownID = param;
  3204. }
  3205.  
  3206. class MX0_A02_Controller : public ScriptImpClass
  3207. {
  3208.     void Register_Auto_Save_Variables();
  3209.     void Created(GameObject *obj);
  3210.     void Custom(GameObject *obj,int type,int param,GameObject *sender);
  3211.     void Timer_Expired(GameObject *obj,int number);
  3212.     int StoreObjIDs[9];
  3213.     int HumveeID;
  3214.     int MedID;
  3215.     int APCID;
  3216.     int BlockageID;
  3217.     bool DidCreateBeginning;
  3218.     bool CallReinforcements;
  3219.     bool Unknown1;
  3220.     bool NodActive;
  3221.     bool CanSendCustomToUnknown;
  3222.     bool DroppedEngineers;
  3223.     bool Unknown2;
  3224.     bool Area3Started;
  3225.     int SendCustomTo;
  3226.     int ReinforcementsIndex;
  3227.     int ParamObjID1;
  3228.     int ParamObjID2;
  3229.     int WhatEnemy;
  3230.     int StoreIndex;
  3231.     int SenderID1;
  3232.     int SenderID2;
  3233.     int SendParam;
  3234.     int SendParam2;
  3235.     int EnemyDeaths;
  3236.     int WhatIndex;
  3237. };
  3238.  
  3239. void MX0_A02_Controller::Register_Auto_Save_Variables() // int this
  3240. {
  3241.     Auto_Save_Variable(&StoreObjIDs, 36, 1);
  3242.     Auto_Save_Variable(&CallReinforcements, 1, 2);
  3243.     Auto_Save_Variable(&ReinforcementsIndex, 4, 3);
  3244.     Auto_Save_Variable(&HumveeID, 4, 4);
  3245.     Auto_Save_Variable(&MedID, 4, 5);
  3246.     Auto_Save_Variable(&APCID, 4, 6);
  3247.     Auto_Save_Variable(&ParamObjID1, 4, 7);
  3248.     Auto_Save_Variable(&ParamObjID2, 4, 8);
  3249.     Auto_Save_Variable(&Unknown1, 1, 9);
  3250.     Auto_Save_Variable(&WhatEnemy, 4, 10);
  3251.     Auto_Save_Variable(&NodActive, 1, 11);
  3252.     Auto_Save_Variable(&StoreIndex, 4, 12);
  3253.     Auto_Save_Variable(&CanSendCustomToUnknown, 1, 13);
  3254.     Auto_Save_Variable(&BlockageID, 4, 14);
  3255.     Auto_Save_Variable(&DroppedEngineers, 1, 15);
  3256.     Auto_Save_Variable(&Unknown2, 1, 16);
  3257.     Auto_Save_Variable(&SendCustomTo, 4, 17);
  3258.     Auto_Save_Variable(&SenderID1, 4, 18);
  3259.     Auto_Save_Variable(&SenderID2, 4, 19);
  3260.     Auto_Save_Variable(&SendParam, 4, 20);
  3261.     Auto_Save_Variable(&SendParam2, 4, 21);
  3262.     Auto_Save_Variable(&Area3Started, 1, 22);
  3263.     Auto_Save_Variable(&EnemyDeaths, 4, 23);
  3264.     Auto_Save_Variable(&WhatIndex, 4, 24);
  3265.     Auto_Save_Variable(&DidCreateBeginning, 1, 25);
  3266. }
  3267.  
  3268. void MX0_A02_Controller::Created(GameObject *obj)
  3269. {
  3270.     DidCreateBeginning = false;
  3271.     CallReinforcements = false;
  3272.     Unknown1 = false;
  3273.     NodActive= true;
  3274.     CanSendCustomToUnknown = false;
  3275.     DroppedEngineers = false;
  3276.     Unknown2 = false;
  3277.     Area3Started = false;
  3278.     SendCustomTo = 0;
  3279.     ReinforcementsIndex = 0;
  3280.     HumveeID = 0;
  3281.     MedID = 0;
  3282.     APCID = 0;
  3283.     ParamObjID1 = 0;
  3284.     ParamObjID2 = 0;
  3285.     BlockageID = 0;
  3286.     WhatEnemy = 0;
  3287.     StoreIndex = 0;
  3288.     SenderID1 = 0;
  3289.     SenderID2 = 0;
  3290.     SendParam = 0;
  3291.     SendParam2 = 0;
  3292.     EnemyDeaths = 0;
  3293.     WhatIndex = 1;
  3294. }
  3295.  
  3296. void MX0_A02_Controller::Custom(GameObject *obj,int type,int param,GameObject *sender)
  3297. {
  3298.     if(type == 203)
  3299.     {
  3300.         int Index = 8;
  3301.         do
  3302.         {
  3303.             GameObject *SearchObj = Commands->Find_Object(StoreObjIDs[x]);
  3304.             Commands->Send_Custom_Event(obj, SearchObj, 203, 0, 0);
  3305.             Index--;
  3306.         }
  3307.         while(x);
  3308.         Commands->Destroy_Object(obj);
  3309.     }
  3310.     else if(type == 225)
  3311.     {
  3312.         if(sender)
  3313.             Commands->Send_Custom_Event(obj, sender, 213, ParamObjID1, 0);
  3314.     }
  3315.     else if(type == 226)
  3316.     {
  3317.         if(sender)
  3318.             Commands->Send_Custom_Event(obj, sender, 214, ParamObjID2, 0);
  3319.     }
  3320.     else if(type == 223)
  3321.         ParamObjID1 = param;
  3322.     else if(type == 224)
  3323.         ParamObjID2 = param;
  3324.     else if(type == 202)
  3325.     {
  3326.         if(!DidCreateBeginning)
  3327.         {
  3328.             DidCreateBeginning = true;
  3329.             GameObject SearchObj1 = Commands->Find_Object(1100006);
  3330.             if(SearchObj1)
  3331.             {
  3332.                 Vector3 Pos = Commands->Get_Position(SearchObj1);
  3333.                 GameObject *Minigunner = Commands->Create_Object("MX0_GDI_MiniGunner_0_B", Pos);
  3334.                 if(Minigunner)
  3335.                 {
  3336.                     Commands->Attach_Script(Minigunner, "MX0_A02_ACTOR", "0");
  3337.                     StoreObjIDs[1] = Commands->Get_ID(Minigunner);
  3338.                     Commands->Send_Custom_Event(Minigunner, Minigunner, 204, 1, 0.100000);
  3339.                     Commands->Attach_Script(Minigunner, "M00_Send_Object_ID", "1400041,11,0.0f");
  3340.                 }
  3341.             }
  3342.             GameObject *SearchObj2 = Commands->Find_Object(1100010);
  3343.             if(SearchObj2)
  3344.             {
  3345.                 Vector3 Pos = Commands->Get_Position(SearchObj2);
  3346.                 GameObject *Officer = Commands->Create_Object("MX0_GDI_MiniGunner_1Off", Pos);
  3347.                 if(Officer)
  3348.                 {
  3349.                     Commands->Attach_Script(Officer, "MX0_A02_ACTOR", "0");
  3350.                     StoreObjIDs[2] = Commands->Get_ID(Officer);
  3351.                     Commands->Send_Custom_Event(Officer, Officer, 204, 2, 0.100000);
  3352.                 }
  3353.             }
  3354.             GameObject *SearchObj3 = Commands->Find_Object(1100008);
  3355.             if(SearchObj3)
  3356.             {
  3357.                 Vector3 Pos = Commands->Get_Position(SearchObj3);
  3358.                 GameObject *Rocketer = Commands->Create_Object("MX0_GDI_RocketSoldier_1Off", Pos);
  3359.                 if(Rocketer)
  3360.                 {
  3361.                     Commands->Attach_Script(Rocketer, "MX0_A02_ACTOR", "0");
  3362.                     StoreObjIDs[3] = Commands->Get_ID(Rocketer);
  3363.                     Commands->Send_Custom_Event(Rocketer, Rocketer, 204, 3, 0.100000);
  3364.                 }
  3365.             }
  3366.             GameObject *SearchObj4 = Commands->Find_Object(1100012);
  3367.             if(SearchObj4)
  3368.             {
  3369.                 Vector3 Pos = Commands->Get_Position(SearchObj4);
  3370.                 GameObject *Minigunner = Commands->Create_Object("MX0_GDI_MiniGunner_0", Pos);
  3371.                 if(Minigunner)
  3372.                 {
  3373.                     Commands->Attach_Script(Minigunner, "MX0_A02_ACTOR", "0");
  3374.                     StoreObjIDs[4] = Commands->Get_ID(Minigunner);
  3375.                     Commands->Send_Custom_Event(Minigunner, Minigunner, 204, 4, 0.100000);
  3376.                 }
  3377.             }
  3378.             GameObject *SearchObj5 = Commands->Find_Object(1100014);
  3379.             if(SearchObj5)
  3380.             {
  3381.                 Vector3 Pos = Commands->Get_Position(SearchObj5);
  3382.                 GameObject *Minigunner = Commands->Create_Object("MX0_GDI_MiniGunner_0", Pos);
  3383.                 if(Minigunner)
  3384.                 {
  3385.                     Commands->Attach_Script(Minigunner, "MX0_A02_ACTOR", "0");
  3386.                     StoreObjIDs[5] = Commands->Get_ID(Minigunner);
  3387.                     Commands->Send_Custom_Event(Minigunner, Minigunner, 204, 5, 0.100000);
  3388.                 }
  3389.             }
  3390.             GameObject *SearchObj6 = Commands->Find_Object(1100016);
  3391.             if(SearchObj6)
  3392.             {
  3393.                 Vector3 Pos = Commands->Get_Position(SearchObj6);
  3394.                 GameObject *Minigunner = Commands->Create_Object("MX0_GDI_MiniGunner_0", Pos);
  3395.                 if(Minigunner)
  3396.                 {
  3397.                     Commands->Attach_Script(Minigunner, "MX0_A02_ACTOR", "0");
  3398.                     StoreObjIDs[6] = Commands->Get_ID(Minigunner);
  3399.                     Commands->Send_Custom_Event(Minigunner, Minigunner, 204, 6, 0.100000);
  3400.                 }
  3401.             }
  3402.             GameObject *SearchObj7 = Commands->Find_Object(1100018);
  3403.             if(SearchObj7)
  3404.             {
  3405.                 Vector3 Pos = Commands->Get_Position(SearchObj7);
  3406.                 GameObject *Minigunner = Commands->Create_Object("MX0_Nod_Minigunner_0", Pos);
  3407.                 if(Minigunner)
  3408.                 {
  3409.                     Commands->Attach_Script(Minigunner, "MX0_A02_ACTOR", "0");
  3410.                     StoreObjIDs[7] = Commands->Get_ID(Minigunner);
  3411.                     Commands->Send_Custom_Event(Minigunner, Minigunner, 204, 7, 0.100000);
  3412.                 }
  3413.             }
  3414.             GameObject *SearchObj8 = Commands->Find_Object(1100020);
  3415.             if(SearchObj8)
  3416.             {
  3417.                 Vector3 Pos = Commands->Get_Position(SearchObj8);
  3418.                 GameObject *Minigunner = Commands->Create_Object("MX0_Nod_Minigunner_0", Pos);
  3419.                 if(Minigunner)
  3420.                 {
  3421.                     Commands->Attach_Script(Minigunner, "MX0_A02_ACTOR", "0");
  3422.                     StoreObjIDs[8] = Commands->Get_ID(Minigunner);
  3423.                     Commands->Send_Custom_Event(Minigunner, Minigunner, 204, 8, 0.100000);
  3424.                 }
  3425.             }
  3426.             CallReinforcements = true;
  3427.             ReinforcementsIndex = 1;
  3428.             Commands->Start_Timer(obj, this, 1, 204);
  3429.             GameObject *Humvee = Commands->Create_Object("MX0_GDI_Humm-Vee_destroyed", Vector3(-0.052450, -0.070244, 1.050000));
  3430.             if(Humvee)
  3431.             {
  3432.                 Commands->Attach_Script(Humvee, "MX0_A02_GDI_VEHICLE", "");
  3433.                 Commands->Set_Facing(Humvee, 50.000000);
  3434.                 HumveeID = Commands->Get_ID(Humvee);
  3435.             }
  3436.             GameObject *Med = Commands->Create_Object("MX0_GDI_Medium_Tank_Dec", Vector3(-0.049715, -0.086541, 1.216000));
  3437.             if(Med)
  3438.             {
  3439.                 Commands->Attach_Script(Med, "MX0_A02_GDI_VEHICLE", "");
  3440.                 Commands->Set_Facing(Med, -0.218750);
  3441.                 MedID = Commands->Get_ID(Med);
  3442.             }
  3443.             GameObject *APC = Commands->Create_Object("MX0_GDI_APC", Vector3(-0.044152, -0.080186, 1.050000));
  3444.             if(APC)
  3445.             {
  3446.                 Commands->Attach_Script(APC, "MX0_A02_GDI_APC", "");
  3447.                 Commands->Set_Facing(APC, -0.099609);
  3448.                 APCID = Commands->Get_ID(APC);
  3449.             }
  3450.             GameObject *Blockage = Commands->Create_Object("Simple_Level_x0_A02_Blockage", Vector3(-0.058968, -0.106412, 0.181000));
  3451.             if(Blockage)
  3452.             {
  3453.                 BlockageID = Commands->Get_ID(Blockage);
  3454.                 Commands->Set_Facing(Blockage, -0.109375);
  3455.             }
  3456.             GameObject *Controller = Commands->Find_Object(1200001);
  3457.             Commands->Send_Custom_Event(obj, Controller, 223, 0, 0);
  3458.             Commands->Send_Custom_Event(obj, Controller, 224, 0, 0);
  3459.             Commands->Start_Timer(obj, this, 1, 220);
  3460.         }
  3461.     }
  3462.     else if(type == 209)
  3463.     {
  3464.         if(sender)
  3465.         {
  3466.             if(param >= 5)
  3467.             {
  3468.                 int Random = Commands->Get_Random(1, 5);
  3469.                 if(Random > 4)
  3470.                     Random = 4;
  3471.                 Commands->Send_Custom_Event(obj, sender, 209, StoreObjIDs[Random], 0);
  3472.             }
  3473.             else
  3474.             {
  3475.                 int Random = Commands->Get_Random(5, 9);
  3476.                 if(Random > 8)
  3477.                     Random = 8;
  3478.                 Commands->Send_Custom_Event(obj, sender, 209, StoreObjIDs[Random], 0);
  3479.             }
  3480.         }
  3481.     }
  3482.     else if(type == 215)
  3483.     {
  3484.         if(Unknown1)
  3485.         {
  3486.             CallReinforcements = false;
  3487.             Commands->Start_Timer(obj, this, 1, 207);
  3488.         }
  3489.         else
  3490.         {
  3491.             Unknown1 = true;
  3492.             GameObject *SearchObj1 = Commands->Find_Object(ParamObjID1);
  3493.             if(SearchObj1)
  3494.             {
  3495.                 GameObject *SearchObj2 = Commands->Find_Object(StoreObjIDs[3]);
  3496.                 CallReinforcements = false;
  3497.                 if(SearchObj2)
  3498.                     Commands->Send_Custom_Event(obj, SearchObj2, 213, ParamObjID1, 0);
  3499.                 GameObject *SearchObj3 = Commands->Find_Object(StoreObjIDs[1]);
  3500.                 Commands->Send_Custom_Event(obj, SearchObj3, 217, 0, 0);
  3501.                 GameObject *SearchObj4 = Commands->Find_Object(APCID);
  3502.                 Commands->Send_Custom_Event(obj, SearchObj4, 215, 0, 0);
  3503.                 Commands->Start_Timer(obj, this, 1, 207);
  3504.             }
  3505.             else
  3506.             {
  3507.                 GameObject *SearchObj2 = 0;
  3508.                 if(Commands->Find_Object(ParamObjID2) && (SearchObj2 = Commands->Find_Object(StoreObjIDs[3])))
  3509.                     Commands->Send_Custom_Event(obj, SearchObj2, 214, ParamObjID2, 0);
  3510.                 GameObject *SearchObj3 = Commands->Find_Object(StoreObjIDs[1]);
  3511.                 Commands->Send_Custom_Event(obj, SearchObj3, 217, 0, 0);
  3512.                 GameObject *SearchObj4 = Commands->Find_Object(APCID);
  3513.                 Commands->Send_Custom_Event(obj, SearchObj4, 215, 0, 0);
  3514.                 Commands->Start_Timer(obj, this, 1, 207);
  3515.             }
  3516.         }
  3517.     }
  3518.     else if(type == 212)
  3519.     {
  3520.         CallReinforcements = false;
  3521.         Commands->Start_Timer(obj, this, 1, 207);
  3522.     }
  3523.     else if(type == 222)
  3524.     {
  3525.         int Index = 5;
  3526.         do
  3527.         {
  3528.             GameObject *SearchObj = Commands->Find_Object(StoreObjIDs[Index]);
  3529.             Commands->Send_Custom_Event(obj, SearchObj, 205, 0, 0);
  3530.             Index++;
  3531.         }
  3532.         while(Index <= 8)
  3533.         NodActive = false;
  3534.         WhatEnemy = 0;
  3535.         Commands->Create_2D_Sound("MX0_NODOFFICER_044");
  3536.     }
  3537.     else if(type == 218)
  3538.     {
  3539.         GameObject *SearchObj = Commands->Find_Object(StoreObjIDs[2]);
  3540.         Commands->Send_Custom_Event(obj, SearchObj, 218, 0, 0);
  3541.     }
  3542.     else if(type == 219)
  3543.     {
  3544.         GameObject *SearchObj = Commands->Find_Object(StoreObjIDs[1]);
  3545.         Commands->Send_Custom_Event(obj, SearchObj, 219, 0, 0);
  3546.     }
  3547.     else if(type == 220)
  3548.     {
  3549.         GameObject *SearchObj = Commands->Find_Object(StoreObjIDs[2]);
  3550.         Commands->Send_Custom_Event(obj, SearchObj, 220, 0, 0);
  3551.     }
  3552.     else if(type == 221)
  3553.     {
  3554.         GameObject *SearchObj = Commands->Find_Object(StoreObjIDs[3]);
  3555.         Commands->Send_Custom_Event(obj, SearchObj, 221, 0, 0);
  3556.     }
  3557.     else if(type == 227)
  3558.     {
  3559.         int Random = Commands->Get_Random_Int(1, 5);
  3560.         if(Random > 4)
  3561.             Random = 4;
  3562.         GameObject *SearchObj = Commands->Find_Object(StoreObjIDs[Random]);
  3563.         if(SearchObj)
  3564.         {
  3565.             if(SendParam > 9)
  3566.                 SendParam = 0;
  3567.             Commands->Send_Custom_Event(obj, SearchObj, 229, SendParam, 0);
  3568.             SendParam++;
  3569.         }
  3570.     }
  3571.     else if(type == 228)
  3572.     {
  3573.         GameObject *SearchObj = Commands->Find_Object(param);
  3574.         if(SearchObj)
  3575.         {
  3576.             if(SendParam2 > 3)
  3577.                 SendParam2 = 0;
  3578.             Commands->Send_Custom_Event(obj, SearchObj, 230, SendParam2, 0);
  3579.             SendParam2++;
  3580.         }
  3581.     }
  3582.     else if(type == 235)
  3583.     {
  3584.         WhatEnemy++;
  3585.         StoreIndex = 0;
  3586.         NodActive = false;
  3587.     }
  3588.     else if(type == 232)
  3589.     {
  3590.         int Index = 6;
  3591.         int Count2 = 0;
  3592.         do
  3593.         {
  3594.             GameObject *SearchObj = Commands->Find_Object(StoreObjIDs[Index]);
  3595.             if(StoreObjIDs[6] == param || !SearchObj)
  3596.                 StoreObjIDs[6] = 0;
  3597.             if(!StoreObjIDs[6])
  3598.             {
  3599.                 EnemyDeaths++;
  3600.                 Count2++;
  3601.             }
  3602.             Index++;
  3603.         }
  3604.         while(Index < 9);
  3605.         if(EnemyDeaths > 2 && EnemyDeaths < 99)
  3606.         {
  3607.             EnemyDeaths = 99
  3608.             Commands->Fade_Background_Music("Level 0 Hero.mp3", 2, 2);
  3609.         }
  3610.         if(DroppedEngineers)
  3611.         {
  3612.             GameObject *Spawner1 = Commands->Find_Object(1100026);
  3613.             Commands->Destroy_Object(Spawner1);
  3614.             GameObject *Spawner2 = Commands->Find_Object(1100027);
  3615.             Commands->Destroy_Object(Spawner2);
  3616.             GameObject *Spawner3 = Commands->Find_Object(1100028);
  3617.             Commands->Destroy_Object(Spawner3);
  3618.         }
  3619.         else
  3620.         {
  3621.             if(NodActive && StoreIndex == param && StoreIndex)
  3622.             {
  3623.                 WhatEnemy++;
  3624.                 StoreIndex = 0;
  3625.                 NodActive = false;
  3626.             }
  3627.             if(!CanSendCustomToUnknown)
  3628.             {
  3629.                 CanSendCustomToUnknown = true;
  3630.                 if(!NodActive)
  3631.                 {
  3632.                     if(!Count2)
  3633.                         Commands->Start-Timer(obj, this, 3, 208);
  3634.                     else
  3635.                     {
  3636.                         switch(WhatEnemy)
  3637.                         {
  3638.                             case 0:
  3639.                                 GameObject *Minigunner = Commands->Create_Object("MX0_Nod_Minigunner_0", Vector3(unknown, unknown, 6.404000));
  3640.                                 if(Minigunner)
  3641.                                 {
  3642.                                     NodActive = true;
  3643.                                     Count2--;
  3644.                                     Commands->Attach_Script(Minigunner, "MX0_A02_ACTOR", "1");
  3645.                                     int Index = 5;
  3646.                                     do
  3647.                                     {
  3648.                                         if(!StoreObjIDs[Index])
  3649.                                         {
  3650.                                             StoreObjIDs[Index] = Commands->Get_ID(Minigunner);
  3651.                                             StoreIndex = Index;
  3652.                                             Commands->Send_Custom_Event(Minigunner, Minigunner, 204, Index, 0.100000);
  3653.                                             Index = 9;
  3654.                                         }
  3655.                                         Index++;
  3656.                                     }
  3657.                                     while(Index < 9);
  3658.                                 }
  3659.                                 break;
  3660.                             case 1:
  3661.                                 GameObject *Minigunner = Commands->Create_Object("MX0_Nod_Minigunner_0", Vector3(unknown, unknown, 4.415000));
  3662.                                 if(Minigunner)
  3663.                                 {
  3664.                                     NodActive = true;
  3665.                                     Count2--;
  3666.                                     Commands->Attach_Script(Minigunner, "MX0_A02_ACTOR", "2");
  3667.                                     int Index = 5;
  3668.                                     do
  3669.                                     {
  3670.                                         if(!StoreObjIDs[Index])
  3671.                                         {
  3672.                                             StoreObjIDs[Index] = Commands->Get_ID(Minigunner);
  3673.                                             StoreIndex = Index;
  3674.                                             Commands->Send_Custom_Event(Minigunner, Minigunner, 204, Index, 0.100000);
  3675.                                             Index = 9;
  3676.                                         }
  3677.                                         Index++;
  3678.                                     }
  3679.                                     while(Index < 9);
  3680.                                 }
  3681.                                 break;
  3682.                             case 2:
  3683.                                 GameObject *Rocketer = Commands->Create_Object("Nod_RocketSoldier_0", Vector3(unknown, unknown, 6.404000));
  3684.                                 if(Rocketer)
  3685.                                 {
  3686.                                     NodActive = true;
  3687.                                     Count2--;
  3688.                                     Commands->Attach_Script(Rocketer, "MX0_A02_ACTOR", "3");
  3689.                                     int Index = 5;
  3690.                                     do
  3691.                                     {
  3692.                                         if(!StoreObjIDs[Index])
  3693.                                         {
  3694.                                             StoreObjIDs[Index] = Commands->Get_ID(Rocketer);
  3695.                                             StoreIndex = 0;
  3696.                                             Commands->Send_Custom_Event(Rocketer, Rocketer, 204, Index, 0.100000);
  3697.                                             Index = 9;
  3698.                                         }
  3699.                                     }
  3700.                                     while(Index < 9)
  3701.  
  3702.                                 }
  3703.                                 break;
  3704.                             case 3:
  3705.                                 GameObject *CinObject = Commands->Create_Object("Invisible_Object", Vector3(unknown, unknown, 9.000000));
  3706.                                 if(CinObject)
  3707.                                 {
  3708.                                     NodActive = true;
  3709.                                     Commands->Set_Facing(CinObject, unknown);
  3710.                                     Commands->Attach_Script(CinObject, "MX0_A02_HELICOPTER", "0");
  3711.                                     Commands->Attach_Script(CinObject, "Test_Cinematic", "X0I_Drop02_A02_E01.txt");
  3712.                                     Commands->Start_Timer(obj, this, 20, 209);
  3713.                                 }
  3714.                                 GameObject *SearchObj = Commands->Find_Object(StoreObjIDs[2]);
  3715.                                 Commands->Send_Custom_Event(obj, SearchObj, 242, 0, 10);
  3716.                                 break;
  3717.                             case 4:
  3718.                                 WhatEnemy = 5;
  3719.                                 GameObject *CinObject = Commands->Create_Object("Invisible_Object", Vector3(unknown, unknown, 9.600000));
  3720.                                 if(CinObject)
  3721.                                 {
  3722.                                     NodActive = true;
  3723.                                     Commands->Set_Facing(CinObject, 90.000000);
  3724.                                     Commands->Attach_Script(CinObject, "MX0_A02_HELICOPTER", "1");
  3725.                                     Commands->Attach_Script(CinObject, "Test_Cinematic", "X0I_Drop02_A02_E02.txt");
  3726.                                 }
  3727.                                 GameObject *SearchObj = Commands->Find_Object(StoreObjIDs[2]);
  3728.                                 Commands->Send_Custom_Event(obj, SearchObj, 243, 0, 10);
  3729.                                 break;
  3730.                             default:
  3731.                                 break;
  3732.                         }
  3733.                         int Index = 5;
  3734.                         do
  3735.                         {
  3736.                             if(!StoreObjIDs[Index])
  3737.                             {
  3738.                                 int SpawnerID = 0;
  3739.                                 switch(Index)
  3740.                                 {
  3741.                                     case 6:
  3742.                                         SpawnerID = 1100026;
  3743.                                         break;
  3744.                                     case 7:
  3745.                                         SpawnerID = 1100027;
  3746.                                         break;
  3747.                                     case 8:
  3748.                                         SpawnerID = 1100028;
  3749.                                         break;
  3750.                                 }
  3751.                                 GameObject *GeneratedObj = Commands->Trigger_Spawner(SpawnerID);
  3752.                                 if(GeneratedObj)
  3753.                                 {
  3754.                                     Commands->Attach_Script(GeneratedObj, "MX0_A02_ACTOR", "0");
  3755.                                     StoreObjIDs[Index] = Commands->Get_ID(GeneratedObj);
  3756.                                     Commands->Send_Custom_Event(GeneratedObj, GeneratedObj, 204, Index, 0.100000);
  3757.                                     Commands->Send_Custom_Event(obj, GeneratedObj, 205, 0, 0.1000000);
  3758.                                     Index = 9;
  3759.                                 }
  3760.                             }
  3761.                             Index++;
  3762.                         }
  3763.                         while(Index < 9);
  3764.                     }
  3765.                     Commands->Start_Timer(obj, this, 3, 208);
  3766.                 }
  3767.             }
  3768.         }
  3769.     }
  3770.     else if(type == 233)
  3771.     {
  3772.         GameObject *SearchObj = Commands->Find_Object(StoreObjIDs[1]);
  3773.         if(SearchObj && Commands->Find_Object(StoreObjIDs[StoreIndex]))
  3774.             Commands->Send_Custom_Event(obj, SearchObj, 233, 0, 0);
  3775.     }
  3776.     else if(type == 234)
  3777.     {
  3778.         GameObject *SearchObj = Commands->Find_Object(StoreObjIDs[2]);
  3779.         if(SearchObj && Commands->Find_Object(StoreObjIDs[StoreIndex]))
  3780.             Commands->Send_Custom_Event(obj, SearchObj, 234, StoreObjIDs[StoreIndex], 0);
  3781.     }
  3782.     else if(type == 236)
  3783.     {
  3784.         GameObject *SearchObj = Commands->Find_Object(StoreObjIDs[1]);
  3785.         Commands->Send_Custom_Event(obj, SearchObj, 236, 0, 0);
  3786.     }
  3787.     else if(type == 237)
  3788.     {
  3789.         GameObject *SearchObj = Commands->Find_Object(StoreObjIDs[4]);
  3790.         if(SearchObj && Commands->Find_Object(StoreObjIDs[StoreIndex]))
  3791.             Commands->Send_Custom_Event(obj, SearchObj, 237, StoreObjIDs[StoreIndex], 0);
  3792.     }
  3793.     else if(type == 239)
  3794.     {
  3795.         GameObject *SearchObj = Commands->Find_Object(APCID);
  3796.         Commands->Send_Custom_Event(obj, SearchObj, 210, 0, 2);
  3797.     }
  3798.     else if(type == 240)
  3799.     {
  3800.         if(!Commands->Find_Object(APCID)
  3801.             Commands->Send_Custom_Event(obj, sender, 240, 0, 0);
  3802.         else
  3803.             Commands->Send_Custom_Event(obj, sender, 240, APCID, 0);
  3804.     }
  3805.     else if(type == 241)
  3806.     {
  3807.         GameObject *SearchObj = Commands->Find_Object(StoreObjIDs[2]);
  3808.         Commands->Send_Custom_Event(obj, SearchObj, 241, 0, 0);
  3809.     }
  3810.     else if(type == 244)
  3811.     {
  3812.         GameObject *SearchObj = Commands->Find_Object(StoreObjIDs[3]);
  3813.         Commands->Send_Custom_Event(obj, SearchObj, 244, 0, 0);
  3814.     }
  3815.     else if(type == 245)
  3816.     {
  3817.         GameObject *SearchObj = Commands->Find_Object(StoreObjIDs[4]);
  3818.         Commands->Send_Custom_Event(obj, SearchObj, 245, 0, 0);
  3819.     }
  3820.     else if(type == 246)
  3821.     {
  3822.         if(!Unknown2)
  3823.         {
  3824.             Unknown2 = true;
  3825.             Unknown1 = false;
  3826.             GameObject *SearchObj1 = Commands->Find_Object(StoreObjIDs[2]);
  3827.             Commands->Send_Custom_Event(obj, SearchObj1, 246, 0, 0.500000);
  3828.             GameObject *SearchObj2 = Commands->Find_Object(StoreObjIDs[1]);
  3829.             Commands->Send_Custom_Event(obj, SearchObj2, 246, 0, 1.500000);
  3830.             Commands->Start_Timer(obj, this, 1, 212);
  3831.         }
  3832.     }
  3833.     else if(type == 250)
  3834.     {
  3835.         GameObject *SearchObj = Commands->Find_Object(StoreObjIDs[4]);
  3836.         Commands->Send_Custom_Event(obj, SearchObj, 250, 0, 0);
  3837.     }
  3838.     else if(type == 251)
  3839.     {
  3840.         GameObject *SearchObj = Commands->Find_Object(StoreObjIDs[1]);
  3841.         Commands->Send_Custom_Event(obj, SearchObj, 251, 0, 0);
  3842.     }
  3843.     else if(type == 252)
  3844.     {
  3845.         GameObject *SearchObj = Commands->Find_Object(StoreObjIDs[2]);
  3846.         Commands->Send_Custom_Event(obj, SearchObj, 252, 0, 0);
  3847.     }
  3848.     else if(type == 253)
  3849.     {
  3850.         GameObject *SearchObj = Commands->Find_Object(StoreObjIDs[3]);
  3851.         Commands->Send_Custom_Event(obj, SearchObj, 253, 0, 0);
  3852.     }
  3853.     else if(type == 254)
  3854.     {
  3855.         Commands->Create_2D_Sound("MX0_GDIEAGLEBASE_110");
  3856.         Commands->Start_Timer(obj, this, 5, 218);
  3857.     }
  3858.     else if(type == 255)
  3859.     {
  3860.         if(sender)
  3861.         {
  3862.             SenderID1 = Commands->Get_ID(sender);
  3863.             Commands->Send_Custom_Event(obj, this, 255, MedID, 0);
  3864.         }
  3865.     }
  3866.     else if(type == 256)
  3867.     {
  3868.         GameObject *SearchObj = Commands->Find_Object(StoreObjIDs[1]);
  3869.         if(SearchObj)
  3870.         {
  3871.             Commands->Send_Custom_Event(obj, SearchObj, 257, 0, 0);
  3872.             Commands->Start_Timer(obj, this, 5, 219);
  3873.         }
  3874.     }
  3875.     else if(type == 258)
  3876.         SenderID2 = Commands->Get_ID(sender);
  3877.     else if(type == 262)
  3878.     {
  3879.         Area3Started = true;
  3880.         GameObject *A03_Controller = Commands->Find_Object(1400041);
  3881.         Commands->Send_Custom_Event(obj, A03_Controller, 401, 0, 2);
  3882.         GameObject *SearchObj = Commands->Find_Object(SenderID2);
  3883.         Commands->Send_Custom_Event(obj, SearchObj, 263, 0, 0);
  3884.     }
  3885.     else if(type == 264)
  3886.     {
  3887.         GameObject *Blockage = Commands->Find_Object(BlockageID);
  3888.         if(Blockage)
  3889.         {
  3890.             Commands->Create_Explosion("Ground Explosion 01 - Harmless", Vector3(unknown, unknown, 0.181000), 0);
  3891.             Commands->Set_Animation(Blockage, "AG_L0_BLOCKAGE1.AG_L0_BLOCKAGE1", 0, 0, 0, unknown, 0);
  3892.             Commands->Start_Timer(obj, this, 2, 221);
  3893.         }
  3894.         GameObject *SearchObj = Commands->Find_Object(StoreObjIDs[1]);
  3895.         Commands->Send_Custom_Event(obj, SearchObj, 265, 0, 0);
  3896.         Commands->Start_Timer(obj, this, 1, 222);
  3897.     }
  3898.     else if(type == 267)
  3899.     {
  3900.         GameObject *SearchObj = Commands->Find_Object(StoreObjIDs[3]);
  3901.         Commands->Send_Custom_Event(obj, SearchObj, 267, 0, 0);
  3902.     }
  3903.     else if(type == 268)
  3904.     {
  3905.         int Offset = 32;
  3906.         int Index = 1;
  3907.         do
  3908.         {
  3909.             GameObject *SearchObj = Commands->Find_Object(StoreObjIDs[Index]);
  3910.             Commands->Send_Custom_Event(obj, SearchObj, 268, 0, 0);
  3911.             Index++;
  3912.         }
  3913.         while(Index < 5);
  3914.     }
  3915. }
  3916.  
  3917. void MX0_A02_Controller::Timer_Expired(GameObject *obj,int number)
  3918. {
  3919.     if(number == 204)
  3920.     {
  3921.         if(CallReinforcements)
  3922.         {
  3923.             switch(ReinforcementsIndex)
  3924.             {
  3925.                 case 1:
  3926.                 case 4:
  3927.                     GameObject *SearchObj = Commands->Find_Object(StoreObjIDs[2]);
  3928.                     Commands->Send_Custom_Event(obj, SearchObj, 211, ReinforcementsIndex, 0);
  3929.                     break;
  3930.                 case 2:
  3931.                     GameObject *SearchObj = Commands->Find_Object(StoreObjIDs[3]);
  3932.                     Commands->Send_Custom_Event(obj, SearchObj, 211, ReinforcementsIndex, 0);
  3933.                     break;
  3934.                 case 5:
  3935.                     GameObject *SearchObj = Commands->Find_Object(StoreObjIDs[1]);
  3936.                     Commands->Send_Custom_Event(obj, SearchObj, 211, ReinforcementsIndex, 0);
  3937.                     break;
  3938.                 case 3:
  3939.                 case 6:
  3940.                     GameObject *SearchObj = Commands->Find_Object(StoreObjIDs[4]);
  3941.                     Commands->Send_Custom_Event(obj, SearchObj, 211, ReinforcementsIndex, 0);
  3942.                     break;
  3943.                 case 7:
  3944.                     GameObject *SearchObj = Commands->Find_Object(StoreObjIDs[4]);
  3945.                     Commands->Send_Custom_Event(obj, SearchObj, 211, ReinforcementsIndex, 0);
  3946.                     break;
  3947.                 case 8:
  3948.                     GameObject *SearchObj = Commands->Find_Object(StoreObjIDs[2]);
  3949.                     Commands->Send_Custom_Event(obj, SearchObj, 211, ReinforcementsIndex, 0);
  3950.                     break;
  3951.                 case 9:
  3952.                     GameObject *SearchObj = Commands->Find_Object(StoreObjIDs[1]);
  3953.                     Commands->Send_Custom_Event(obj, SearchObj, 211, ReinforcementsIndex, 0);
  3954.                     break;
  3955.                 case 10:
  3956.                     GameObject *SearchObj = Commands->Find_Object(StoreObjIDs[3]);
  3957.                     Commands->Send_Custom_Event(obj, SearchObj, 211, ReinforcementsIndex, 0);
  3958.                     break;
  3959.                 case 11:
  3960.                     GameObject *SearchObj = Commands->Find_Object(StoreObjIDs[4]);
  3961.                     Commands->Send_Custom_Event(obj, SearchObj, 211, ReinforcementsIndex, 0);
  3962.                     break;
  3963.                 default:
  3964.                     break;
  3965.             }
  3966.             ReinforcementsIndex++;
  3967.             if(ReinforcementsIndex > 11)
  3968.                 ReinforcementsIndex = 1;
  3969.             float Random = Commands->Get_Random(2, 4.999900);
  3970.             if(Random > 4)
  3971.                 Random = 4;
  3972.             Commands->Start_Timer(obj, this, Random, 204);
  3973.         }
  3974.     }
  3975.     else if(type == 207)
  3976.     {
  3977.         if(Unknown1)
  3978.         {
  3979.             Vector3 Pos = Commands->Get_Position(obj);
  3980.             GameObject *Star = Commands->Get_A_Star(Pos);
  3981.             Vector3 StarPos = Commands->Get_Position(Star);
  3982.             if(Commands->Get_Distance(Pos, StarPos) > 30.0)
  3983.             {
  3984.                 int Random = Commands->Get_Random(1, 5);
  3985.                 if(Random > 4)
  3986.                     Random = 4;
  3987.                 Gameobject *SearchObj = Commands->Find_Object(StoreObjIDs[Random]);
  3988.                 Commands->Send_Custom_Event(obj, SearchObj, 231, 0, 0);
  3989.             }
  3990.             Commands->Start_Timer(obj, this, 3, 207);
  3991.         }
  3992.     }
  3993.     else if(type == 208)
  3994.     {
  3995.         if(CanSendCustomToUnknown)
  3996.         {
  3997.             CanSendCustomToUnknown = false;
  3998.             Commands->Send_Custom_Event(obj, notaclue);
  3999.         }
  4000.     }
  4001.     else if(type == 209)
  4002.         Commands->Send_Custom_Event(obj, obj, 235, 0, 0);
  4003.     else if(type == 212)
  4004.     {
  4005.         NodActive = false;
  4006.         CanSendCustomToUnknown = true;
  4007.         DroppedEngineers = true;
  4008.         Unknown1 = false;
  4009.         GameObject *CinObject = Commands->Create_Object("Invisible_Object", Vector3(unknown, unknown, 1.093000));
  4010.         Commands->Set_Facing(CinObject, unknown);
  4011.         Commands->Attach_Script(CinObject, "Test_Cinematic", "X0I_GDI_Drop02_Engineer.txt");
  4012.         GameObject *BuildingController = Commands->Find_Object(1700006); // if this one gets destroyed that background sound of weapon fire goes away.
  4013.         Commands->Destroy_Object(BuildingController);
  4014.         int Index = 5;
  4015.         do
  4016.         {
  4017.             if(StoreObjIDs[Index])
  4018.             {
  4019.                 GameObject *SearchObj = Commands->Find_Object(StoreObjIDs[Index]);
  4020.                 Commands->Send_Custom_Event(obj, SearchObj, 247, 0, 0);
  4021.             }
  4022.             Index++;
  4023.         }
  4024.         while(Index < 9);
  4025.         Commands->Create_2D_Sound("MX0_NODSOLDIER1_101");
  4026.         Commands->Start_Timer(obj, this, 3, 213);
  4027.     }
  4028.     else if(number == 213)
  4029.     {
  4030.         int Index = 1;
  4031.         do
  4032.         {
  4033.             GameObject *SearchObj = Commands->Find_Object(StoreObjIDs[Index]);
  4034.             Commands->Send_Custom_Event(obj, SearchObj, 248, 0, 0);
  4035.             Commands->Send_Custom_Event(obj, SearchObj, 249, 0, 0);
  4036.         }
  4037.         while(Index < 5)
  4038.     }
  4039.     else if(number == 218)
  4040.         Commands->Create_2D_Sound("MX0_GDIEAGLEBASE_116");
  4041.     else if(number == 219)
  4042.     {
  4043.         if(SendCustomTo < 3 && !Area3Started)
  4044.         {
  4045.             if(!SendCustomTo)
  4046.             {
  4047.                 GameObject *SearchObj = Commands->Find_Object(SenderID2);
  4048.                 Commands->Send_Custom_Event(obj, SearchObj, 259, 0, 0);
  4049.                 SendCustomTo++;
  4050.                 Commands->Start_Timer(obj, this, 5, 219);
  4051.             }
  4052.             if(!(SendCustomTo - 1))
  4053.             {
  4054.                 GameObject *SearchObj = Commands->Find_Object(StoreObjIDs[1]);
  4055.                 Commands->Send_Custom_Event(obj, SearchObj, 260, 0, 0);
  4056.                 SendCustomTo++;
  4057.                 Commands->Start_Timer(obj, this, 5, 219);
  4058.             }
  4059.             if((SendCustomTo - 1) == 1)
  4060.             {
  4061.                 GameObject *SearchObj = Commands->Find_Object(StoreObjIDs[2]);
  4062.                 Commands->Send_Custom_Event(obj, SearchObj, 261, 0, 0);
  4063.                 SendCustomTo++;
  4064.                 Commands->Start_Timer(obj, this, 5, 219);
  4065.             }
  4066.         }
  4067.     }
  4068.     else if(number == 220)
  4069.     {
  4070.         if(!DroppedEngineers)
  4071.         {
  4072.             GameObject *SearchObj1 = Commands->Find_Object(1100023);
  4073.             int RandomExpLoc = Commands->Get_Random_Int(1, 17);
  4074.             if(RandomExpLoc > 16)
  4075.                 RandomExpLoc = 16;
  4076.             RandomExpLoc -= 1;
  4077.             int ExpObjID = 0;
  4078.             switch(RandomExpLoc)
  4079.             {
  4080.                 case 0:
  4081.                     ExpObjID = 1100006;
  4082.                 case 1:
  4083.                     ExpObjID = 1100007;
  4084.                 case 2:
  4085.                     ExpObjID = 0;
  4086.                 case 3:
  4087.                     ExpObjID = 1100011;
  4088.                 case 4:
  4089.                     ExpObjID = 1100008;
  4090.                 case 5:
  4091.                     ExpObjID = 0;
  4092.                 case 6:
  4093.                     ExpObjID = 1100012;
  4094.                 case 7:
  4095.                     ExpObjID = 1100013;
  4096.                 case 8:
  4097.                     ExpObjID = 0;
  4098.                 case 9:
  4099.                     ExpObjID = 1100015;
  4100.                 case 10:
  4101.                     ExpObjID = 1100016;
  4102.                 case 11:
  4103.                     ExpObjID = 0;
  4104.                 case 12:
  4105.                     ExpObjID = 1100018;
  4106.                 case 13:
  4107.                     ExpObjID = 1100019;
  4108.                 case 14:
  4109.                     ExpObjID = 0;
  4110.                 case 15:
  4111.                     ExpObjID = 1100021;
  4112.             }
  4113.             GameObject *ExplosionObj = Commands->Find_Object(ExpObjID);
  4114.             if(ExplosionObj)
  4115.             {
  4116.                 Vector3 Pos = Commands->Get_Position(ExplosionObj);
  4117.                 float RandomXOff = Commands->Get_Random(-2.000000, 2.999900);
  4118.                 if(RandomXOff > 2)
  4119.                     RandomXOff = 2;
  4120.                 Pos.X += RandomXOff;
  4121.                 float RandomYOff = Commands->Get_Random(-2.000000, 2.999900);
  4122.                 if(RandomYOff > 2)
  4123.                     RandomYOff = 2;
  4124.                 Pos.Y += RandomYOff;
  4125.                 Commands->Create_Explosion("Explosion_MX0", Pos, obj);
  4126.             }
  4127.             float TimerLength = Commands->Get_Random(3, 6.999900);
  4128.             if(TimerLength > 6)
  4129.                 TimerLength = 6;
  4130.             Commands->Start_Timer(obj, this, TimerLength, 220);
  4131.         }
  4132.     }
  4133.     else if(number == 221)
  4134.     {
  4135.         GameObject *Blockage = Commands->Find_Object(BlockageID);
  4136.         Commands->Destroy_Object(Blockage);
  4137.     }
  4138.     else if(number == 222)
  4139.     {
  4140.         WhatIndex++;
  4141.         if(WhatIndex > 4)
  4142.             WhatIndex = 2;
  4143.         GameObject *SearchObj = Commands->Find_Object(StoreObjIDs[WhatIndex]);
  4144.         Commands->Send_Custom_Event(obj, SearchObj, 269, 0, 0);
  4145.         Commands->Start_Timer(obj, this, 5, 222);
  4146.     }
  4147. }
  4148.  
  4149. class MX0_A02_ACTOR : public ScriptImpClass
  4150. {
  4151.     void Register_Auto_Save_Variables();
  4152.     void Created(GameObject *obj);
  4153.     void Damaged(GameObject *obj,GameObject *damager,float amount);
  4154.     void Killed(GameObject *obj,GameObject *killer);
  4155.     void Custom(GameObject *obj,int type,int param,GameObject *sender);
  4156.     void Action_Complete(GameObject *obj,int action_id,ActionCompleteReason complete_reason);
  4157.     void Enemy_Seen(GameObject *obj,GameObject *enemy);
  4158.     void Timer_Expired(GameObject *obj,int number);
  4159.     void MX0_A02_Say_Something(GameObject *obj, int Number, int Unknown);
  4160.     float Health;
  4161.     float Armour;
  4162.     bool Active;
  4163.     int Unknown;
  4164.     int MoveIndex;
  4165.     bool Unknown2;
  4166.     bool StarNear;
  4167.     bool Died;
  4168.     int ParamObjID1;
  4169.     int ParamObjID2;
  4170.     int DestroyedMedID;
  4171. };
  4172.  
  4173. void MX0_A02_ACTOR::Register_Auto_Save_Variables()
  4174. {
  4175.     Auto_Save_Variable(&Unknown2, 1, 1);
  4176.     Auto_Save_Variable(&Health, 4, 2);
  4177.     Auto_Save_Variable(&Unknown, 4, 3);
  4178.     Auto_Save_Variable(&StarNear, 1, 4);
  4179.     Auto_Save_Variable(&MoveIndex, 4, 5);
  4180.     Auto_Save_Variable(&Armour, 4, 6);
  4181.     Auto_Save_Variable(&ParamObjID1, 4, 7);
  4182.     Auto_Save_Variable(&ParamObjID2, 4, 8);
  4183.     Auto_Save_Variable(&Active, 1, 9);
  4184.     Auto_Save_Variable(&Died, 1, 10);
  4185.     Auto_Save_Variable(&DestroyedMedID, 4, 11);
  4186. }
  4187.  
  4188. void MX0_A02_ACTOR::Created(GameObject *obj)
  4189. {
  4190.     Commands->Attach_Script(obj, "M00_Soldier_Powerup_Disable", "");
  4191.     Active = true;
  4192.     Health = Commands->Get_Health(obj);
  4193.     Armour = Commands->Get_Shield_Strength(obj);
  4194.     Commands->Innate_Disable(obj);
  4195.     Unknown = 0;
  4196.     MoveIndex = 0;
  4197.     Unknown2 = false;
  4198.     StarNear = false;
  4199.     Died = false;
  4200.     ParamObjID1 = 0;
  4201.     ParamObjID2 = 0;
  4202.     DestroyedMedID = 0;
  4203.     Commands->Enable_Enemy_Seen(obj, false);
  4204.     int ActorID = Get_Int_Parameter("ActorID");
  4205.     if(ActorID)
  4206.     {
  4207.         switch(ActorID - 1)
  4208.         {
  4209.             case 0:
  4210.                 ActionParamsStruct Params;
  4211.                 Params.Set_Basic(this, 100, 209);
  4212.                 Params.Set_Movement(Vector3(unknown, unknown, 6.000000), 0.800000, 0.500000);
  4213.                 Commands->Action_Goto(obj, Params);
  4214.                 Commands->Enable_Enemy_Seen(obj, true);
  4215.                 break;
  4216.             case 1:
  4217.                 ActionParamsStruct Params;
  4218.                 Params.Set_Basic(this, 100, 211);
  4219.                 Params.Set_Movement(Vector3(unknown, unknown, 3.944000), 0.800000, 0.500000);
  4220.                 Commands->Action_Goto(obj, Params);
  4221.                 Commands->Enable_Enemy_Seen(obj, Params);
  4222.                 break;
  4223.             case 2:
  4224.                 ActionParamsStruct Params;
  4225.                 Params.Set_Basic(this, 100, 213);
  4226.                 Params.Set_Movement(Vector3(unknown, unknown, 6.000000), 0.800000, 0.500000);
  4227.                 Commands->Action_Goto(obj, Params);
  4228.                 break;
  4229.             case 3:
  4230.                 ActionParamsStruct Params;
  4231.                 Params.Set_Basic(100, 216);
  4232.                 Params.Set_Movement(0, 0.800000, 0.500000);
  4233.                 Params.WaypathID = 1100029;
  4234.                 Params.MovePathfind = true;
  4235.                 Commands->Action_Goto(obj, Params);
  4236.                 Commands->Action_Goto(obj, Params);
  4237.                 Unknown2 = true;
  4238.                 Commands->Start_Timer(obj, this, 20.000000, 214);
  4239.                 break;
  4240.             case 4:
  4241.                 // Flamethrower :D
  4242.                 ActionParamsStruct Params;
  4243.                 Params.Set_Basic(this, 100, 217);
  4244.                 Params.Set_Attack(Commands->Get_A_Star(Commands->Get_Position(obj)), 300.000000, 0, true);
  4245.                 Params.Set_Movement(0, 0.800000, 0.500000);
  4246.                 Params.WaypathID = 1100034;
  4247.                 Params.MovePathfind = true;
  4248.                 Commands->Action_Attack(obj, Params);
  4249.                 Unknown2 = true;
  4250.                 Commands->Start_Timer(obj, this, 10, 210);
  4251.                 Commands->Trigger_Weapon(obj, true, Vector3(unknown, unknown, 0.069000), true);
  4252.                 GameObject *Controller = Commands->Find_Object(1100000);
  4253.                 Commands->Send_Custom_Event(obj, Controller, 244, 0, 0);
  4254.                 break;
  4255.             case 5:
  4256.                 Unknown2 = true;
  4257.                 Commands->Start_Timer(obj, this, 2, 210);
  4258.                 break;
  4259.             case 6:
  4260.                 Commands->Start_Timer(obj, this, 4, 216);
  4261.                 break;
  4262.             case 7:
  4263.                 Commands->Start_Timer(obj, this, 4, 217);
  4264.                 break;
  4265.             default:
  4266.                 return;
  4267.         }
  4268.     }
  4269.     else
  4270.         Commands->Send_Custom_Event(obj, obj, 207, 0, 0);
  4271. }
  4272.  
  4273. void MX0_A02_ACTOR::Damaged(GameObject *obj,GameObject *damager,float amount)
  4274. {
  4275.     if(Active)
  4276.     {
  4277.         if(Active)
  4278.             Armour = Commands->Get_Shield_Strength(obj);
  4279.         else
  4280.         {
  4281.              if(StarNear)
  4282.                 Armour -= 1.0;
  4283.              Commands->Set_Shield_Strength(obj, Armour);
  4284.              Commands->Set_Health(obj, Health);
  4285.         }
  4286.         if(StarNear)
  4287.         {
  4288.             if(damager)
  4289.             {
  4290.                 if(MoveIndex >= 5)
  4291.                 {
  4292.                     ActionParamsStruct Params;
  4293.                     Params.Set_Basic(this, 90, 201);
  4294.                     Params.Set_Attack(damager, 300.000000, 0, false);
  4295.                     Commands->Action_Attack(obj, Params);
  4296.                 }
  4297.                 else
  4298.                 {
  4299.                     Vector3 Pos = Commands->Get_Position(obj);
  4300.                     GameObject *Star = Commands->Get_A_Star(Pos);
  4301.                     if(damager != Star && Commands->Get_Player_Type(obj) != Commands->Get_Player_Type(damager))
  4302.                     {
  4303.                         ActionParamsStruct Params;
  4304.                         Params.Set_Basic(this, 90, 201);
  4305.                         Params.Set_Attack(damager, 300.000000, 0, false);
  4306.                         if(MoveIndex >= 5)
  4307.                             MoveIndex = 0;
  4308.                         Commands->Action_Attack(obj, Params);
  4309.                     }
  4310.                 }
  4311.             }
  4312.         }
  4313.         else if(!Died && Unknown2)
  4314.         {
  4315.             Died = true;
  4316.             int ActorID = Get_Int_Parameter("ActorID") - 1;
  4317.             if(ActorID)
  4318.             {
  4319.                 if(ActorID == 1)
  4320.                 {
  4321.                     Commands->Debug_Message("XXXX INSERT FALLING DEATH ANIMATION HERE.\n");
  4322.                     Commands->Apply_Damage(obj, 10000, "Blamokiller", obj);
  4323.                 }
  4324.                 else
  4325.                 {
  4326.                     Commands->Debug_Message("XXXX INSERT FALLING DEATH ANIMATION HERE.\n");
  4327.                     Commands->Apply_Damage(obj, 10000, "Blamokiller", obj);
  4328.                     GameObject *Controller = Commands->Find_Object(1100000);
  4329.                     Commands->Send_Custom_Event(obj, Controller, 236, 0, 0);
  4330.                 }
  4331.             }
  4332.         }
  4333.     }
  4334. }
  4335.  
  4336. void MX0_A02_ACTOR::Killed(GameObject *obj,GameObject *killer)
  4337. {
  4338.     if(Active)
  4339.     {
  4340.         GameObject *Controller = Commands->Find_Object(1100000);
  4341.         if(Controller)
  4342.         {
  4343.             Vector3 Pos = Commands->Get_Position(obj);
  4344.             GameObject *Star = Commands->Get_A_Star(Pos);
  4345.             if(killer == Star)
  4346.                 Commands->Send_Custom_Event(obj, Controller, 227, 0, 0);
  4347.             else if(killer)
  4348.                 Commands->Send_Custom_Event(obj, Controller, 228, Commands->Get_ID(killer), 0);
  4349.         }
  4350.         if(MoveIndex >= 5)
  4351.             Commands->Send_Custom_Event(obj, Controller, 232, MoveIndex, 0.100000);
  4352.     }
  4353. }
  4354.  
  4355. void MX0_A02_ACTOR::Custom(GameObject *obj,int type,int param,GameObject *sender)
  4356. {
  4357.     if(Active)
  4358.     {
  4359.         if(type == 203)
  4360.         {
  4361.              Active = false;
  4362.              StarNear = false;
  4363.         }
  4364.         else if(type == 208)
  4365.              StarNear = false;
  4366.         else if(type == 204)
  4367.             MoveIndex = param;
  4368.         else if(type == 205)
  4369.             Unknown2 = true;
  4370.         else if(type == 206)
  4371.             Unknown2 = false;
  4372.         else if(type == 207)
  4373.         {
  4374.             Commands->Start_Timer(obj, this, 0.100000, 203);
  4375.             StarNear = true;
  4376.         }
  4377.         else if(type == 209)
  4378.         {
  4379.             if(StarNear && Commands->Find_Object(param))
  4380.             {
  4381.                 ActionParamsStruct Params;
  4382.                 Params.Set_Basic(this, 90, 201);
  4383.                 Params.Set_Attack(0, 300.000000, 0, true);
  4384.                 Commands->Action_Attack(obj, Params);
  4385.                 if(MoveIndex >= 5)
  4386.                     MoveIndex = 0;
  4387.             }
  4388.         }
  4389.         else if(type == 211)
  4390.         {
  4391.             int Priority = 100;
  4392.             const char *Speech;
  4393.             switch (param)
  4394.             {
  4395.                 case 1:
  4396.                     Speech = "MX0_GDITROOPER2_051";
  4397.                     break;
  4398.                 case 2:
  4399.                     Speech = "MX0_GDITROOPER3_053";
  4400.                     break;
  4401.                 case 3:
  4402.                     Speech = "MX0_GDITROOPER4_054";
  4403.                     break;
  4404.                 case 4:
  4405.                     Speech = "MX0_GDITROOPER2_056";
  4406.                     break;
  4407.                 case 5:
  4408.                     Speech = "MX0_GDITROOPER1_057";
  4409.                     break;
  4410.                 case 6:
  4411.                     Speech = "MX0_GDITROOPER4_058";
  4412.                     break;
  4413.                 case 7:
  4414.                     Speech = "MX0_GDITROOPER4_060";
  4415.                     break;
  4416.                 case 8:
  4417.                     Speech = "MX0_GDITROOPER2_062";
  4418.                     break;
  4419.                 case 9:
  4420.                     Speech = "MX0_GDITROOPER1_063";
  4421.                     break;
  4422.                 case 10:
  4423.                     Speech = "MX0_GDITROOPER3_064";
  4424.                     break;
  4425.                 case 11:
  4426.                     Speech = "MX0_GDITROOPER4_065";
  4427.                     break;
  4428.                 case 205:
  4429.                     Speech = "MX0_GDITROOPER2_069";
  4430.                     break;
  4431.                 case 202:
  4432.                     Speech = "MX0_GDITROOPER1_066";
  4433.                     break;
  4434.                 case 203:
  4435.                     Speech = "MX0_GDITROOPER2_067";
  4436.                     break;
  4437.                 case 204:
  4438.                     Speech = "MX0_GDITROOPER1_068";
  4439.                     break;
  4440.                 case 206:
  4441.                     Priority = 99;
  4442.                     Speech = "MX0_GDITROOPER3_070";
  4443.                     break;
  4444.                 case 207:
  4445.                     Speech = "MX0_GDITROOPER1_071";
  4446.                     break;
  4447.                 case 208:
  4448.                     Speech = "MX0_GDITROOPER4_072";
  4449.                     break;
  4450.                 case 209:
  4451.                     Speech = "MX0_GDITROOPER3_073";
  4452.                     break;
  4453.                 case 210:
  4454.                     Speech = "MX0_GDITROOPER2_074";
  4455.                     break;
  4456.                 case 211:
  4457.                     Speech = "MX0_GDITROOPER1_075";
  4458.                     break;
  4459.                 case 212:
  4460.                     Speech = "MX0_GDITROOPER4_076";
  4461.                     break;
  4462.                 case 213:
  4463.                     Speech = "MX0_GDITROOPER2_078";
  4464.                     break;
  4465.                 case 215:
  4466.                     Speech = "MX0_GDITROOPER1_ALT09";
  4467.                     break;
  4468.                 case 216:
  4469.                     Speech = "MX0_GDITROOPER4_ALT07";
  4470.                     break;
  4471.                 case 214:
  4472.                 case 217:
  4473.                     Speech = "MX0_GDITROOPER3_ALT13";
  4474.                     break;
  4475.                 case 218:
  4476.                     Speech = "MX0_GDITROOPER1_ALT10";
  4477.                     break;
  4478.                 case 219:
  4479.                     Speech = "MX0_GDITROOPER2_ALT01";
  4480.                     break;
  4481.                 case 220:
  4482.                     Speech = "MX0_GDITROOPER4_ALT06";
  4483.                     break;
  4484.                 case 221:
  4485.                     Speech = "MX0_GDITROOPER1_079";
  4486.                     break;
  4487.                 case 222:
  4488.                     Speech = "MX0_GDITROOPER2_082";
  4489.                     break;
  4490.                 case 223:
  4491.                     Speech = "MX0_GDITROOPER3_081";
  4492.                     break;
  4493.                 case 224:
  4494.                     Speech = "MX0_GDITROOPER4_080";
  4495.                     break;
  4496.                 case 225:
  4497.                     Speech = "MX0_GDITROOPER1_086";
  4498.                     break;
  4499.                 case 226:
  4500.                     Speech = "MX0_GDITROOPER1_088";
  4501.                     break;
  4502.                 case 227:
  4503.                     Speech = "MX0_GDITROOPER2_093";
  4504.                     break;
  4505.                 case 228:
  4506.                     Speech = "MX0_GDITROOPER2_092";
  4507.                     break;
  4508.                 case 229:
  4509.                     Speech = "MX0_GDITROOPER2_095";
  4510.                     break;
  4511.                 case 230:
  4512.                     Speech = "MX0_GDITROOPER3_096";
  4513.                     break;
  4514.                 case 231:
  4515.                     Speech = "MX0_GDITROOPER4_097";
  4516.                     break;
  4517.                 case 232:
  4518.                     Speech = "MX0_GDITROOPER1_099";
  4519.                     break;
  4520.                 case 233:
  4521.                     Speech = "MX0_GDITROOPER2_098";
  4522.                     break;
  4523.                 case 234:
  4524.                     Speech = "MX0_GDITROOPER2_105";
  4525.                     break;
  4526.                 case 235:
  4527.                     Speech = "MX0_GDITROOPER4_106";
  4528.                     break;
  4529.                 case 236:
  4530.                     Speech = "MX0_GDITROOPER1_107";
  4531.                     break;
  4532.                 case 237:
  4533.                     Speech = "MX0_GDITROOPER2_108";
  4534.                     break;
  4535.                 case 238:
  4536.                     Speech = "MX0_GDITROOPER3_109";
  4537.                     break;
  4538.                 case 239:
  4539.                     Speech = "MX0_ENGINEER1_115";
  4540.                     break;
  4541.                 case 240:
  4542.                     Speech = "MX0_ENGINEER1_118";
  4543.                     break;
  4544.                 case 241:
  4545.                     Speech = "MX0_GDITROOPER1_119";
  4546.                     break;
  4547.                 case 242:
  4548.                     Speech = "MX0_ENGINEER2_120";
  4549.                     break;
  4550.                 case 243:
  4551.                     Speech = "MX0_GDITROOPER1_121";
  4552.                     break;
  4553.                 case 244:
  4554.                     Speech = "MX0_GDITROOPER2_122";
  4555.                     break;
  4556.                 case 245:
  4557.                     Speech = "MX0_ENGINEER2_123";
  4558.                     break;
  4559.                 case 246:
  4560.                     Speech = "MX0_GDITROOPER3_090";
  4561.                     break;
  4562.                 case 247:
  4563.                     Speech = "MX0_A02_SPEECH_WRONGWAY_01";
  4564.                     break;
  4565.                 case 248:
  4566.                     Speech = "MX0_A02_SPEECH_WRONGWAY_02";
  4567.                     break;
  4568.                 case 249:
  4569.                     Speech = "MX0_A02_SPEECH_WRONGWAY_03";
  4570.                     break;
  4571.                 default:
  4572.                     Speech = "MX0_A02_PREAMB_01";
  4573.                     break;
  4574.             }
  4575.             int Conversation = Commands->Create_Conversation(Speech, Priority, 300, false);
  4576.             Commands->Join_Conversation(obj, Convervastion, false, true, true);
  4577.             Vector3 Pos = Commands->Get_Position(obj);
  4578.             GameObject *Star = Commands->Get_A_Star(Pos);
  4579.             Commands->Join_Conversation(Star, Conversation, false, false, false);
  4580.             Commands->Start_Conversation(Conversation, param);
  4581.             Commands->Monitor_Conversation(obj, Conversation);
  4582.         }
  4583.         else if(type == 213)
  4584.         {
  4585.             StarNear = false;
  4586.             GameObject *SearchObj1 = Commands->Find_Object(param);
  4587.             if(SearchObj1)
  4588.             {
  4589.                 ParamObjID1 = Commands->Get_ID(SearchObj1);
  4590.                 GameObject *SearchObj2 = Commands->Find_Object(1100024); // I think this is the object where that rocket launcher guy goes to when he says: Captain Havoc, this way sir.
  4591.                 if(SearchObj2)
  4592.                 {
  4593.                     ActionParamsStruct Params;
  4594.                     Params.Set_Basic(this, 100, 202);
  4595.                     Params.Set_Movement(Commands->Get_Position(SearchObj2), 0.800000, 0.500000);
  4596.                     Commands->Action_Goto(obj, Params);
  4597.                 }
  4598.             }
  4599.             GameObject *Controller = Commands->Find_Object(1100000);
  4600.             Commands->Send_Custom_Event(obj, Controller, 226, 0, 0);
  4601.         }
  4602.         else if(type == 214)
  4603.         {
  4604.             StarNear = false;
  4605.             GameObject *SearchObj1 = Commands->Find_Object(param);
  4606.             if(SearchObj1)
  4607.             {
  4608.                 ParamObjID2 = Commands->Get_ID(SearchObj1);
  4609.                 GameObject *SearchObj2 = Commands->Find_Object(1100024); // I think this is the object where that rocket launcher guy goes to when he says: Captain Havoc, this way sir.
  4610.                 if(SearchObj2)
  4611.                 {
  4612.                     ActionParamsStruct Params;
  4613.                     Params.Set_Basic(this, 100, 203);
  4614.                     Params.Set_Movement(Commands->Get_Position(SearchObj2), 0.800000, 0.500000);
  4615.                     Commands->Action_Goto(obj, Params);
  4616.                 }
  4617.                 else
  4618.                     Commands->Send_Custom_Event(obj, obj, 207, 0, 0);
  4619.             }
  4620.             else
  4621.                 Commands->Send_Custom_Event(obj, obj, 207, 0, 0);
  4622.         }
  4623.         else if(type == 217)
  4624.             Commands->Start_Timer(obj, this, 1, 206);
  4625.         else if(type == 219)
  4626.         {
  4627.             int MX0_GDITROOPER1_068 = Commands->Create_Conversation("MX0_GDITROOPER1_068", 100, 300, false);
  4628.             Commands->Join_Conversation(obj, MX0_GDITROOPER1_068, false, true, true);
  4629.             Vector3 Pos = Commands->Get_Position(obj);
  4630.             GameObject *Star = Commands->Get_A_Star(Pos);
  4631.             Commands->Join_Conversation(Star, MX0_GDITROOPER1_068, false, false, false);
  4632.             Commands->Start_Conversation(MX0_GDITROOPER1_068, 204);
  4633.             Commands->Monitor_Conversation(obj, MX0_GDITROOPER1_068);
  4634.         }
  4635.         else if(type == 220)
  4636.         {
  4637.             StarNear = false;
  4638.             Vector3 Pos = Commands->Get_Position(obj);
  4639.             GameObject *Star = Commands->Get_A_Star(Pos);
  4640.             Vector3 StarPos = Commands->Get_Position(Star);
  4641.             if(Commands->Get_Distance(Pos, StarPos) <= 50.0)
  4642.             {
  4643.                 int MX0_GDITROOPER2_069 = Commands->Create_Conversation("MX0_GDITROOPER2_069", 100, 300, false);
  4644.                 Commands->Join_Conversation(obj, MX0_GDITROOPER2_069, false, true, true);
  4645.                 Commands->Join_Conversation(Star, MX0_GDITROOPER2_069, false, false, false);
  4646.                 Commands->Start_Conversation(MX0_GDITROOPER2_069, 205);
  4647.                 Commands->Monitor_Conversation(obj, MX0_GDITROOPER2_069);
  4648.             }
  4649.             else
  4650.             {
  4651.                 ActionParamsStruct Params;
  4652.                 Params.Set_Basic(this, 100, 208);
  4653.                 Params.Set_Movement(Star, 0.800000, 3.000000);
  4654.                 Commands->Action_Goto(obj, Params);
  4655.             }
  4656.         }
  4657.         else if(type == 221)
  4658.         {
  4659.             int MX0_GDITROOPER3_070 = Commands->Create_Conversation("MX0_GDITROOPER3_070", 99, 300, false);
  4660.             Commands->Join_Conversation(obj, MX0_GDITROOPER3_070, false, true, true);
  4661.             Vector3 Pos = Commands->Get_Position(obj);
  4662.             GameObject *Star = Commands->Get_A_Star(Pos);
  4663.             Commands->Join_Conversation(Star, MX0_GDITROOPER3_070, false, false, false);
  4664.             Commands->Start_Conversation(MX0_GDITROOPER3_070, 206);
  4665.             Commands->Monitor_Conversation(obj, MX0_GDITROOPER3_070);
  4666.         }
  4667.         else if(type == 229)
  4668.         {
  4669.             if(StarNear)
  4670.                 MX0_A02_Say_Something(this, obj, param + 211, 0); // MX0_A02_Say_Something
  4671.         }
  4672.         else if(type == 230)
  4673.         {
  4674.             if(StarNear)
  4675.                 MX0_A02_Say_Something(this, obj, param + 207, 0);
  4676.         }
  4677.         else if(type == 231)
  4678.             MX0_A02_Say_Something(this, obj, MoveIndex + 220, 0);
  4679.         else if(type == 233)
  4680.             MX0_A02_Say_Something(this, obj, 225, 0);
  4681.         else if(type == 234)
  4682.         {
  4683.             GameObject *SearchObj = Commands->Find_Object(param);
  4684.             if(SearchObj)
  4685.             {
  4686.                 ActionParamsStruct Params;
  4687.                 Params.Set_Basic(this, 100, 210);
  4688.                 Params.Set_Attack(SearchObj, 300.000000, 0, true);
  4689.                 Commands->Action_Attack(obj, Params);
  4690.             }
  4691.         }
  4692.         else if(type == 236)
  4693.             MX0_A02_Say_Something(obj, this, 226, 0);
  4694.         else if(type == 237)
  4695.         {
  4696.             GameObject *SearchObj = Commands->Find_Object(param);
  4697.             if(SearchObj)
  4698.             {
  4699.                 ActionParamsStruct Params;
  4700.                 Params.Set_Basic(this, 100, 212);
  4701.                 Params.Set_Attack(SearchObj, 300.000000, 0, true);
  4702.                 Commands->Action_Attack(obj, Params);
  4703.             }
  4704.         }
  4705.         else if(type == 240)
  4706.         {
  4707.             GameObject *SearchObj = Commands->Find_Object(param);
  4708.             if(SearchObj)
  4709.             {
  4710.                 GameObject *Controller = Commands->Find_Object(1100000);
  4711.                 Commands->Send_Custom_Event(obj, Controller, 239, 0, 1);
  4712.                 ActionParamsStruct Params;
  4713.                 Params.Set_Basic(this, 100, 214);
  4714.                 Params.Set_Attack(SearchObj, 300.000000, 0, false);
  4715.                 Commands->Action_Attack(obj, Params);
  4716.             }
  4717.             else
  4718.             {
  4719.                 ActionParamsStruct Params;
  4720.                 Params.Set_Basic(this, 100, 215);
  4721.                 Params.Set_Movement(Vector3(-78.442001, -78.043999, 6.404000), 0.800000, 0.500000); // Correct floats
  4722.                 Commands->Action_Goto(obj, Params);
  4723.             }
  4724.         }
  4725.         else if(type == 241)
  4726.             MX0_A02_Say_Something(this, obj, 227, 0);
  4727.         else if(type == 242)
  4728.             MX0_A02_Say_Something(this, obj, 228, 0);
  4729.         else if(type == 243)
  4730.             MX0_A02_Say_Something(this, obj, 229, 0);
  4731.         else if(type == 244)
  4732.             MX0_A02_Say_Something(this, obj, 230, 0);
  4733.         else if(type == 245)
  4734.             MX0_A02_Say_Something(this, obj, 231, 0);
  4735.         else if(type == 246)
  4736.         {
  4737.             if(MoveIndex == 1)
  4738.                 MX0_A02_Say_Something(this, obj, 227, 0);
  4739.             else
  4740.                 MX0_A02_Say_Something(this, obj, 233, 0);
  4741.         }
  4742.         else if(type == 247)
  4743.         {
  4744.             GameObject *EdgeLocation = Commands->Find_Object(1100021);
  4745.             switch(MoveIndex)
  4746.             {
  4747.                 case 5:
  4748.                     EdgeLocation = Commands->Find_Object(1100014);
  4749.                     break;
  4750.                 case 6:
  4751.                     EdgeLocation = Commands->Find_Object(1100016);
  4752.                     break;
  4753.                 case 7:
  4754.                     EdgeLocation = Commands->Find_Object(1100018);
  4755.                     break;
  4756.                 case 8:
  4757.                     EdgeLocation = Commands->Find_Object(1100020);
  4758.                     break;
  4759.                 default:
  4760.                     break;
  4761.             }
  4762.             if(EdgeLocation)
  4763.             {
  4764.                 ActionParamsStruct Params;
  4765.                 Params.Set_Basic(this, 100, 218);
  4766.                 Params.Set_Movement(Commands->Get_Position(EdgeLocation), 0.800000, 0.500000);
  4767.                 Commands->Action_Goto(obj, Params);
  4768.             }
  4769.         }
  4770.         else if(type == 248)
  4771.         {
  4772.             Vector3 MoveLocation = Vector3(-105.302002, -60.340000, 0); // correct float
  4773.             switch(MoveIndex)
  4774.             {
  4775.                 case 1:
  4776.                     MoveLocation = Vector3(-78.739998, -60.340000, 0); // correct float
  4777.                     break;
  4778.                 case 2:
  4779.                     MoveLocation = Vector3(-90.786003, -65.491997, 0); // correct float
  4780.                     break;
  4781.                 case 3:
  4782.                     MoveLocation = Vector3(-94.755997, -59.509998, 0); // correct float
  4783.                     break;
  4784.                 case 4:
  4785.                     MoveLocation = Vector3(-104.988998, -49.282001, 0); // correct float
  4786.                     break;
  4787.                 default:
  4788.                     break;
  4789.             }
  4790.             ActionParamsStruct Params;
  4791.             Params.Set_Basic(this, 100, 201);
  4792.             Params.Set_Movement(MoveLocation, 0.200000, 3.000000);
  4793.             Commands->Action_Goto(obj, Params);
  4794.         }
  4795.         else if(type == 249)
  4796.             MX0_A02_Say_Something(this, obj, 234, 0);
  4797.         else if(type == 250)
  4798.             MX0_A02_Say_Something(this, obj, 235, 0);
  4799.         else if(type == 251)
  4800.             MX0_A02_Say_Something(this, obj, 236, 0);
  4801.         else if(type == 252)
  4802.             MX0_A02_Say_Something(this, obj, 237, 0);
  4803.         else if(type == 253)
  4804.             MX0_A02_Say_Something(this, obj, 238, 0);
  4805.         else if(type == 255)
  4806.         {
  4807.             MX0_A02_Say_Something(this, obj, 239, 0);
  4808.             GameObject *SearchObj = Commands->Find_Object(param);
  4809.             if(SearchObj)
  4810.             {
  4811.                 ActionParamsStruct Params;
  4812.                 Params.Set_Basic(this, 100, 219);
  4813.                 Params.Set_Movement(Commands->Get_Position(SearchObj), 0.800000, 3.000000);
  4814.                 Commands->Action_Goto(obj, Params);
  4815.             }
  4816.         }
  4817.         else if(type == 257)
  4818.             MX0_A02_Say_Something(this, obj, 241, 0);
  4819.         else if(type == 259)
  4820.             MX0_A02_Say_Something(this, obj, 242, 0);
  4821.         else if(type == 260)
  4822.             MX0_A02_Say_Something(this, obj, 243, 0);
  4823.         else if(type == 261)
  4824.             MX0_A02_Say_Something(this, obj, 244, 0);
  4825.         else if(type == 263)
  4826.             MX0_A02_Say_Something(this, obj, 245, 0);
  4827.         else if(type == 265)
  4828.         {
  4829.             ActionParamsStruct Params;
  4830.             Params.Set_Basic(this, 100, 201);
  4831.             Vector3 Pos = Commands->Get_Position(obj);
  4832.             GameObject *Star = Commands->Get_A_Star(Pos);
  4833.             Params.Set_Movement(Star, 0.800000, 10.000000);
  4834.             Commands->Action_Goto(obj, Params);
  4835.         }
  4836.         else if(type == 267)
  4837.             MX0_A02_Say_Something(this, obj, 246, 0);
  4838.         else if(type == 268)
  4839.         {
  4840.             ActionParamsStruct Params;
  4841.             Params.Set_Basic(this, 100, 201);
  4842.             Params.Set_Attack(Vector3(-85.660004,-73.309998,22.809999), 300.000000, 0, true); // floats are correct
  4843.             Commands->Action_Attack(obj, Params);
  4844.         }
  4845.         else if(type == 269)
  4846.         {
  4847.             Vector3 Pos = Commands->Get_Position(obj);
  4848.             GameObject *Star = Commands->Get_A_Star(obj);
  4849.             Vector3 StarPos = Commands->Get_Position(Star);
  4850.             if(Commands->Get_Distance(Pos, StarPos) < 10.0)
  4851.             {
  4852.                 if(MoveIndex == 2)
  4853.                     MX0_A02_Say_Something(this, obj, 247, 1);
  4854.                 else if(MoveIndex == 3)
  4855.                     MX0_A02_Say_Something(this, obj, 248, 1);
  4856.                 else if(MoveIndex == 4)
  4857.                     MX0_A02_Say_Something(this, obj, 249, 1);
  4858.         }
  4859.     }
  4860. }
  4861.  
  4862. void MX0_A02_ACTOR::Action_Complete(GameObject *obj,int action_id,ActionCompleteReason complete_reason)
  4863. {
  4864.     if(Active)
  4865.     {
  4866.         if(complete_reason == ACTION_COMPLETE_CONVERSATION_ENDED || complete_reason == ACTION_COMPLETE_CONVERSATION_INTERRUPTED || complete_reason == ACTION_COMPLETE_CONVERSATION_UNABLE_TO_INIT)
  4867.         {
  4868.             if(action_id == 202)
  4869.             {
  4870.                 StarNear = true;
  4871.                 Commands->Start_Timer(obj, this, 0.100000, 203);
  4872.                 GameObject *Controller = Commands->Find_Object(1100000);
  4873.                 Commands->Send_Custom_Event(obj, Controller, 218, 0, 0);
  4874.             }
  4875.             else if(action_id == 203)
  4876.             {
  4877.                 StarNear = true;
  4878.                 Commands->Start_Timer(obj, this, 0.100000, 203);
  4879.                 GameObject *Controller = Commands->Find_Object(1100000);
  4880.                 Commands->Send_Custom_Event(obj, Controller, 220, 0, 0);
  4881.             }
  4882.             else if(action_id == 204)
  4883.             {
  4884.                 StarNear = true;
  4885.                 Commands->Start_Timer(obj, this, 0.100000, 203);
  4886.                 GameObject *Controller = Commands->Find_Object(1100000);
  4887.                 Commands->Send_Custom_Event(obj, Controller, 221, 0, 0);
  4888.             }
  4889.             else if(action_id == 205)
  4890.             {
  4891.                 StarNear = true;
  4892.                 Commands->Start_Timer(obj, this, 0.100000, 203);
  4893.                 GameObject *Controller = Commands->Find_Object(1100000);
  4894.                 Commands->Send_Custom_Event(obj, Controller, 219, 0, 0);
  4895.             }
  4896.             else if(action_id == 206)
  4897.             {
  4898.                 StarNear = true;
  4899.                 Commands->Start_Timer(obj, this, 0.100000, 203);
  4900.                 GameObject *Controller = Commands->Find_Object(1100000);
  4901.                 Commands->Send_Custom_Event(obj, Controller, 222, 0, 0);
  4902.             }
  4903.             else if(action_id == 225)
  4904.             {
  4905.                 GameObject *Controller = Commands->Find_Object(1100000);
  4906.                 Commands->Send_Custom_Event(obj, Controller, 234, 0, 0);
  4907.             }
  4908.             else if(action_id == 234)
  4909.             {
  4910.                 GameObject *Controller = Commands->Find_Object(1100000);
  4911.                 Commands->Send_Custom_Event(obj, Controller, 250, 0, 0);
  4912.             }
  4913.             else if(action_id == 235)
  4914.             {
  4915.                 GameObject *Controller = Commands->Find_Object(1100000);
  4916.                 Commands->Send_Custom_Event(obj, Controller, 251, 0, 0);
  4917.             }
  4918.             else if(action_id == 236)
  4919.             {
  4920.                 GameObject *Controller = Commands->Find_Object(1100000);
  4921.                 Commands->Send_Custom_Event(obj, Controller, 252, 0, 0);
  4922.             }
  4923.             else if(action_id == 237)
  4924.             {
  4925.                 GameObject *Controller = Commands->Find_Object(1100000);
  4926.                 Commands->Send_Custom_Event(obj, Controller, 253, 0, 0);
  4927.             }
  4928.             else if(action_id == 238)
  4929.             {
  4930.                 GameObject *Controller = Commands->Find_Object(1100000);
  4931.                 Commands->Send_Custom_Event(obj, Controller, 254, 0, 0);
  4932.             }
  4933.             else if(action_id == 240)
  4934.             {
  4935.                 Commands->Create_2D_Sound("MX0_GDIEAGLEBASE_117");
  4936.                 Commands->Set_HUD_Help_Text(8387, Vector3(0.196000, 0.882000, 0.196000));
  4937.                 GameObject *Controller = Commands->Find_Object(1100000);
  4938.                 Commands->Send_Custom_Event(obj, Controller, 256, 0, 0);
  4939.             }
  4940.             else if(action_id == 245)
  4941.             {
  4942.                 GameObject *SearchObj = Commands->Find_Object(1100024);
  4943.                 if(SearchObj)
  4944.                 {
  4945.                     ActionParamsStruct Params;
  4946.                     Params.Set_Basic(this, 100, 221);
  4947.                     Params.Set_Movement(Commands->Get_Position(SearchObj), 0.800000, 5.000000);
  4948.                     Commands->Action_Goto(obj, Params);
  4949.                 }
  4950.                 GameObject *Controller = Commands->Find_Object(1100000);
  4951.                 Commands->Send_Custom_Event(obj, Controller, 264, 0, 0);
  4952.             }
  4953.             else if(action_id == 229)
  4954.             {
  4955.                 GameObject *Controller = Commands->Find_Object(1100000);
  4956.                 Commands->Send_Custom_Event(obj, Controller, 268, 0, 0);
  4957.             }
  4958.         }
  4959.         else
  4960.         {
  4961.             if(action_id == 202)
  4962.             {
  4963.                 GameObject *SearchObj = Commands->Find_Object(ParamObjID1);
  4964.                 if(!SearchObj)
  4965.                 {
  4966.                     GameObject *Controller = Commands->Find_Object(1100000);
  4967.                     Commands->Send_Custom_Event(obj, Controller, 226, 0, 0);
  4968.                 }
  4969.                 else
  4970.                 {
  4971.                     ActionParamsStruct Params;
  4972.                     Params.Set_Basic(this, 100, 204);
  4973.                     Params.Set_Attack(0, 300.000000, 0, true);
  4974.                     Commands->Action_Attack(obj, Params);
  4975.                 }
  4976.             }
  4977.             else if(action_id == 203)
  4978.             {
  4979.                 GameObject *SearchObj = Commands->Find_Object(ParamObjID2);
  4980.                 if(SearchObj)
  4981.                 {
  4982.                     ActionParamsStruct Params;
  4983.                     Params.Set_Basic(this, 100, 205);
  4984.                     Params.Set_Attack(SearchObj, 300.000000, 0, true);
  4985.                     Commands->Action_Attack(obj, Params);
  4986.                 }
  4987.                 else
  4988.                     Commands->Send_Custom_Event(obj, obj, 207, 0, 0);
  4989.             }
  4990.             else if(action_id == 204)
  4991.             {
  4992.                 GameObject *Controller = Commands->Find_Object(1100000);
  4993.                 Commands->Send_Custom_Event(obj, Controller, 226, 0, 0);
  4994.             }
  4995.             else if(action_id == 205)
  4996.                 Commands->Send_Custom_Event(obj, obj, 207, 0, 0);
  4997.             else if(action_id == 206 || action_id == 207)
  4998.             {
  4999.                 if(StarNear && (GameObject *Controller = Commands->Find_Object(1100000)))
  5000.                     Commands->Send_Custom_Event(obj, Controller, 209, MoveIndex, 0);
  5001.             }
  5002.             else if(action_id == 208)
  5003.             {
  5004.                 int MX0_GDITROOPER2_069 = Commands->Create_Conversation("MX0_GDITROOPER2_069", 100, 300, false);
  5005.                 Commands->Join_Conversation(obj, MX0_GDITROOPER2_069, false, true, true);
  5006.                 Vector3 Pos = Commands->Get_Position(obj);
  5007.                 GameObject *Star = Commands->Get_A_Star(Pos);
  5008.                 Commands->Join_Conversation(Star, MX0_GDITROOPER2_069, false, false, false);
  5009.                 Commands->Start_Conversation(MX0_GDITROOPER2_069, 205);
  5010.                 Commands->Monitor_Conversation(obj, MX0_GDITROOPER2_069);
  5011.             }
  5012.             else if(action_id == 209)
  5013.             {
  5014.                 Unknown2 = true;
  5015.                 GameObject *Controller = Commands->Find_Object(1100000);
  5016.                 Commands->Send_Custom_Event(obj, Controller, 233, 0, 0);
  5017.             }
  5018.             else if(action_id == 211)
  5019.             {
  5020.                 Unknown2 = true;
  5021.                 GameObject *Controller = Commands->Find_Object(1100000);
  5022.                 Commands->Send_Custom_Event(obj, Controller, 237, 0, 0);
  5023.             }
  5024.             else if(action_id == 213)
  5025.             {
  5026.                 GameObject *Controller = Commands->Find_Object(1100000);
  5027.                 Commands->Send_Custom_Event(obj, Controller, 240, 0, 0);
  5028.             }
  5029.             else if(action_id == 214)
  5030.             {
  5031.                 GameObject *Controller = Commands->Find_Object(1100000);
  5032.                 Commands->Send_Custom_Event(obj, Controller, 267, 0, 0);
  5033.                 ActionParamsStruct Params;
  5034.                 Params.Set_Basic(this, 100, 215);
  5035.                 Params.Set_Movement(Vector3(unknown, unknown, 6.404000), 0.800000, 0.500000);
  5036.                 Commands->Action_Goto(obj, Params);
  5037.             }
  5038.             else if(action_id == 215)
  5039.             {
  5040.                 GameObject *Controller = Commands->Find_Object(1100000);
  5041.                 Commands->Send_Custom_Event(obj, Controller, 235, 0, 0);
  5042.                 Commands->Destroy_Object(obj);
  5043.             }
  5044.             else if(action_id == 216)
  5045.                 Commands->Enable_Enemy_Seen(obj, true);
  5046.             else if(action_id == 217)
  5047.             {
  5048.                 ActionParamsStruct Params;
  5049.                 Params.Set_Basic(this, 90, 201);
  5050.                 Vector3 Pos = Commands->Get_Position(obj);
  5051.                 GameObject *Star = Commands->Get_A_Star(Pos);
  5052.                 Params.Set_Attack(Star, 30.000000, 0, true);
  5053.                 Params.Set_Movement(Star, 0.800000, 1.000000);
  5054.                 Commands->Action_Attack(obj, Params);
  5055.             }
  5056.             else if(action_id == 218)
  5057.                 Commands->Apply_Damage(obj, 10000, "Blamokiller", 0);
  5058.             else if(action_id == 219)
  5059.             {
  5060.                 GameObject *SearchObj = Commands->Find_Object(DestroyedMedID);
  5061.                 if(SearchObj)
  5062.                 {
  5063.                     ActionParamsStruct Params;
  5064.                     Params.Set_Basic(this, 100, 201);
  5065.                     Params.Set_Attack(SearchObj, 300.000000, 0, false);
  5066.                     Commands->Action_Attack(obj, Params);
  5067.                     Commands->Start_Timer(obj, this, 5, 215);
  5068.                 }
  5069.             }
  5070.             else if(action_id == 220)
  5071.             {
  5072.                 ActionParamsStruct Params;
  5073.                 Params.Set_Basic(this, 100, 201);
  5074.                 Params.Set_Attack(Vector3(unknown, unknown, 0.100000), 0, 0, true);
  5075.                 Commands->Action_Attack(obj, Params);
  5076.             }
  5077.         }
  5078.     }
  5079. }
  5080.  
  5081. void MX0_A02_ACTOR::Enemy_Seen(GameObject *obj,GameObject *enemy)
  5082. {
  5083.     ActionParamsStruct Params;
  5084.     Params.Set_Basic(this, 90, 201);
  5085.     Params.Set_Attack(enemy, 300.000000, 0, true);
  5086.     Commands->Action_Attack(obj, Params);
  5087. }
  5088.  
  5089. void MX0_A02_ACTOR::Timer_Expired(GameObject *obj,int number)
  5090. {
  5091.     if(Active)
  5092.     {
  5093.         if(number == 202)
  5094.         {
  5095.             GameObject *LedgeLocation = 0;
  5096.             switch(MoveIndex)
  5097.             {
  5098.                 case 1:
  5099.                     LedgeLocation = Commands->Find_Object(1100007);
  5100.                     break;
  5101.                 case 2:
  5102.                     LedgeLocation = Commands->Find_Object(1100011);
  5103.                     break;
  5104.                 case 3:
  5105.                     LedgeLocation = Commands->Find_Object(1100009);
  5106.                     break;
  5107.                 case 4:
  5108.                     LedgeLocation = Commands->Find_Object(1100013);
  5109.                     break;
  5110.                 case 5:
  5111.                     LedgeLocation = Commands->Find_Object(1100015);
  5112.                     break;
  5113.                 case 6:
  5114.                     LedgeLocation = Commands->Find_Object(1100017);
  5115.                     break;
  5116.                 case 7:
  5117.                     LedgeLocation = Commands->Find_Object(1100019);
  5118.                     break;
  5119.                 case 8:
  5120.                     LedgeLocation = Commands->Find_Object(1100021);
  5121.                     break;
  5122.                 default:
  5123.                     LedgeLocation = Commands->Find_Object(1100021);
  5124.                     break;
  5125.             }
  5126.             if(LedgeLocation)
  5127.             {
  5128.                 ActionParamsStruct Params;
  5129.                 Params.Set_Basic(this, 100, 206);
  5130.                 Params.Set_Movement(Commands->Get_Position(LedgeLocation), 0.800000, 0.500000);
  5131.                 Commands->Action_Attack(obj, Params);
  5132.             }
  5133.             float Random = Commands->Get_Random(0, 4.999900);
  5134.             if(Random > 4)
  5135.                 Random = 4;
  5136.             Commands->Start_Timer(obj, this, Random, 203);
  5137.         }
  5138.         else if(number == 203)
  5139.         {
  5140.             GameObject *LedgeLocation = 0;
  5141.             switch(MoveIndex)
  5142.             {
  5143.                 case 1:
  5144.                     LedgeLocation = Commands->Find_Object(1100006);
  5145.                     break;
  5146.                 case 2:
  5147.                     LedgeLocation = Commands->Find_Object(1100010);
  5148.                     break;
  5149.                 case 3:
  5150.                     LedgeLocation = Commands->Find_Object(1100008);
  5151.                     break;
  5152.                 case 4:
  5153.                     LedgeLocation = Commands->Find_Object(1100012);
  5154.                     break;
  5155.                 case 5:
  5156.                     LedgeLocation = Commands->Find_Object(1100014);
  5157.                     break;
  5158.                 case 6:
  5159.                     LedgeLocation = Commands->Find_Object(1100016);
  5160.                     break;
  5161.                 case 7:
  5162.                     LedgeLocation = Commands->Find_Object(1100018);
  5163.                     break;
  5164.                 case 8:
  5165.                     LedgeLocation = Commands->Find_Object(1100020);
  5166.                     break;
  5167.                 case default:
  5168.                     LedgeLocation = Commands->Find_Object(1100021);
  5169.                     break;
  5170.             }
  5171.             if(LedgeLocation)
  5172.             {
  5173.                 ActionParamsStruct Params;
  5174.                 Params.Set_Basic(this, 100, 207);
  5175.                 Params.Set_Movement(Commands->Get_Position(LedgeLocation), 0.800000, 0.500000);
  5176.                 Commands->Action_Goto(obj, Params);
  5177.             }
  5178.             float Random = Commands->Get_Random(0, 4.999900);
  5179.             if(Random > 4)
  5180.                 Random = 4;
  5181.             Commands->Start_Timer(obj, this, Random, 202);
  5182.         }
  5183.         else if(number == 205)
  5184.         {
  5185.             Vector3 Pos = Commands->Get_Position(obj);
  5186.             GameObject *Star = Commands->Get_A_Star(Pos);
  5187.             Vector3 StarPos = Commands->Get_Position(Star);
  5188.             if(Commands->Get_Distance(Pos, StarPos) >= 50.0)
  5189.                 Commands->Start_Timer(obj, this, 1, 205);
  5190.             else
  5191.             {
  5192.                 StarNear = false;
  5193.                 if(Active)
  5194.                 {
  5195.                     int MX0_GDITROOPER1_066 = Commands->Create_Conversation("MX0_GDITROOPER1_066", 100, 300, false);
  5196.                     Commands->Join_Conversation(obj, MX0_GDITROOPER1_066, false, true, true);
  5197.                     Vector3 Pos = Commands->Get_Position(obj);
  5198.                     GameObject *Star = Commands->Get_A_Star(Pos);
  5199.                     Commands->Join_Conversation(Star, MX0_GDITROOPER1_066, false, false, false);
  5200.                     Commands->Start_Conversation(MX0_GDITROOPER1_066, 202);
  5201.                     Commands->Monitor_Conversation(obj, MX0_GDITROOPER1_066);
  5202.                 }
  5203.             }
  5204.         }
  5205.         else if(number == 206)
  5206.         {
  5207.             Vector3 Pos = Commands->Get_Position(obj);
  5208.             GameObject *Star = Commands->Get_A_Star(Pos);
  5209.             Vector3 StarPos = Commands->Get_Position(Star);
  5210.             if(Commands->Get_Distance(Pos, StarPos) >= 50.0)
  5211.             {
  5212.                 ActionParamsStruct Params;
  5213.                 Params.Set_Basic(this, 100, 201);
  5214.                 Params.Set_Movement(StarPos, 0.800000, 0.500000);
  5215.                 Commands->Action_Goto(obj, Params);
  5216.                 Commands->Start_Timer(obj, this, 1, 206);
  5217.             }
  5218.             else
  5219.             {
  5220.                 StarNear = false;
  5221.                 MX0_A02_Say_Something(this, obj, 203, 1);
  5222.             }
  5223.         }
  5224.         else if(number == 210)
  5225.         {
  5226.             GameObject *Controller = Commands->Find_Object(1100000);
  5227.             Commands->Send_Custom_Event(obj, Controller, 245, 0, 1);
  5228.             Commands->Apply_Damage(obj, 10000, "Blamokiller", obj);
  5229.         }
  5230.         else if(number == 214)
  5231.             Commands->Apply_Damage(obj, 10000, "Blamokiller", obj);
  5232.         else if(number == 215)
  5233.         {
  5234.             GameObject *DestroyedMed = Commands->Find_Object(DestroyedMedID); // DestroyedMed assumed
  5235.             if(DestroyedMed)
  5236.             {
  5237.                 Vector3 Pos = Commands->Get_Position(DestroyedMed);
  5238.                 float Facing = Commands->Get_Facing(DestroyedMed);
  5239.                 Commands->Destroy_Object(DestroyedMed);
  5240.                 GameObject *Med = Commands->Create_Object("GDI_Medium_Tank_Player", Pos);
  5241.                 if(Med)
  5242.                 {
  5243.                     Commands->Attach_Script(obj, "M00_Send_Object_ID", "1400041,13,0.0f"); // I know that I put obj here..
  5244.                     Commands->Set_Facing(Med, Facing);
  5245.                     MX0_A02_Say_Something(this, obj, 240, 1);
  5246.                     Commands->Attach_Script(Med, "MX0_A02_GDI_MEDTANK", "");
  5247.                 }
  5248.             }
  5249.         }
  5250.         else if(number == 216)
  5251.         {
  5252.             GameObject *Controller = Commands->Find_Object(1100000);
  5253.             Commands->Send_Custom_Event(obj, Controller, 255, 0, 1);
  5254.         }
  5255.         else if(number == 217)
  5256.         {
  5257.             GameObject *Controller = Commands->Find_Object(1100000);
  5258.             Commands->Send_Custom_Event(obj, Controller, 258, 0, 1);
  5259.             ActionParamsStruct Params;
  5260.             Params.Set_Basic(this, 100, 220);
  5261.             Params.Set_Movement(Vector3(unknown, unknown, 0.100000), 0.800000, 1.000000);
  5262.             Commands->Action_Goto(obj, Params);
  5263.         }
  5264.     }
  5265. }
  5266.  
  5267. void MX0_A02_ACTOR::MX0_A02_Say_Something(GameObject *obj, int Number, int Unknown)
  5268. {
  5269.     if(Active)
  5270.     {
  5271.         int Priority = 100;
  5272.         switch(Number)
  5273.         {
  5274.             case 1:
  5275.                 Speech = "MX0_GDITROOPER2_051";
  5276.                 break;
  5277.             case 2:
  5278.                 Speech = "MX0_GDITROOPER3_053";
  5279.                 break;
  5280.             case 3:
  5281.                 Speech = "MX0_GDITROOPER4_054";
  5282.                 break;
  5283.             case 4:
  5284.                 Speech = "MX0_GDITROOPER2_056";
  5285.                 break;
  5286.             case 5:
  5287.                 Speech = "MX0_GDITROOPER1_057";
  5288.                 break;
  5289.             case 6:
  5290.                 Speech = "MX0_GDITROOPER4_058";
  5291.                 break;
  5292.             case 7:
  5293.                 Speech = "MX0_GDITROOPER4_060";
  5294.                 break;
  5295.             case 8:
  5296.                 Speech = "MX0_GDITROOPER2_062";
  5297.                 break;
  5298.             case 9:
  5299.                 Speech = "MX0_GDITROOPER1_063";
  5300.                 break;
  5301.             case 10:
  5302.                 Speech = "MX0_GDITROOPER3_064";
  5303.                 break;
  5304.             case 11:
  5305.                 Speech = "MX0_GDITROOPER4_065";
  5306.                 break;
  5307.             case 205:
  5308.                 Speech = "MX0_GDITROOPER2_069";
  5309.                 break;
  5310.             case 202:
  5311.                 Speech = "MX0_GDITROOPER1_066";
  5312.                 break;
  5313.             case 203:
  5314.                 Speech = "MX0_GDITROOPER2_067";
  5315.                 break;
  5316.             case 204:
  5317.                 Speech = "MX0_GDITROOPER1_068";
  5318.                 break;
  5319.             case 206:
  5320.                 Priority = 99;
  5321.                 Speech = "MX0_GDITROOPER3_070";
  5322.                 break;
  5323.             case 207:
  5324.                 Speech = "MX0_GDITROOPER1_071";
  5325.                 break;
  5326.             case 208:
  5327.                 Speech = "MX0_GDITROOPER4_072";
  5328.                 break;
  5329.             case 209:
  5330.                 Speech = "MX0_GDITROOPER3_073";
  5331.                 break;
  5332.             case 210:
  5333.                 Speech = "MX0_GDITROOPER2_074";
  5334.                 break;
  5335.             case 211:
  5336.                 Speech = "MX0_GDITROOPER1_075";
  5337.                 break;
  5338.             case 212:
  5339.                 Speech = "MX0_GDITROOPER4_076";
  5340.                 break;
  5341.             case 213:
  5342.                 Speech = "MX0_GDITROOPER2_078";
  5343.                 break;
  5344.             case 215:
  5345.                 Speech = "MX0_GDITROOPER1_ALT09";
  5346.                 break;
  5347.             case 216:
  5348.                 Speech = "MX0_GDITROOPER4_ALT07";
  5349.                 break;
  5350.             case 214:
  5351.             case 217:
  5352.                 Speech = "MX0_GDITROOPER3_ALT13";
  5353.                 break;
  5354.             case 218:
  5355.                 Speech = "MX0_GDITROOPER1_ALT10";
  5356.                 break;
  5357.             case 219:
  5358.                 Speech = "MX0_GDITROOPER2_ALT01";
  5359.                 break;
  5360.             case 220:
  5361.                 Speech = "MX0_GDITROOPER4_ALT06";
  5362.                 break;
  5363.             case 221:
  5364.                 Speech = "MX0_GDITROOPER1_079";
  5365.                 break;
  5366.             case 222:
  5367.                 Speech = "MX0_GDITROOPER2_082";
  5368.                 break;
  5369.             case 223:
  5370.                 Speech = "MX0_GDITROOPER3_081";
  5371.                 break;
  5372.             case 224:
  5373.                 Speech = "MX0_GDITROOPER4_080";
  5374.                 break;
  5375.             case 225:
  5376.                 Speech = "MX0_GDITROOPER1_086";
  5377.                 break;
  5378.             case 226:
  5379.                 Speech = "MX0_GDITROOPER1_088";
  5380.                 break;
  5381.             case 227:
  5382.                 Speech = "MX0_GDITROOPER2_093";
  5383.                 break;
  5384.             case 228:
  5385.                 Speech = "MX0_GDITROOPER2_092";
  5386.                 break;
  5387.             case 229:
  5388.                 Speech = "MX0_GDITROOPER2_095";
  5389.                 break;
  5390.             case 230:
  5391.                 Speech = "MX0_GDITROOPER3_096";
  5392.                 break;
  5393.             case 231:
  5394.                 Speech = "MX0_GDITROOPER4_097";
  5395.                 break;
  5396.             case 232:
  5397.                 Speech = "MX0_GDITROOPER1_099";
  5398.                 break;
  5399.             case 233:
  5400.                 Speech = "MX0_GDITROOPER2_098";
  5401.                 break;
  5402.             case 234:
  5403.                 Speech = "MX0_GDITROOPER2_105";
  5404.                 break;
  5405.             case 235:
  5406.                 Speech = "MX0_GDITROOPER4_106";
  5407.                 break;
  5408.             case 236:
  5409.                 Speech = "MX0_GDITROOPER1_107";
  5410.                 break;
  5411.             case 237:
  5412.                 Speech = "MX0_GDITROOPER2_108";
  5413.                 break;
  5414.             case 238:
  5415.                 Speech = "MX0_GDITROOPER3_109";
  5416.                 break;
  5417.             case 239:
  5418.                 Speech = "MX0_ENGINEER1_115";
  5419.                 break;
  5420.             case 240:
  5421.                 Speech = "MX0_ENGINEER1_118";
  5422.                 break;
  5423.             case 241:
  5424.                 Speech = "MX0_GDITROOPER1_119";
  5425.                 break;
  5426.             case 242:
  5427.                 Speech = "MX0_ENGINEER2_120";
  5428.                 break;
  5429.             case 243:
  5430.                 Speech = "MX0_GDITROOPER1_121";
  5431.                 break;
  5432.             case 244:
  5433.                 Speech = "MX0_GDITROOPER2_122";
  5434.                 break;
  5435.             case 245:
  5436.                 Speech = "MX0_ENGINEER2_123";
  5437.                 break;
  5438.             case 246:
  5439.                 Speech = "MX0_GDITROOPER3_090";
  5440.                 break;
  5441.             case 247:
  5442.                 Speech = "MX0_A02_SPEECH_WRONGWAY_01";
  5443.                 break;
  5444.             case 248:
  5445.                 Speech = "MX0_A02_SPEECH_WRONGWAY_02";
  5446.                 break;
  5447.             case 249:
  5448.                 Speech = "MX0_A02_SPEECH_WRONGWAY_03";
  5449.                 break;
  5450.             default:
  5451.                 Speech = "MX0_A02_PREAMB_01";
  5452.                 break;
  5453.         }
  5454.         int Conversation = Commands->Create_Conversation(Speech, Priority, 300, false);
  5455.         Commands->Join_Conversation(obj, Conversation, false, true, true);
  5456.         Vector3 Pos = Commands->Get_Position(obj);
  5457.         GameObject *Star = Commands->Get_A_Star(Pos);
  5458.         Commands->Join_Conversation(Star, Conversation, false, false, false);
  5459.         Commands->Start_Conversation(Conversation, number);
  5460.         Commands->Monitor_Conversation(obj, Conversation);
  5461.     }
  5462. }
  5463.  
  5464. class MX0_A02_GDI_VEHICLE : public ScriptImpClass
  5465. {
  5466.     void Created(GameObject *obj);
  5467.     void Damaged(GameObject *obj,GameObject *damager,float amount);
  5468. };
  5469.  
  5470. void MX0_A02_GDI_VEHICLE::Created(GameObject *obj)
  5471. {
  5472.     //Created assumed
  5473.     Commands->Set_Health(obj, 10.000000);
  5474. }
  5475.  
  5476. void MX0_A02_GDI_VEHICLE::Damaged(GameObject *obj,GameObject *damager,float amount)
  5477. {
  5478.     //Damaged assumed
  5479.     Commands->Set_Health(obj, 10.000000);
  5480. }
  5481.  
  5482. class MX0_A02_GDI_MEDTANK : public ScriptImpClass
  5483. {
  5484.     void Damaged(GameObject *obj,GameObject *damager,float amount);
  5485.     void Custom(GameObject *obj,int type,int param,GameObject *sender);
  5486.     bool Entered;
  5487. };
  5488.  
  5489. void MX0_A02_GDI_MEDTANK::Damaged(GameObject *obj,GameObject *damager,float amount)
  5490. {
  5491.     Commands->Set_Health(obj, Commands->Get_Max_Health(obj));
  5492. }
  5493.  
  5494. void MX0_A02_GDI_MEDTANK::Custom(GameObject *obj,int type,int param,GameObject *sender)
  5495. {
  5496.     if(type == CUSTOM_EVENT_VEHICLE_ENTERED && !Entered)
  5497.     {
  5498.         Entered = true;
  5499.         Commands->Fade_Background_Music("Level 0 Tiberium.mp3", 2, 2);
  5500.         GameObject *Controller = Commands->Find_Object(1100000);
  5501.         Commands->Send_Custom_Event(obj, Controller, 262, 0, 0);
  5502.     }
  5503. }
  5504.  
  5505. class MX0_A02_GDI_APC : public ScriptImpClass
  5506. {
  5507.     void Damaged(GameObject *obj,GameObject *damager,float amount);
  5508.     void Enemy_Seen(GameObject *obj,GameObject *enemy);
  5509.     void Custom(GameObject *obj,int type,int param,GameObject *sender);
  5510.     bool Damageable;
  5511. };
  5512.  
  5513. void MX0_A02_GDI_APC::Damaged(GameObject *obj,GameObject *damager,float amount)
  5514. {
  5515.     if(!Damageable)
  5516.         Commadns->Set_Health(obj, Commands->Get_Max_Health(obj));
  5517. }
  5518.  
  5519. void MX0_A02_GDI_APC::Enemy_Seen(GameObject *obj,GameObject *enemy)
  5520. {
  5521.     ActionParamsStruct Params;
  5522.     Params.Set_Basic(this, 90, 201);
  5523.     Params.Set_Attack(enemy, 300.000000, 0, true);
  5524.     Commands->Action_Attack(obj, Params);
  5525. }
  5526.  
  5527. void MX0_A02_GDI_APC::Custom(GameObject *obj,int type,int param,GameObject *sender)
  5528. {
  5529.     if(type == 210)
  5530.         Commands->Apply_Damage(obj, 10000, "Blamokiller", sender);
  5531.     else if(type == 215)
  5532.     {
  5533.         Commands->Innate_Enable(obj);
  5534.         Commands->Enable_Enemy_Seen(obj, true);
  5535.     }
  5536. }
  5537.  
  5538. class MX0_A02_ZONE_STARTUP : public ScriptImpClass
  5539. {
  5540.     void Entered(GameObject *obj,GameObject *enterer);
  5541. };
  5542.  
  5543. void MX0_A02_ZONE_STARTUP::Entered(GameObject *obj,GameObject *enterer)
  5544. {
  5545.     GameObject *Controller = Commands->Find_Object(1100000);
  5546.     Commands->Send_Custom_Event(obj, Controller, 215, 0, 0);
  5547.     Commands->Destroy_Object(obj);
  5548. }
  5549.  
  5550. class MX0_A02_HELICOPTER : public ScriptImpClass
  5551. {
  5552.     void Created(GameObject *obj);
  5553.     void Timer_Expired(GameObject *obj,int number);
  5554.     void Custom(GameObject *obj,int type,int param,GameObject *sender);
  5555. };
  5556.  
  5557. void MX0_A02_HELICOPTER::Created(GameObject *obj)
  5558. {
  5559.     int ActorID = Get_Int_Parameter("ActorID");
  5560.     if(ActorID)
  5561.         Commands->Start_Timer(obj, this, 23, 211);
  5562. }
  5563.  
  5564. void MX0_A02_HELICOPTER::Timer_Expired(GameObject *obj,int number)
  5565. {
  5566.     if(Get_Int_Parameter("ActorID"))
  5567.     {
  5568.         GameObject *Controller = Commands->Find_Object(1100000);
  5569.         Commands->Send_Custom_Event(obj, Controller, 246, 0, 0);
  5570.     }
  5571.     else
  5572.     {
  5573.         GameObject *Controller = Commands->Find_Object(1100000);
  5574.         Commands->Send_Custom_Event(obj, Controller, 241, 0, 0);
  5575.     }
  5576. }
  5577.  
  5578. void MX0_A02_HELICOPTER::Custom(GameObject *obj,int type,int param,GameObject *sender)
  5579. {
  5580.     //Custom assumed
  5581.     if(type == 211)
  5582.         Commands->Apply_Damage(obj, 10000, "Blamokiller", 0);
  5583. }
  5584.  
  5585. class MX0_A02_DEFAULT_OFF : public ScriptImpClass
  5586. {
  5587.     void Damaged(GameObject *obj,GameObject *damager,float amount);
  5588. };
  5589.  
  5590. void MX0_A02_DEFAULT_OFF::Damaged(GameObject *obj,GameObject *damager,float amount)
  5591. {
  5592.     //Damaged assumed
  5593.     Vector3 Pos = Commands->Get_Position(obj);
  5594.     GameObject *Star = Commands->Get_A_Star(Pos);
  5595.     if(damager != Star)
  5596.         Commands->Apply_Damage(obj, 10000, "Blamokiller", obj);
  5597. }
  5598.  
  5599. class MX0_A02_ZONE_DEFAULT_ON : public ScriptImpClass
  5600. {
  5601.     void Killed(GameObject *obj,GameObject *killer);
  5602. };
  5603.  
  5604. void MX0_A02_ZONE_DEFAULT_ON::Killed(GameObject *obj,GameObject *killer)
  5605. {
  5606.     // Killed assumed
  5607.     GameObject *Controller = Commands->Find_Object(1100000);
  5608.     Commands->Send_Custom_Event(obj, Controller, 202, 0, 0);
  5609.     Commands->Send_Custom_Event(obj, Controller, 223, 1200017, 0);
  5610.     Commands->Send_Custom_Event(obj, Controller, 224, 1200023, 0);
  5611. }
  5612.  
  5613. ScriptRegistrant<MX0_A02_ZONE_DEFAULT_ON> MX0_A02_ZONE_DEFAULT_ON_Registrant("MX0_A02_ZONE_DEFAULT_ON", "")
  5614. ScriptRegistrant<MX0_A02_DEFAULT_OFF> MX0_A02_DEFAULT_OFF_Registrant("MX0_A02_DEFAULT_OFF", "")
  5615. ScriptRegistrant<MX0_A02_HELICOPTER> MX0_A02_HELICOPTER_Registrant("MX0_A02_HELICOPTER", "ActorID=0:int")
  5616. ScriptRegistrant<MX0_A02_ZONE_STARTUP> MX0_A02_ZONE_STARTUP_Registrant("MX0_A02_ZONE_STARTUP", "")
  5617. ScriptRegistrant<MX0_A02_GDI_APC> MX0_A02_GDI_APC_Registrant("MX0_A02_GDI_APC", "")
  5618. ScriptRegistrant<MX0_A02_GDI_MEDTANK> MX0_A02_GDI_MEDTANK_Registrant("MX0_A02_GDI_MEDTANK", "");
  5619. ScriptRegistrant<MX0_A02_GDI_VEHICLE> MX0_A02_GDI_VEHICLE_Registrant("MX0_A02_GDI_VEHICLE", "");
  5620. ScriptRegistrant<MX0_A02_ACTOR> MX0_A02_ACTOR_Registrant("MX0_A02_ACTOR", "ActorID=0:int");
  5621. ScriptRegistrant<MX0_A02_Controller> MX0_A02_Controller_Registrant("MX0_A02_Controller", "");
  5622. ScriptRegistrant<MX0_A03_END_ZONE> MX0_A03_END_ZONE_Registrant("MX0_A03_END_ZONE", "");
  5623. ScriptRegistrant<MX0_A03_NOD_TURRET> MX0_A03_NOD_TURRET_Registrant("MX0_A03_NOD_TURRET", "");
  5624. ScriptRegistrant<MX0_A03_TROOPER_ONE_TEST> MX0_A03_TROOPER_ONE_TEST_Registrant("MX0_A03_TROOPER_ONE_TEST", "");
  5625. ScriptRegistrant<MX0_A03_FIRST_PLAYER_ZONE> MX0_A03_FIRST_PLAYER_ZONE_Registrant("MX0_A03_FIRST_PLAYER_ZONE", "");
  5626. ScriptRegistrant<MX0_A03_HAVOC_TANK> MX0_A03_HAVOC_TANK_Registrant("MX0_A03_HAVOC_TANK", "");
  5627. ScriptRegistrant<MX0_A03_GDI_TROOPER_ONE> MX0_A03_GDI_TROOPER_ONE_Registrant("MX0_A03_GDI_TROOPER_ONE", "");
  5628. ScriptRegistrant<MX0_A03_NOD_HARVESTER> MX0_A03_NOD_HARVESTER_Registrant("MX0_A03_NOD_HARVESTER", "");
  5629. ScriptRegistrant<MX0_A03_NOD_TROOPER_TIB_DEATH> MX0_A03_NOD_TROOPER_TIB_DEATH_Registrant("MX0_A03_NOD_TROOPER_TIB_DEATH", "");
  5630. ScriptRegistrant<MX0_A03_NOD_BUGGIE> MX0_A03_NOD_BUGGIE_Registrant("MX0_A03_NOD_BUGGIE", "");
  5631. ScriptRegistrant<MX0_A03_TANK> MX0_A03_TANK_Registrant("MX0_A03_TANK", "");
  5632. ScriptRegistrant<MX0_A03_HUMVEE> MX0_A03_HUMVEE_Registrant("MX0_A03_HUMVEE", "");
  5633. ScriptRegistrant<MX0_A03_CONTROLLER_DAK> MX0_A03_CONTROLLER_DAK_Registrant("MX0_A03_CONTROLLER_DAK", "");
  5634. ScriptRegistrant<MX0_A03_GDI_TANK_DROP_ZONE_DAK> MX0_A03_GDI_TANK_DROP_ZONE_DAK_Registrant("MX0_A03_GDI_TANK_DROP_ZONE_DAK", "");
  5635. ScriptRegistrant<MX0_A03_GDI_TROOP_DROP_ZONE_DAK> MX0_A03_GDI_TROOP_DROP_ZONE_DAK_Registrant("MX0_A03_GDI_TROOP_DROP_ZONE_DAK", "");
  5636. ScriptRegistrant<MX0_A03_GDI_INFANTRY> MX0_A03_GDI_INFANTRY_Registrant("MX0_A03_GDI_INFANTRY", "troop_num:int");
  5637. ScriptRegistrant<MX0_NOD_INFANTRY> MX0_NOD_INFANTRY_Registrant("MX0_NOD_INFANTRY", "troop_num:int");
  5638. ScriptRegistrant<MX0_GDI_ORCA> MX0_GDI_ORCA_Registrant("MX0_GDI_ORCA", "");
  5639. ScriptRegistrant<MX0_A03_NOD_PLACED_MINIGUNNER> MX0_A03_NOD_PLACED_MINIGUNNER_Registrant("MX0_A03_NOD_PLACED_MINIGUNNER", "");
  5640. ScriptRegistrant<DAK_MX0_Sec_3_Humvee> DAK_MX0_Sec_3_Humvee_Registrant("DAK_MX0_Sec_3_Humvee", "");
  5641. ScriptRegistrant<MX0_KillNotify> MX0_KillNotify_Registrant("MX0_KillNotify", "");
  5642. ScriptRegistrant<MX0_SniperAction> MX0_SniperAction_Registrant("MX0_SniperAction", "FaceObj:int");
  5643. ScriptRegistrant<MX0_AmbientBattle> MX0_AmbientBattle_Registrant("MX0_AmbientBattle", "");
  5644. ScriptRegistrant<MX0_NOD_TroopDrop> MX0_NOD_TroopDrop_Registrant("MX0_NOD_TroopDrop", "");
  5645. ScriptRegistrant<MX0_Kill_Sniper> MX0_Kill_Sniper_Registrant("MX0_Kill_Sniper", "");
  5646. ScriptRegistrant<MX0_Engineer_Goto2> MX0_Engineer_Goto2_Registrant("MX0_Engineer_Goto2", "GotoDest1:int, GotoDest2:int, Count:int");
  5647. ScriptRegistrant<MX0_Engineer_Goto> MX0_Engineer_Goto_Registrant("MX0_Engineer_Goto", "GotoDest1:int, GotoDest2:int, Count:int");
  5648. ScriptRegistrant<MX0_Engineer_Return> MX0_Engineer_Return_Registrant("MX0_Engineer_Return", "");
  5649. ScriptRegistrant<MX0_Engineer2> MX0_Engineer2_Registrant("MX0_Engineer2", "Damage_multiplier:float");
  5650. ScriptRegistrant<MX0_Engineer1> MX0_Engineer1_Registrant("MX0_Engineer1", "Damage_multiplier:float");
  5651. ScriptRegistrant<MX0_MissionStart_DME> MX0_MissionStart_DME_Registrant("MX0_MissionStart_DME", "");
  5652. ScriptRegistrant<MX0_Explosive_Barrels_DLS> MX0_Explosive_Barrels_DLS_Registrant("MX0_Explosive_Barrels_DLS", "Logical_Sound=0:int, Radius:float");
  5653. ScriptRegistrant<MX0_Plant_Ion_Beacon_DLS> MX0_Plant_Ion_Beacon_DLS_Registrant("MX0_Plant_Ion_Beacon_DLS", "");
  5654. ScriptRegistrant<MX0_Nod_Bunker_DLS> MX0_Nod_Bunker_DLS_Registrant("MX0_Nod_Bunker_DLS", "");
  5655. ScriptRegistrant<MX0_SAM_DLS> MX0_SAM_DLS_Registrant("MX0_SAM_DLS", "");
  5656. ScriptRegistrant<MX0_Nod_RocketSoldier_DLS> MX0_Nod_RocketSoldier_DLS_Registrant("MX0_Nod_RocketSoldier_DLS", "Stationary_Point=0:int");
  5657. ScriptRegistrant<MX0_Gun_Emplacement_DLS> MX0_Gun_Emplacement_DLS_Registrant("MX0_Gun_Emplacement_DLS", "Left_Point=0:int, Right_Point=0:int");
  5658. ScriptRegistrant<MX0_GDI_Soldier_DLS> MX0_GDI_Soldier_DLS_Registrant("MX0_GDI_Soldier_DLS", "Attack_Loc0=0:int, Attack_Loc1=0:int, Attack_Loc2=0:int, Attack_Loc3=0:int, Speed=1.0:float");
  5659. ScriptRegistrant<MX0_GDI_Killed_DLS> MX0_GDI_Killed_DLS_Registrant("MX0_GDI_Killed_DLS", "Unit_ID=0:int");
  5660. ScriptRegistrant<MX0_Obelisk_Weapon_DLS> MX0_Obelisk_Weapon_DLS_Registrant("MX0_Obelisk_Weapon_DLS", "Max_Range=75.0f:float");
  5661. ScriptRegistrant<MX0_Vehicle_DLS> MX0_Vehicle_DLS_Registrant("MX0_Vehicle_DLS", "Attack_Loc0=0:int, Attack_Loc1=0:int, Attack_Loc2=0:int, Attack_Loc3=0:int, Speed=1.0:float");
  5662. ScriptRegistrant<MX0_Area4_Zone_DLS> MX0_Area4_Zone_DLS_Registrant("MX0_Area4_Zone_DLS", "Area=0:int");
  5663. ScriptRegistrant<MX0_Area4_Controller_DLS> MX0_Area4_Controller_DLS_Registrant("MX0_Area4_Controller_DLS", "");
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement