//===========================================================================
//
// Name:          fw_weap.c
// Function:
// Programmer:    Mr Elusive (MrElusive@demigod.demon.nl)
// Last update:   1998-12-16 (by Squatt)
// Tab Size:      3 (real tabs)
//===========================================================================
weight "Blaster"
{
   return blaster;
} //end weight
weight "Shotgun"
{
   switch(INVENTORY_SHOTGUN)
   {
      case 1: return 0;
      default:
      {
         switch(INVENTORY_SHELLS)
         {
            case 1: return 0;
            default:
            {
               switch(USING_QUAD)
               {
                  case 1: return shotgun; //not using quad
                  default:
                  {
                     return quad_shotgun; //using quad
                  } //end default
               } //end switch
            } //end default
         } //end switch
      } //end default
   } //end switch
} //end weight
weight "Super Shotgun"
{
   switch(INVENTORY_SUPERSHOTGUN)
   {
      case 1: return 0;
      default:
      {
         switch(INVENTORY_SHELLS)
         {
            case 2: return 0;
            default:
            {
               switch(USING_QUAD)
               {
                  case 1: return sshotgun; //not using quad
                  default:
                  {
                     return quad_sshotgun; //using quad
                  } //end default
               } //end switch
            } //end default
         } //end switch
      } //end default
   } //end switch
} //end weight
weight "Machinegun"
{
   switch(INVENTORY_MACHINEGUN)
   {
      case 1: return 0;
      default:
      {
         switch(INVENTORY_BULLETS)
         {
            case 1: return 0;
            default:
            {
               switch(USING_QUAD)
               {
                  case 1: return machinegun;
                  default:
                  {
                     return quad_machinegun;
                  } //end default
               } //end switch
            } //end default
         } //end switch
      } //end default
   } //end switch
} //end weight
weight "Chaingun"
{
   switch(INVENTORY_CHAINGUN)
   {
      case 1: return 0;
      default:
      {
         switch(INVENTORY_BULLETS)
         {
            case 1: return 0;
            default:
            {
               switch(USING_QUAD)
               {
                  case 1: return chaingun;
                  default:
                  {
                     return quad_chaingun;
                  } //end default
               } //end switch
            } //end default
         } //end switch
      } //end default
   } //end switch
} //end weight
weight "Grenades"
{
   switch(INVENTORY_GRENADES)
   {
      case 1: return 0;
      default:
      {
         switch(ENEMY_HORIZONTAL_DIST)
         {
            case 65: //enemy is self damage close
            {
               return self_dmg_grenades;
            } //end case
            case 120: //enemy is too far????
            {
               return 0;//enemy is too far away
            } //end case
            default:
            {
               return grenades;
            }
         }
      } //end default
   } //end switch
} //end weight
weight "Grenade Launcher"
{
   switch(INVENTORY_GRENADELAUNCHER)
   {
      case 1: return 0;
      default:
      {
         switch(INVENTORY_GRENADES)
         {
            case 1: return 0;
            default:
            {
               switch(USING_QUAD)
               {
                  case 1:
                  {
                     switch(ENEMY_HORIZONTAL_DIST)
                     {
                        case 65: //enemy is self damage close
                        {
                           return self_dmg_grenadelauncher;
                        } //end case
                        case 300: //enemy is too far????
                        {
                           return 0;//enemy is too far away
                        } //end case
                        default:
                        {
                           return grenadelauncher;
                        } //end default
                     } //end switch
                  } //end case
                  default:
                  {
                     return quad_grenadelauncher;
                  } //end default
               } //end switch
            } //end default
         } //end switch
      } //end default
   } //end switch
} //end weight
weight "Rocket Launcher"
{
   switch(INVENTORY_ROCKETLAUNCHER)
   {
      case 1: return 0;
      default:
      {
         switch(INVENTORY_ROCKETS)
         {
            case 1: return 0;
            default:
            {
               switch(USING_INVULNERABILITY)
               {
                  case 1: //not using invulnerability
                  {
                     switch(USING_QUAD)
                     {
                        case 1: //not using quad
                        {
                           switch(ENEMY_HORIZONTAL_DIST)
                           {
                              case 65: //enemy is self damage close
                              {
                                 return self_dmg_rocketlauncher;
                              } //end case
                              default: //enemy is far enough so bot won't hurt itself
                              {
                                 return rocketlauncher;
                              } //end default
                           } //end switch
                        } //end case
                        default: //using the quad
                        {
                           switch(ENEMY_HORIZONTAL_DIST)
                           {
                              case 120: //enemy is self damage close
                              {
                                 return self_dmg_rocketlauncher;
                              } //end case
                              default:
                              {
                                 return quad_rocketlauncher;
                              } //end default
                           } //end switch
                        } //end default
                     } //end switch
                  } //end case
                  default: //using the invulnerability
                  {
                     return invul_rocketlauncher;
                  } //end default
               } //end switch
            } //end default
         } //end switch
      } //end default
   } //end switch
} //end weight
weight "HyperBlaster"
{
   switch(INVENTORY_HYPERBLASTER)
   {
      case 1: return 0;
      default:
      {
         switch(INVENTORY_CELLS)
         {
            case 1: return 0;
            default:
            {
               switch(USING_POWERSHIELD)
               {
                  case 1: //not using powershield
                  {
                     switch(USING_QUAD)
                     {
                        case 1:return hyperblaster; //not using quad and no powershield
                        default:
                        {
                           return quad_hyperblaster; //using quad and no powershield
                        } //end default
                     } //end switch
                  } //end case
                  default: //using the powershield
                  {
                     return pwrshield_hyperblaster;
                  } //end default
               } //end switch
            } //end default
         } //end switch
      } //end default
   } //end switch
} //end weight
weight "Railgun"
{
   switch(INVENTORY_RAILGUN)
   {
      case 1: return 0;
      default:
      {
         switch(INVENTORY_SLUGS)
         {
            case 1: return 0;
            default:
            {
               switch(USING_QUAD)
               {
                  case 1: return railgun; //not using quad
                  default:
                  {
                     return quad_railgun; //using quad
                  } //end default
               } //end switch
            } //end default
         } //end switch
      } //end default
   } //end switch
} //end weight
#define MZ(value) (value) < 0 ? 0 : (value)
//MZ is for make-zero; no negative values are allowed  :0
#define BFG10K_WEIGHT(scale, add) \
   switch(NUM_VISIBLE_TEAMMATES)\
   {\
      case 1:\
      {\
         switch(USING_POWERSHIELD)\
         {\
            case 1: return $evalfloat(MZ(BFG10K * scale + add));\
            default: return $evalfloat(MZ(pwrshield_BFG10K * scale + add));\ //has the powerscreen so do not use up the cells
         }\ //end switch
      }\ //end case
      case 2:\
      {\
         switch(NUM_VISIBLE_ENEMIES)\
         {\
            case 2:\
            {\
               switch(USING_POWERSHIELD)\
               {\
                  case 1: return $evalfloat(MZ(BFG10K * scale + add));\
                  default: return $evalfloat(MZ(pwrshield_BFG10K * scale + add));\ //has the powerscreen so do not use up the cells
               }\ //end switch
            }\ //end case
            default:\
            {\
               switch(USING_POWERSHIELD)\
               {\
                  case 1: return $evalfloat(MZ(BFG10K * scale + add));\
                  default: return $evalfloat(MZ(pwrshield_BFG10K * scale + add));\ //has the powerscreen so do not use up the cells
               }\ //end switch
            }\ //end case
         }\ //end switch
      }\ //end case
      default:\
      {\
         switch(USING_POWERSHIELD)\
         {\
            case 1: return $evalfloat(MZ(BFG10K * scale + add));\
            default: return $evalfloat(MZ(pwrshield_BFG10K * scale + add));\ //has the powerscreen so do not use up the cells
         }\ //end switch
      }\ //end default
   } //end switch
