home *** CD-ROM | disk | FTP | other *** search
/ The Games Machine 76 / XENIATGM66.iso / Messiah / data1.cab / Program_Executable_Files / messiahscripts / Enemies / SharedAIMove.hxx < prev    next >
Text File  |  1999-11-29  |  10KB  |  426 lines

  1.  
  2.  
  3. SubRoutine(Sub_CivilianReactionToThreat)
  4. {
  5.         if(VRank<_RankPrivate && VAIClass!=_AIClassScientist)
  6.         {
  7.             CallSub(Sub_SetCoweringMode);
  8.         }
  9.         else
  10.         {
  11.             //run and press alarm button or other suitable action
  12.             call(AIfindpathwithspecificstate,_AIstatePressAlarmButton);
  13.             if(VTrigger==_DIRTempFlag)
  14.             {
  15.                 //call(AIorder,_set,_AIstateRun);
  16.                 //State(_or,StateFollowPath);
  17.                 call(AIclrtarget);
  18.                 call(AIorder,_set,_AIstateRun);
  19.                 call(AIorder,_clr,_AInomove|_AInoturn);
  20.                 State(_clr,StateFollowPath);
  21.                 State(_or,StateExecutePathSequence);
  22.             }
  23.             else
  24.             {
  25.                 CallSub(Sub_SetCoweringMode);
  26.             }
  27.         }
  28. }
  29.  
  30. SubRoutine(Sub_AISetAttack)
  31. {
  32.         if(VAIclass!=_AIclassDroid && VAIClass!=_AIclassanimal && VRank>=_RankSergeantL)
  33.         {
  34.             if(VAIState!=_AIstateAttack && VAIState!=_AIstateHide && VAIState!=_AIstateGuard)
  35.             {
  36.                 call(ClrPath);
  37.                  call(AIorder,_clr,_AIinspecialmode|_AInomove|_AIlockedtoactor|_AInoturn|_AIcloseupaction|_AIcombatmodereact|_AIstayonpath|_AIdontdopickdest);
  38.                 call(AIorder,_set,_AIstateAttack);
  39.                 state(_change,StateFollowPath,StateNormal);
  40.                 actorflag(_clr,_AFLAGnomove);
  41.                 float(_set,CopActionBits,1);//since attack is initiated from many places, set initial attack flag
  42.                 if(Vstate!=StateCrouching && VActorFlag!=_AFLAGattached)
  43.                 {
  44.                     spawnaction(CopReactionToAttack);
  45.                 }
  46.             }
  47.             elseif(VAIStateHigh==_AIstayonpath)
  48.             {
  49.                 call(AIselecttarget,_AIenemy);
  50.             }
  51.             if(vstate==StateCrouching)
  52.             {
  53.                 direction(_set,_DIRcrouch);
  54.             }
  55.         }
  56.         else
  57.         {
  58.             call(AIclrtarget);
  59.         }
  60. }
  61.  
  62. SubRoutine(Sub_AIConfusedMode,float(AIAbility))
  63. {
  64.         print("My Abilities:   ",AIAbility);
  65. }
  66.  
  67. SubRoutine(Sub_AIGetBackToIdle)
  68. {
  69.         call(AIorder,_clr,_AIinspecialmode|_AInomove|_AIlockedtoactor|_AInoturn|_AIstayonpath|_AIdontdopickdest|_AIcloseupaction|_AIcombatmodereact|);
  70.         call(AIorder,_set,_AIstatePatrol);
  71.         ActorFlag(_clr,_AFLAGsniper);
  72.         call(ClrPath);
  73.         call(PickNewNode);
  74.         call(AIclrtarget);
  75.         if(vstate==StateCrouching)
  76.         {
  77.             direction(_set,_DIRcrouch);
  78.         }
  79. }
  80.  
  81. SubRoutine(Sub_AISetCombatMode);
  82. {
  83.         if(vtrigger!=_DIRcombatmode)
  84.         {
  85.             direction(_set,_DIRcombatmode);
  86.             float(_set,CopActionBits,2);//set initial combat flag
  87.         }
  88. }
  89.  
  90. SubRoutine(Sub_AIClrCombatMode);
  91. {
  92.         if(vtrigger==_DIRcombatmode)
  93.         {
  94.             direction(_clr,_DIRcombatmode);
  95.         }
  96. }
  97.  
  98. SubRoutine(Sub_SetCoweringMode)
  99. {
  100.         call(AIorder,_set,_AIstateCowering);
  101.         call(AIorder,_set,_AIinspecialmode);
  102.         call(ClrPath);
  103.         call(AIclrtarget);
  104.         if(vstate!=StateCrouching)
  105.         {
  106.             direction(_set,_DIRcrouch);
  107.         }
  108. }
  109.  
  110. Subroutine(Sub_ReactToBulletOrExplosion)
  111. {
  112.         if(VAIclass!=_AIclassDroid && VAIClass!=_AIclassanimal)
  113.         {
  114.             sample(SFXExplosionReact,-1);
  115.             if(VRank>=_RankSergeantL)
  116.             {
  117.                 call(AIcheckbulletorigin);
  118.                 if(vtrigger==_DIRTempFlag)
  119.                 {
  120.                     //printlog("Found target actor 666666666666666666666666666666666");
  121.                     call(AIchangefriendtoenemy);
  122.                     call(AIalert,Sub_AISetAttack);
  123.                     CallSub(Sub_AISetAttack);
  124.                 }
  125.             }
  126.             else
  127.             {
  128.                 callsub(Sub_CivilianReactionToThreat);
  129.             }
  130.         }
  131. }
  132.  
  133. SubRoutine(Sub_AIShootCheck,float(Counter),float(AIGrenadeCounter))
  134. {
  135.         //check for firing!
  136.         if(vstate!=StateBlind && vstate!=StateOnFire && vstate!=StateCrawling)
  137.         {
  138.             //if(AIGrenadeCounter!=0)
  139.             //{
  140.                 float(_add,AIGrenadeCounter,1);
  141.             //}
  142.             //if(AIGrenadeCounter>100 || VTargetDistance>1500 && VInventoryLeft>0 && Counter<50 && vrnd<50)
  143.     
  144.             //print("AIGrenadeCounter:   ",AIGrenadeCounter);
  145.             //print("Counter:            ",Counter);
  146.  
  147.             //if(AIGrenadeCounter>30 && VTargetDistance>1500 && VInventoryLeft>0 && Counter<50 && vrnd<50)
  148.             if(AIGrenadeCounter>150 && VTargetDistance>1500 && VInventoryLeft>0 && vrnd<20)
  149.             {
  150.         //        if(VActorFlag==_AFLAGlogon)                        //aim on?
  151.         //        {
  152.                     call(AIchecklogtrajectory);                    //no friends in path of bullet?
  153.                     if(vtrigger==_DIRTempFlag)
  154.                     {
  155.                         direction(_set,_DIRGrenade);
  156.                         float(_set,AIGrenadeCounter,0);
  157.                     }
  158.         //        }
  159.                 if(vtrigger!=_DIRcrouch)
  160.                 {
  161.                     if(vaction==CopHideLeanLeftGrenade)
  162.                     {
  163.                         if(vframe==49)
  164.                         {
  165.                             callsub(Sub_SpawnGrenade);
  166.                             //float(_set,Counter,1000);        //to force retreat immediately after throwing grenade
  167.                             float(_set,AIGrenadeCounter,0);
  168.                         }
  169.                     }
  170.                     elseif(vaction==CopThrowGrenade)
  171.                     {
  172.                         if(vframe==10)
  173.                         {
  174.                             callsub(Sub_SpawnGrenade);
  175.                             //float(_set,Counter,1000);        //to force retreat immediately after throwing grenade
  176.                             float(_set,AIGrenadeCounter,0);
  177.                         }
  178.                     }
  179.                 }
  180.                 else
  181.                 {
  182.                     if(vaction==CopHideCrouchLeanLeftG)
  183.                     {
  184.                         if(vframe==28)
  185.                         {
  186.                             callsub(Sub_SpawnGrenade);
  187.                             //float(_set,Counter,1000);        //to force retreat immediately after throwing grenade
  188.                             float(_set,AIGrenadeCounter,0);
  189.                         }
  190.                     }
  191.                     elseif(vaction==CopHideCrouchLeanRightG)
  192.                     {
  193.                         if(vframe==28)
  194.                         {
  195.                             callsub(Sub_SpawnGrenade);
  196.                             //float(_set,Counter,1000);        //to force retreat immediately after throwing grenade
  197.                             float(_set,AIGrenadeCounter,0);
  198.                         }
  199.                     }
  200.                 }
  201.             }
  202.             elseif(vtrigger==_DIRhavegun)                        //have gun?
  203.             {
  204.                 if(VActorFlag==_AFLAGlogon)                        //aim on?
  205.                 {
  206.                     //print("Log on   ");
  207.                     call(AIchecklogtrajectory);                    //no friends in path of bullet?
  208.                     if(vtrigger==_DIRTempFlag || VTargetDistance<150)
  209.                     {
  210.                         //print("Clear path Shooting 111111111111111111111111111111111");
  211.                         Direction(_set,_DIRshoot);                //fire
  212.                         //float(_set,Counter,1000);        //to force retreat immediately after shooting
  213.                     }
  214.                 }
  215.             }
  216.         }
  217. }
  218.  
  219. SubRoutine(Sub_AI1WayAlignToTarget)
  220. {
  221. /*        if(VTargetAngle<-1200 || VTargetAngle>1200 && VClass==_ClassCop)
  222.         {
  223.             if(vstate==StateCrouching)
  224.             {
  225.                 if(VAction!=CopCrouch180)
  226.                 {
  227.                     SpawnAction(CopCrouch180);
  228.                     //break();
  229.                 }
  230.             }
  231.             else
  232.             {
  233.                 if(VAction!=Cop180)
  234.                 {
  235.                     SpawnAction(Cop180);
  236.                 }
  237.             }
  238.         }
  239.         elseif(VTargetAngle<-20)
  240. */
  241.         if(VTargetAngle<-30)
  242.         {
  243.             if(VTargetAngle<-220)
  244.             {
  245.                 Direction(_set,_DIRleft);
  246.             }
  247.             else
  248.             {
  249.                 turn(0,-19,0);
  250.             }
  251.         }
  252.         elseif(VTargetAngle>30)
  253.         {
  254.             if(VTargetAngle>2000)
  255.             {
  256.                 if(VTargetAngle<-220)
  257.                 {
  258.                     Direction(_set,_DIRleft);
  259.                 }
  260.                 else
  261.                 {
  262.                     turn(0,-19,0);
  263.                 }
  264.             }
  265.             else
  266.             {
  267.                 if(VTargetAngle>220)
  268.                 {
  269.                     Direction(_set,_DIRright);
  270.                 }
  271.                 else
  272.                 {
  273.                     turn(0,19,0);
  274.                 }
  275.             }
  276.         }
  277. }
  278.  
  279. SubRoutine(Sub_AI1WayAlignToPickDestAngle)
  280. {
  281.         if(vpickdestanglecorr<-30)
  282.         {
  283.             if(vpickdestanglecorr<-220)
  284.             {
  285.                 Direction(_set,_DIRleft);
  286.             }
  287.             else
  288.             {
  289.                 turn(0,-19,0);
  290.             }
  291.         }
  292.         elseif(vpickdestanglecorr>30)
  293.         {
  294.             if(vpickdestanglecorr>220)
  295.             {
  296.                 Direction(_set,_DIRright);
  297.             }
  298.             else
  299.             {
  300.                 turn(0,19,0);
  301.             }
  302.         }
  303. }
  304.  
  305. SubRoutine(Sub_AI2WayAlignToPickDestAngle)
  306. {
  307.         if(vpickdestanglecorr<-30 && vpickdestanglecorr>=-1024)
  308.         {
  309.             if(vpickdestanglecorr<-220)
  310.             {
  311.                 Direction(_set,_DIRleft);
  312.             }
  313.             else
  314.             {
  315.                 turn(0,-19,0);
  316.             }
  317.         }
  318.         elseif(vpickdestanglecorr<-1024 && vpickdestanglecorr>-2028)
  319.         {
  320.             if(vpickdestanglecorr>-1220)
  321.             {
  322.                 Direction(_set,_DIRright);
  323.             }
  324.             else
  325.             {
  326.                 turn(0,19,0);
  327.             }
  328.         }
  329.         elseif(vpickdestanglecorr>30 && vpickdestanglecorr<=1024)
  330.         {
  331.             if(vpickdestanglecorr>220)
  332.             {
  333.                 Direction(_set,_DIRright);
  334.             }
  335.             else
  336.             {
  337.                 turn(0,19,0);
  338.             }
  339.         }
  340.         elseif(vpickdestanglecorr>1024 && vpickdestanglecorr<2028)
  341.         {
  342.             if(vpickdestanglecorr>1200)
  343.             {
  344.                 Direction(_set,_DIRleft);
  345.             }
  346.             else
  347.             {
  348.                 turn(0,-19,0);
  349.             }
  350.         }
  351. }
  352.  
  353. SubRoutine(Sub_AI8WayMoveWalk,float(CurrentDirection))
  354. {
  355.         if(vpickdestanglecorr>-256 && vpickdestanglecorr<256)
  356.         {
  357.             float(_set,CurrentDirection,_DIRwalking|_DIRforward);
  358.         }
  359.         elseif(vpickdestanglecorr>-768 && vpickdestanglecorr<-256)
  360.         {
  361.             float(_set,CurrentDirection,_DIRwalking|_DIRforward|_DIRsideleft);
  362.         }
  363.         elseif(vpickdestanglecorr>256 && vpickdestanglecorr<768)
  364.         {
  365.             float(_set,CurrentDirection,_DIRwalking|_DIRforward|_DIRsideright);
  366.         }
  367.         elseif(vpickdestanglecorr>-1280 && vpickdestanglecorr<-768)
  368.         {
  369.             float(_set,CurrentDirection,_DIRwalking|_DIRsideleft);
  370.         }
  371.         elseif(vpickdestanglecorr>768 && vpickdestanglecorr<1280)
  372.         {
  373.             float(_set,CurrentDirection,_DIRwalking|_DIRsideright);
  374.         }
  375.         elseif(vpickdestanglecorr>-1792 && vpickdestanglecorr<-1280)
  376.         {
  377.             float(_set,CurrentDirection,_DIRwalking|_DIRbackward|_DIRsideleft);
  378.         }
  379.         elseif(vpickdestanglecorr>1280 && vpickdestanglecorr<1792)
  380.         {
  381.             float(_set,CurrentDirection,_DIRwalking|_DIRbackward|_DIRsideright);
  382.         }
  383.         else
  384.         {
  385.             float(_set,CurrentDirection,_DIRwalking|_DIRbackward);
  386.         }
  387. }
  388.  
  389. SubRoutine(Sub_AI8WayMoveRun,float(CurrentDirection))
  390. {
  391.         float(_set,CurrentDirection,_DIRwalking);
  392.  
  393.         if(vpickdestanglecorr>-256 && vpickdestanglecorr<256)
  394.         {
  395.             float(_set,CurrentDirection,_DIRforward);
  396.         }
  397.         elseif(vpickdestanglecorr>-768 && vpickdestanglecorr<-256)
  398.         {
  399.             float(_set,CurrentDirection,_DIRforward|_DIRsideleft);
  400.         }
  401.         elseif(vpickdestanglecorr>256 && vpickdestanglecorr<768)
  402.         {
  403.             float(_set,CurrentDirection,_DIRforward|_DIRsideright);
  404.         }
  405.         elseif(vpickdestanglecorr>-1280 && vpickdestanglecorr<-768)
  406.         {
  407.             float(_set,CurrentDirection,_DIRsideleft);
  408.         }
  409.         elseif(vpickdestanglecorr>768 && vpickdestanglecorr<1280)
  410.         {
  411.             float(_set,CurrentDirection,_DIRsideright);
  412.         }
  413.         elseif(vpickdestanglecorr>-1792 && vpickdestanglecorr<-1280)
  414.         {
  415.             float(_set,CurrentDirection,_DIRbackward|_DIRsideleft);
  416.         }
  417.         elseif(vpickdestanglecorr>1280 && vpickdestanglecorr<1792)
  418.         {
  419.             float(_set,CurrentDirection,_DIRbackward|_DIRsideright);
  420.         }
  421.         else
  422.         {
  423.             float(_set,CurrentDirection,_DIRbackward);
  424.         }
  425. }
  426.