home *** CD-ROM | disk | FTP | other *** search
/ The Games Machine 76 / XENIATGM66.iso / Messiah / data1.cab / Program_Executable_Files / messiahscripts / Weapons / Bullets.hxx < prev    next >
Text File  |  1999-11-29  |  106KB  |  4,144 lines

  1.  
  2.  
  3. //Axis fuckup on Bullets and weapons:
  4. //+Y is forward
  5. //-Z is up
  6.  
  7.  
  8.  
  9. #define BulletStateNormal                1
  10. #define BulletStateStuckInWall            4            //this is referenced as an absolute in saxsact.cpp ...don't change
  11. #define    BulletStateStuckOnFloor            8            //this is referenced as an absolute in saxsact.cpp ...don't change
  12.  
  13. #define    BulletStateDud                    StateDead
  14. #define BulletStateExplode                StateThrown
  15. #define BulletStateAttachedToActor        StateAttached
  16.  
  17.  
  18.  
  19. //---------------------------------------------------------------------------- time out handlers
  20.  
  21.  
  22. SubRoutine(Sub_BulletHandler15)
  23. {
  24.         rotate(0,0,0);
  25.         if(Vactivetime>450)            //15 seconds
  26.         {
  27.             killactor();
  28.         }
  29. }
  30.  
  31. SubRoutine(Sub_BulletHandler5)
  32. {
  33.         rotate(0,0,0);
  34.         if(Vactivetime>150)            //5 seconds
  35.         {
  36.             killactor();
  37.         }
  38. }
  39.  
  40.  
  41. //---------------------------------------------------------------------------- explosions
  42.  
  43. //make sure tmpvector is filled in prior to calling
  44. SubRoutine(sub_fxexplosion_lesser)
  45. {
  46.         call(SetParticleSetID);
  47.  
  48.         vector(_copy,TrashableVector,tmpvector);
  49.         
  50.         call(wCheckViewCollision,-1,emptyvector,emptyvector);
  51.  
  52.         vector(_set,fxvector,0,75,0);
  53.         vector(_add,TrashableVector,fxvector);
  54.         spawnparticle(fx_mainexplosion,-1,TrashableVector,emptyvector,-1);
  55.         spawnparticle(fx_mainexplosion,-1,TrashableVector,emptyvector,-1);
  56.  
  57.         spawnparticle(fx_explosionsmoke,-1,TrashableVector,emptyvector,-1);
  58. }
  59.  
  60. SubRoutine(sub_fxexplosion)
  61. {
  62.         call(SetParticleSetID);
  63.  
  64.         vector(_copy,TrashableVector,tmpvector);
  65.         
  66.         call(wCheckViewCollision,-1,emptyvector,emptyvector);
  67.  
  68.         vector(_set,fxvector,0,75,0);
  69.         vector(_add,TrashableVector,fxvector);
  70.         spawnparticle(fx_mainexplosion,-1,TrashableVector,emptyvector,-1);
  71.         spawnparticle(fx_hshrapnel,-1,TrashableVector,emptyvector,-1);
  72.         spawnparticle(fx_hshrapnel,-1,TrashableVector,emptyvector,-1);
  73.         spawnparticle(fx_mainexplosion,-1,TrashableVector,emptyvector,-1);
  74.         spawnparticle(fx_hshrapnel,-1,TrashableVector,emptyvector,-1);
  75.         spawnparticle(fx_hshrapnel,-1,TrashableVector,emptyvector,-1);
  76.         spawnparticle(fx_mainexplosion,-1,TrashableVector,emptyvector,-1);
  77.         spawnparticle(fx_hshrapnel,-1,TrashableVector,emptyvector,-1);
  78.         spawnparticle(fx_hshrapnel,-1,TrashableVector,emptyvector,-1);
  79.         spawnparticle(fx_mainexplosion,-1,TrashableVector,emptyvector,-1);
  80.         spawnparticle(fx_hshrapnel,-1,TrashableVector,emptyvector,-1);        //should have a few shoot towards camera
  81.         spawnparticle(fx_hshrapnel,-1,TrashableVector,emptyvector,-1);        //should have a few shoot towards camera
  82.  
  83.         spawnparticle(fx_explosionsmoke,-1,TrashableVector,emptyvector,-1);
  84.  
  85.         spawnparticle(fx_explosionshards,-1,TrashableVector,emptyvector,-1);
  86.  
  87.         vector(_set,fxvector,-128,-128,-128);
  88.         SpawnLight(perm_light,-1,TrashableVector,fxvector,EmptyVector,400);
  89. }
  90.  
  91. SubRoutine(sub_fxsmallexplosion)
  92. {
  93.         call(SetParticleSetID);
  94.  
  95.         vector(_copy,TrashableVector,tmpvector);
  96.         
  97.         vector(_set,fxvector,0,70,0);
  98.         vector(_add,TrashableVector,fxvector);
  99.         spawnparticle(fx_smallexplosion,-1,TrashableVector,emptyvector,-1);
  100.         spawnparticle(fx_smallexplosion,-1,TrashableVector,emptyvector,-1);
  101. }
  102.  
  103.  
  104. Actor(BulletExplosion)
  105. {
  106.         file(BulletExplosionHeader);
  107.         startstate(BulletStateNormal);
  108.         startaction(nomove);
  109.  
  110.         call(SetParticleSetID);
  111.  
  112.         //PrintILog("ExplosionActiveTime: ",VActiveTime);
  113.         if(VActiveTime==0)
  114.         {
  115.             call(CheckBulletCollision,-1,DamageBlastDamage,false);
  116.         }
  117.         elseif(VActiveTime>10)
  118.         {
  119.             call(BlastObjCollisionCheck,tmpvector);
  120.             if(VDynamicCollision==0)
  121.             {
  122.                 killactor();
  123.             }
  124.             else
  125.             {
  126.                 if(VDynamicCollision|=_ExplodeGlass)
  127.                 {
  128.                     sample(SFXGlass,tmpvector);            //attached gets removed!
  129.  
  130.                     if(VDynamicCollision|=_ExplodeSmall)
  131.                     {
  132.                         spawnparticle(fx_smallexplosion,-1,tmpvector,emptyvector,-1);
  133.                     }
  134.                 }
  135.                 elseif(VDynamicCollision|=_ExplodeSmall)
  136.                 {
  137.                     spawnparticle(fx_smallexplosion,-1,tmpvector,emptyvector,-1);
  138.                     sample(SFXSmallExplode,tmpvector);
  139.                 }
  140.                 elseif(VDynamicCollision|=_ExplodeBig)
  141.                 {
  142.                     vector(_copyx,TmpVector,TmpFloat2);
  143.                     vector(_copyy,TmpVector,TmpFloat3);
  144.                     vector(_copyz,TmpVector,TmpFloat4);
  145.  
  146.                     if(VDynamicCollision|=_ExplodeAmmo)
  147.                     {
  148.                         spawnactor(WeaponAmmo,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  149.                     }
  150.                     elseif(VDynamicCollision|=_ExplodeAmmoGrenades)
  151.                     {
  152.                         spawnactor(WeaponAmmoGrenade,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  153.                     }
  154.  
  155.                     spawnactor(BulletExplosion,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  156.  
  157.                     sample(SFXGunTurretExplode,tmpvector);
  158.                     callsub(sub_fxexplosion_lesser);
  159.                 }
  160.             }
  161.         }
  162.  
  163.         //callsub(Sub_BulletHandler15);
  164. }
  165.  
  166.  
  167.  
  168. Actor(BulletShockWave)
  169. {
  170.         file(BulletShockWaveHeader);
  171.         startstate(BulletStateNormal);
  172.         startaction(nomove);
  173.  
  174.         call(CheckBulletCollision,-1,DamageShockWaveDamage,true);
  175.         killactor();
  176.  
  177. }
  178.  
  179. //same as shockwave, except for the radius and damage
  180. Actor(BulletRectum)
  181. {
  182.         file(BulletRectumHeader);
  183.         startstate(BulletStateNormal);
  184.         startaction(nomove);
  185.  
  186.         call(CheckBulletCollision,-1,DamageRectum,false);
  187.  
  188.         killactor();
  189. }
  190.  
  191.  
  192.  
  193. //---------------------------------------------------------------------------- sticky bullets
  194.  
  195. Actor(BulletHarpoon)
  196. {
  197.         file(BulletHarpoonHeader);
  198.         startstate(BulletStateNormal);
  199.         startaction(NoMove);
  200.  
  201.         call(SetParticleSetID);
  202.  
  203.  
  204.         call(AICon,TRUE);                    //need to prevent dual deposses
  205.  
  206.  
  207.         float(_declare,localstate,0);
  208.         float(_declare,blooddriptime,0);
  209.  
  210.         if(VState!=BulletStateStuckInWall)
  211.         {
  212.             collision(0,-80,0,0,80,0);
  213.             float(_seti,TmpFloat,VColAngle)
  214.  
  215.             //if(VState!=BulletStateAttachedToActor)
  216.             //{
  217.                 vector(_set,gactorine,0,1,0);
  218.                 spawnparticle(fx_slugwake,0,emptyvector,gactorine,-1);
  219.                 vector(_set,gactorpos,0,20,0);
  220.                 spawnparticle(fx_slugwake,0,gactorpos,gactorine,-1);
  221.                 vector(_set,gactorpos,0,40,0);
  222.                 spawnparticle(fx_slugwake,0,gactorpos,gactorine,-1);
  223.                 vector(_set,gactorpos,0,60,0);
  224.                 spawnparticle(fx_slugwake,0,gactorpos,gactorine,-1);
  225.                 vector(_set,gactorpos,0,80,0);
  226.                 spawnparticle(fx_slugwake,0,gactorpos,gactorine,-1);
  227.                 vector(_set,gactorpos,0,100,0);
  228.                 spawnparticle(fx_slugwake,0,gactorpos,gactorine,-1);
  229.                 vector(_set,gactorpos,0,120,0);
  230.                 spawnparticle(fx_slugwake,0,gactorpos,gactorine,-1);
  231.                 vector(_set,gactorpos,0,140,0);
  232.                 spawnparticle(fx_slugwake,0,gactorpos,gactorine,-1);
  233.             //}
  234.  
  235.  
  236.             if(VState!=BulletStateAttachedToActor)
  237.             {
  238.                 move(0,75,0);
  239.  
  240.                 call(CheckBulletCollision,-1,DamageNoDamage,true);
  241.                 if(VTrigger==_DIRactorBulletcol)
  242.                 {
  243.                     if(VTrigger==_DIRhuman)
  244.                     {
  245.                         call(AttachLockedActor,DamageHarpoon);
  246.                         if(VTrigger==_DIRTempFlag)                                //Is he not attached to anything beforehand.
  247.                         {
  248.                             State(_or,BulletStateAttachedToActor);
  249.  
  250.                             float(_set,blooddriptime,150);
  251.  
  252.                             if(vrnd<50)
  253.                             {
  254.                                 sample(SFXManBlastHit1,-1);
  255.                             }
  256.                             else
  257.                             {
  258.                                 sample(SFXManBlastHit2,-1);
  259.                             }
  260.  
  261.                             float(_set,localstate,1);
  262.  
  263.                             callsub(Sub_BloodFxSpurtREL);
  264.                             callsub(Sub_BloodFx10);
  265.                             callsub(Sub_BloodFxSprayREL);
  266.                         }
  267.                     }
  268.                     else
  269.                     {
  270.                         State(_or,BulletStateStuckOnFloor);
  271.  
  272.                         sample(SFXShatter,-1);
  273.                         //shatter harpoon
  274.                         vector(_set,gactorpos,0,0,0);
  275.                         spawnparticle(fx_bulletshrapnel,0,gactorpos,emptyvector,fx_madrotate);
  276.                         vector(_set,gactorpos,0,-20,0);
  277.                         spawnparticle(fx_bulletshrapnel,0,gactorpos,emptyvector,fx_madrotatenegative);
  278.                         vector(_set,gactorpos,0,-40,0);
  279.                         spawnparticle(fx_bulletshrapnel,0,gactorpos,emptyvector,fx_madrotate);
  280.                         vector(_set,gactorpos,0,-60,0);
  281.                         spawnparticle(fx_bulletshrapnel,0,gactorpos,emptyvector,fx_madrotatenegative);
  282.                         vector(_set,gactorpos,0,-80,0);
  283.                         spawnparticle(fx_bulletshrapnel,0,gactorpos,emptyvector,fx_madrotate);
  284.                         vector(_set,gactorpos,0,-100,0);
  285.                         spawnparticle(fx_bulletshrapnel,0,gactorpos,emptyvector,fx_madrotatenegative);
  286.                         vector(_set,gactorpos,0,-120,0);
  287.                         spawnparticle(fx_bulletshrapnel,0,gactorpos,emptyvector,fx_madrotate);
  288.                         vector(_set,gactorpos,0,-140,0);
  289.                         spawnparticle(fx_bulletshrapnel,0,gactorpos,emptyvector,fx_madrotatenegative);
  290.  
  291.                         call(KillHarpoonHandler);
  292.                     }
  293.                 }
  294.             }
  295.             else
  296.             {
  297.                 move(0,100,-25);
  298.  
  299.                 callsub(Sub_BloodFx2);
  300.                 callsub(Sub_BloodFxSprayREL);
  301.             }
  302.  
  303.  
  304.             if(VColFlag==_DIRhorcol)
  305.             {
  306.                 sample(SFXShatter,-1);
  307.                 State(_or,BulletStateStuckOnFloor);
  308.  
  309.                 //shatter harpoon
  310.                 vector(_set,gactorpos,0,0,0);
  311.                 spawnparticle(fx_bulletshrapnel,0,gactorpos,emptyvector,fx_madrotate);
  312.                 vector(_set,gactorpos,0,-20,0);
  313.                 spawnparticle(fx_bulletshrapnel,0,gactorpos,emptyvector,fx_madrotatenegative);
  314.                 vector(_set,gactorpos,0,-40,0);
  315.                 spawnparticle(fx_bulletshrapnel,0,gactorpos,emptyvector,fx_madrotate);
  316.                 vector(_set,gactorpos,0,-60,0);
  317.                 spawnparticle(fx_bulletshrapnel,0,gactorpos,emptyvector,fx_madrotatenegative);
  318.                 vector(_set,gactorpos,0,-80,0);
  319.                 spawnparticle(fx_bulletshrapnel,0,gactorpos,emptyvector,fx_madrotate);
  320.                 vector(_set,gactorpos,0,-100,0);
  321.                 spawnparticle(fx_bulletshrapnel,0,gactorpos,emptyvector,fx_madrotatenegative);
  322.                 vector(_set,gactorpos,0,-120,0);
  323.                 spawnparticle(fx_bulletshrapnel,0,gactorpos,emptyvector,fx_madrotate);
  324.                 vector(_set,gactorpos,0,-140,0);
  325.                 spawnparticle(fx_bulletshrapnel,0,gactorpos,emptyvector,fx_madrotatenegative);
  326.  
  327.                 call(KillHarpoonHandler);
  328.             }
  329.             elseif(VColFlag==_DIRvercol)
  330.             {
  331.                 /*
  332.                 if(TmpFloat>400||TmpFloat<-400)                    //Correct angle when sliding along wall
  333.                 {
  334.                     if(TmpFloat<0)
  335.                     {
  336.                         float(_add,TmpFloat,1024);
  337.                     }
  338.                     else
  339.                     {
  340.                         float(_sub,TmpFloat,1024);
  341.                     }
  342.                     turn(0,0,TmpFloat);
  343.                 }
  344.                 */
  345.  
  346.                 if(VColMaterialProperties==_MATRipple)
  347.                 {
  348.                     vector(_set,fxvector,0,0,0);
  349.                     callsub(sub_shockwave,0,0);
  350.                     sample(SFXRipple,-1);
  351.  
  352.                     State(_or,BulletStateStuckOnFloor);
  353.                     sample(SFXShatter,-1);
  354.  
  355.                     //shatter harpoon
  356.                     vector(_set,gactorpos,0,0,0);
  357.                     spawnparticle(fx_bulletshrapnel,0,gactorpos,emptyvector,fx_madrotate);
  358.                     vector(_set,gactorpos,0,-20,0);
  359.                     spawnparticle(fx_bulletshrapnel,0,gactorpos,emptyvector,fx_madrotatenegative);
  360.                     vector(_set,gactorpos,0,-40,0);
  361.                     spawnparticle(fx_bulletshrapnel,0,gactorpos,emptyvector,fx_madrotate);
  362.                     vector(_set,gactorpos,0,-60,0);
  363.                     spawnparticle(fx_bulletshrapnel,0,gactorpos,emptyvector,fx_madrotatenegative);
  364.                     vector(_set,gactorpos,0,-80,0);
  365.                     spawnparticle(fx_bulletshrapnel,0,gactorpos,emptyvector,fx_madrotate);
  366.                     vector(_set,gactorpos,0,-100,0);
  367.                     spawnparticle(fx_bulletshrapnel,0,gactorpos,emptyvector,fx_madrotatenegative);
  368.                     vector(_set,gactorpos,0,-120,0);
  369.                     spawnparticle(fx_bulletshrapnel,0,gactorpos,emptyvector,fx_madrotate);
  370.                     vector(_set,gactorpos,0,-140,0);
  371.                     spawnparticle(fx_bulletshrapnel,0,gactorpos,emptyvector,fx_madrotatenegative);
  372.  
  373.                     call(KillHarpoonHandler);
  374.                 }
  375.                 elseif(VColMaterialProperties==_MATKFO)
  376.                 {
  377.                     State(_or,BulletStateStuckOnFloor);
  378.                     sample(SFXShatter,-1);
  379.  
  380.                     //shatter harpoon
  381.                     vector(_set,gactorpos,0,0,0);
  382.                     spawnparticle(fx_bulletshrapnel,0,gactorpos,emptyvector,fx_madrotate);
  383.                     vector(_set,gactorpos,0,-20,0);
  384.                     spawnparticle(fx_bulletshrapnel,0,gactorpos,emptyvector,fx_madrotatenegative);
  385.                     vector(_set,gactorpos,0,-40,0);
  386.                     spawnparticle(fx_bulletshrapnel,0,gactorpos,emptyvector,fx_madrotate);
  387.                     vector(_set,gactorpos,0,-60,0);
  388.                     spawnparticle(fx_bulletshrapnel,0,gactorpos,emptyvector,fx_madrotatenegative);
  389.                     vector(_set,gactorpos,0,-80,0);
  390.                     spawnparticle(fx_bulletshrapnel,0,gactorpos,emptyvector,fx_madrotate);
  391.                     vector(_set,gactorpos,0,-100,0);
  392.                     spawnparticle(fx_bulletshrapnel,0,gactorpos,emptyvector,fx_madrotatenegative);
  393.                     vector(_set,gactorpos,0,-120,0);
  394.                     spawnparticle(fx_bulletshrapnel,0,gactorpos,emptyvector,fx_madrotate);
  395.                     vector(_set,gactorpos,0,-140,0);
  396.                     spawnparticle(fx_bulletshrapnel,0,gactorpos,emptyvector,fx_madrotatenegative);
  397.  
  398.                     call(KillHarpoonHandler);
  399.                 }
  400.                 elseif(VColMaterialProperties==_MATGlass)
  401.                 {
  402.                     sample(SFXShatter,-1);
  403.                     State(_or,BulletStateStuckOnFloor);
  404.  
  405.                     //shatter harpoon
  406.                     vector(_set,gactorpos,0,0,0);
  407.                     spawnparticle(fx_bulletshrapnel,0,gactorpos,emptyvector,fx_madrotate);
  408.                     vector(_set,gactorpos,0,-20,0);
  409.                     spawnparticle(fx_bulletshrapnel,0,gactorpos,emptyvector,fx_madrotatenegative);
  410.                     vector(_set,gactorpos,0,-40,0);
  411.                     spawnparticle(fx_bulletshrapnel,0,gactorpos,emptyvector,fx_madrotate);
  412.                     vector(_set,gactorpos,0,-60,0);
  413.                     spawnparticle(fx_bulletshrapnel,0,gactorpos,emptyvector,fx_madrotatenegative);
  414.                     vector(_set,gactorpos,0,-80,0);
  415.                     spawnparticle(fx_bulletshrapnel,0,gactorpos,emptyvector,fx_madrotate);
  416.                     vector(_set,gactorpos,0,-100,0);
  417.                     spawnparticle(fx_bulletshrapnel,0,gactorpos,emptyvector,fx_madrotatenegative);
  418.                     vector(_set,gactorpos,0,-120,0);
  419.                     spawnparticle(fx_bulletshrapnel,0,gactorpos,emptyvector,fx_madrotate);
  420.                     vector(_set,gactorpos,0,-140,0);
  421.                     spawnparticle(fx_bulletshrapnel,0,gactorpos,emptyvector,fx_madrotatenegative);
  422.  
  423.                     call(KillHarpoonHandler);
  424.                 }
  425.                 else
  426.                 {
  427.                     sample(SFXHarpoonHitWall,-1);
  428.                     if(VState==BulletStateAttachedToActor)
  429.                     {
  430.                         sample(SFXHarpoonHitActor,-1);
  431.                     }
  432.                     State(_or,BulletStateStuckInWall);
  433.                     call(AttachToColObjHeader);            //use this to tell the Bullet/actor what it's attached to, not needed for goo
  434.                     spawnaction(nomove);
  435.                 }
  436.  
  437.                 vector(_settoactorpos,tmpvector);
  438.                 call(CheckForDynamicCollision,0);
  439.                 if(VAICon==0)
  440.                 {
  441.                     if(VDynamicCollision==0)
  442.                     {
  443.                         call(AIexecutecodewithinradius,Sub_ReactToBulletOrExplosion,1000);
  444.                     }
  445.                     else
  446.                     {
  447.                         call(AIexecutecodewithinradius,Sub_ReactToBulletOrExplosion,3000);
  448.                     }
  449.                 }
  450.  
  451.                 if(VDynamicCollision|=_ExplodeGlass)
  452.                 {
  453.                     sample(SFXGlass,tmpvector);            //attached gets removed!
  454.  
  455.                     if(VDynamicCollision|=_ExplodeSmall)
  456.                     {
  457.                         spawnparticle(fx_smallexplosion,-1,tmpvector,emptyvector,-1);
  458.                     }
  459.                 }
  460.             }
  461.             else
  462.             {
  463.  
  464.                 if(Vactivetime>150)
  465.                 {
  466.                     float(_set,localstate,0);
  467.                     call(KillHarpoonHandler);
  468.                 }
  469.             }
  470.         }
  471. /*
  472.         if(Vstate==BulletStateStuckOnFloor)
  473.         {
  474.             call(CheckAttached,_CADropActor);
  475.         }
  476.         else
  477. */
  478.         if(Vstate!=BulletStateStuckOnFloor)
  479.         {
  480.             call(CheckAttached,_CANormal);
  481.         }
  482.  
  483.         if(VState==BulletStateAttachedToActor&&VState==BulletStateStuckInWall&&blooddriptime>0)
  484.         {                                                                                    
  485.             //callsub(Sub_BloodFxSpray);
  486.             float(_sub,blooddriptime,1);
  487.         }
  488.  
  489.         if(localstate==0)
  490.         {
  491.             if(Vactivetime>900)            //30 seconds
  492.             {
  493.                 //shatter harpoon
  494.                 sample(SFXShatter,-1);
  495.                 vector(_set,gactorpos,0,0,0);
  496.                 spawnparticle(fx_bulletshrapnel,0,gactorpos,emptyvector,fx_madrotate);
  497.                 vector(_set,gactorpos,0,-20,0);
  498.                 spawnparticle(fx_bulletshrapnel,0,gactorpos,emptyvector,fx_madrotatenegative);
  499.                 vector(_set,gactorpos,0,-40,0);
  500.                 spawnparticle(fx_bulletshrapnel,0,gactorpos,emptyvector,fx_madrotate);
  501.                 vector(_set,gactorpos,0,-60,0);
  502.                 spawnparticle(fx_bulletshrapnel,0,gactorpos,emptyvector,fx_madrotatenegative);
  503.                 vector(_set,gactorpos,0,-80,0);
  504.                 spawnparticle(fx_bulletshrapnel,0,gactorpos,emptyvector,fx_madrotate);
  505.                 vector(_set,gactorpos,0,-100,0);
  506.                 spawnparticle(fx_bulletshrapnel,0,gactorpos,emptyvector,fx_madrotatenegative);
  507.                 vector(_set,gactorpos,0,-120,0);
  508.                 spawnparticle(fx_bulletshrapnel,0,gactorpos,emptyvector,fx_madrotate);
  509.                 vector(_set,gactorpos,0,-140,0);
  510.                 spawnparticle(fx_bulletshrapnel,0,gactorpos,emptyvector,fx_madrotatenegative);
  511.  
  512.                 call(KillHarpoonHandler);
  513.             }
  514.         }
  515. }
  516.  
  517. Actor(BulletMaimer)
  518. {
  519.         file(BulletMaimerHeader);
  520.         startstate(BulletStateNormal);
  521.         startaction(move100);
  522.  
  523.         call(SetParticleSetID);
  524.  
  525.         rotate(192,0,0);
  526.  
  527.         if(VState!=BulletStateStuckInWall && VState!=BulletStateAttachedToActor)
  528.         {
  529.             call(CheckBulletCollision,-1,-1,true);
  530.             call(wUpdateBulletDamage);
  531.             //call(CheckBulletCollision,-1,DamageNoDamage);
  532.             if(VTrigger==_DIRactorBulletcol)
  533.             {
  534.                 if(VTrigger==_DIRhuman)
  535.                 {
  536.                     call(CheckBoneCollision,DamageNoDamage,_BulletAttach);
  537.                     if(VTrigger==_DIRactorBulletcol)
  538.                     {
  539.                         State(_or,BulletStateAttachedToActor);
  540.                         spawnaction(nomove);
  541.                     
  542.                         callsub(Sub_BloodFxSpurt);
  543.                         callsub(Sub_BloodFx5);
  544.                         callsub(Sub_BloodFxSpray);
  545.                         sample(SFXHitActor7,-1);
  546.                     }
  547.                 }
  548.                 else
  549.                 {
  550.                     //shatter maimstar
  551.                     sample(SFXShatter,-1,75);
  552.                     spawnparticle(fx_bulletshrapnel,0,emptyvector,emptyvector,fx_madrotatenegative);
  553.                     spawnparticle(fx_bulletshrapnel,0,emptyvector,emptyvector,fx_madrotate);
  554.                     spawnparticle(fx_bulletshrapnel,0,emptyvector,emptyvector,fx_madrotatenegative);
  555.                     spawnparticle(fx_bulletshrapnel,0,emptyvector,emptyvector,fx_madrotate);
  556.  
  557.                     killactor();
  558.                 }
  559.             }
  560.             elseif(VTrigger==_DIRhorcol)
  561.             {
  562.                 //shatter maimstar
  563.                 sample(SFXShatter,-1,75);
  564.                 spawnparticle(fx_bulletshrapnel,0,emptyvector,emptyvector,fx_madrotatenegative);
  565.                 spawnparticle(fx_bulletshrapnel,0,emptyvector,emptyvector,fx_madrotate);
  566.                 spawnparticle(fx_bulletshrapnel,0,emptyvector,emptyvector,fx_madrotatenegative);
  567.                 spawnparticle(fx_bulletshrapnel,0,emptyvector,emptyvector,fx_madrotate);
  568.  
  569.                 killactor();
  570.             }
  571.             elseif(VTrigger==_DIRvercol)
  572.             {
  573.                 if(VColMaterialProperties==_MATRipple)
  574.                 {
  575.                     vector(_set,fxvector,0,0,0);
  576.                     callsub(sub_shockwave,0,0);
  577.                     sample(SFXRipple,-1);
  578.  
  579.                     //shatter maimstar
  580.                     sample(SFXShatter,-1,75);
  581.                     spawnparticle(fx_bulletshrapnel,0,emptyvector,emptyvector,fx_madrotatenegative);
  582.                     spawnparticle(fx_bulletshrapnel,0,emptyvector,emptyvector,fx_madrotate);
  583.                     spawnparticle(fx_bulletshrapnel,0,emptyvector,emptyvector,fx_madrotatenegative);
  584.                     spawnparticle(fx_bulletshrapnel,0,emptyvector,emptyvector,fx_madrotate);
  585.  
  586.                     killactor();
  587.                 }
  588.                 elseif(VColMaterialProperties==_MATKFO)
  589.                 {
  590.                     //shatter maimstar
  591.                     sample(SFXShatter,-1,75);
  592.                     spawnparticle(fx_bulletshrapnel,0,emptyvector,emptyvector,fx_madrotatenegative);
  593.                     spawnparticle(fx_bulletshrapnel,0,emptyvector,emptyvector,fx_madrotate);
  594.                     spawnparticle(fx_bulletshrapnel,0,emptyvector,emptyvector,fx_madrotatenegative);
  595.                     spawnparticle(fx_bulletshrapnel,0,emptyvector,emptyvector,fx_madrotate);
  596.  
  597.                     killactor();
  598.                 }
  599.                 elseif(VColMaterialProperties==_MATGlass)
  600.                 {
  601.                     State(_or,BulletStateStuckInWall);
  602.                     call(AttachToColObjHeader);            //use this to tell the Bullet/actor what it's attached to, not needed for goo
  603.                     spawnaction(nomove);
  604.                     SpawnGooFX(fx_Bulletholeglass,0,EmptyVector,emptyvector,0);
  605.                     sample(SFXGlassPlink,-1);
  606.                 }
  607.                 else
  608.                 {
  609.                     sample(SFXMachineGunPing0,-1);
  610.                     State(_or,BulletStateStuckInWall);
  611.                     call(AttachToColObjHeader);            //use this to tell the Bullet/actor what it's attached to, not needed for goo
  612.                     spawnaction(nomove);
  613.                     SpawnGooFX(fx_Bulletholecrack,0,EmptyVector,emptyvector,0);
  614.                 }
  615.  
  616.                 vector(_settoactorpos,tmpvector);
  617.                 call(CheckForDynamicCollision,4);
  618.                 if(VAICon==0)
  619.                 {
  620.                     if(VDynamicCollision==0)
  621.                     {
  622.                         call(AIexecutecodewithinradius,Sub_ReactToBulletOrExplosion,1000);
  623.                     }
  624.                     else
  625.                     {
  626.                         call(AIexecutecodewithinradius,Sub_ReactToBulletOrExplosion,3000);
  627.                     }
  628.                 }
  629.  
  630.                 if(VDynamicCollision|=_ExplodeGlass)
  631.                 {
  632.                     sample(SFXGlass,tmpvector);            //attached gets removed!
  633.  
  634.                     if(VDynamicCollision|=_ExplodeSmall)
  635.                     {
  636.                         spawnparticle(fx_smallexplosion,-1,tmpvector,emptyvector,-1);
  637.                     }
  638.                 }
  639.             }
  640.             elseif(vactivetime>=150)
  641.             {
  642.                 killactor();
  643.             }
  644.         }
  645.         else
  646.         {
  647.             rotate(0,0,0);
  648.             if(Vactivetime>900)            //30 seconds
  649.             {
  650.                 //shatter maimstar
  651.                 sample(SFXShatter,-1,75);
  652.                 spawnparticle(fx_bulletshrapnel,0,emptyvector,emptyvector,fx_madrotatenegative);
  653.                 spawnparticle(fx_bulletshrapnel,0,emptyvector,emptyvector,fx_madrotate);
  654.                 spawnparticle(fx_bulletshrapnel,0,emptyvector,emptyvector,fx_madrotatenegative);
  655.                 spawnparticle(fx_bulletshrapnel,0,emptyvector,emptyvector,fx_madrotate);
  656.  
  657.                 killactor();
  658.             }
  659.         }
  660. }
  661.  
  662.  
  663.  
  664. Actor(BulletBetty)
  665. {
  666.         file(BulletBettyHeader);
  667.         startstate(BulletStateNormal);
  668.         startaction(nomove);
  669.  
  670.         call(SetParticleSetID);
  671.  
  672.         float(_declare,localSin,0);
  673.         float(_declare,localCos,0);
  674.  
  675.         if(vactivetime==0)
  676.         {
  677.             float(_set,localSin,BettySinAngle);
  678.             float(_set,localCos,BettyCosAngle);
  679.         }
  680.         move(localSin,0,localCos);
  681.         rotate(0,192,0);
  682.  
  683.         call(CheckBulletCollision,-1,-1,true);
  684.         call(wUpdateBulletDamage);
  685.         if(VTrigger==_DIRactorBulletcol)
  686.         {
  687.             if(VTrigger==_DIRhuman)
  688.             {
  689.                 callsub(Sub_BloodFxSpurt);
  690.                 callsub(Sub_BloodFx5);
  691.                 callsub(Sub_BloodFxSpray);
  692.                 sample(SFXHitActor7,-1);
  693.             }
  694.             else
  695.             {
  696.                 sample(SFXShatter,-1,75);
  697.  
  698.                 //shatter maimbett
  699.                 spawnparticle(fx_bulletshrapnel,0,emptyvector,emptyvector,fx_madrotatenegative);
  700.                 spawnparticle(fx_bulletshrapnel,0,emptyvector,emptyvector,fx_madrotate);
  701.                 spawnparticle(fx_bulletshrapnel,0,emptyvector,emptyvector,fx_madrotatenegative);
  702.                 spawnparticle(fx_bulletshrapnel,0,emptyvector,emptyvector,fx_madrotate);
  703.  
  704.                 killactor();
  705.             }
  706.  
  707.             killactor();
  708.         }
  709.         elseif(VTrigger==_DIRhorcol)
  710.         {
  711.             sample(SFXShatter,-1,75);
  712.  
  713.             //shatter maimbett
  714.             spawnparticle(fx_bulletshrapnel,0,emptyvector,emptyvector,fx_madrotatenegative);
  715.             spawnparticle(fx_bulletshrapnel,0,emptyvector,emptyvector,fx_madrotate);
  716.             spawnparticle(fx_bulletshrapnel,0,emptyvector,emptyvector,fx_madrotatenegative);
  717.             spawnparticle(fx_bulletshrapnel,0,emptyvector,emptyvector,fx_madrotate);
  718.  
  719.             killactor();
  720.         }
  721.         elseif(VTrigger==_DIRvercol)
  722.         {
  723.             if(VColMaterialProperties==_MATRipple)
  724.             {
  725.                 vector(_set,fxvector,0,0,0);
  726.                 callsub(sub_shockwave,0,0);
  727.                 sample(SFXRipple,-1);
  728.  
  729.                 //shatter maimbett
  730.                 sample(SFXShatter,-1,75);
  731.                 spawnparticle(fx_bulletshrapnel,0,emptyvector,emptyvector,fx_madrotatenegative);
  732.                 spawnparticle(fx_bulletshrapnel,0,emptyvector,emptyvector,fx_madrotate);
  733.                 spawnparticle(fx_bulletshrapnel,0,emptyvector,emptyvector,fx_madrotatenegative);
  734.                 spawnparticle(fx_bulletshrapnel,0,emptyvector,emptyvector,fx_madrotate);
  735.  
  736.                 killactor();
  737.             }
  738.             elseif(VColMaterialProperties==_MATKFO)
  739.             {
  740.                 //shatter maimbett
  741.                 sample(SFXShatter,-1,75);
  742.                 spawnparticle(fx_bulletshrapnel,0,emptyvector,emptyvector,fx_madrotatenegative);
  743.                 spawnparticle(fx_bulletshrapnel,0,emptyvector,emptyvector,fx_madrotate);
  744.                 spawnparticle(fx_bulletshrapnel,0,emptyvector,emptyvector,fx_madrotatenegative);
  745.                 spawnparticle(fx_bulletshrapnel,0,emptyvector,emptyvector,fx_madrotate);
  746.  
  747.                 killactor();
  748.             }
  749.             elseif(VColMaterialProperties==_MATGlass)
  750.             {
  751.                 SpawnGooFX(fx_Bulletholeglass,0,EmptyVector,emptyvector,0);
  752.                 sample(SFXGlassPlink,-1);
  753.             }
  754.             else
  755.             {
  756.                 sample(SFXMachineGunPing0,-1);
  757.                 SpawnGooFX(fx_Bulletholecrack,0,EmptyVector,emptyvector,0);
  758.             }
  759.  
  760.             vector(_settoactorpos,tmpvector);
  761.             call(CheckForDynamicCollision,4);
  762.             if(VDynamicCollision|=_ExplodeGlass)
  763.             {
  764.                 sample(SFXGlass,tmpvector);            //attached gets removed!
  765.  
  766.                 if(VDynamicCollision|=_ExplodeSmall)
  767.                 {
  768.                     spawnparticle(fx_smallexplosion,-1,tmpvector,emptyvector,-1);
  769.                 }
  770.             }
  771.             //shatter maimbett
  772.             killactor();
  773.         }
  774.         elseif(vactivetime>=150)
  775.         {
  776.             killactor();
  777.         }
  778. }
  779.  
  780.  
  781.  
  782. //---------------------------------------------------------------------------- shells
  783.  
  784. Actor(MachineGunShell)
  785. {
  786.         file(BulletMachineGunShellHeader);
  787.         startstate(BulletStateNormal);
  788.         startaction(movePumpGunshell);
  789.  
  790.         call(SetParticleSetID);
  791.  
  792.         if(VState!=BulletStateStuckOnFloor)
  793.         {
  794.             if(VTrigger|=_DIRallcol)
  795.             {
  796.                 State(_or,BulletStateStuckOnFloor);
  797.                 //call(AttachToColObjHeader);
  798.  
  799.                 if(vrnd<50)
  800.                 {
  801.                     sample(SFXPumpGunShell1,-1);
  802.                 }
  803.                 else
  804.                 {
  805.                     sample(SFXPumpGunShell2,-1);
  806.                 }
  807.                 killactor();
  808.             }
  809.         }
  810.  
  811.         callsub(Sub_BulletHandler5);
  812. }
  813.  
  814. Actor(PumpGunShell)
  815. {
  816.         file(BulletPumpGunShellHeader);
  817.         startstate(BulletStateNormal);
  818.         startaction(movePumpGunshell);
  819.  
  820.         call(SetParticleSetID);
  821.  
  822.         if(VState!=BulletStateStuckOnFloor)
  823.         {
  824.             if(VTrigger|=_DIRallcol)
  825.             {
  826.                 State(_or,BulletStateStuckOnFloor);
  827.                 //call(AttachToColObjHeader);
  828.  
  829.                 if(vrnd<33)
  830.                 {
  831.                     sample(SFXPumpGunShell1,-1);
  832.                 }
  833.                 elseif(vrnd<66)
  834.                 {
  835.                     sample(SFXPumpGunShell3,-1);
  836.                 }
  837.                 else
  838.                 {
  839.                     sample(SFXPumpGunShell2,-1);
  840.                 }
  841.             }
  842.         }
  843.  
  844.         callsub(Sub_BulletHandler15);
  845. }
  846.  
  847.  
  848. //---------------------------------------------------------------------------- gaseous bullets
  849.  
  850. Actor(BulletBuzzSaw)
  851. {
  852.         file(BulletBuzzSawHeader);
  853.         startstate(BulletStateNormal);
  854.         startaction(move5);
  855.  
  856.         call(SetParticleSetID);
  857.  
  858.         call(CheckBulletCollision,-1,DamageBuzzSaw,true);
  859.         if(VTrigger==_DIRactorBulletcol)
  860.         {
  861.             if(VTrigger==_DIRhuman)
  862.             {
  863.                 sample(SFXHitActor7,-1);
  864.                 callsub(Sub_BloodFx5);
  865.                 callsub(Sub_BloodFxSpurt);
  866.                 callsub(Sub_BloodFxSpray);
  867.             }
  868.             else
  869.             {
  870.                 spawnparticle(fx_impactsparks,0,emptyvector,emptyvector,-1);
  871.                 sample(SFXBuzzSawGrinder,-1);
  872.             }
  873.  
  874.             killactor();
  875.         }
  876.         elseif(VTrigger|=_DIRallcol)
  877.         {
  878.             vector(_set,gactorpos,0,-20,0);
  879.             sample(SFXBuzzSawGrinder,-1);
  880.             vector(_set,tmpvector,192,192,255);
  881.             SpawnLight(fire_light,0,gactorpos,tmpvector,EmptyVector,300);
  882.             if(vrnd<50)
  883.             {
  884.                 spawnparticle(fx_torchsparks,0,emptyvector,emptyvector,-1);//fx_buzzsawsparks);
  885.             }
  886.             killactor();
  887.         }
  888.  
  889.         if(Vactivetime>10)
  890.         {
  891.             killactor();
  892.         }
  893. }
  894.  
  895. Actor(BulletFlameThrower)
  896. {
  897.         file(BulletFlameThrowerHeader);
  898.         startstate(BulletStateNormal);
  899.         startaction(move20);
  900.  
  901.         call(SetParticleSetID);
  902.  
  903.         call(CheckBulletCollision,-1,DamageNoDamage,true);
  904.         if(VTrigger==_DIRactorBulletcol)
  905.         {
  906.             if(VTrigger==_DIRhuman)
  907.             {
  908.                 CheckActorCollision(0,emptyVector,80,0,_COLfire,DamageFlameThrower)
  909.                 if(VCoreAICon==0)
  910.                 {
  911.                     call(AIexecutecodewithinradius,Sub_ReactToBulletOrExplosion,3000);
  912.                 }
  913.             }
  914.             killactor();
  915.         }
  916.         elseif(VTrigger|=_DIRallcol)
  917.         {
  918.             if(vrnd<50)
  919.             {
  920.                 spawnparticle(fx_weaponsmoke,0,emptyvector,emptyvector,fx_flamethrowsmoke);
  921.             }
  922.  
  923.             vector(_set,tmpvector,-32,-32,-32);
  924.             vector(_set,gactorpos,0,-20,0);
  925.             SpawnLight(perm_light,0,gactorpos,tmpvector,EmptyVector,350);
  926.             killactor();
  927.         }
  928.  
  929.         if(Vactivetime>14)
  930.         {
  931.             killactor();
  932.         }
  933. }
  934.  
  935. Actor(BulletTorch)
  936. {
  937.         file(BulletTorchHeader);
  938.         startstate(BulletStateNormal);
  939.         startaction(move2);
  940.  
  941.         call(SetParticleSetID);
  942.  
  943.         call(CheckBulletCollision,-1,DamageTorch,true);
  944.         if(VTrigger==_DIRactorBulletcol)
  945.         {
  946.             vector(_set,tmpvector,64,64,255);
  947.             SpawnLight(fire_light,0,emptyvector,tmpvector,EmptyVector,300);
  948.  
  949.             if(VTrigger==_DIRhuman)
  950.             {
  951.                 callsub(Sub_BloodFxSpray);
  952.             }
  953.             else
  954.             {
  955.                 spawnparticle(fx_impactsparks,0,emptyvector,emptyvector,-1);
  956.             }
  957.             killactor();
  958.         }
  959.         elseif(VTrigger|=_DIRallcol)
  960.         {
  961.             vector(_set,gactorpos,0,-20,0);
  962.             vector(_set,tmpvector,64,64,255);
  963.             SpawnLight(fire_light,0,gactorpos,tmpvector,EmptyVector,300);
  964.             if(vrnd<50)
  965.             {
  966.                 spawnparticle(fx_torchsparks,0,emptyvector,emptyvector,-1);
  967.             }
  968.             killactor();
  969.         }
  970.  
  971.         if(vactivetime>10)
  972.         {
  973.             killactor();
  974.         }
  975. }
  976.  
  977. //---------------------------------------------------------------------------- regular bullets
  978.  
  979. Actor(BulletPAK)
  980. {
  981.         file(BulletPAKGunHeader);
  982.         startstate(BulletStateNormal);
  983.         startaction(move150);
  984.  
  985.         call(SetParticleSetID);
  986.  
  987.         float(_declare,hitwall,0);
  988.  
  989.         rotate(0,0,0);
  990.  
  991.         if(VState!=BulletStateAttachedToActor)
  992.         {
  993.             if(hitwall==0)
  994.             {
  995.                 call(CheckBulletCollision,-1,-1,true);
  996.                 call(wUpdateBulletDamage);
  997.                 if(VTrigger==_DIRactorBulletcol)
  998.                 {
  999.                     if(VTrigger==_DIRhuman)
  1000.                     {
  1001.                         call(CheckBoneCollision,DamageNoDamage,_BulletAttach);
  1002.                         if(VTrigger==_DIRactorBulletcol)
  1003.                         {
  1004.                             call(ChangeRelativeSpeed);
  1005.                             sample(SFXPAKHit,-1);
  1006.  
  1007.                             State(_or,BulletStateAttachedToActor);
  1008.                             spawnaction(nomove);
  1009.                         }
  1010.                     }
  1011.                     else
  1012.                     {
  1013.                         spawnaction(nomove);
  1014.                         sample(SFXPAKHit,-1);
  1015.                         float(_set,hitwall,1);
  1016.                     }
  1017.                 }
  1018.                 elseif(VTrigger==_DIRhorcol)
  1019.                 {
  1020.                     sample(SFXPAKHit,-1);
  1021.                     killactor();
  1022.                 }
  1023.                 elseif(VTrigger==_DIRvercol)
  1024.                 {
  1025.                     sample(SFXPAKHit,-1);
  1026.  
  1027.                     if(VColMaterialProperties==_MATRipple)
  1028.                     {
  1029.                         vector(_set,fxvector,0,0,0);
  1030.                         callsub(sub_shockwave,0,0);
  1031.                         sample(SFXRipple,-1);
  1032.                     }
  1033.                     spawnaction(nomove);
  1034.  
  1035.                     if(VColMaterialProperties==_MATKFO)
  1036.                     {
  1037.                         killactor();
  1038.                     }
  1039.  
  1040.                     if(VCoreAICon==0)
  1041.                     {
  1042.                         call(AIexecutecodewithinradius,Sub_ReactToBulletOrExplosion,3000);
  1043.                     }
  1044.  
  1045.                     float(_set,hitwall,1);
  1046.                 }
  1047.  
  1048.                 if(VState!=BulletStateAttachedToActor&&hitwall==0)
  1049.                 {
  1050.                     vector(_set,gactorpos,0,100,0);
  1051.                     spawnparticle(fx_paktracer,0,gactorpos,emptyvector,-1);
  1052.  
  1053.                     //fake some bullets
  1054.                     float(_rnd2,tmpfloat,32);
  1055.                     float(_sub,tmpfloat,16);
  1056.                     vector(_setx,gactorpos,tmpfloat);
  1057.                     float(_rnd2,tmpfloat,32);
  1058.                     float(_sub,tmpfloat,16);
  1059.                     vector(_setz,gactorpos,tmpfloat);
  1060.                     spawnparticle(fx_paktracer,0,gactorpos,emptyvector,-1);
  1061.  
  1062.                     float(_rnd2,tmpfloat,32);
  1063.                     float(_sub,tmpfloat,16);
  1064.                     vector(_setx,gactorpos,tmpfloat);
  1065.                     float(_rnd2,tmpfloat,32);
  1066.                     float(_sub,tmpfloat,16);
  1067.                     vector(_setz,gactorpos,tmpfloat);
  1068.                     spawnparticle(fx_paktracer,0,gactorpos,emptyvector,-1);
  1069.  
  1070.                     float(_rnd2,tmpfloat,32);
  1071.                     float(_sub,tmpfloat,16);
  1072.                     vector(_setx,gactorpos,tmpfloat);
  1073.                     float(_rnd2,tmpfloat,32);
  1074.                     float(_sub,tmpfloat,16);
  1075.                     vector(_setz,gactorpos,tmpfloat);
  1076.                     spawnparticle(fx_paktracer,0,gactorpos,emptyvector,-1);
  1077.  
  1078.                     float(_rnd2,tmpfloat,32);
  1079.                     float(_sub,tmpfloat,16);
  1080.                     vector(_setx,gactorpos,tmpfloat);
  1081.                     float(_rnd2,tmpfloat,32);
  1082.                     float(_sub,tmpfloat,16);
  1083.                     vector(_setz,gactorpos,tmpfloat);
  1084.                     spawnparticle(fx_paktracer,0,gactorpos,emptyvector,-1);
  1085.  
  1086.                     float(_rnd2,tmpfloat,32);
  1087.                     float(_sub,tmpfloat,16);
  1088.                     vector(_setx,gactorpos,tmpfloat);
  1089.                     float(_rnd2,tmpfloat,32);
  1090.                     float(_sub,tmpfloat,16);
  1091.                     vector(_setz,gactorpos,tmpfloat);
  1092.                     spawnparticle(fx_paktracer,0,gactorpos,emptyvector,-1);
  1093.  
  1094.                     float(_rnd2,tmpfloat,32);
  1095.                     float(_sub,tmpfloat,16);
  1096.                     vector(_setx,gactorpos,tmpfloat);
  1097.                     float(_rnd2,tmpfloat,32);
  1098.                     float(_sub,tmpfloat,16);
  1099.                     vector(_setz,gactorpos,tmpfloat);
  1100.                     spawnparticle(fx_paktracer,0,gactorpos,emptyvector,-1);
  1101.  
  1102.                     float(_rnd2,tmpfloat,32);
  1103.                     float(_sub,tmpfloat,16);
  1104.                     vector(_setx,gactorpos,tmpfloat);
  1105.                     float(_rnd2,tmpfloat,32);
  1106.                     float(_sub,tmpfloat,16);
  1107.                     vector(_setz,gactorpos,tmpfloat);
  1108.                     spawnparticle(fx_paktracer,0,gactorpos,emptyvector,-1);
  1109.  
  1110.                     float(_rnd2,tmpfloat,32);
  1111.                     float(_sub,tmpfloat,16);
  1112.                     vector(_setx,gactorpos,tmpfloat);
  1113.                     float(_rnd2,tmpfloat,32);
  1114.                     float(_sub,tmpfloat,16);
  1115.                     vector(_setz,gactorpos,tmpfloat);
  1116.                     spawnparticle(fx_paktracer,0,gactorpos,emptyvector,-1);
  1117.                 }
  1118.             }
  1119.  
  1120.             //fx
  1121.             //smoke falling down
  1122.             if(hitwall==1)
  1123.             {
  1124.                 if(vrnd<50)
  1125.                 {
  1126.                     //if(vrnd<50)
  1127.                     //{
  1128.                         vector(_set,gactorpos,0,0,0);
  1129.                         float(_rnd2,tmpfloat,32);
  1130.                         float(_sub,tmpfloat,16);
  1131.                         vector(_setx,gactorpos,tmpfloat);
  1132.                         spawnparticle(fx_icesmoke,0,gactorpos,emptyvector,fx_icesteam);
  1133.                     //}
  1134.                     //else
  1135.                     //{
  1136.                         float(_rnd2,tmpfloat,32);
  1137.                         float(_sub,tmpfloat,16);
  1138.                         vector(_setx,gactorpos,tmpfloat);
  1139.                         spawnparticle(fx_icesmoke,0,gactorpos,emptyvector,-1);
  1140.                     //}
  1141.                 }
  1142.             }
  1143.  
  1144.             if(vactivetime>=90)            //3 seconds
  1145.             {
  1146.                 killactor();
  1147.             }
  1148.         }
  1149.         else
  1150.         {
  1151.             //fx
  1152.             //smoke falling down
  1153.             if(vrnd<50)
  1154.             {
  1155.                 //if(vrnd<50)
  1156.                 //{
  1157.                     vector(_set,gactorpos,0,0,0);
  1158.                     float(_rnd2,tmpfloat,32);
  1159.                     float(_sub,tmpfloat,16);
  1160.                     vector(_setx,gactorpos,tmpfloat);
  1161.                     spawnparticle(fx_icesmoke,0,gactorpos,emptyvector,-1);
  1162.                 //}
  1163.                 //else
  1164.                 //{
  1165.                     float(_rnd2,tmpfloat,32);
  1166.                     float(_sub,tmpfloat,16);
  1167.                     vector(_setx,gactorpos,tmpfloat);
  1168.                     spawnparticle(fx_icesmoke,0,gactorpos,emptyvector,fx_icesteam);
  1169.                 //}
  1170.             }
  1171.  
  1172.             rotate(0,0,0);
  1173.             if(Vactivetime>90)            //3 seconds
  1174.             {
  1175.                 killactor();
  1176.             }
  1177.         }
  1178. }
  1179.  
  1180.  
  1181.  
  1182.  
  1183. //the main pumpgun bullet
  1184. Actor(BulletPumpGun)
  1185. {
  1186.         file(BulletPumpGunHeader);
  1187.         startstate(BulletStateNormal);
  1188.         startaction(move300);
  1189.  
  1190.         call(SetParticleSetID);
  1191.  
  1192.         call(CheckBulletCollision,-1,-1,true);
  1193.         call(wUpdateBulletDamage);
  1194.         if(VTrigger==_DIRactorBulletcol)
  1195.         {
  1196.             if(VTrigger==_DIRhuman)
  1197.             {
  1198.                 sample(SFXHitActor7,-1);
  1199.                 callsub(Sub_BloodFxSpurt);
  1200.                 callsub(Sub_BloodFx10);
  1201.                 callsub(Sub_BloodFxSpray);
  1202.             }
  1203.             else
  1204.             {
  1205.                 spawnparticle(fx_impactsparks,0,emptyvector,emptyvector,-1);
  1206.                 sample(SFXRicochetMetal,-1);
  1207.             }
  1208.  
  1209.             killactor();
  1210.         }
  1211.         elseif(VTrigger|=_DIRallcol)
  1212.         {
  1213.             if(VColMaterialProperties==_MATRipple)
  1214.             {
  1215.                 vector(_set,fxvector,0,0,0);
  1216.                 callsub(sub_shockwave,0,0);
  1217.                 sample(SFXRipple,-1);
  1218.                 killactor();
  1219.             }
  1220.             else
  1221.             {
  1222.                 vector(_settoactorpos,tmpvector);
  1223.                 call(CheckForDynamicCollision,4);
  1224.                 if(VCoreAICon==0)
  1225.                 {
  1226.                     if(VDynamicCollision==0)
  1227.                     {
  1228.                         call(AIexecutecodewithinradius,Sub_ReactToBulletOrExplosion,1000);
  1229.                     }
  1230.                     else
  1231.                     {
  1232.                         call(AIexecutecodewithinradius,Sub_ReactToBulletOrExplosion,3000);
  1233.                     }
  1234.                 }
  1235.  
  1236.                 if(VDynamicCollision|=_ExplodeGlass)
  1237.                 {
  1238.                     sample(SFXGlass,tmpvector);            //attached gets removed!
  1239.  
  1240.                     if(VDynamicCollision|=_ExplodeSmall)
  1241.                     {
  1242.                         spawnparticle(fx_smallexplosion,-1,tmpvector,emptyvector,-1);
  1243.                     }
  1244.                 }
  1245.                 elseif(VDynamicCollision|=_ExplodeSmall)
  1246.                 {
  1247.                     spawnparticle(fx_smallexplosion,-1,tmpvector,emptyvector,-1);
  1248.                     sample(SFXSmallExplode,tmpvector);
  1249.                 }
  1250.                 elseif(VDynamicCollision|=_ExplodeBig)
  1251.                 {
  1252.                     vector(_settocolobjpos,TmpVector2);
  1253.                     vector(_copyx,TmpVector2,TmpFloat2);
  1254.                     vector(_copyy,TmpVector2,TmpFloat3);
  1255.                     vector(_copyz,TmpVector2,TmpFloat4);
  1256.  
  1257.                     if(VDynamicCollision|=_ExplodeAmmo)
  1258.                     {
  1259.                         spawnactor(WeaponAmmo,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  1260.                     }
  1261.                     elseif(VDynamicCollision|=_ExplodeAmmoGrenades)
  1262.                     {
  1263.                         spawnactor(WeaponAmmoGrenade,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  1264.                     }
  1265.  
  1266.                     spawnactor(BulletExplosion,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  1267.  
  1268.                     sample(SFXBazookaExplode,tmpvector);
  1269.  
  1270.                     vector(_copy,tmpvector,TmpVector2);
  1271.                     callsub(sub_fxexplosion);
  1272.                 }
  1273.                 else
  1274.                 {
  1275.                     if(vrnd<50)
  1276.                     {
  1277.                         sample(SFXPumpGunHitWall1,-1);
  1278.                     }
  1279.                     else
  1280.                     {
  1281.                         sample(SFXPumpGunHitWall2,-1);
  1282.                     }
  1283.  
  1284.                     if(VColMaterialProperties!=_MATKFO)
  1285.                     {
  1286.                         SpawnGooFX(fx_Bullethole,0,emptyvector,emptyvector,0);
  1287.                     }
  1288.                     spawnparticle(fx_impactpuff,0,emptyvector,emptyvector,-1);
  1289.                     spawnparticle(fx_impactsparks,0,emptyvector,emptyvector,-1);
  1290.                 }
  1291.  
  1292.                 killactor();
  1293.             }
  1294.         }
  1295.  
  1296.         callsub(Sub_BulletHandler5);
  1297. //        if(vactivetime>5)    //pumpgun is short range, don't fuck with it!
  1298. //        {
  1299. //            killactor();
  1300. //        }
  1301. }
  1302.  
  1303.  
  1304. //secondary pumpgun bullets
  1305. Actor(BulletPumpGun2)
  1306. {
  1307.         file(BulletPumpGunHeader2);
  1308.         startstate(BulletStateNormal);
  1309.         startaction(move300);
  1310.  
  1311.         call(SetParticleSetID);
  1312.  
  1313.         call(CheckBulletCollision,-1,-1,true);
  1314.         call(wUpdateBulletDamage);
  1315.         if(VTrigger==_DIRactorBulletcol)
  1316.         {
  1317.             killactor();
  1318.         }
  1319.         elseif(VTrigger|=_DIRallcol)
  1320.         {
  1321.             if(VColMaterialProperties!=_MATKFO)
  1322.             {
  1323.                 SpawnGooFX(fx_Bullethole,0,emptyvector,emptyvector,0);
  1324.             }
  1325.             spawnparticle(fx_impactpuff,0,emptyvector,emptyvector,-1);
  1326.             spawnparticle(fx_impactsparks,0,emptyvector,emptyvector,-1);
  1327.  
  1328.             killactor();
  1329.         }
  1330.  
  1331.         callsub(Sub_BulletHandler5);
  1332. //        if(vactivetime>5)    //pumpgun is short range, don't fuck with it!
  1333. //        {
  1334. //            killactor();
  1335. //        }
  1336. }
  1337.  
  1338.  
  1339.  
  1340. Actor(BulletMachineGun)
  1341. {
  1342.         file(BulletMachineGunHeader);
  1343.         startstate(BulletStateNormal);
  1344.         startaction(move200);
  1345.  
  1346.         call(SetParticleSetID);
  1347.  
  1348.         float(_declare,MachineGunRebound,0);
  1349.  
  1350.         if(vactivetime==0)
  1351.         {
  1352.             vector(_set,gactorpos,0,100,0);
  1353.             vector(_set,gactorine,0,200,0);
  1354.             spawnparticle(fx_tracer,0,gactorpos,gactorine,-1);
  1355.         }
  1356.  
  1357.         call(CheckBulletCollision,-1,-1,true);
  1358.         call(wUpdateBulletDamage);
  1359.         //call(CheckBulletCollision,-1,DamageMachineGun);
  1360.         if(VTrigger==_DIRactorBulletcol)
  1361.         {
  1362.             if(VTrigger==_DIRhuman)
  1363.             {
  1364.                 sample(SFXHitActor7,-1);
  1365.                 callsub(Sub_BloodFxSpurt);
  1366.                 callsub(Sub_BloodFx2);
  1367.                 callsub(Sub_BloodFxSpray);
  1368.             }
  1369.             else
  1370.             {
  1371.                 spawnparticle(fx_impactsparks,0,emptyvector,emptyvector,-1);
  1372.                 sample(SFXRicochetMetal,-1);
  1373.             }
  1374.  
  1375.             float(_set,MachineGunRebound,0);
  1376.             killactor();
  1377.         }
  1378.         elseif(VTrigger|=_DIRallcol)
  1379.         {
  1380.             //if(MachineGunRebound==0)
  1381.             //{
  1382.                 float(_set,MachineGunRebound,1);
  1383.                 if(VColMaterialProperties==_MATRipple)
  1384.                 {
  1385.                     vector(_set,fxvector,0,0,0);
  1386.                     callsub(sub_shockwave,0,0);
  1387.                     sample(SFXRipple,-1);
  1388.                 }
  1389.                 elseif(VColMaterialProperties==_MATGlass)
  1390.                 {
  1391.                     if(VColMaterialProperties!=_MATKFO)
  1392.                     {
  1393.                         SpawnGooFX(fx_Bulletholeglass,0,EmptyVector,emptyvector,0);
  1394.                     }
  1395.                     sample(SFXGlassPlink,-1);
  1396.                 }
  1397.                 else
  1398.                 {
  1399.                     spawnparticle(fx_impactsparks,0,emptyvector,emptyvector,-1);
  1400.                     if(VColMaterialProperties!=_MATKFO)
  1401.                     {
  1402.                         SpawnGooFX(fx_Bullethole,0,emptyvector,emptyvector,0);
  1403.                     }
  1404.  
  1405.                     sample(SFXMachineGunPing3,-1);
  1406.                 }
  1407.  
  1408.  
  1409.                 vector(_settoactorpos,tmpvector);
  1410.                 call(CheckForDynamicCollision,4);
  1411.                 if(VCoreAICon==0)
  1412.                 {
  1413.                     if(VDynamicCollision==0)
  1414.                     {
  1415.                         call(AIexecutecodewithinradius,Sub_ReactToBulletOrExplosion,1000);
  1416.                     }
  1417.                     else
  1418.                     {
  1419.                         call(AIexecutecodewithinradius,Sub_ReactToBulletOrExplosion,3000);
  1420.                     }
  1421.                 }
  1422.  
  1423.                 if(VDynamicCollision|=_ExplodeGlass)
  1424.                 {
  1425.                     sample(SFXGlass,tmpvector);            //attached gets removed!
  1426.  
  1427.                     if(VDynamicCollision|=_ExplodeSmall)
  1428.                     {
  1429.                         spawnparticle(fx_smallexplosion,-1,tmpvector,emptyvector,-1);
  1430.                     }
  1431.                 }
  1432.                 elseif(VDynamicCollision|=_ExplodeSmall)
  1433.                 {
  1434.                     spawnparticle(fx_smallexplosion,-1,tmpvector,emptyvector,-1);
  1435.                     sample(SFXSmallExplode,tmpvector);
  1436.                 }
  1437.                 elseif(VDynamicCollision|=_ExplodeBig)
  1438.                 {
  1439.                     vector(_settocolobjpos,TmpVector2);
  1440.                     vector(_copyx,TmpVector2,TmpFloat2);
  1441.                     vector(_copyy,TmpVector2,TmpFloat3);
  1442.                     vector(_copyz,TmpVector2,TmpFloat4);
  1443.  
  1444.                     if(VDynamicCollision|=_ExplodeAmmo)
  1445.                     {
  1446.                         spawnactor(WeaponAmmo,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  1447.                     }
  1448.                     elseif(VDynamicCollision|=_ExplodeAmmoGrenades)
  1449.                     {
  1450.                         spawnactor(WeaponAmmoGrenade,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  1451.                     }
  1452.  
  1453.                     spawnactor(BulletExplosion,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  1454.  
  1455.                     sample(SFXBazookaExplode,tmpvector);
  1456.  
  1457.                     vector(_copy,tmpvector,TmpVector2);
  1458.                     callsub(sub_fxexplosion);
  1459.                 }
  1460.             //}
  1461.             //else
  1462.             //{
  1463.                 float(_set,MachineGunRebound,0);
  1464.                 killactor();
  1465.             //}
  1466.         }
  1467.         elseif(Vactivetime>150)
  1468.         {
  1469.             float(_set,MachineGunRebound,0);
  1470.             killactor();
  1471.         }
  1472.  
  1473.         callsub(Sub_BulletHandler5);
  1474. }
  1475.  
  1476. Actor(BulletBazooka)
  1477. {
  1478.         file(BulletBazookaHeader);
  1479.         startstate(BulletStateNormal);
  1480.         startaction(move100);
  1481.  
  1482.         call(SetParticleSetID);
  1483.  
  1484.         if(vactivetime==0)
  1485.         {
  1486.             sample(SFXBazookaFly,-1);
  1487.         }
  1488.  
  1489.         float(_declare,baz_flipflop,0);
  1490.         if(baz_flipflop==0)
  1491.         {
  1492.             spawnparticle(fx_bazookatrail,0,emptyvector,emptyvector,fx_antirotate16);
  1493.             float(_set,baz_flipflop,1);
  1494.         }
  1495.         else
  1496.         {
  1497.             spawnparticle(fx_bazookatrail,0,emptyvector,emptyvector,-1);
  1498.             float(_set,baz_flipflop,0);
  1499.         }
  1500.  
  1501.  
  1502.         //type,bone,pos,color,vector,radius
  1503.         vector(_set,tmpvector,255,0,0);
  1504.         SpawnLight(Lomnilight2,0,EmptyVector,tmpvector,EmptyVector,400);
  1505.  
  1506.         //call(CheckBulletCollision,-1,-1);
  1507.         //call(wUpdateBulletDamage);
  1508.         call(CheckBulletCollision,-1,DamageBazooka,true);
  1509.         if(VTrigger==_DIRactorBulletcol)
  1510.         {
  1511.             vector(_settoactorpos,tmpvector);
  1512.             vector(_copyx,tmpvector,TmpFloat2);
  1513.             vector(_copyy,tmpvector,TmpFloat3);
  1514.             vector(_copyz,tmpvector,TmpFloat4);
  1515.  
  1516.             callsub(sub_fxexplosion);
  1517.  
  1518.             if(VTrigger==_DIRhuman)
  1519.             {
  1520.                 callsub(Sub_BloodFx10);
  1521.             }
  1522.  
  1523.             sample(SFXBazookaExplode,-1);
  1524.  
  1525.             spawnactor(BulletExplosion,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  1526.  
  1527.             killactor();
  1528.         }
  1529.         elseif(VTrigger==_DIRvercol)
  1530.         {
  1531.             sample(SFXBazookaExplode,-1);
  1532.             vector(_settoactorpos,tmpvector);
  1533.             callsub(sub_fxexplosion);
  1534.  
  1535.             call(CheckForDynamicCollision,0);
  1536.             if(VCoreAICon==0)
  1537.             {
  1538.                 if(VDynamicCollision==0)
  1539.                 {
  1540.                     call(AIexecutecodewithinradius,Sub_ReactToBulletOrExplosion,1000);
  1541.                 }
  1542.                 else
  1543.                 {
  1544.                     call(AIexecutecodewithinradius,Sub_ReactToBulletOrExplosion,3000);
  1545.                 }
  1546.             }
  1547.  
  1548.             if(VDynamicCollision|=_ExplodeGlass)
  1549.             {
  1550.                 sample(SFXGlass,tmpvector);            //attached gets removed!
  1551.  
  1552.                 if(VDynamicCollision|=_ExplodeSmall)
  1553.                 {
  1554.                     spawnparticle(fx_smallexplosion,-1,tmpvector,emptyvector,-1);
  1555.                 }
  1556.             }
  1557.             elseif(VDynamicCollision|=_ExplodeSmall)
  1558.             {
  1559.                 spawnparticle(fx_smallexplosion,-1,tmpvector,emptyvector,-1);
  1560.                 sample(SFXSmallExplode,tmpvector);
  1561.             }
  1562.             elseif(VDynamicCollision|=_ExplodeBig)
  1563.             {
  1564.                 vector(_settocolobjpos,TmpVector2);
  1565.                 vector(_copyx,TmpVector2,TmpFloat2);
  1566.                 vector(_copyy,TmpVector2,TmpFloat3);
  1567.                 vector(_copyz,TmpVector2,TmpFloat4);
  1568.  
  1569.                 if(VDynamicCollision|=_ExplodeAmmo)
  1570.                 {
  1571.                     spawnactor(WeaponAmmo,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  1572.                 }
  1573.                 elseif(VDynamicCollision|=_ExplodeAmmoGrenades)
  1574.                 {
  1575.                     spawnactor(WeaponAmmoGrenade,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  1576.                 }
  1577.  
  1578.                 spawnactor(BulletExplosion,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  1579.             }
  1580.             else
  1581.             {
  1582.                 vector(_copy,TmpVector2,tmpvector);
  1583.                 vector(_copyx,TmpVector2,TmpFloat2);
  1584.                 vector(_copyy,TmpVector2,TmpFloat3);
  1585.                 vector(_copyz,TmpVector2,TmpFloat4);
  1586.  
  1587.                 spawnactor(BulletExplosion,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  1588.             }
  1589.  
  1590.             killactor();
  1591.         }
  1592.         elseif(VTrigger==_DIRhorcol)
  1593.         {
  1594.             sample(SFXBazookaExplode,-1);
  1595.             vector(_settoactorpos,tmpvector);
  1596.             callsub(sub_fxexplosion);
  1597.  
  1598.             call(CheckForDynamicCollision,0);
  1599.             if(VCoreAICon==0)
  1600.             {
  1601.                 if(VDynamicCollision==0)
  1602.                 {
  1603.                     call(AIexecutecodewithinradius,Sub_ReactToBulletOrExplosion,1000);
  1604.                 }
  1605.                 else
  1606.                 {
  1607.                     call(AIexecutecodewithinradius,Sub_ReactToBulletOrExplosion,3000);
  1608.                 }
  1609.             }
  1610.  
  1611.             if(VDynamicCollision|=_ExplodeGlass)
  1612.             {
  1613.                 sample(SFXGlass,tmpvector);            //attached gets removed!
  1614.  
  1615.                 if(VDynamicCollision|=_ExplodeSmall)
  1616.                 {
  1617.                     spawnparticle(fx_smallexplosion,-1,tmpvector,emptyvector,-1);
  1618.                 }
  1619.             }
  1620.             elseif(VDynamicCollision|=_ExplodeSmall)
  1621.             {
  1622.                 spawnparticle(fx_smallexplosion,-1,tmpvector,emptyvector,-1);
  1623.                 sample(SFXSmallExplode,tmpvector);
  1624.             }
  1625.             elseif(VDynamicCollision|=_ExplodeBig)
  1626.             {
  1627.                 vector(_settocolobjpos,TmpVector2);
  1628.                 vector(_copyx,TmpVector2,TmpFloat2);
  1629.                 vector(_copyy,TmpVector2,TmpFloat3);
  1630.                 vector(_copyz,TmpVector2,TmpFloat4);
  1631.  
  1632.                 if(VDynamicCollision|=_ExplodeAmmo)
  1633.                 {
  1634.                     spawnactor(WeaponAmmo,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  1635.                 }
  1636.                 elseif(VDynamicCollision|=_ExplodeAmmoGrenades)
  1637.                 {
  1638.                     spawnactor(WeaponAmmoGrenade,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  1639.                 }
  1640.  
  1641.                 spawnactor(BulletExplosion,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  1642.             }
  1643.             else
  1644.             {
  1645.                 vector(_copy,TmpVector2,tmpvector);
  1646.                 vector(_copyx,TmpVector2,TmpFloat2);
  1647.                 vector(_copyy,TmpVector2,TmpFloat3);
  1648.                 vector(_copyz,TmpVector2,TmpFloat4);
  1649.  
  1650.                 spawnactor(BulletExplosion,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  1651.             }
  1652.  
  1653.             killactor();
  1654.         }
  1655.         elseif(Vactivetime>150)
  1656.         {
  1657.             sample(SFXBazookaExplode,-1);
  1658.             vector(_settoactorpos,tmpvector);
  1659.             callsub(sub_fxexplosion);
  1660.  
  1661.             call(CheckForDynamicCollision,0);
  1662.             if(VCoreAICon==0)
  1663.             {
  1664.                 if(VDynamicCollision==0)
  1665.                 {
  1666.                     call(AIexecutecodewithinradius,Sub_ReactToBulletOrExplosion,1000);
  1667.                 }
  1668.                 else
  1669.                 {
  1670.                     call(AIexecutecodewithinradius,Sub_ReactToBulletOrExplosion,3000);
  1671.                 }
  1672.             }
  1673.  
  1674.             if(VDynamicCollision|=_ExplodeGlass)
  1675.             {
  1676.                 sample(SFXGlass,tmpvector);            //attached gets removed!
  1677.  
  1678.                 if(VDynamicCollision|=_ExplodeSmall)
  1679.                 {
  1680.                     spawnparticle(fx_smallexplosion,-1,tmpvector,emptyvector,-1);
  1681.                 }
  1682.             }
  1683.             elseif(VDynamicCollision|=_ExplodeSmall)
  1684.             {
  1685.                 spawnparticle(fx_smallexplosion,-1,tmpvector,emptyvector,-1);
  1686.                 sample(SFXSmallExplode,tmpvector);
  1687.             }
  1688.             elseif(VDynamicCollision|=_ExplodeBig)
  1689.             {
  1690.                 vector(_settocolobjpos,TmpVector2);
  1691.                 vector(_copyx,TmpVector2,TmpFloat2);
  1692.                 vector(_copyy,TmpVector2,TmpFloat3);
  1693.                 vector(_copyz,TmpVector2,TmpFloat4);
  1694.  
  1695.                 if(VDynamicCollision|=_ExplodeAmmo)
  1696.                 {
  1697.                     spawnactor(WeaponAmmo,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  1698.                 }
  1699.                 elseif(VDynamicCollision|=_ExplodeAmmoGrenades)
  1700.                 {
  1701.                     spawnactor(WeaponAmmoGrenade,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  1702.                 }
  1703.  
  1704.                 spawnactor(BulletExplosion,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  1705.             }
  1706.             else
  1707.             {
  1708.                 vector(_copy,TmpVector2,tmpvector);
  1709.                 vector(_copyx,TmpVector2,TmpFloat2);
  1710.                 vector(_copyy,TmpVector2,TmpFloat3);
  1711.                 vector(_copyz,TmpVector2,TmpFloat4);
  1712.  
  1713.                 spawnactor(BulletExplosion,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  1714.             }
  1715.  
  1716.             killactor();
  1717.         }
  1718.  
  1719.         callsub(Sub_BulletHandler5);
  1720. }
  1721.  
  1722.  
  1723.  
  1724. Actor(BulletMaser)
  1725. {
  1726.         file(BulletMaserHeader);
  1727.         startstate(BulletStateNormal);
  1728.         startaction(move50);
  1729.  
  1730.         call(SetParticleSetID);
  1731.  
  1732.         if(vactivetime==0)
  1733.         {
  1734.             vector(_set,gactorpos,0,0,0);
  1735.             vector(_set,gactorine,0,50,0);
  1736.             spawn3dflare(64,48,255,128,gactorpos,gactorine);
  1737.         }
  1738.  
  1739.         vector(_set,tmpvector,64,48,255);
  1740.         SpawnLight(Lomnilight2,0,EmptyVector,tmpvector,EmptyVector,400);
  1741.  
  1742.  
  1743.         call(CheckBulletCollision,-1,DamageMaser,true);
  1744.         if(VTrigger==_DIRactorBulletcol)
  1745.         {
  1746.             killactor();
  1747.         }
  1748.         elseif(VTrigger|=_DIRallcol)
  1749.         {
  1750.             if(VCoreAICon==0)
  1751.             {
  1752.                 call(AIexecutecodewithinradius,Sub_ReactToBulletOrExplosion,3000);
  1753.             }
  1754.  
  1755.             killactor();
  1756.         }
  1757.  
  1758.         callsub(Sub_BulletHandler5);
  1759. }
  1760.  
  1761.  
  1762. //---------------------------------------------------------------------------- grenade bullets
  1763.  
  1764. Actor(BulletGrenadeJumpBetty)
  1765. {
  1766.         file(BulletGrenadeJumpBettyHeader);
  1767.         startstate(BulletStateNormal);
  1768.         startaction(MoveThrownGrenade);
  1769.  
  1770.         call(SetParticleSetID);
  1771.  
  1772.         float(_declare,jumpbettyjump,0);
  1773.         float(_declare,jumpbettytime,0);
  1774.         float(_declare,jumpbettytimelift,0);
  1775.         float(_declare,grenadelastcoll,0);
  1776.         float(_declare,GrenadeTimer0,90);
  1777.         float(_declare,GrenadeTimer1,0);
  1778.         float(_declare,BettyAngle,0);
  1779.         float(_declare,BettyAddAngle,1024);
  1780.  
  1781.         if(vactivetime>=GrenadeTimer1)
  1782.         {
  1783.             sample(SFXGrenadeTimer,-1);
  1784.             float(_div,GrenadeTimer0,2);
  1785.             float(_add,Grenadetimer1,GrenadeTimer0);
  1786.         }
  1787.         else
  1788.         {
  1789.             float(_sub,GrenadeTimer0,1);
  1790.             if(GrenadeTimer0<=0)
  1791.             {
  1792.                 vector(_set,tmpvector,255,255,255);
  1793.                 SpawnLight(LightBlinkFade,0,EmptyVector,tmpvector,EmptyVector,300);
  1794.  
  1795.                 sample(SFXLowOnAmmo,-1);
  1796.                 //sample(SFXLowOnHealth,-1);
  1797.                 float(_set,GrenadeTimer0,90);
  1798.             }
  1799.         }
  1800.  
  1801.         if(jumpbettyjump==0)
  1802.         {
  1803.             call(CheckBulletCollision,-1,DamageNoDamage,false);
  1804.             if(VTrigger|=_DIRallcol)
  1805.             {
  1806.                 if(VColMaterialProperties==_MATRipple)
  1807.                 {
  1808.                     vector(_set,fxvector,0,0,0);
  1809.                     callsub(sub_shockwave,0,0);
  1810.                     sample(SFXRipple,-1);
  1811.                 }
  1812.                 elseif(VColMaterialProperties==_MATGlass)
  1813.                 {
  1814.                     if(VColMaterialProperties!=_MATKFO)
  1815.                     {
  1816.                         SpawnGooFX(fx_Bulletholeglass,0,EmptyVector,emptyvector,0);
  1817.                     }
  1818.                     sample(SFXGlassPlink,-1);
  1819.                 }
  1820.                 else
  1821.                 {
  1822.                     if(grenadelastcoll!=1)
  1823.                     {
  1824.                         sample(SFXGrenadeBounce,-1);
  1825.                     }
  1826.                 }
  1827.                 float(_set,grenadelastcoll,1);
  1828.  
  1829.                 //3 seconds after she lands, she blows ....if someone is within 5feet that is =)
  1830.                 if(vactivetime>90)
  1831.                 {
  1832.                     //wait for it ...wait for it ....
  1833.                     call(SearchForCloseActor,_AIclassmale|_AIclassfemale|_AIclassangel,512);
  1834.                     if(VTrigger==_DIRTempFlag)
  1835.                     {
  1836.                         float(_set,jumpbettyjump,1);
  1837.  
  1838.                         //play pitcher sample again ...manic warning -- she's about to blow
  1839.                         float(_set,GrenadeTimer0,90);
  1840.                         float(_set,GrenadeTimer1,0);
  1841.                         float(_seti,jumpbettytimelift,vactivetime);
  1842.                         float(_add,jumpbettytimelift,20);
  1843.                         float(_seti,jumpbettytime,vactivetime);
  1844.                         float(_add,jumpbettytime,110);
  1845.                     }
  1846.                     else
  1847.                     {
  1848.                         SpawnAction(MoveThrownGrenadeWithSound);
  1849.  
  1850.                         //don't play the pitcher sample anymore
  1851.                         float(_seti,GrenadeTimer1,vactivetime);
  1852.                         float(_add,GrenadeTimer1,2);
  1853.                     }
  1854.                 }
  1855.             }
  1856.             elseif(Vactivetime>450)
  1857.             {
  1858.                 //time out -- should it fall out the level or something horrid like that!
  1859.                 float(_set,grenadelastcoll,0);
  1860.                 float(_set,GrenadeTimer0,90);
  1861.                 float(_set,GrenadeTimer1,0);
  1862.                 float(_set,jumpbettyjump,0);
  1863.                 killactor();
  1864.             }
  1865.             else
  1866.             {
  1867.                 float(_set,grenadelastcoll,0);
  1868.             }
  1869.         }
  1870.  
  1871.  
  1872.         //ladies and gentlemen Betty will now jump ...taadaa
  1873.         if(jumpbettyjump==1)
  1874.         {
  1875.             rotate(0,192,0);
  1876.             gravity(-1,25);
  1877.  
  1878.             //jumping betty ...she jumps :
  1879.             if(vactivetime>=jumpbettytimelift)
  1880.             {
  1881.                 vector(_settoactorpos,TmpVector2);
  1882.                 vector(_copyx,TmpVector2,TmpFloat2);
  1883.                 vector(_copyy,TmpVector2,TmpFloat3);
  1884.                 vector(_copyz,TmpVector2,TmpFloat4);
  1885.  
  1886.                 float(_sin,BettySinAngle,BettyAngle);
  1887.                 float(_cos,BettyCosAngle,BettyAngle);
  1888.                 float(_mul,BettySinAngle,100);
  1889.                 float(_mul,BettyCosAngle,100);
  1890.                 float(_add,BettyAngle,BettyAddAngle);
  1891.                 float(_add,BettyAddAngle,10);
  1892.                 float(_and,BettyAddAngle,4095);
  1893.                 spawnactor(BulletBetty,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  1894. /*
  1895.                 if(VTrigger==_DIRBulletFired)
  1896.                 {
  1897.                     sample(SFXMaimerFire,-1);
  1898.                 }
  1899. */
  1900.             }
  1901.  
  1902.             if(vactivetime>=jumpbettytime)
  1903.             {
  1904.                 //test for looksy!!
  1905.                 sample(SFXJumpBettyGrenade,-1);
  1906.                 vector(_settoactorpos,tmpvector);
  1907.                 callsub(sub_fxsmallexplosion);
  1908.  
  1909.                 float(_set,grenadelastcoll,0);
  1910.                 float(_set,GrenadeTimer0,90);
  1911.                 float(_set,GrenadeTimer1,0);
  1912.                 float(_set,jumpbettyjump,0);
  1913.                 killactor();
  1914.             }
  1915.         }
  1916.  
  1917.  
  1918.         //after 3 mins, we kill it anyway, can't have too many of these blighters lying around!
  1919.         if(Vactivetime>5400)
  1920.         {
  1921.             sample(SFXJumpBettyGrenade,-1);
  1922.             vector(_settoactorpos,tmpvector);
  1923.             callsub(sub_fxsmallexplosion);
  1924.             float(_set,grenadelastcoll,0);
  1925.             float(_set,GrenadeTimer0,90);
  1926.             float(_set,GrenadeTimer1,0);
  1927.             float(_set,jumpbettyjump,0);
  1928.             killactor();
  1929.         }
  1930. }
  1931.  
  1932. //with a 3 second timer
  1933. Actor(BulletGrenade)
  1934. {
  1935.         file(BulletGrenadeHeader);
  1936.         startstate(BulletStateNormal);
  1937.         startaction(MoveThrownGrenade);
  1938.  
  1939.         call(SetParticleSetID);
  1940.  
  1941.         float(_declare,grenadelastcoll,0);
  1942.  
  1943.         if(grenadelastcoll==0)
  1944.         {
  1945.             rotate(-128,0,128);
  1946.         }
  1947.  
  1948.         float(_declare,GrenadeTimer0,90);
  1949.         float(_declare,GrenadeTimer1,0);
  1950.  
  1951.         if(vactivetime>=GrenadeTimer1)
  1952.         {
  1953.             sample(SFXGrenadeTimer,-1);
  1954.             float(_div,GrenadeTimer0,2);
  1955.             float(_add,Grenadetimer1,GrenadeTimer0);
  1956.         }
  1957.  
  1958.         vector(_set,tmpvector,255,255,255);
  1959.         SpawnLight(Lomnilight2,0,EmptyVector,tmpvector,EmptyVector,300);
  1960.  
  1961.         call(CheckBulletCollision,-1,DamageGrenade,false);
  1962.         //call(CheckBulletCollision,-1,-1);
  1963.         //call(wUpdateBulletDamage);
  1964.         if(VTrigger==_DIRactorBulletcol)
  1965.         {
  1966.             float(_set,grenadelastcoll,0);
  1967.             //if(Vactivetime>90)
  1968.             //{
  1969.                 vector(_settoactorpos,tmpvector);
  1970.                 vector(_copyx,tmpvector,TmpFloat2);
  1971.                 vector(_copyy,tmpvector,TmpFloat3);
  1972.                 vector(_copyz,tmpvector,TmpFloat4);
  1973.  
  1974.                 sample(SFXGrenadeExplode,-1);
  1975.  
  1976.                 callsub(sub_fxexplosion);
  1977.  
  1978.                 if(VTrigger==_DIRhuman)
  1979.                 {
  1980.                     callsub(Sub_BloodFx10);
  1981.                 }
  1982.  
  1983.                 spawnactor(BulletExplosion,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  1984.  
  1985.                 float(_set,GrenadeTimer0,90);
  1986.                 float(_set,GrenadeTimer1,0);
  1987.  
  1988.                 killactor();
  1989.             //}
  1990.             //else
  1991.             //{
  1992.             //    callsub(Sub_BloodFxSpray);
  1993.             //    sample(SFXHitActor7,-1);
  1994.             //}
  1995.         }
  1996.         elseif(VTrigger|=_DIRallcol)
  1997.         {
  1998.             if(Vactivetime>90)
  1999.             {
  2000.                 sample(SFXGrenadeExplode,-1);
  2001.  
  2002.                 vector(_settoactorpos,tmpvector);
  2003.                 callsub(sub_fxexplosion);
  2004.  
  2005.                 call(CheckForDynamicCollision,0);
  2006.                 if(VDynamicCollision|=_ExplodeGlass)
  2007.                 {
  2008.                     sample(SFXGlass,tmpvector);            //attached gets removed!
  2009.  
  2010.                     if(VDynamicCollision|=_ExplodeSmall)
  2011.                     {
  2012.                         spawnparticle(fx_smallexplosion,-1,tmpvector,emptyvector,-1);
  2013.                     }
  2014.                 }
  2015.                 elseif(VDynamicCollision|=_ExplodeSmall)
  2016.                 {
  2017.                     spawnparticle(fx_smallexplosion,-1,tmpvector,emptyvector,-1);
  2018.                     sample(SFXSmallExplode,tmpvector);
  2019.                 }
  2020.                 elseif(VDynamicCollision|=_ExplodeBig)
  2021.                 {
  2022.                     vector(_settocolobjpos,TmpVector2);
  2023.                     vector(_copyx,TmpVector2,TmpFloat2);
  2024.                     vector(_copyy,TmpVector2,TmpFloat3);
  2025.                     vector(_copyz,TmpVector2,TmpFloat4);
  2026.  
  2027.                     if(VDynamicCollision|=_ExplodeAmmo)
  2028.                     {
  2029.                         spawnactor(WeaponAmmo,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  2030.                     }
  2031.                     elseif(VDynamicCollision|=_ExplodeAmmoGrenades)
  2032.                     {
  2033.                         spawnactor(WeaponAmmoGrenade,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  2034.                     }
  2035.  
  2036.                     spawnactor(BulletExplosion,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  2037.                 }
  2038.                 else
  2039.                 {
  2040.                     vector(_copy,TmpVector2,tmpvector);
  2041.                     vector(_copyx,TmpVector2,TmpFloat2);
  2042.                     vector(_copyy,TmpVector2,TmpFloat3);
  2043.                     vector(_copyz,TmpVector2,TmpFloat4);
  2044.  
  2045.                     spawnactor(BulletExplosion,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  2046.                 }
  2047.  
  2048.                 float(_set,grenadelastcoll,0);
  2049.  
  2050.                 float(_set,GrenadeTimer0,90);
  2051.                 float(_set,GrenadeTimer1,0);
  2052.  
  2053.                 killactor();
  2054.             }
  2055.             else
  2056.             {
  2057.                 if(VColMaterialProperties==_MATRipple)
  2058.                 {
  2059.                     vector(_set,fxvector,0,0,0);
  2060.                     callsub(sub_shockwave,0,0);
  2061.                     sample(SFXRipple,-1);
  2062.                 }
  2063.                 elseif(VColMaterialProperties==_MATGlass)
  2064.                 {
  2065.                     if(VColMaterialProperties!=_MATKFO)
  2066.                     {
  2067.                         SpawnGooFX(fx_Bulletholeglass,0,EmptyVector,emptyvector,0);
  2068.                     }
  2069.                     sample(SFXGlassPlink,-1);
  2070.                 }
  2071.                 else
  2072.                 {
  2073.                     if(grenadelastcoll!=1)
  2074.                     {
  2075.                         sample(SFXGrenadeBounce,-1);
  2076.                     }
  2077.                 }
  2078.                 float(_set,grenadelastcoll,1);
  2079.                 SpawnAction(MoveThrownGrenadeWithSound);
  2080.             }
  2081.         }
  2082.         elseif(Vactivetime>90)
  2083.         {
  2084.             float(_set,grenadelastcoll,0);
  2085.  
  2086.             sample(SFXGrenadeExplode,-1);
  2087.  
  2088.             vector(_settoactorpos,tmpvector);
  2089.             callsub(sub_fxexplosion);
  2090.  
  2091.             call(CheckForDynamicCollision,0);
  2092.             if(VDynamicCollision|=_ExplodeGlass)
  2093.             {
  2094.                 sample(SFXGlass,tmpvector);            //attached gets removed!
  2095.  
  2096.                 if(VDynamicCollision|=_ExplodeSmall)
  2097.                 {
  2098.                     spawnparticle(fx_smallexplosion,-1,tmpvector,emptyvector,-1);
  2099.                 }
  2100.             }
  2101.             elseif(VDynamicCollision|=_ExplodeSmall)
  2102.             {
  2103.                 spawnparticle(fx_smallexplosion,-1,tmpvector,emptyvector,-1);
  2104.                 sample(SFXSmallExplode,tmpvector);
  2105.             }
  2106.             elseif(VDynamicCollision|=_ExplodeBig)
  2107.             {
  2108.                 vector(_settocolobjpos,TmpVector2);
  2109.                 vector(_copyx,TmpVector2,TmpFloat2);
  2110.                 vector(_copyy,TmpVector2,TmpFloat3);
  2111.                 vector(_copyz,TmpVector2,TmpFloat4);
  2112.  
  2113.                 if(VDynamicCollision|=_ExplodeAmmo)
  2114.                 {
  2115.                     spawnactor(WeaponAmmo,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  2116.                 }
  2117.                 elseif(VDynamicCollision|=_ExplodeAmmoGrenades)
  2118.                 {
  2119.                     spawnactor(WeaponAmmoGrenade,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  2120.                 }
  2121.  
  2122.                 spawnactor(BulletExplosion,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  2123.             }
  2124.             else
  2125.             {
  2126.                 vector(_copy,TmpVector2,tmpvector);
  2127.                 vector(_copyx,TmpVector2,TmpFloat2);
  2128.                 vector(_copyy,TmpVector2,TmpFloat3);
  2129.                 vector(_copyz,TmpVector2,TmpFloat4);
  2130.  
  2131.                 spawnactor(BulletExplosion,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  2132.             }
  2133.  
  2134.             float(_set,GrenadeTimer0,90);
  2135.             float(_set,GrenadeTimer1,0);
  2136.  
  2137.             killactor();
  2138.         }
  2139.         else
  2140.         {
  2141.             if(grenadelastcoll!=0)
  2142.             {
  2143.                 callsub(Sub_BulletHandler5);
  2144.  
  2145.                 float(_set,GrenadeTimer0,90);
  2146.                 float(_set,GrenadeTimer1,0);
  2147.             }
  2148.  
  2149.             float(_set,grenadelastcoll,0);
  2150.         }
  2151. }
  2152.  
  2153.  
  2154. Actor(BulletGrenadeRectum)
  2155. {
  2156.         file(BulletRectumGrenadeHeader);
  2157.         startstate(BulletStateNormal);
  2158.         startaction(moveDistgrenade);
  2159.  
  2160.         call(SetParticleSetID);
  2161.  
  2162.         float(_declare,displace,0);
  2163.  
  2164.         rotate(-128,0,128);
  2165.  
  2166.         vector(_set,tmpvector,-255,-255,-255);
  2167.         SpawnLight(darklight,0,EmptyVector,tmpvector,EmptyVector,500);
  2168.  
  2169.         if(displace>4)
  2170.         {
  2171.             float(_set,displace,0);
  2172.  
  2173.             vector(_settoactorpos,tmpvector);
  2174.             vector(_copyx,tmpvector,TmpFloat2);
  2175.             vector(_copyy,tmpvector,TmpFloat3);
  2176.             vector(_copyz,tmpvector,TmpFloat4);
  2177.  
  2178.             spawnactor(BulletRectum,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  2179.         }
  2180.         float(_add,displace,1);
  2181.  
  2182.         if(vactivetime==0)
  2183.         {
  2184.             sample(SFXRectum,-1);
  2185.         }
  2186.  
  2187.         call(WallBulb,1000);
  2188.         if(Vactivetime>90)
  2189.         {
  2190.             killactor();
  2191.         }
  2192. }
  2193.  
  2194. Actor(BulletDistortStraight)
  2195. {
  2196.         file(BulletMachineGunHeader);
  2197.         startstate(BulletStateNormal);
  2198.         startaction(move200);
  2199.  
  2200.         call(SetParticleSetID);
  2201.  
  2202.         float(_declare,MachineGunRebound,0);
  2203.  
  2204.         call(CheckBulletCollision,-1,-1,true);
  2205.         call(wUpdateBulletDamage);
  2206.         //call(CheckBulletCollision,-1,DamageMachineGun);
  2207.         if(VTrigger==_DIRactorBulletcol)
  2208.         {
  2209.             float(_set,MachineGunRebound,0);
  2210.             killactor();
  2211.         }
  2212.         elseif(VTrigger|=_DIRallcol)
  2213.         {
  2214.             
  2215.             killactor();
  2216.         }
  2217.         elseif(Vactivetime>150)
  2218.         {
  2219.             float(_set,MachineGunRebound,0);
  2220.             killactor();
  2221.         }
  2222.         call(WallBulb,1000);
  2223.         callsub(Sub_BulletHandler5);
  2224. }
  2225.         
  2226.  
  2227. Actor(BulletGrenadeNoTimer)
  2228. {
  2229.         file(BulletGrenadeHeader);
  2230.         startstate(BulletStateNormal);
  2231.         startaction(MoveThrownGrenade);
  2232.  
  2233.         call(SetParticleSetID);
  2234.  
  2235.         float(_declare,grenadelastcoll,0);
  2236.  
  2237.         rotate(-128,0,128);
  2238.  
  2239.         vector(_set,tmpvector,255,255,255);
  2240.         SpawnLight(Lomnilight2,0,EmptyVector,tmpvector,EmptyVector,300);
  2241.  
  2242.         //call(CheckBulletCollision,-1,-1);
  2243.         //call(wUpdateBulletDamage);
  2244.         call(CheckBulletCollision,-1,DamageGrenade,true);
  2245.         if(VTrigger==_DIRactorBulletcol)
  2246.         {
  2247.             float(_set,grenadelastcoll,0);
  2248.  
  2249.             vector(_settoactorpos,tmpvector);
  2250.             vector(_copyx,tmpvector,TmpFloat2);
  2251.             vector(_copyy,tmpvector,TmpFloat3);
  2252.             vector(_copyz,tmpvector,TmpFloat4);
  2253.  
  2254.             callsub(sub_fxexplosion);
  2255.  
  2256.             if(VTrigger==_DIRhuman)
  2257.             {
  2258.                 callsub(Sub_BloodFx10);
  2259.             }
  2260.  
  2261.             sample(SFXGrenadeExplode,-1);
  2262.  
  2263.             spawnactor(BulletExplosion,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  2264.  
  2265.             killactor();
  2266.         }
  2267.         elseif(VTrigger|=_DIRallcol)
  2268.         {
  2269.             sample(SFXGrenadeExplode,-1);
  2270.  
  2271.             vector(_settoactorpos,tmpvector);
  2272.             callsub(sub_fxexplosion);
  2273.  
  2274.             call(CheckForDynamicCollision,0);
  2275.             if(VDynamicCollision|=_ExplodeGlass)
  2276.             {
  2277.                 sample(SFXGlass,tmpvector);            //attached gets removed!
  2278.  
  2279.                 if(VDynamicCollision|=_ExplodeSmall)
  2280.                 {
  2281.                     spawnparticle(fx_smallexplosion,-1,tmpvector,emptyvector,-1);
  2282.                 }
  2283.             }
  2284.             elseif(VDynamicCollision|=_ExplodeSmall)
  2285.             {
  2286.                 spawnparticle(fx_smallexplosion,-1,tmpvector,emptyvector,-1);
  2287.                 sample(SFXSmallExplode,tmpvector);
  2288.             }
  2289.             elseif(VDynamicCollision|=_ExplodeBig)
  2290.             {
  2291.                 vector(_settocolobjpos,TmpVector2);
  2292.                 vector(_copyx,TmpVector2,TmpFloat2);
  2293.                 vector(_copyy,TmpVector2,TmpFloat3);
  2294.                 vector(_copyz,TmpVector2,TmpFloat4);
  2295.  
  2296.                 if(VDynamicCollision|=_ExplodeAmmo)
  2297.                 {
  2298.                     spawnactor(WeaponAmmo,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  2299.                 }
  2300.                 elseif(VDynamicCollision|=_ExplodeAmmoGrenades)
  2301.                 {
  2302.                     spawnactor(WeaponAmmoGrenade,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  2303.                 }
  2304.  
  2305.                 spawnactor(BulletExplosion,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  2306.             }
  2307.             else
  2308.             {
  2309.                 vector(_copy,TmpVector2,tmpvector);
  2310.                 vector(_copyx,TmpVector2,TmpFloat2);
  2311.                 vector(_copyy,TmpVector2,TmpFloat3);
  2312.                 vector(_copyz,TmpVector2,TmpFloat4);
  2313.  
  2314.                 spawnactor(BulletExplosion,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  2315.             }
  2316.  
  2317.             float(_set,grenadelastcoll,0);
  2318.             killactor();
  2319.         }
  2320.         elseif(Vactivetime>90)
  2321.         {
  2322.             float(_set,grenadelastcoll,0);
  2323.  
  2324.             sample(SFXGrenadeExplode,-1);
  2325.  
  2326.             vector(_settoactorpos,tmpvector);
  2327.             callsub(sub_fxexplosion);
  2328.  
  2329.             call(CheckForDynamicCollision,0);
  2330.             if(VDynamicCollision|=_ExplodeGlass)
  2331.             {
  2332.                 sample(SFXGlass,tmpvector);            //attached gets removed!
  2333.  
  2334.                 if(VDynamicCollision|=_ExplodeSmall)
  2335.                 {
  2336.                     spawnparticle(fx_smallexplosion,-1,tmpvector,emptyvector,-1);
  2337.                 }
  2338.             }
  2339.             elseif(VDynamicCollision|=_ExplodeSmall)
  2340.             {
  2341.                 spawnparticle(fx_smallexplosion,-1,tmpvector,emptyvector,-1);
  2342.                 sample(SFXSmallExplode,tmpvector);
  2343.             }
  2344.             elseif(VDynamicCollision|=_ExplodeBig)
  2345.             {
  2346.                 vector(_settocolobjpos,TmpVector2);
  2347.                 vector(_copyx,TmpVector2,TmpFloat2);
  2348.                 vector(_copyy,TmpVector2,TmpFloat3);
  2349.                 vector(_copyz,TmpVector2,TmpFloat4);
  2350.  
  2351.                 if(VDynamicCollision|=_ExplodeAmmo)
  2352.                 {
  2353.                     spawnactor(WeaponAmmo,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  2354.                 }
  2355.                 elseif(VDynamicCollision|=_ExplodeAmmoGrenades)
  2356.                 {
  2357.                     spawnactor(WeaponAmmoGrenade,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  2358.                 }
  2359.  
  2360.                 spawnactor(BulletExplosion,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  2361.             }
  2362.             else
  2363.             {
  2364.                 vector(_copy,TmpVector2,tmpvector);
  2365.                 vector(_copyx,TmpVector2,TmpFloat2);
  2366.                 vector(_copyy,TmpVector2,TmpFloat3);
  2367.                 vector(_copyz,TmpVector2,TmpFloat4);
  2368.  
  2369.                 spawnactor(BulletExplosion,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  2370.             }
  2371.  
  2372.             killactor();
  2373.         }
  2374.         else
  2375.         {
  2376.             if(grenadelastcoll!=0)
  2377.             {
  2378.                 callsub(Sub_BulletHandler5);
  2379.             }
  2380.             float(_set,grenadelastcoll,0);
  2381.         }
  2382. }
  2383.  
  2384.  
  2385. Actor(BulletGrenadeConcusion)
  2386. {
  2387.         file(BulletGrenadeConcusionHeader);
  2388.         startstate(BulletStateNormal);
  2389.         startaction(MoveThrownGrenade);
  2390.  
  2391.         call(SetParticleSetID);
  2392.  
  2393.         rotate(-128,0,128);
  2394.  
  2395.         vector(_set,tmpvector,255,255,255);
  2396.         SpawnLight(Lomnilight2,0,EmptyVector,tmpvector,EmptyVector,300);
  2397.  
  2398.         call(CheckBulletCollision,-1,DamageGrenade,true);
  2399.         if(VTrigger==_DIRactorBulletcol)
  2400.         {
  2401.             call(wCheckViewCollision,0,-1,-1);
  2402.             sample(SFXLightsOn,-1);
  2403.             //sample(SFXConcGrenade,-1);
  2404.  
  2405.             spawnparticle(fx_smallexplosion,0,emptyvector,emptyvector,-1);
  2406.             //sample(SFXSmallExplode,-1);
  2407.  
  2408.             call(SetFlagsOnActiveActors,1000,0,_DUMMY,0,_AFLAGconfused);
  2409.  
  2410.             killactor();
  2411.         }
  2412.         elseif(VTrigger|=_DIRallcol)
  2413.         {
  2414.             call(wCheckViewCollision,0,-1,-1);
  2415.             //sample(SFXConcGrenade,-1);
  2416.             sample(SFXLightsOn,-1);
  2417.  
  2418.             spawnparticle(fx_smallexplosion,0,emptyvector,emptyvector,-1);
  2419.             //sample(SFXSmallExplode,-1);
  2420.  
  2421.             call(SetFlagsOnActiveActors,1000,0,_DUMMY,0,_AFLAGconfused);
  2422.  
  2423.             killactor();
  2424.         }
  2425.         elseif(Vactivetime>90)
  2426.         {
  2427.             call(wCheckViewCollision,0,-1,-1);
  2428.             //sample(SFXConcGrenade,-1);
  2429.             sample(SFXLightsOn,-1);
  2430.  
  2431.             spawnparticle(fx_smallexplosion,0,emptyvector,emptyvector,-1);
  2432.             //sample(SFXSmallExplode,-1);
  2433.  
  2434.             call(SetFlagsOnActiveActors,1000,0,_DUMMY,0,_AFLAGconfused);
  2435.  
  2436.             killactor();
  2437.         }
  2438.  
  2439.         callsub(Sub_BulletHandler5);
  2440. }
  2441.  
  2442.  
  2443.  
  2444.  
  2445.  
  2446. Actor(BulletGrenadeStickEm)
  2447. {
  2448.         file(BulletGrenadeStickEmHeader);
  2449.         startstate(BulletStateNormal);
  2450.         startaction(MoveThrownGrenade);
  2451.  
  2452.         call(SetParticleSetID);
  2453.  
  2454.         float(_declare,grenadeblinker,90);
  2455.  
  2456.         if(StickEmState==StickEmNotReady)
  2457.         {
  2458.             //the first time it comes in, it has been thrown , so we set the state to StickEmReady
  2459.             //the second time it comes in, it has StickEmExploding state set!
  2460.             float(_set,StickEmState,StickEmReady);
  2461.         }
  2462.  
  2463.         //vector(_set,tmpvector,255,255,255);
  2464.         //SpawnLight(Lomnilight2,0,EmptyVector,tmpvector,EmptyVector,300);
  2465.  
  2466.         if(VState!=BulletStateStuckInWall && VState!=BulletStateAttachedToActor && VState!=BulletStateStuckOnFloor)
  2467.         {
  2468.             call(CheckBulletCollision,-1,DamageNoDamage,true);
  2469.             if(VTrigger==_DIRactorBulletcol)
  2470.             {
  2471.                 call(CheckBoneCollision,DamageNoDamage,_BulletAttach);
  2472.                 if(VTrigger==_DIRactorBulletcol)
  2473.                 {
  2474.                     State(_or,BulletStateAttachedToActor);
  2475.                     spawnaction(nomovenogravity);
  2476.  
  2477.                     sample(SFXGrenadeBounce,-1);
  2478.                 }
  2479.             }
  2480.             elseif(VTrigger|=_DIRallcol)
  2481.             {
  2482.                 if(VTrigger==_DIRhorcol)
  2483.                 {
  2484.                     State(_or,BulletStateStuckOnFloor);
  2485.                 }
  2486.                 elseif(VTrigger==_DIRvercol)
  2487.                 {
  2488.                     State(_or,BulletStateStuckInWall);
  2489.                 }
  2490.  
  2491.                 sample(SFXGrenadeBounce,-1);
  2492.  
  2493.                 call(AttachToColObjHeader);
  2494.                 sample(SFXMaimerPing,-1);
  2495.                 spawnaction(nomovenogravity);
  2496.             }
  2497.         }
  2498.         else
  2499.         {
  2500.             if(StickEmState==StickEmReady)
  2501.             {
  2502.                 sample(SFXStickEmGrenade,-1);
  2503.                 vector(_set,tmpvector,255,255,255);
  2504.                 if(grenadeblinker<0)
  2505.                 {
  2506.                     SpawnLight(LightBlinkFade,0,EmptyVector,tmpvector,EmptyVector,300);
  2507.                     float(_set,grenadeblinker,90);
  2508.                 }
  2509.                 float(_sub,grenadeblinker,1);
  2510.             }
  2511.             elseif(StickEmState==StickEmExploding)
  2512.             {
  2513.                 float(_set,StickEmState,StickEmNotReady);
  2514.  
  2515.                 if(VState==BulletStateAttachedToActor)
  2516.                 {
  2517.                     vector(_settoactorpos,tmpvector);
  2518.                     vector(_copyx,tmpvector,TmpFloat2);
  2519.                     vector(_copyy,tmpvector,TmpFloat3);
  2520.                     vector(_copyz,tmpvector,TmpFloat4);
  2521.  
  2522.                     callsub(sub_fxexplosion);
  2523.  
  2524.                     if(VTrigger==_DIRhuman)
  2525.                     {
  2526.                         callsub(Sub_BloodFx10);
  2527.                     }
  2528.  
  2529.                     sample(SFXGrenadeExplode,-1);
  2530.  
  2531.                     spawnactor(BulletExplosion,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  2532.                     killactor();
  2533.                 }
  2534.                 elseif(VState==BulletStateStuckOnFloor||VState==BulletStateStuckInWall)
  2535.                 {
  2536.                     sample(SFXGrenadeExplode,-1);
  2537.  
  2538.                     vector(_settoactorpos,tmpvector);
  2539.                     callsub(sub_fxexplosion);
  2540.  
  2541.                     call(CheckForDynamicCollision,0);
  2542.                     if(VDynamicCollision|=_ExplodeGlass)
  2543.                     {
  2544.                         sample(SFXGlass,tmpvector);            //attached gets removed!
  2545.  
  2546.                         if(VDynamicCollision|=_ExplodeSmall)
  2547.                         {
  2548.                             spawnparticle(fx_smallexplosion,-1,tmpvector,emptyvector,-1);
  2549.                         }
  2550.                     }
  2551.                     elseif(VDynamicCollision|=_ExplodeSmall)
  2552.                     {
  2553.                         spawnparticle(fx_smallexplosion,-1,tmpvector,emptyvector,-1);
  2554.                         sample(SFXSmallExplode,tmpvector);
  2555.                     }
  2556.                     elseif(VDynamicCollision|=_ExplodeBig)
  2557.                     {
  2558.                         vector(_settocolobjpos,TmpVector2);
  2559.                         vector(_copyx,TmpVector2,TmpFloat2);
  2560.                         vector(_copyy,TmpVector2,TmpFloat3);
  2561.                         vector(_copyz,TmpVector2,TmpFloat4);
  2562.  
  2563.                         if(VDynamicCollision|=_ExplodeAmmo)
  2564.                         {
  2565.                             spawnactor(WeaponAmmo,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  2566.                         }
  2567.                         elseif(VDynamicCollision|=_ExplodeAmmoGrenades)
  2568.                         {
  2569.                             spawnactor(WeaponAmmoGrenade,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  2570.                         }
  2571.  
  2572.                         spawnactor(BulletExplosion,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  2573.                     }
  2574.                     else
  2575.                     {
  2576.                         vector(_copy,TmpVector2,tmpvector);
  2577.                         vector(_copyx,TmpVector2,TmpFloat2);
  2578.                         vector(_copyy,TmpVector2,TmpFloat3);
  2579.                         vector(_copyz,TmpVector2,TmpFloat4);
  2580.  
  2581.                         spawnactor(BulletExplosion,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  2582.                     }
  2583.                     killactor();
  2584.                 }
  2585.             }
  2586.         }
  2587. }
  2588.  
  2589. //---------------------------------------------------------------------------- droid bullets
  2590.  
  2591. Actor(BulletTurret)
  2592. {
  2593.         file(BulletAutoCannonHeader);
  2594.         startstate(BulletStateNormal);
  2595.         startaction(move200z);
  2596.  
  2597.         call(SetParticleSetID);
  2598.  
  2599.         if(vactivetime==0)
  2600.         {
  2601.             vector(_set,gactorine,0,0,-200);
  2602.             spawnparticle(fx_flare,0,emptyvector,emptyvector,fx_mturret);
  2603.             spawnparticle(fx_TurretStrip,0,emptyvector,gactorine,fx_gunflashhorizac);
  2604.             spawnparticle(fx_TurretStrip,0,emptyvector,gactorine,fx_gunflashvertac);
  2605.             spawnparticle(fx_TurretStrip,0,emptyvector,gactorine,fx_gunflashdiag1ac);
  2606.             spawnparticle(fx_TurretStrip,0,emptyvector,gactorine,fx_gunflashdiag2ac);
  2607.         }
  2608.  
  2609.         //type,bone,pos,color,vector,radius
  2610.         vector(_set,tmpvector,50,50,200);
  2611.         SpawnLight(Lomnilight2,0,EmptyVector,tmpvector,EmptyVector,400);
  2612.  
  2613.         //call(CheckBulletCollision,-1,-1);
  2614.         //call(wUpdateBulletDamage);
  2615.         call(CheckBulletCollision,-1,DamageBazooka,true);
  2616.         if(VTrigger==_DIRactorBulletcol)
  2617.         {
  2618.             vector(_settoactorpos,tmpvector);
  2619.             vector(_copyx,tmpvector,TmpFloat2);
  2620.             vector(_copyy,tmpvector,TmpFloat3);
  2621.             vector(_copyz,tmpvector,TmpFloat4);
  2622.  
  2623.             callsub(sub_fxsmallexplosion);
  2624.  
  2625.             if(VTrigger==_DIRhuman)
  2626.             {
  2627.                 callsub(Sub_BloodFx10);
  2628.             }
  2629.  
  2630.             sample(SFXGunTurretExplode,-1);
  2631.  
  2632.             spawnactor(BulletExplosion,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  2633.  
  2634.             killactor();
  2635.         }
  2636.         elseif(VTrigger==_DIRvercol)
  2637.         {
  2638.             sample(SFXGunTurretExplode,-1);
  2639.             vector(_settoactorpos,tmpvector);
  2640.             callsub(sub_fxsmallexplosion);
  2641.  
  2642.             call(CheckForDynamicCollision,0);
  2643.             if(VCoreAICon==0)
  2644.             {
  2645.                 if(VDynamicCollision==0)
  2646.                 {
  2647.                     call(AIexecutecodewithinradius,Sub_ReactToBulletOrExplosion,1000);
  2648.                 }
  2649.                 else
  2650.                 {
  2651.                     call(AIexecutecodewithinradius,Sub_ReactToBulletOrExplosion,3000);
  2652.                 }
  2653.             }
  2654.  
  2655.             if(VDynamicCollision|=_ExplodeGlass)
  2656.             {
  2657.                 sample(SFXGlass,tmpvector);            //attached gets removed!
  2658.  
  2659.                 if(VDynamicCollision|=_ExplodeSmall)
  2660.                 {
  2661.                     spawnparticle(fx_smallexplosion,-1,tmpvector,emptyvector,-1);
  2662.                 }
  2663.             }
  2664.             elseif(VDynamicCollision|=_ExplodeSmall)
  2665.             {
  2666.                 spawnparticle(fx_smallexplosion,-1,tmpvector,emptyvector,-1);
  2667.                 sample(SFXSmallExplode,tmpvector);
  2668.             }
  2669.             elseif(VDynamicCollision|=_ExplodeBig)
  2670.             {
  2671.                 vector(_settocolpos,TmpVector2);
  2672.                 vector(_copyx,TmpVector2,TmpFloat2);
  2673.                 vector(_copyy,TmpVector2,TmpFloat3);
  2674.                 vector(_copyz,TmpVector2,TmpFloat4);
  2675.  
  2676.                 if(VDynamicCollision|=_ExplodeAmmo)
  2677.                 {
  2678.                     spawnactor(WeaponAmmo,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  2679.                 }
  2680.                 elseif(VDynamicCollision|=_ExplodeAmmoGrenades)
  2681.                 {
  2682.                     spawnactor(WeaponAmmoGrenade,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  2683.                 }
  2684.  
  2685.                 spawnactor(BulletExplosion,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  2686.             }
  2687.             else
  2688.             {
  2689.                 vector(_copy,TmpVector2,tmpvector);
  2690.                 vector(_copyx,TmpVector2,TmpFloat2);
  2691.                 vector(_copyy,TmpVector2,TmpFloat3);
  2692.                 vector(_copyz,TmpVector2,TmpFloat4);
  2693.  
  2694.                 spawnactor(BulletExplosion,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  2695.             }
  2696.  
  2697.             killactor();
  2698.         }
  2699.         elseif(VTrigger==_DIRhorcol)
  2700.         {
  2701.             sample(SFXGunTurretExplode,-1);
  2702.             vector(_settoactorpos,tmpvector);
  2703.             callsub(sub_fxsmallexplosion);
  2704.  
  2705.             call(CheckForDynamicCollision,0);
  2706.             if(VCoreAICon==0)
  2707.             {
  2708.                 if(VDynamicCollision==0)
  2709.                 {
  2710.                     call(AIexecutecodewithinradius,Sub_ReactToBulletOrExplosion,1000);
  2711.                 }
  2712.                 else
  2713.                 {
  2714.                     call(AIexecutecodewithinradius,Sub_ReactToBulletOrExplosion,3000);
  2715.                 }
  2716.             }
  2717.  
  2718.             if(VDynamicCollision|=_ExplodeGlass)
  2719.             {
  2720.                 sample(SFXGlass,tmpvector);            //attached gets removed!
  2721.  
  2722.                 if(VDynamicCollision|=_ExplodeSmall)
  2723.                 {
  2724.                     spawnparticle(fx_smallexplosion,-1,tmpvector,emptyvector,-1);
  2725.                 }
  2726.             }
  2727.             elseif(VDynamicCollision|=_ExplodeSmall)
  2728.             {
  2729.                 spawnparticle(fx_smallexplosion,-1,tmpvector,emptyvector,-1);
  2730.                 sample(SFXSmallExplode,tmpvector);
  2731.             }
  2732.             elseif(VDynamicCollision|=_ExplodeBig)
  2733.             {
  2734.                 vector(_settocolpos,TmpVector2);
  2735.                 vector(_copyx,TmpVector2,TmpFloat2);
  2736.                 vector(_copyy,TmpVector2,TmpFloat3);
  2737.                 vector(_copyz,TmpVector2,TmpFloat4);
  2738.  
  2739.                 if(VDynamicCollision|=_ExplodeAmmo)
  2740.                 {
  2741.                     spawnactor(WeaponAmmo,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  2742.                 }
  2743.                 elseif(VDynamicCollision|=_ExplodeAmmoGrenades)
  2744.                 {
  2745.                     spawnactor(WeaponAmmoGrenade,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  2746.                 }
  2747.  
  2748.                 spawnactor(BulletExplosion,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  2749.             }
  2750.             else
  2751.             {
  2752.                 vector(_copy,TmpVector2,tmpvector);
  2753.                 vector(_copyx,TmpVector2,TmpFloat2);
  2754.                 vector(_copyy,TmpVector2,TmpFloat3);
  2755.                 vector(_copyz,TmpVector2,TmpFloat4);
  2756.  
  2757.                 spawnactor(BulletExplosion,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  2758.             }
  2759.  
  2760.             killactor();
  2761.         }
  2762.         elseif(Vactivetime>150)
  2763.         {
  2764.             sample(SFXGunTurretExplode,-1);
  2765.             vector(_settoactorpos,tmpvector);
  2766.             callsub(sub_fxsmallexplosion);
  2767.  
  2768.             call(CheckForDynamicCollision,0);
  2769.             if(VCoreAICon==0)
  2770.             {
  2771.                 if(VDynamicCollision==0)
  2772.                 {
  2773.                     call(AIexecutecodewithinradius,Sub_ReactToBulletOrExplosion,1000);
  2774.                 }
  2775.                 else
  2776.                 {
  2777.                     call(AIexecutecodewithinradius,Sub_ReactToBulletOrExplosion,3000);
  2778.                 }
  2779.             }
  2780.  
  2781.             if(VDynamicCollision|=_ExplodeGlass)
  2782.             {
  2783.                 sample(SFXGlass,tmpvector);            //attached gets removed!
  2784.  
  2785.                 if(VDynamicCollision|=_ExplodeSmall)
  2786.                 {
  2787.                     spawnparticle(fx_smallexplosion,-1,tmpvector,emptyvector,-1);
  2788.                 }
  2789.             }
  2790.             elseif(VDynamicCollision|=_ExplodeSmall)
  2791.             {
  2792.                 spawnparticle(fx_smallexplosion,-1,tmpvector,emptyvector,-1);
  2793.                 sample(SFXSmallExplode,tmpvector);
  2794.             }
  2795.             elseif(VDynamicCollision|=_ExplodeBig)
  2796.             {
  2797.                 vector(_settocolpos,TmpVector2);
  2798.                 vector(_copyx,TmpVector2,TmpFloat2);
  2799.                 vector(_copyy,TmpVector2,TmpFloat3);
  2800.                 vector(_copyz,TmpVector2,TmpFloat4);
  2801.  
  2802.                 if(VDynamicCollision|=_ExplodeAmmo)
  2803.                 {
  2804.                     spawnactor(WeaponAmmo,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  2805.                 }
  2806.                 elseif(VDynamicCollision|=_ExplodeAmmoGrenades)
  2807.                 {
  2808.                     spawnactor(WeaponAmmoGrenade,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  2809.                 }
  2810.  
  2811.                 spawnactor(BulletExplosion,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  2812.             }
  2813.             else
  2814.             {
  2815.                 vector(_copy,TmpVector2,tmpvector);
  2816.                 vector(_copyx,TmpVector2,TmpFloat2);
  2817.                 vector(_copyy,TmpVector2,TmpFloat3);
  2818.                 vector(_copyz,TmpVector2,TmpFloat4);
  2819.  
  2820.                 spawnactor(BulletExplosion,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  2821.             }
  2822.  
  2823.             killactor();
  2824.         }
  2825.  
  2826.         //callsub(Sub_BulletHandler5);
  2827.         if(vactivetime>150)
  2828.         {
  2829.             killactor();
  2830.         }
  2831. }
  2832.  
  2833.  
  2834.  
  2835. Actor(BulletShellTurret)
  2836. {
  2837.         file(BulletAutoCannonHeader);
  2838.         startstate(BulletStateNormal);
  2839.         startaction(move200);
  2840.  
  2841.         float(_declare,MachineGunRebound,0);
  2842.  
  2843.         call(SetParticleSetID);
  2844.  
  2845.         if(vactivetime==0)
  2846.         {
  2847.             vector(_set,gactorpos,0,0,-50);
  2848.             vector(_set,gactorine,0,0,-200);
  2849.             spawnparticle(fx_tracer,0,gactorpos,gactorine,fx_tracersmall);
  2850.         }
  2851.  
  2852.         vector(_set,tmpvector,250,250,50);
  2853.         SpawnLight(Lomnilight2,0,EmptyVector,tmpvector,EmptyVector,250);
  2854.  
  2855.         call(CheckBulletCollision,-1,-1,true);
  2856.         call(wUpdateBulletDamage);
  2857.         //call(CheckBulletCollision,-1,DamageMachineGun);
  2858.         if(VTrigger==_DIRactorBulletcol)
  2859.         {
  2860.             if(VTrigger==_DIRhuman)
  2861.             {
  2862.                 sample(SFXHitActor7,-1);
  2863.                 callsub(Sub_BloodFxSpurt);
  2864.                 callsub(Sub_BloodFx2);
  2865.                 callsub(Sub_BloodFxSpray);
  2866.             }
  2867.             else
  2868.             {
  2869.                 spawnparticle(fx_impactsparks,0,emptyvector,emptyvector,-1);
  2870.                 sample(SFXRicochetMetal,-1);
  2871.             }
  2872.  
  2873.             float(_set,MachineGunRebound,0);
  2874.             killactor();
  2875.         }
  2876.         elseif(VTrigger|=_DIRallcol)
  2877.         {
  2878.             //if(MachineGunRebound==0)
  2879.             //{
  2880.                 float(_set,MachineGunRebound,1);
  2881.                 if(VColMaterialProperties==_MATRipple)
  2882.                 {
  2883.                     vector(_set,fxvector,0,0,0);
  2884.                     callsub(sub_shockwave,0,0);
  2885.                     sample(SFXRipple,-1);
  2886.                 }
  2887.                 elseif(VColMaterialProperties==_MATGlass)
  2888.                 {
  2889.                     if(VColMaterialProperties!=_MATKFO)
  2890.                     {
  2891.                         SpawnGooFX(fx_Bulletholeglass,0,EmptyVector,emptyvector,0);
  2892.                     }
  2893.                     sample(SFXGlassPlink,-1);
  2894.                 }
  2895.                 else
  2896.                 {
  2897.                     spawnparticle(fx_impactsparks,0,emptyvector,emptyvector,-1);
  2898.                     if(VColMaterialProperties!=_MATKFO)
  2899.                     {
  2900.                         SpawnGooFX(fx_Bullethole,0,emptyvector,emptyvector,0);
  2901.                     }
  2902.  
  2903.                     sample(SFXMachineGunPing3,-1);
  2904.                 }
  2905.  
  2906.  
  2907.                 vector(_settoactorpos,tmpvector);
  2908.                 call(CheckForDynamicCollision,4);
  2909.                 if(VCoreAICon==0)
  2910.                 {
  2911.                     if(VDynamicCollision==0)
  2912.                     {
  2913.                         call(AIexecutecodewithinradius,Sub_ReactToBulletOrExplosion,1000);
  2914.                     }
  2915.                     else
  2916.                     {
  2917.                         call(AIexecutecodewithinradius,Sub_ReactToBulletOrExplosion,3000);
  2918.                     }
  2919.                 }
  2920.  
  2921.                 if(VDynamicCollision|=_ExplodeGlass)
  2922.                 {
  2923.                     sample(SFXGlass,tmpvector);            //attached gets removed!
  2924.  
  2925.                     if(VDynamicCollision|=_ExplodeSmall)
  2926.                     {
  2927.                         spawnparticle(fx_smallexplosion,-1,tmpvector,emptyvector,-1);
  2928.                     }
  2929.                 }
  2930.                 elseif(VDynamicCollision|=_ExplodeSmall)
  2931.                 {
  2932.                     spawnparticle(fx_smallexplosion,-1,tmpvector,emptyvector,-1);
  2933.                     sample(SFXSmallExplode,tmpvector);
  2934.                 }
  2935.                 elseif(VDynamicCollision|=_ExplodeBig)
  2936.                 {
  2937.                     vector(_settocolobjpos,TmpVector2);
  2938.                     vector(_copyx,TmpVector2,TmpFloat2);
  2939.                     vector(_copyy,TmpVector2,TmpFloat3);
  2940.                     vector(_copyz,TmpVector2,TmpFloat4);
  2941.  
  2942.                     if(VDynamicCollision|=_ExplodeAmmo)
  2943.                     {
  2944.                         spawnactor(WeaponAmmo,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  2945.                     }
  2946.                     elseif(VDynamicCollision|=_ExplodeAmmoGrenades)
  2947.                     {
  2948.                         spawnactor(WeaponAmmoGrenade,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  2949.                     }
  2950.  
  2951.                     spawnactor(BulletExplosion,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  2952.  
  2953.                     sample(SFXBazookaExplode,tmpvector);
  2954.  
  2955.                     vector(_copy,tmpvector,TmpVector2);
  2956.                     callsub(sub_fxexplosion);
  2957.                 }
  2958.             //}
  2959.             //else
  2960.             //{
  2961.                 float(_set,MachineGunRebound,0);
  2962.                 killactor();
  2963.             //}
  2964.         }
  2965.         elseif(Vactivetime>150)
  2966.         {
  2967.             float(_set,MachineGunRebound,0);
  2968.             killactor();
  2969.         }
  2970.  
  2971.         callsub(Sub_BulletHandler5);        
  2972.         /*
  2973.         call(CheckBulletCollision,-1,DamagePumpGun,true);
  2974.         if(VTrigger==_DIRactorBulletcol)
  2975.         {
  2976.             vector(_settoactorpos,tmpvector);
  2977.             vector(_copyx,tmpvector,TmpFloat2);
  2978.             vector(_copyy,tmpvector,TmpFloat3);
  2979.             vector(_copyz,tmpvector,TmpFloat4);
  2980.  
  2981.             if(VTrigger==_DIRhuman)
  2982.             {
  2983.                 callsub(Sub_BloodFx10);
  2984.             }
  2985.             else
  2986.             {
  2987.                 spawnparticle(fx_impactsparks,0,emptyvector,emptyvector,-1);
  2988.                 if(VColMaterialProperties!=_MATKFO)
  2989.                 {
  2990.                     SpawnGooFX(fx_Bullethole,0,emptyvector,emptyvector,0);
  2991.                 }
  2992.             }
  2993.  
  2994.             killactor();
  2995.         }
  2996.         elseif(VTrigger==_DIRvercol)
  2997.         {
  2998.             sample(SFXGunTurretExplode,-1);
  2999.             vector(_settoactorpos,tmpvector);
  3000.             callsub(sub_fxsmallexplosion);
  3001.  
  3002.             call(CheckForDynamicCollision,0);
  3003.             if(VCoreAICon==0)
  3004.             {
  3005.                 if(VDynamicCollision==0)
  3006.                 {
  3007.                     call(AIexecutecodewithinradius,Sub_ReactToBulletOrExplosion,1000);
  3008.                 }
  3009.                 else
  3010.                 {
  3011.                     call(AIexecutecodewithinradius,Sub_ReactToBulletOrExplosion,3000);
  3012.                 }
  3013.             }
  3014.  
  3015.             if(VDynamicCollision|=_ExplodeGlass)
  3016.             {
  3017.                 sample(SFXGlass,tmpvector);            //attached gets removed!
  3018.  
  3019.                 if(VDynamicCollision|=_ExplodeSmall)
  3020.                 {
  3021.                     spawnparticle(fx_smallexplosion,-1,tmpvector,emptyvector,-1);
  3022.                 }
  3023.             }
  3024.             elseif(VDynamicCollision|=_ExplodeSmall)
  3025.             {
  3026.                 spawnparticle(fx_smallexplosion,-1,tmpvector,emptyvector,-1);
  3027.                 sample(SFXSmallExplode,tmpvector);
  3028.             }
  3029.             elseif(VDynamicCollision|=_ExplodeBig)
  3030.             {
  3031.                 vector(_settocolpos,TmpVector2);
  3032.                 vector(_copyx,TmpVector2,TmpFloat2);
  3033.                 vector(_copyy,TmpVector2,TmpFloat3);
  3034.                 vector(_copyz,TmpVector2,TmpFloat4);
  3035.  
  3036.                 if(VDynamicCollision|=_ExplodeAmmo)
  3037.                 {
  3038.                     spawnactor(WeaponAmmo,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  3039.                 }
  3040.                 elseif(VDynamicCollision|=_ExplodeAmmoGrenades)
  3041.                 {
  3042.                     spawnactor(WeaponAmmoGrenade,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  3043.                 }
  3044.  
  3045.                 spawnactor(BulletExplosion,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  3046.             }
  3047.             else
  3048.             {
  3049.                 vector(_copy,TmpVector2,tmpvector);
  3050.                 vector(_copyx,TmpVector2,TmpFloat2);
  3051.                 vector(_copyy,TmpVector2,TmpFloat3);
  3052.                 vector(_copyz,TmpVector2,TmpFloat4);
  3053.  
  3054.                 spawnactor(BulletExplosion,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  3055.             }
  3056.  
  3057.             killactor();
  3058.         }
  3059.         elseif(VTrigger==_DIRhorcol)
  3060.         {
  3061.             sample(SFXGunTurretExplode,-1);
  3062.             vector(_settoactorpos,tmpvector);
  3063.             callsub(sub_fxsmallexplosion);
  3064.  
  3065.             call(CheckForDynamicCollision,0);
  3066.             if(VCoreAICon==0)
  3067.             {
  3068.                 if(VDynamicCollision==0)
  3069.                 {
  3070.                     call(AIexecutecodewithinradius,Sub_ReactToBulletOrExplosion,1000);
  3071.                 }
  3072.                 else
  3073.                 {
  3074.                     call(AIexecutecodewithinradius,Sub_ReactToBulletOrExplosion,3000);
  3075.                 }
  3076.             }
  3077.  
  3078.             if(VDynamicCollision|=_ExplodeGlass)
  3079.             {
  3080.                 sample(SFXGlass,tmpvector);            //attached gets removed!
  3081.  
  3082.                 if(VDynamicCollision|=_ExplodeSmall)
  3083.                 {
  3084.                     spawnparticle(fx_impactsparks,0,emptyvector,emptyvector,-1);
  3085.                     if(VColMaterialProperties!=_MATKFO)
  3086.                     {
  3087.                         SpawnGooFX(fx_Bullethole,0,emptyvector,emptyvector,0);
  3088.                     }
  3089.                 }
  3090.             }
  3091.             elseif(VDynamicCollision|=_ExplodeSmall)
  3092.             {
  3093.                 spawnparticle(fx_smallexplosion,-1,tmpvector,emptyvector,-1);
  3094.                 sample(SFXSmallExplode,tmpvector);
  3095.             }
  3096.             elseif(VDynamicCollision|=_ExplodeBig)
  3097.             {
  3098.                 vector(_settocolpos,TmpVector2);
  3099.                 vector(_copyx,TmpVector2,TmpFloat2);
  3100.                 vector(_copyy,TmpVector2,TmpFloat3);
  3101.                 vector(_copyz,TmpVector2,TmpFloat4);
  3102.  
  3103.                 if(VDynamicCollision|=_ExplodeAmmo)
  3104.                 {
  3105.                     spawnactor(WeaponAmmo,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  3106.                 }
  3107.                 elseif(VDynamicCollision|=_ExplodeAmmoGrenades)
  3108.                 {
  3109.                     spawnactor(WeaponAmmoGrenade,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  3110.                 }
  3111.  
  3112.                 spawnactor(BulletExplosion,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  3113.             }
  3114.             else
  3115.             {
  3116.                 vector(_copy,TmpVector2,tmpvector);
  3117.                 vector(_copyx,TmpVector2,TmpFloat2);
  3118.                 vector(_copyy,TmpVector2,TmpFloat3);
  3119.                 vector(_copyz,TmpVector2,TmpFloat4);
  3120.  
  3121.                 spawnactor(BulletExplosion,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  3122.             }
  3123.  
  3124.             killactor();
  3125.         }
  3126.         elseif(Vactivetime>150)
  3127.         {
  3128.             sample(SFXGunTurretExplode,-1);
  3129.             vector(_settoactorpos,tmpvector);
  3130.             callsub(sub_fxsmallexplosion);
  3131.  
  3132.             call(CheckForDynamicCollision,0);
  3133.             if(VCoreAICon==0)
  3134.             {
  3135.                 if(VDynamicCollision==0)
  3136.                 {
  3137.                     call(AIexecutecodewithinradius,Sub_ReactToBulletOrExplosion,1000);
  3138.                 }
  3139.                 else
  3140.                 {
  3141.                     call(AIexecutecodewithinradius,Sub_ReactToBulletOrExplosion,3000);
  3142.                 }
  3143.             }
  3144.  
  3145.             if(VDynamicCollision|=_ExplodeGlass)
  3146.             {
  3147.                 sample(SFXGlass,tmpvector);            //attached gets removed!
  3148.  
  3149.                 if(VDynamicCollision|=_ExplodeSmall)
  3150.                 {
  3151.                     spawnparticle(fx_impactsparks,0,emptyvector,emptyvector,-1);
  3152.                     if(VColMaterialProperties!=_MATKFO)
  3153.                     {
  3154.                         SpawnGooFX(fx_Bullethole,0,emptyvector,emptyvector,0);
  3155.                     }
  3156.                 }
  3157.             }
  3158.             elseif(VDynamicCollision|=_ExplodeSmall)
  3159.             {
  3160.                 spawnparticle(fx_smallexplosion,-1,tmpvector,emptyvector,-1);
  3161.                 sample(SFXSmallExplode,tmpvector);
  3162.             }
  3163.             elseif(VDynamicCollision|=_ExplodeBig)
  3164.             {
  3165.                 vector(_settocolpos,TmpVector2);
  3166.                 vector(_copyx,TmpVector2,TmpFloat2);
  3167.                 vector(_copyy,TmpVector2,TmpFloat3);
  3168.                 vector(_copyz,TmpVector2,TmpFloat4);
  3169.  
  3170.                 if(VDynamicCollision|=_ExplodeAmmo)
  3171.                 {
  3172.                     spawnactor(WeaponAmmo,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  3173.                 }
  3174.                 elseif(VDynamicCollision|=_ExplodeAmmoGrenades)
  3175.                 {
  3176.                     spawnactor(WeaponAmmoGrenade,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  3177.                 }
  3178.  
  3179.                 spawnactor(BulletExplosion,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  3180.             }
  3181.             else
  3182.             {
  3183.                 vector(_copy,TmpVector2,tmpvector);
  3184.                 vector(_copyx,TmpVector2,TmpFloat2);
  3185.                 vector(_copyy,TmpVector2,TmpFloat3);
  3186.                 vector(_copyz,TmpVector2,TmpFloat4);
  3187.  
  3188.                 spawnactor(BulletExplosion,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  3189.             }
  3190.  
  3191.             killactor();
  3192.         }
  3193.  
  3194.         //callsub(Sub_BulletHandler5);
  3195.         if(vactivetime>150)
  3196.         {
  3197.             killactor();
  3198.         }
  3199.         */
  3200. }
  3201.  
  3202.  
  3203. Actor(BulletAutoCannon)
  3204. {
  3205.         file(BulletAutoCannonHeader);
  3206.         startstate(BulletStateNormal);
  3207.         startaction(move200z);
  3208.  
  3209.         call(SetParticleSetID);
  3210.  
  3211.         if(vactivetime==0)
  3212.         {
  3213.             vector(_set,gactorpos,0,0,-50);
  3214.             vector(_set,gactorine,0,0,-200);
  3215.             spawnparticle(fx_tracer,0,gactorpos,gactorine,fx_tracersmall);
  3216.         }
  3217.  
  3218.         call(CheckBulletCollision,-1,-1,false);
  3219.         call(wUpdateBulletDamage);
  3220.         //call(CheckBulletCollision,-1,DamageMachineGun);
  3221.         if(VTrigger==_DIRactorBulletcol)
  3222.         {
  3223.             if(VTrigger==_DIRhuman)
  3224.             {
  3225.                 sample(SFXHitActor7,-1);
  3226.                 callsub(Sub_BloodFxSpurt);
  3227.                 callsub(Sub_BloodFx2);
  3228.                 callsub(Sub_BloodFxSpray);
  3229.             }
  3230.             else
  3231.             {
  3232.                 sample(SFXRicochetMetal,-1);
  3233.             }
  3234.  
  3235.             killactor();
  3236.         }
  3237.         elseif(VTrigger|=_DIRallcol)
  3238.         {
  3239.             if(VColMaterialProperties==_MATRipple)
  3240.             {
  3241.                 vector(_set,fxvector,0,0,0);
  3242.                 callsub(sub_shockwave,0,0);
  3243.                 sample(SFXRipple,-1);
  3244.             }
  3245.             elseif(VColMaterialProperties==_MATGlass)
  3246.             {
  3247.                 if(VColMaterialProperties!=_MATKFO)
  3248.                 {
  3249.                     SpawnGooFX(fx_Bulletholeglass,0,EmptyVector,emptyvector,0);
  3250.                 }
  3251.                 sample(SFXGlassPlink,-1);
  3252.             }
  3253.             else
  3254.             {
  3255.                 spawnparticle(fx_impactsparks,0,emptyvector,emptyvector,-1);
  3256.                 if(VColMaterialProperties!=_MATKFO)
  3257.                 {
  3258.                     SpawnGooFX(fx_Bullethole,0,emptyvector,emptyvector,0);
  3259.                 }
  3260.  
  3261.                 sample(SFXMachineGunPing3,-1);
  3262.             }
  3263.  
  3264.  
  3265.             vector(_settoactorpos,tmpvector);
  3266.             call(CheckForDynamicCollision,4);
  3267.             if(VCoreAICon==0)
  3268.             {
  3269.                 if(VDynamicCollision==0)
  3270.                 {
  3271.                     call(AIexecutecodewithinradius,Sub_ReactToBulletOrExplosion,1000);
  3272.                 }
  3273.                 else
  3274.                 {
  3275.                     call(AIexecutecodewithinradius,Sub_ReactToBulletOrExplosion,3000);
  3276.                 }
  3277.             }
  3278.  
  3279.             if(VDynamicCollision|=_ExplodeGlass)
  3280.             {
  3281.                 sample(SFXGlass,tmpvector);            //attached gets removed!
  3282.  
  3283.                 if(VDynamicCollision|=_ExplodeSmall)
  3284.                 {
  3285.                     spawnparticle(fx_smallexplosion,-1,tmpvector,emptyvector,-1);
  3286.                 }
  3287.             }
  3288.             elseif(VDynamicCollision|=_ExplodeSmall)
  3289.             {
  3290.                 spawnparticle(fx_smallexplosion,-1,tmpvector,emptyvector,-1);
  3291.                 sample(SFXSmallExplode,tmpvector);
  3292.             }
  3293.             elseif(VDynamicCollision|=_ExplodeBig)
  3294.             {
  3295.                 vector(_settocolobjpos,TmpVector2);
  3296.                 vector(_copyx,TmpVector2,TmpFloat2);
  3297.                 vector(_copyy,TmpVector2,TmpFloat3);
  3298.                 vector(_copyz,TmpVector2,TmpFloat4);
  3299.  
  3300.                 if(VDynamicCollision|=_ExplodeAmmo)
  3301.                 {
  3302.                     spawnactor(WeaponAmmo,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  3303.                 }
  3304.                 elseif(VDynamicCollision|=_ExplodeAmmoGrenades)
  3305.                 {
  3306.                     spawnactor(WeaponAmmoGrenade,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  3307.                 }
  3308.  
  3309.                 spawnactor(BulletExplosion,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  3310.  
  3311.                 sample(SFXBazookaExplode,tmpvector);
  3312.  
  3313.                 vector(_copy,tmpvector,TmpVector2);
  3314.                 callsub(sub_fxexplosion);
  3315.             }
  3316.             killactor();
  3317.         }
  3318.         elseif(Vactivetime>150)
  3319.         {
  3320.             killactor();
  3321.         }
  3322.  
  3323.         callsub(Sub_BulletHandler5);
  3324. }
  3325.  
  3326.  
  3327.  
  3328.  
  3329. Actor(BulletGunTurret)
  3330. {
  3331.         file(BulletGunTurretHeader);
  3332.         startstate(BulletStateNormal);
  3333.         startaction(move200z);
  3334.  
  3335.         call(SetParticleSetID);
  3336.  
  3337.         if(vactivetime==0)
  3338.         {
  3339.             vector(_set,gactorpos,0,0,-50);
  3340.             vector(_set,gactorine,0,0,-200);
  3341.             spawnparticle(fx_tracer,0,gactorpos,gactorine,fx_tracersmall);
  3342.         }
  3343.  
  3344.         call(CheckBulletCollision,-1,-1,false);
  3345.         call(wUpdateBulletDamage);
  3346.         //call(CheckBulletCollision,-1,DamageMachineGun);
  3347.         if(VTrigger==_DIRactorBulletcol)
  3348.         {
  3349.             if(VTrigger==_DIRhuman)
  3350.             {
  3351.                 sample(SFXHitActor7,-1);
  3352.                 callsub(Sub_BloodFxSpurt);
  3353.                 callsub(Sub_BloodFx2);
  3354.                 callsub(Sub_BloodFxSpray);
  3355.             }
  3356.             else
  3357.             {
  3358.                 sample(SFXRicochetMetal,-1);
  3359.             }
  3360.  
  3361.             killactor();
  3362.         }
  3363.         elseif(VTrigger|=_DIRallcol)
  3364.         {
  3365.             if(VColMaterialProperties==_MATRipple)
  3366.             {
  3367.                 vector(_set,fxvector,0,0,0);
  3368.                 callsub(sub_shockwave,0,0);
  3369.                 sample(SFXRipple,-1);
  3370.             }
  3371.             elseif(VColMaterialProperties==_MATGlass)
  3372.             {
  3373.                 if(VColMaterialProperties!=_MATKFO)
  3374.                 {
  3375.                     SpawnGooFX(fx_Bulletholeglass,0,EmptyVector,emptyvector,0);
  3376.                 }
  3377.                 sample(SFXGlassPlink,-1);
  3378.             }
  3379.             else
  3380.             {
  3381.                 spawnparticle(fx_impactsparks,0,emptyvector,emptyvector,-1);
  3382.                 if(VColMaterialProperties!=_MATKFO)
  3383.                 {
  3384.                     SpawnGooFX(fx_Bullethole,0,emptyvector,emptyvector,0);
  3385.                 }
  3386.  
  3387.                 sample(SFXMachineGunPing3,-1);
  3388.             }
  3389.  
  3390.  
  3391.             vector(_settoactorpos,tmpvector);
  3392.             call(CheckForDynamicCollision,4);
  3393.             if(VCoreAICon==0)
  3394.             {
  3395.                 if(VDynamicCollision==0)
  3396.                 {
  3397.                     call(AIexecutecodewithinradius,Sub_ReactToBulletOrExplosion,1000);
  3398.                 }
  3399.                 else
  3400.                 {
  3401.                     call(AIexecutecodewithinradius,Sub_ReactToBulletOrExplosion,3000);
  3402.                 }
  3403.             }
  3404.  
  3405.             if(VDynamicCollision|=_ExplodeGlass)
  3406.             {
  3407.                 sample(SFXGlass,tmpvector);            //attached gets removed!
  3408.  
  3409.                 if(VDynamicCollision|=_ExplodeSmall)
  3410.                 {
  3411.                     spawnparticle(fx_smallexplosion,-1,tmpvector,emptyvector,-1);
  3412.                 }
  3413.             }
  3414.             elseif(VDynamicCollision|=_ExplodeSmall)
  3415.             {
  3416.                 spawnparticle(fx_smallexplosion,-1,tmpvector,emptyvector,-1);
  3417.                 sample(SFXSmallExplode,tmpvector);
  3418.             }
  3419.             elseif(VDynamicCollision|=_ExplodeBig)
  3420.             {
  3421.                 vector(_settocolobjpos,TmpVector2);
  3422.                 vector(_copyx,TmpVector2,TmpFloat2);
  3423.                 vector(_copyy,TmpVector2,TmpFloat3);
  3424.                 vector(_copyz,TmpVector2,TmpFloat4);
  3425.  
  3426.                 if(VDynamicCollision|=_ExplodeAmmo)
  3427.                 {
  3428.                     spawnactor(WeaponAmmo,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  3429.                 }
  3430.                 elseif(VDynamicCollision|=_ExplodeAmmoGrenades)
  3431.                 {
  3432.                     spawnactor(WeaponAmmoGrenade,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  3433.                 }
  3434.  
  3435.                 spawnactor(BulletExplosion,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  3436.  
  3437.                 sample(SFXBazookaExplode,tmpvector);
  3438.  
  3439.                 vector(_copy,tmpvector,TmpVector2);
  3440.                 callsub(sub_fxexplosion);
  3441.             }
  3442.             killactor();
  3443.         }
  3444.         elseif(Vactivetime>150)
  3445.         {
  3446.             killactor();
  3447.         }
  3448.  
  3449.         callsub(Sub_BulletHandler5);
  3450. }
  3451.  
  3452.  
  3453. Actor(BulletDroid)
  3454. {
  3455.         file(BulletAutoCannonHeader);
  3456.         startstate(BulletStateNormal);
  3457.         startaction(move200);
  3458.  
  3459.         call(SetParticleSetID);
  3460.  
  3461.         if(vactivetime==0)
  3462.         {
  3463.     //        vector(_set,gactorpos,0,0,-50);
  3464.     //        vector(_set,gactorine,0,0,-200);
  3465.     //        spawnparticle(fx_tracer,0,gactorpos,gactorine,fx_tracersmall);
  3466.         }
  3467.  
  3468.         call(CheckBulletCollision,-1,-1,false);
  3469.         call(wUpdateBulletDamage);
  3470.         //call(CheckBulletCollision,-1,DamageMachineGun);
  3471.         if(VTrigger==_DIRactorBulletcol)
  3472.         {
  3473.             if(VTrigger==_DIRhuman)
  3474.             {
  3475.                 sample(SFXHitActor7,-1);
  3476.                 callsub(Sub_BloodFxSpurt);
  3477.                 callsub(Sub_BloodFx2);
  3478.                 callsub(Sub_BloodFxSpray);
  3479.             }
  3480.             else
  3481.             {
  3482.                 sample(SFXRicochetMetal,-1);
  3483.             }
  3484.  
  3485.             killactor();
  3486.         }
  3487.         elseif(VTrigger|=_DIRallcol)
  3488.         {
  3489.             if(VColMaterialProperties==_MATRipple)
  3490.             {
  3491.                 vector(_set,fxvector,0,0,0);
  3492.                 callsub(sub_shockwave,0,0);
  3493.                 sample(SFXRipple,-1);
  3494.             }
  3495.             elseif(VColMaterialProperties==_MATGlass)
  3496.             {
  3497.                 if(VColMaterialProperties!=_MATKFO)
  3498.                 {
  3499.                     SpawnGooFX(fx_Bulletholeglass,0,EmptyVector,emptyvector,0);
  3500.                 }
  3501.                 sample(SFXGlassPlink,-1);
  3502.             }
  3503.             else
  3504.             {
  3505.                 spawnparticle(fx_impactsparks,0,emptyvector,emptyvector,-1);
  3506.                 if(VColMaterialProperties!=_MATKFO)
  3507.                 {
  3508.                     SpawnGooFX(fx_Bullethole,0,emptyvector,emptyvector,0);
  3509.                 }
  3510.  
  3511.                 sample(SFXMachineGunPing3,-1);
  3512.             }
  3513.  
  3514.  
  3515.             vector(_settoactorpos,tmpvector);
  3516.             call(CheckForDynamicCollision,4);
  3517.             if(VCoreAICon==0)
  3518.             {
  3519.                 if(VDynamicCollision==0)
  3520.                 {
  3521.                     call(AIexecutecodewithinradius,Sub_ReactToBulletOrExplosion,1000);
  3522.                 }
  3523.                 else
  3524.                 {
  3525.                     call(AIexecutecodewithinradius,Sub_ReactToBulletOrExplosion,3000);
  3526.                 }
  3527.             }
  3528.  
  3529.             if(VDynamicCollision|=_ExplodeGlass)
  3530.             {
  3531.                 sample(SFXGlass,tmpvector);            //attached gets removed!
  3532.  
  3533.                 if(VDynamicCollision|=_ExplodeSmall)
  3534.                 {
  3535.                     spawnparticle(fx_smallexplosion,-1,tmpvector,emptyvector,-1);
  3536.                 }
  3537.             }
  3538.             elseif(VDynamicCollision|=_ExplodeSmall)
  3539.             {
  3540.                 spawnparticle(fx_smallexplosion,-1,tmpvector,emptyvector,-1);
  3541.                 sample(SFXSmallExplode,tmpvector);
  3542.             }
  3543.             elseif(VDynamicCollision|=_ExplodeBig)
  3544.             {
  3545.                 vector(_settocolobjpos,TmpVector2);
  3546.                 vector(_copyx,TmpVector2,TmpFloat2);
  3547.                 vector(_copyy,TmpVector2,TmpFloat3);
  3548.                 vector(_copyz,TmpVector2,TmpFloat4);
  3549.  
  3550.                 if(VDynamicCollision|=_ExplodeAmmo)
  3551.                 {
  3552.                     spawnactor(WeaponAmmo,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  3553.                 }
  3554.                 elseif(VDynamicCollision|=_ExplodeAmmoGrenades)
  3555.                 {
  3556.                     spawnactor(WeaponAmmoGrenade,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  3557.                 }
  3558.  
  3559.                 spawnactor(BulletExplosion,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  3560.  
  3561.                 sample(SFXBazookaExplode,tmpvector);
  3562.  
  3563.                 vector(_copy,tmpvector,TmpVector2);
  3564.                 callsub(sub_fxexplosion);
  3565.             }
  3566.             killactor();
  3567.         }
  3568.         elseif(Vactivetime>150)
  3569.         {
  3570.             killactor();
  3571.         }
  3572.  
  3573.         callsub(Sub_BulletHandler5);
  3574. }
  3575.  
  3576.  
  3577. //---------------------------------------------------------------------------- other bullets
  3578.  
  3579.  
  3580. Actor(BulletBattery)
  3581. {
  3582.         file(BulletBatteryHeader);
  3583.         startstate(BulletStateNormal);
  3584.         startaction(nomove);
  3585.  
  3586.         call(SetParticleSetID);
  3587.  
  3588.         float(_declare,grenadelastcoll,0);
  3589.         float(_declare,ActiveTimeStart,-1);
  3590.  
  3591.         float(_declare,radsamp,0);
  3592.         float(_declare,radtime,1000000000);
  3593.         float(_declare,radstate,0);                    //0:normal battery, 1:radioactive battery
  3594.  
  3595.         if(VactorFlag==_AFLAGinitialize)            //re-initialize after a loadgame
  3596.         {
  3597.             if(radsamp==1)
  3598.             {
  3599.                 sample(SFXRadioactive,-1);
  3600.             }
  3601.         }
  3602.  
  3603.  
  3604.         direction(_clr,_DIRTempFlag);
  3605.         call(CheckTriggers);
  3606.  
  3607.         if(VSetActive=="s1r18")
  3608.         {
  3609.             CurEnvTriggerSet("s1r18","batcol");
  3610.             if(VTrigger==_DIREnvTrigger)
  3611.             {
  3612.                 if(radsamp==1)
  3613.                 {
  3614.                     samplestop(SFXRadioactive);
  3615.                 }
  3616.                 KillActor();
  3617.             }
  3618.             CurEnvTriggerSet("s1r18","battin");
  3619.             if(VTrigger!=_DIREnvTrigger)
  3620.             {
  3621.                 if(HelpVar&=Help23)
  3622.                 {
  3623.                     float(_set,CallBot,1);
  3624.                     float(_clr,HelpVar,Help23);
  3625.                 }
  3626.             }
  3627.             else
  3628.             {
  3629.                 if(HelpVar&!=Help23)
  3630.                 {
  3631.                     float(_set,CallBot,0);
  3632.                     float(_or,HelpVar,Help23);
  3633.                 }
  3634.             }
  3635.         }
  3636.         if(VSetActive=="s1r20")
  3637.         {
  3638.             if(NeedBattery==1)
  3639.             {
  3640.                 CurEnvTriggerSet("s1r20","checkif");
  3641.                 if(VTrigger==_DIREnvTrigger)
  3642.                 {
  3643.                     float(_set,RadActionTimer,1);
  3644.                     float(_set,NeedBattery,2);
  3645.                 }
  3646.             }
  3647.             if(NeedBattery==3)
  3648.             {
  3649.                 CurEnvTriggerSet("s1r20","checkif");
  3650.                 if(VTrigger==_DIREnvTrigger)
  3651.                 {    
  3652.                     if(radsamp==1)
  3653.                     {
  3654.                         samplestop(SFXRadioactive);
  3655.                     }
  3656.  
  3657.                     KillActor();
  3658.                     float(_set,RadActionTimer,1);
  3659.                     float(_set,NeedBattery,4);
  3660.                 }
  3661.             }
  3662.         }
  3663.         if(VCurSet=="s1r13")
  3664.         {
  3665.             CurEnvTrigger("killbat");
  3666.             if(VTrigger==_DIREnvTrigger)
  3667.             {
  3668.                 if(radsamp==1)
  3669.                 {
  3670.                     samplestop(SFXRadioactive);
  3671.                 }
  3672.  
  3673.                 KillActor();
  3674.             }
  3675.         }
  3676.         if(VCurSet=="s1r14")
  3677.         {
  3678.             CurEnvTrigger("killbat");
  3679.             if(VTrigger==_DIREnvTrigger)
  3680.             {
  3681.                 if(radsamp==1)
  3682.                 {
  3683.                     samplestop(SFXRadioactive);
  3684.                 }
  3685.  
  3686.                 KillActor();
  3687.             }
  3688.         }
  3689.  
  3690.         //off after 1m 30 seconds after pickup
  3691.         if(ActiveTimeStart==-1)
  3692.         {
  3693.             //dropped initially
  3694.             if(vstate==StateAttached&&vactivetime<radtime&&VRootAIClass==_AIClassScientist&&VRootRank==_RankScum)    //nuketek only
  3695.             {
  3696.                 float(_set,RadiationGlow,1);
  3697.                 float(_set,radstate,1);
  3698.                 //picked up
  3699.                 spawnparticle(fx_flare,0,emptyvector,emptyvector,fx_activebatteryflare);
  3700.                 vector(_set,tmpvector,192,32,32);
  3701.                 SpawnLight(Lomnilight2,0,EmptyVector,tmpvector,EmptyVector,600);
  3702.  
  3703.                 call(SetFlagsOnActiveActors,900,0,_DUMMY,0,_AFLAGradiated);
  3704.                 if(radsamp==0)
  3705.                 {
  3706.                     sample(SFXBatteryChargedLethal,-1);
  3707.                     sample(SFXRadioactive,-1);
  3708.                     float(_set,radsamp,1);
  3709.                     float(_seti,radtime,VActiveTime);
  3710.                     float(_add,radtime,2700);
  3711.                 }
  3712.             }
  3713.             else
  3714.             {
  3715.                 if(radsamp==1)
  3716.                 {
  3717.                     if(vactivetime<radtime)
  3718.                     {
  3719.                         //still radioactive, but we are dropping it
  3720.                     }
  3721.                     else
  3722.                     {
  3723.                         //radiation has worn off , but we are still holding it  ..get rid of it!!
  3724.                         samplestop(SFXRadioactive);
  3725.                         float(_set,radsamp,0);
  3726.                         float(_set,radstate,0);
  3727.                         float(_set,RadioactiveGlow,0);
  3728.  
  3729.                         call(ChangeInventory,0,-1);        //SAXS: Msika, don't do this in the bulletcode
  3730.                                                         //TONY: He didn't, I did, and it has to be here!
  3731.  
  3732.                         sample(SFXShatter,-1);
  3733.                         vector(_settoactorpos,tmpvector);
  3734.                         callsub(sub_fxsmallexplosion);
  3735.                         killactor();
  3736.                     }
  3737.                 }
  3738.  
  3739.                 if(radstate==0)
  3740.                 {
  3741.                     spawnparticle(fx_flare,0,emptyvector,emptyvector,fx_batteryflare);
  3742.                 }
  3743.             }
  3744.  
  3745.             if(VState==BulletStateExplode)
  3746.             {
  3747.                 //set dropped after being picked up
  3748.                 float(_seti,ActiveTimeStart,VActiveTime);
  3749.             }
  3750.         }
  3751.         else
  3752.         {
  3753.             //dropped after being picked up
  3754.             float(_declare,ActiveTimeDelta,0);
  3755.             float(_seti,ActiveTimeDelta,VActiveTime);
  3756.             float(_sub,ActiveTimeDelta,ActiveTimeStart);
  3757.  
  3758.             if(radstate==1)
  3759.             {
  3760.                 if(vactivetime<radtime)
  3761.                 {
  3762.                     call(SetFlagsOnActiveActors,900,0,_DUMMY,0,_AFLAGradiated);
  3763.  
  3764.                     if(radsamp==0)
  3765.                     {
  3766.                         sample(SFXRadioactive,-1);
  3767.                         float(_set,radsamp,1);
  3768.                     }
  3769.                 }
  3770.                 else
  3771.                 {
  3772.                     if(radsamp==1)
  3773.                     {
  3774.                         samplestop(SFXRadioactive);
  3775.                     }
  3776.                 }
  3777.  
  3778.                 spawnparticle(fx_flare,0,emptyvector,emptyvector,fx_activebatteryflare);
  3779.                 vector(_set,tmpvector,192,32,32);
  3780.                 SpawnLight(Lomnilight2,0,EmptyVector,tmpvector,EmptyVector,600);
  3781.             }
  3782.             else
  3783.             {
  3784.                 //radstate 0
  3785.                 spawnparticle(fx_flare,0,emptyvector,emptyvector,fx_batteryflare);
  3786.                 vector(_set,tmpvector,128,128,192);
  3787.                 SpawnLight(Lomnilight2,0,EmptyVector,tmpvector,EmptyVector,300);
  3788.             }
  3789.  
  3790.             if(radstate==1)
  3791.             {
  3792.                 if(VTrigger|=_DIRallcol)
  3793.                 {
  3794.                     if(grenadelastcoll!=1)
  3795.                     {
  3796.                         sample(SFXGrenadeBounce,-1);
  3797.                     }
  3798.                     float(_set,grenadelastcoll,1);
  3799.                 }
  3800.                 else
  3801.                 {
  3802.                     float(_set,grenadelastcoll,0);
  3803.                 }
  3804.  
  3805.                 if(vactivetime>radtime)
  3806.                 {
  3807.                     if(radsamp==1)
  3808.                     {
  3809.                         samplestop(SFXRadioactive);
  3810.                     }
  3811.  
  3812.                     sample(SFXGrenadeExplode,-1);
  3813.  
  3814.                     vector(_settoactorpos,tmpvector);
  3815.                     callsub(sub_fxexplosion);
  3816.  
  3817.                     call(CheckForDynamicCollision,0);
  3818.                     if(VCoreAICon==0)
  3819.                     {
  3820.                         if(VDynamicCollision==0)
  3821.                         {
  3822.                             call(AIexecutecodewithinradius,Sub_ReactToBulletOrExplosion,1000);
  3823.                         }
  3824.                         else
  3825.                         {
  3826.                             call(AIexecutecodewithinradius,Sub_ReactToBulletOrExplosion,3000);
  3827.                         }
  3828.                     }
  3829.  
  3830.                     if(VDynamicCollision|=_ExplodeGlass)
  3831.                     {
  3832.                         sample(SFXGlass,tmpvector);            //attached gets removed!
  3833.  
  3834.                         if(VDynamicCollision|=_ExplodeSmall)
  3835.                         {
  3836.                             spawnparticle(fx_smallexplosion,-1,tmpvector,emptyvector,-1);
  3837.                         }
  3838.                     }
  3839.                     elseif(VDynamicCollision|=_ExplodeSmall)
  3840.                     {
  3841.                         spawnparticle(fx_smallexplosion,-1,tmpvector,emptyvector,-1);
  3842.                         sample(SFXSmallExplode,tmpvector);
  3843.                     }
  3844.                     elseif(VDynamicCollision|=_ExplodeBig)
  3845.                     {
  3846.                         vector(_settocolobjpos,TmpVector2);
  3847.                         vector(_copyx,TmpVector2,TmpFloat2);
  3848.                         vector(_copyy,TmpVector2,TmpFloat3);
  3849.                         vector(_copyz,TmpVector2,TmpFloat4);
  3850.  
  3851.                         if(VDynamicCollision|=_ExplodeAmmo)
  3852.                         {
  3853.                             spawnactor(WeaponAmmo,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  3854.                         }
  3855.                         elseif(VDynamicCollision|=_ExplodeAmmoGrenades)
  3856.                         {
  3857.                             spawnactor(WeaponAmmoGrenade,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  3858.                         }
  3859.  
  3860.                         spawnactor(BulletExplosion,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  3861.                     }
  3862.                     else
  3863.                     {
  3864.                         vector(_copy,TmpVector2,tmpvector);
  3865.                         vector(_copyx,TmpVector2,TmpFloat2);
  3866.                         vector(_copyy,TmpVector2,TmpFloat3);
  3867.                         vector(_copyz,TmpVector2,TmpFloat4);
  3868.  
  3869.                         spawnactor(BulletExplosion,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  3870.                     }
  3871.  
  3872.                     float(_set,grenadelastcoll,0);
  3873.  
  3874.                     killactor();
  3875.  
  3876.                     //sample(SFXShatter,-1);
  3877.                     //vector(_settoactorpos,tmpvector);
  3878.                     //callsub(sub_fxsmallexplosion);
  3879.                     //killactor();
  3880.                 }
  3881.             }
  3882.             else
  3883.             {
  3884.                 if(ActiveTimeDelta>90)
  3885.                 {
  3886.                     sample(SFXGrenadeExplode,-1);
  3887.  
  3888.                     vector(_settoactorpos,tmpvector);
  3889.                     callsub(sub_fxexplosion);
  3890.  
  3891.                     call(CheckForDynamicCollision,0);
  3892.                     if(VCoreAICon==0)
  3893.                     {
  3894.                         if(VDynamicCollision==0)
  3895.                         {
  3896.                             call(AIexecutecodewithinradius,Sub_ReactToBulletOrExplosion,1000);
  3897.                         }
  3898.                         else
  3899.                         {
  3900.                             call(AIexecutecodewithinradius,Sub_ReactToBulletOrExplosion,3000);
  3901.                         }
  3902.                     }
  3903.  
  3904.                     if(VDynamicCollision|=_ExplodeGlass)
  3905.                     {
  3906.                         sample(SFXGlass,tmpvector);            //attached gets removed!
  3907.  
  3908.                         if(VDynamicCollision|=_ExplodeSmall)
  3909.                         {
  3910.                             spawnparticle(fx_smallexplosion,-1,tmpvector,emptyvector,-1);
  3911.                         }
  3912.                     }
  3913.                     elseif(VDynamicCollision|=_ExplodeSmall)
  3914.                     {
  3915.                         spawnparticle(fx_smallexplosion,-1,tmpvector,emptyvector,-1);
  3916.                         sample(SFXSmallExplode,tmpvector);
  3917.                     }
  3918.                     elseif(VDynamicCollision|=_ExplodeBig)
  3919.                     {
  3920.                         vector(_settocolobjpos,TmpVector2);
  3921.                         vector(_copyx,TmpVector2,TmpFloat2);
  3922.                         vector(_copyy,TmpVector2,TmpFloat3);
  3923.                         vector(_copyz,TmpVector2,TmpFloat4);
  3924.  
  3925.                         if(VDynamicCollision|=_ExplodeAmmo)
  3926.                         {
  3927.                             spawnactor(WeaponAmmo,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  3928.                         }
  3929.                         elseif(VDynamicCollision|=_ExplodeAmmoGrenades)
  3930.                         {
  3931.                             spawnactor(WeaponAmmoGrenade,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  3932.                         }
  3933.  
  3934.                         spawnactor(BulletExplosion,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  3935.                     }
  3936.                     else
  3937.                     {
  3938.                         vector(_copy,TmpVector2,tmpvector);
  3939.                         vector(_copyx,TmpVector2,TmpFloat2);
  3940.                         vector(_copyy,TmpVector2,TmpFloat3);
  3941.                         vector(_copyz,TmpVector2,TmpFloat4);
  3942.  
  3943.                         spawnactor(BulletExplosion,TmpFloat2,TmpFloat3,TmpFloat4,false,true);
  3944.                     }
  3945.  
  3946.                     float(_set,grenadelastcoll,0);
  3947.  
  3948.                     if(radsamp==1)
  3949.                     {
  3950.                         samplestop(SFXRadioactive);
  3951.                     }
  3952.  
  3953.                     killactor();
  3954.                 }
  3955.                 else
  3956.                 {
  3957.                     call(CheckBulletCollision,-1,DamageGrenade,false);
  3958.  
  3959.                     if(VTrigger|=_DIRallcol)
  3960.                     {
  3961.                         if(VColMaterialProperties==_MATRipple)
  3962.                         {
  3963.                             vector(_set,fxvector,0,0,0);
  3964.                             callsub(sub_shockwave,0,0);
  3965.                             sample(SFXRipple,-1);
  3966.                         }
  3967.                         elseif(VColMaterialProperties==_MATGlass)
  3968.                         {
  3969.                             if(VColMaterialProperties!=_MATKFO)
  3970.                             {
  3971.                                 SpawnGooFX(fx_Bulletholeglass,0,EmptyVector,emptyvector,0);
  3972.                             }
  3973.                             sample(SFXGlassPlink,-1);
  3974.                         }
  3975.                         else
  3976.                         {
  3977.                             if(grenadelastcoll!=1)
  3978.                             {
  3979.                                 sample(SFXGrenadeBounce,-1);
  3980.                             }
  3981.                         }
  3982.                         float(_set,grenadelastcoll,1);
  3983.                         SpawnAction(MoveThrownGrenadeWithSound);
  3984.                     }
  3985.                     else
  3986.                     {
  3987.                         if(grenadelastcoll!=0)
  3988.                         {
  3989.                             if(ActiveTimeDelta>150)            //5 seconds
  3990.                             {
  3991.                                 if(radsamp==1)
  3992.                                 {
  3993.                                     samplestop(SFXRadioactive);
  3994.                                 }
  3995.  
  3996.                                 killactor();
  3997.                             }
  3998.                         }
  3999.  
  4000.                         float(_set,grenadelastcoll,0);
  4001.                     }
  4002.                 }
  4003.             }
  4004.         }
  4005. }
  4006.  
  4007.  
  4008.  
  4009. //---------------------------------------------------------------------------- Satan bullets FX
  4010.  
  4011.  
  4012. Actor(BulletAntiSatan)
  4013. {
  4014.         file(BulletHolyHeader);
  4015.         startstate(BulletStateNormal);
  4016.         startaction(move200zandUp);
  4017.  
  4018.         call(SetParticleSetID);
  4019.  
  4020. //------ temp fx
  4021.         spawnparticle(fx_smallexplosion,0,emptyvector,emptyvector,-1);
  4022.  
  4023.         if(VTrigger==_DIRactorBulletcol)
  4024.         {
  4025.             killactor();
  4026.         }
  4027.         elseif(VTrigger|=_DIRallcol)
  4028.         {
  4029.             killactor();
  4030.         }
  4031.  
  4032.         if(vactivetime>150)
  4033.         {
  4034.             killactor();
  4035.         }
  4036. }
  4037.  
  4038.  
  4039.  
  4040.  
  4041.  
  4042. Actor(BulletRingOfFire)
  4043. {
  4044.         file(BulletHolyHeader);
  4045.         startstate(BulletStateNormal);
  4046.         startaction(nomove);
  4047.  
  4048.         call(SetParticleSetID);
  4049.  
  4050.         float(_declare,Radius1,100);
  4051.         float(_declare,Radius2,0);
  4052.         float(_declare,ringsin,0);
  4053.         float(_declare,ringcos,0);
  4054.  
  4055.         call(SetFlagsOnActiveActors,Radius1,100,_DUMMY,0,_AFLAGkillandremove);
  4056.         call(ClrFlagsOnActiveActors,Radius2,100,_DUMMY,0,_AFLAGkillandremove);
  4057.  
  4058.         float(_add,Radius1,10);
  4059.         float(_add,Radius2,10);
  4060.  
  4061. //------ temp hubble bubble fx
  4062.         if(vactivetime<40)
  4063.         {
  4064.             float(_rnd2,tmpfloat,4096);
  4065.             float(_sin,ringsin,tmpfloat);
  4066.             float(_cos,ringcos,tmpfloat);
  4067.             float(_mul,ringsin,Radius1);
  4068.             float(_mul,ringcos,Radius1);
  4069.  
  4070.             vector(_set,gactorpos,0,0,0);
  4071.             vector(_setx,gactorpos,ringsin);
  4072.             vector(_setz,gactorpos,ringcos);
  4073.             spawnparticle(fx_smallexplosion,0,gactorpos,emptyvector,-1);
  4074.  
  4075.             float(_rnd2,tmpfloat,4096);
  4076.             float(_sin,ringsin,tmpfloat);
  4077.             float(_cos,ringcos,tmpfloat);
  4078.             float(_mul,ringsin,Radius2);
  4079.             float(_mul,ringcos,Radius2);
  4080.  
  4081.             vector(_setx,gactorpos,ringsin);
  4082.             vector(_setz,gactorpos,ringcos);
  4083.             spawnparticle(fx_smallexplosion,0,gactorpos,emptyvector,-1);
  4084.         }
  4085.  
  4086. //------ temp ring fx
  4087.         vector(_settoactorpos,gactorine);
  4088.         vector(_set,fxvector,0,-100,0);
  4089.         vector(_add,gactorine,fxvector);
  4090.  
  4091.         float(_rnd2,tmpfloat,4096);
  4092.         float(_sin,ringsin,tmpfloat);
  4093.         float(_cos,ringcos,tmpfloat);
  4094.         float(_mul,ringsin,Radius1);
  4095.         float(_mul,ringcos,Radius1);
  4096.  
  4097.         vector(_set,gactorpos,0,0,0);
  4098.         vector(_setx,gactorpos,ringsin);
  4099.         vector(_setz,gactorpos,ringcos)
  4100.         vector(_add,gactorpos,gactorine);
  4101.         spawnparticle(fx_smallexplosion,-1,gactorpos,emptyvector,-1);
  4102.  
  4103.         float(_rnd2,tmpfloat,4096);
  4104.         float(_sin,ringsin,tmpfloat);
  4105.         float(_cos,ringcos,tmpfloat);
  4106.         float(_mul,ringsin,Radius2);
  4107.         float(_mul,ringcos,Radius2);
  4108.  
  4109.         vector(_set,gactorpos,0,0,0);
  4110.         vector(_setx,gactorpos,ringsin);
  4111.         vector(_setz,gactorpos,ringcos);
  4112.         vector(_add,gactorpos,gactorine);
  4113.         spawnparticle(fx_smallexplosion,-1,gactorpos,emptyvector,-1);
  4114.  
  4115.         float(_rnd2,tmpfloat,4096);
  4116.         float(_sin,ringsin,tmpfloat);
  4117.         float(_cos,ringcos,tmpfloat);
  4118.         float(_mul,ringsin,Radius1);
  4119.         float(_mul,ringcos,Radius1);
  4120.  
  4121.         vector(_set,gactorpos,0,0,0);
  4122.         vector(_setx,gactorpos,ringsin);
  4123.         vector(_setz,gactorpos,ringcos)
  4124.         vector(_add,gactorpos,gactorine);
  4125.         spawnparticle(fx_smallexplosion,-1,gactorpos,emptyvector,-1);
  4126.  
  4127.         float(_rnd2,tmpfloat,4096);
  4128.         float(_sin,ringsin,tmpfloat);
  4129.         float(_cos,ringcos,tmpfloat);
  4130.         float(_mul,ringsin,Radius2);
  4131.         float(_mul,ringcos,Radius2);
  4132.  
  4133.         vector(_set,gactorpos,0,0,0);
  4134.         vector(_setx,gactorpos,ringsin);
  4135.         vector(_setz,gactorpos,ringcos);
  4136.         vector(_add,gactorpos,gactorine);
  4137.         spawnparticle(fx_smallexplosion,-1,gactorpos,emptyvector,-1);
  4138.  
  4139.         if(VActiveTime>200)
  4140.         {
  4141.             KillActor();
  4142.         }
  4143. }
  4144.