weight "BFG10K"
{
   switch(INVENTORY_BFG10K)
   {
      case 1: return 0;
      default:
      {
         switch(INVENTORY_CELLS)
         {
            case 50: return 0;
            default:
            {
               switch(USING_INVULNERABILITY)
               {
                  case 1: //not using invulnerability
                  {
                     switch(USING_QUAD)
                     {
                        case 1: //not using quad
                        {
                           switch(ENEMY_HORIZONTAL_DIST)
                           {
                              case 65: //enemy is so close the bot will hurt self: value will be
                              {
                                 BFG10K_WEIGHT(1, add_too_close)
                              } //end case
                              default: //enemy is far enough so bot won't hurt itself, value will be
                              {
                                 BFG10K_WEIGHT(1, 0)
                              } //end default
                           } //end switch
                        } //end case
                        default: //using the quad
                        {
                           switch(ENEMY_HORIZONTAL_DIST)
                           {
                              case 120: //enemy is self damage close
                              {
                                 BFG10K_WEIGHT(1, add_too_close)
                              } //end case
                              default:
                              {
                                 BFG10K_WEIGHT(1, add_quad)
                              } //end default
                           } //end switch
                        } //end default
                     } //end switch
                  } //end case
                  default: //using the invulnerability
                  {
                     BFG10K_WEIGHT(1, add_invuln)
                  } //end default
               } //end switch
            } //end default
         } //end switch
      } //end default
   } //end switch
} //end weight
#ifdef XATRIX
//shoots bouncing red cells
weight "Ionripper"
{
   switch(INVENTORY_IONRIPPER)
   {
      case 1: return 0;
      default:
      {
         switch(INVENTORY_CELLS)
         {
            case 1: return 0;
            default:
            {
               switch(USING_POWERSHIELD)
               {
                  case 1: //not using powershield
                  {
                     switch(USING_QUAD)
                     {
                        case 1:return hyperblaster; //not using quad and no powershield
                        default:
                        {
                           return quad_hyperblaster; //using quad and no powershield
                        } //end default
                     } //end switch
                  } //end case
                  default: //using the powershield
                  {
                     return pwrshield_hyperblaster;
                  } //end default
               } //end switch
            } //end default
         } //end switch
      } //end default
   } //end switch
} //end weight
//sort of double rocket launcher
weight "Phalanx"
{
   switch(INVENTORY_PHALANX)
   {
      case 1: return 0;
      default:
      {
         switch(INVENTORY_MAGSLUGS)
         {
            case 1: return 0;
            default:
            {
               switch(USING_INVULNERABILITY)
               {
                  case 1: //not using invulnerability
                  {
                     switch(USING_QUAD)
                     {
                        case 1: //not using quad
                        {
                           switch(ENEMY_HORIZONTAL_DIST)
                           {
                              case 65: //enemy is self damage close
                              {
                                 return self_dmg_rocketlauncher;
                              } //end case
                              default: //enemy is far enough so bot won't hurt itself
                              {
                                 return rocketlauncher;
                              } //end default
                           } //end switch
                        } //end case
                        default: //using the quad
                        {
                           switch(ENEMY_HORIZONTAL_DIST)
                           {
                              case 120: //enemy is self damage close
                              {
                                 return self_dmg_rocketlauncher;
                              } //end case
                              default:
                              {
                                 return quad_rocketlauncher;
                              } //end default
                           } //end switch
                        } //end default
                     } //end switch
                  } //end case
                  default: //using the invulnerability
                  {
                     return invul_rocketlauncher;
                  } //end default
               } //end switch
            } //end default
         } //end switch
      } //end default
   } //end switch
} //end weight
weight "Trap"
{
   switch(INVENTORY_TRAP)
   {
      case 1: return 0;
      default: return 40;
   } //end switch
} //end weight
#endif //XATRIX
#ifdef ROGUE
weight "ETF Rifle"
{
   switch(INVENTORY_ETFRIFLE)
   {
      case 1: return 0;
      default:
      {
         switch(INVENTORY_FLECHETTES)
         {
            case 1: return 0;
            default: return 40;
         } //end switch
      } //end default
   } //end switch
} //end weight
weight "Prox Launcher"
{
   switch(INVENTORY_PROXLAUNCHER)
   {
      case 1: return 0;
      default:
      {
         switch(INVENTORY_PROX)
         {
            case 1: return 0;
            default: return 40;
         } //end switch
      } //end default
   } //end switch
} //end weight
weight "Tesla"
{
   switch(INVENTORY_TESLA)
   {
      case 1: return 0;
      default: return 40;
   } //end switch
} //end weight
weight "Plasma Beam"
{
   switch(INVENTORY_PLASMABEAM)
   {
      case 1: return 0;
      default:
      {
         switch(INVENTORY_CELLS)
         {
            case 1: return 0;
            default: return 40;
         } //end switch
      } //end default
   } //end switch
} //end weight
weight "Chainfist"
{
   switch(INVENTORY_CHAINFIST)
   {
      case 1: return 0;
      default: //does not use any ammo
      {
         return 40;
      } //end default
   } //end switch
} //end weight
weight "Disruptor"
{
   switch(INVENTORY_DISRUPTOR)
   {
      case 1: return 0;
      default:
      {
         switch(INVENTORY_ROUNDS)
         {
            case 1: return 0;
            default: return 40;
         } //end switch
      } //end default
   } //end switch
} //end weight
#endif //ROGUE