home *** CD-ROM | disk | FTP | other *** search
/ Chip 2011 November / CHIP_2011_11.iso / Programy / Inne / Gry / OpenArena / baseoa / pak6-misc.pk3 / botfiles / fuzi.c < prev    next >
Text File  |  2007-10-15  |  12KB  |  693 lines

  1. /*
  2. ===========================================================================
  3. Copyright (C) 2006 Dmn_clown (aka: Bob Isaac (rjisaac@gmail.com))
  4.  
  5. This file is part of Open Arena and is based upon Mr. Elusive's fuzzy logic
  6. system found in Quake 3 Arena.
  7.  
  8. Open Arena is free software; you can redistribute it
  9. and/or modify it under the terms of the GNU General Public License as
  10. published by the Free Software Foundation; either version 2 of the License,
  11. or (at your option) any later version.
  12.  
  13. Open Arena is distributed in the hope that it will be
  14. useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
  15. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16. GNU General Public License for more details.
  17.  
  18. You should have received a copy of the GNU General Public License
  19. along with Foobar; if not, write to the Free Software
  20. Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  21. ===========================================================================
  22. */
  23.  
  24.  
  25. #define ARMOR                20
  26. #define AMMO                20
  27. #define HEALTH                20
  28. #define POWERUP                20
  29. #define WEAPON                20
  30.  
  31. //breaks compatibility with the existing q3a bots, sorry.
  32. #define FP(x)    (x < 0 ? 1 : x)
  33. #define ARS(x)     balance($evalfloat(FP(FPA/x)), $evalfloat(FP(FPA/x-ARMOR)), $evalfloat(FP(FPA/x+ARMOR)))
  34. #define AS(x)    balance($evalfloat(FP(x)), $evalfloat(FP(x/AMMO)), $evalfloat(FP(x*AMMO)))
  35. #define HS(x)    balance($evalfloat(FP(FPH/x)), $evalfloat(FP(FPH/x-HEALTH)), $evalfloat(FP(FPH/x+HEALTH)))
  36. #define PS(x)    balance($evalfloat(FP(x)), $evalfloat(FP(x/POWERUP)), $evalfloat(FP(x*POWERUP)))
  37. #define WS(x)    balance($evalfloat(FP(x)), $evalfloat(FP(x/WEAPON)), $evalfloat(FP(x*WEAPON)))
  38.  
  39.  
  40. weight "item_armor_shard"
  41. {
  42. switch(INVENTORY_SCOUT)
  43.     {
  44.     case 1:
  45.     {
  46.     switch(INVENTORY_ARMOR)
  47.     {
  48.     case 10: return ARS(20);
  49.     case 20: return ARS(20);
  50.     case 30: return ARS(20);
  51.     case 40: return ARS(19);
  52.     case 50: return ARS(19);
  53.     case 60: return ARS(19);
  54.     case 70: return ARS(19);
  55.     case 80: return ARS(18);
  56.     case 90: return ARS(18);
  57.     case 100: return ARS(15);
  58.     case 110: return ARS(15);
  59.     case 120: return ARS(15);
  60.     case 130: return ARS(15);
  61.     case 140: return ARS(12);
  62.     case 150: return ARS(12);
  63.     case 160: return ARS(12);
  64.     case 170: return ARS(12);
  65.     case 180: return ARS(12);
  66.     case 190: return ARS(11);
  67.     case 200: return ARS(11);
  68.     default: return ARS(1);
  69.     } 
  70.     } 
  71.     default: return 0;
  72.     } 
  73. }
  74.  
  75. weight "item_armor_combat"
  76. {
  77.     switch(INVENTORY_SCOUT) 
  78.     {
  79.     case 1:
  80.     {
  81.     switch(INVENTORY_ARMOR)
  82.     {
  83.     case 10: return ARS(80);
  84.     case 20: return ARS(70);
  85.     case 30: return ARS(65);
  86.     case 40: return ARS(65);
  87.     case 50: return ARS(65);
  88.     case 60: return ARS(60);
  89.     case 70: return ARS(60);
  90.     case 80: return ARS(40);
  91.     case 90: return ARS(40);
  92.     case 100: return ARS(40);
  93.     case 110: return ARS(30);
  94.     case 120: return ARS(30);
  95.     case 130: return ARS(30);
  96.     case 140: return ARS(25);
  97.     case 150: return ARS(25);
  98.     case 160: return ARS(25);
  99.     case 170: return ARS(25);
  100.     case 180: return ARS(20);
  101.     case 190: return ARS(20);
  102.     case 200: return ARS(20);
  103.     default: return ARS(1);
  104.     }
  105.     }
  106.     default: return 0;
  107.     } 
  108. }
  109.  
  110. weight "item_armor_body"
  111. {
  112.     switch(INVENTORY_SCOUT) 
  113.     {
  114.     case 1:
  115.     {
  116.     switch(INVENTORY_ARMOR)
  117.     {
  118.     case 10: return ARS(100);
  119.     case 20: return ARS(95);
  120.     case 30: return ARS(95);
  121.     case 40: return ARS(95);
  122.     case 50: return ARS(90);
  123.     case 60: return ARS(60);
  124.     case 70: return ARS(60);
  125.     case 80: return ARS(55);
  126.     case 90: return ARS(55);
  127.     case 100: return ARS(50);
  128.     case 110: return ARS(40);
  129.     case 120: return ARS(40);
  130.     case 130: return ARS(35);
  131.     case 140: return ARS(25);
  132.     case 150: return ARS(15);
  133.     case 160: return ARS(15);
  134.     case 170: return ARS(15);
  135.     case 180: return ARS(10);
  136.     case 190: return ARS(10);
  137.     case 200: return ARS(10);
  138.     default: return ARS(1);
  139.     }
  140.     }
  141.     default: return 0;
  142.     } 
  143. }
  144.  
  145. weight "item_health_small"
  146. {
  147.     switch(INVENTORY_HEALTH)
  148.     {
  149.     case 10: return HS(100);
  150.     case 20: return HS(90);
  151.     case 30: return HS(85);
  152.     case 40: return HS(80);
  153.     case 50: return HS(75);
  154.     case 60: return HS(70);
  155.     case 70: return HS(65);
  156.     case 80: return HS(60);
  157.     case 90: return HS(55);
  158.     case 100: return HS(50);
  159.     default: return 0;
  160.     }
  161. }
  162.  
  163. weight "item_health"
  164. {
  165.     switch(INVENTORY_HEALTH)
  166.     {
  167.     case 10: return HS(110);
  168.     case 20: return HS(100);
  169.     case 30: return HS(90);
  170.     case 40: return HS(80);
  171.     case 50: return HS(70);
  172.     case 60: return HS(60);
  173.     case 70: return HS(50);
  174.     case 80: return HS(40);
  175.     case 90: return HS(30);
  176.     case 100: return HS(30);
  177.     default: return 0;
  178.     }
  179.  
  180. weight "item_health_large"
  181. {
  182.     
  183.     switch(INVENTORY_HEALTH)
  184.     {
  185.     case 10: return HS(120);
  186.     case 20: return HS(110);
  187.     case 30: return HS(100);
  188.     case 40: return HS(90);
  189.     case 50: return HS(80);
  190.     case 60: return HS(70);
  191.     case 70: return HS(60);
  192.     case 80: return HS(50);
  193.     case 90: return HS(40);
  194.     case 100: return HS(30);
  195.     default: return 0;
  196.     }
  197. }
  198.  
  199. weight "item_health_mega"
  200. {
  201.     switch(INVENTORY_HEALTH)
  202.     {
  203.     case 10: return HS(150);
  204.     case 20: return HS(120);
  205.     case 30: return HS(110);
  206.     case 40: return HS(100);
  207.     case 50: return HS(90);
  208.     case 60: return HS(90);
  209.     case 70: return HS(80);
  210.     case 80: return HS(80);
  211.     case 90: return HS(70);
  212.     case 100: return HS(60);
  213.     default: return 0;
  214.     }
  215. }
  216.  
  217. weight "weapon_shotgun"
  218. {
  219.     switch(INVENTORY_SHOTGUN)
  220.     {
  221.     case 1: return WS(SGW);
  222.     default: return 1;
  223.     }
  224. }
  225.  
  226. weight "weapon_machinegun"
  227. {
  228.     switch(INVENTORY_MACHINEGUN)
  229.     {
  230.     case 1: return WS(MGW);
  231.     default: return 1;
  232.     } 
  233. }
  234.  
  235. weight "weapon_grenadelauncher"
  236. {
  237.     switch(INVENTORY_GRENADELAUNCHER)
  238.     {
  239.     case 1: return WS(GLW);
  240.     default: return 1;
  241.     } 
  242. }
  243.  
  244. weight "weapon_rocketlauncher"
  245. {
  246.     switch(INVENTORY_ROCKETLAUNCHER)
  247.     {
  248.     case 1: return WS(RLW);
  249.     default: return 1;
  250.     } 
  251. }
  252.  
  253. weight "weapon_lightning"
  254. {
  255.     switch(INVENTORY_LIGHTNING)
  256.     {
  257.     case 1: return WS(LGW);
  258.     default: return 1;
  259.     }
  260.  
  261. weight "weapon_railgun"
  262. {
  263.     switch(INVENTORY_RAILGUN)
  264.     {
  265.     case 1: return WS(RGW);
  266.     default: return 1;
  267.     } 
  268. }
  269.  
  270. weight "weapon_plasmagun"
  271. {
  272.     switch(INVENTORY_PLASMAGUN)
  273.     {
  274.     case 1: return WS(PGW);
  275.     default: return 1;
  276.     } 
  277. }
  278.  
  279. weight "weapon_bfg"
  280. {
  281.     switch(INVENTORY_BFG10K)
  282.     {
  283.     case 1: return WS(BFW);
  284.     default: return 1;
  285.     } 
  286. }
  287.  
  288. weight "weapon_nailgun"
  289. {
  290.     switch(INVENTORY_NAILGUN)
  291.     {
  292.     case 1: return WS(NGW);
  293.     default: return 1;
  294.     } 
  295. }
  296.  
  297. weight "weapon_prox_launcher"
  298. {
  299.     switch(INVENTORY_PROXLAUNCHER)
  300.     {
  301.     case 1: return WS(PXW);
  302.     default: return 1;
  303.     }
  304. }
  305.  
  306. weight "weapon_chaingun"
  307. {
  308.     switch(INVENTORY_CHAINGUN)
  309.     {
  310.     case 1: return WS(CGW);
  311.     default: return 1;
  312.     } 
  313. }
  314.  
  315.  
  316. weight "ammo_shells"
  317. {
  318.     switch(INVENTORY_SHELLS)
  319.     {
  320.     case 20: return AS(30);
  321.     case 40: return AS(30);
  322.     case 60: return AS(11);
  323.     case 80: return AS(11);
  324.     case 100: return AS(11);
  325.     case 120: return AS(11);
  326.     case 140: return AS(11);
  327.     case 160: return AS(11);
  328.     case 180: return AS(11);
  329.     case 200: return AS(11);
  330.     default: return 0;
  331.     } 
  332.  
  333. weight "ammo_bullets"
  334. {
  335.     switch(INVENTORY_BULLETS)
  336.     {
  337.     case 20: return AS(30);
  338.     case 40: return AS(30);
  339.     case 60: return AS(30);
  340.     case 80: return AS(11);
  341.     case 100: return AS(11);
  342.     case 120: return AS(11);
  343.     case 140: return AS(11);
  344.     case 160: return AS(11);
  345.     case 180: return AS(11);
  346.     case 200: return AS(11);
  347.     default: return 0;
  348.     } 
  349.  
  350. weight "ammo_grenades"
  351. {
  352.     switch(INVENTORY_GRENADES)
  353.     {
  354.     case 20: return AS(30);
  355.     case 40: return AS(30);
  356.     case 60: return AS(11);
  357.     case 80: return AS(11);
  358.     case 100: return AS(11);
  359.     case 120: return AS(11);
  360.     case 140: return AS(11);
  361.     case 160: return AS(11);
  362.     case 180: return AS(11);
  363.     case 200: return AS(11);
  364.     default: return 0;
  365.     } 
  366.  
  367. weight "ammo_cells"
  368. {
  369.     switch(INVENTORY_CELLS)
  370.     {
  371.     case 20: return AS(30);
  372.     case 40: return AS(30);
  373.     case 60: return AS(30);
  374.     case 80: return AS(30);
  375.     case 100: return AS(11);
  376.     case 120: return AS(11);
  377.     case 140: return AS(11);
  378.     case 160: return AS(11);
  379.     case 180: return AS(11);
  380.     case 200: return AS(11);
  381.     default: return 0;
  382.     } 
  383.  
  384. weight "ammo_lightning"
  385. {
  386.     switch(INVENTORY_LIGHTNINGAMMO)
  387.     {
  388.     case 20: return AS(30);
  389.     case 40: return AS(30);
  390.     case 60: return AS(30);
  391.     case 80: return AS(30);
  392.     case 100: return AS(11);
  393.     case 120: return AS(11);
  394.     case 140: return AS(11);
  395.     case 160: return AS(11);
  396.     case 180: return AS(11);
  397.     case 200: return AS(11);
  398.     default: return 0;
  399.     } 
  400.  
  401. weight "ammo_rockets"
  402. {
  403.     switch(INVENTORY_ROCKETS)
  404.     {
  405.     case 20: return AS(30);
  406.     case 40: return AS(30);
  407.     case 60: return AS(11);
  408.     case 80: return AS(11);
  409.     case 100: return AS(11);
  410.     case 120: return AS(11);
  411.     case 140: return AS(11);
  412.     case 160: return AS(11);
  413.     case 180: return AS(11);
  414.     case 200: return AS(11);
  415.     default: return 0;
  416.     } 
  417.  
  418. weight "ammo_slugs"
  419. {
  420.     switch(INVENTORY_SLUGS)
  421.     {
  422.     case 20: return AS(30);
  423.     case 40: return AS(30);
  424.     case 60: return AS(11);
  425.     case 80: return AS(11);
  426.     case 100: return AS(11);
  427.     case 120: return AS(11);
  428.     case 140: return AS(11);
  429.     case 160: return AS(11);
  430.     case 180: return AS(11);
  431.     case 200: return AS(11);
  432.     default: return 0;
  433.     } 
  434.  
  435. weight "ammo_bfg"
  436. {
  437.     switch(INVENTORY_BFGAMMO)
  438.     {
  439.     case 20: return AS(30);
  440.     case 40: return AS(30);
  441.     case 60: return AS(11);
  442.     case 80: return AS(11);
  443.     case 100: return AS(11);
  444.     case 120: return AS(11);
  445.     case 140: return AS(11);
  446.     case 160: return AS(11);
  447.     case 180: return AS(11);
  448.     case 200: return AS(11);
  449.     default: return 0;
  450.     }
  451.  
  452.  
  453. weight "ammo_nails"
  454. {
  455.     switch(INVENTORY_NAILS)
  456.     {
  457.     case 20: return AS(30);
  458.     case 40: return AS(30);
  459.     case 60: return AS(11);
  460.     case 80: return AS(11);
  461.     case 100: return AS(11);
  462.     case 120: return AS(11);
  463.     case 140: return AS(11);
  464.     case 160: return AS(11);
  465.     case 180: return AS(11);
  466.     case 200: return AS(11);
  467.     default: return 0;
  468.     } 
  469. }
  470.  
  471. weight "ammo_mines"
  472. {
  473.     switch(INVENTORY_MINES)
  474.     {
  475.     case 20: return AS(30);
  476.     case 40: return AS(11);
  477.     case 60: return AS(11);
  478.     case 80: return AS(11);
  479.     case 100: return AS(11);
  480.     case 120: return AS(11);
  481.     case 140: return AS(11);
  482.     case 160: return AS(11);
  483.     case 180: return AS(11);
  484.     case 200: return AS(11);
  485.     default: return 0;
  486.     } 
  487. }
  488.  
  489. weight "ammo_belt"
  490. {
  491.     switch(INVENTORY_BELT)
  492.     {
  493.     case 20: return AS(30);
  494.     case 40: return AS(11);
  495.     case 60: return AS(11);
  496.     case 80: return AS(11);
  497.     case 100: return AS(11);
  498.     case 120: return AS(11);
  499.     case 140: return AS(11);
  500.     case 160: return AS(11);
  501.     case 180: return AS(11);
  502.     case 200: return AS(11);
  503.     default: return 0;
  504.     } 
  505. }
  506.  
  507.  
  508. //needs work
  509.  
  510. weight "holdable_teleporter"
  511. {
  512.     switch(INVENTORY_TELEPORTER)
  513.     {
  514.     case 1: return PS(TELW);
  515.     default: return 0;
  516.     } 
  517.  
  518. weight "holdable_medkit"
  519. {
  520.     switch(INVENTORY_TELEPORTER)
  521.     {
  522.     case 1: return PS(MEDW);
  523.     default: return 0; 
  524.     } 
  525.  
  526. weight "holdable_kamikaze"
  527. {
  528.     switch(INVENTORY_TELEPORTER)
  529.     {
  530.     case 1: return PS(KAMW);
  531.     default: return 0; 
  532.     } 
  533.  
  534. weight "holdable_portal"
  535. {
  536.     switch(INVENTORY_TELEPORTER)
  537.     {
  538.     case 1: return PS(PORW);
  539.     default: return 0; 
  540.     } 
  541.  
  542. weight "holdable_invulnerability"
  543. {
  544.     switch(INVENTORY_TELEPORTER)
  545.     {
  546.     case 1: return PS(IBW);
  547.     default: return 0; 
  548.     } 
  549.  
  550. weight "item_quad"
  551. {
  552.     return PS(QW);
  553.  
  554. weight "item_enviro"
  555. {
  556.     return PS(ENVW);
  557.  
  558. weight "item_haste"
  559. {
  560.     return PS(HAW);
  561.  
  562. weight "item_invisibility"
  563. {
  564.     return PS(INW);
  565.  
  566. weight "item_regen"
  567. {
  568.     return PS(REGW);
  569.  
  570. weight "item_flight"
  571. {
  572.     return PS(FLW);
  573.  
  574. weight "item_scout"
  575. {
  576.     switch(INVENTORY_SCOUT)
  577.     {
  578.     case 1: return PS(SCW);
  579.     default: return 0; 
  580.     }  
  581.  
  582. weight "item_guard"
  583. {
  584.     switch(INVENTORY_SCOUT)
  585.     {
  586.     case 1: return PS(GUW);
  587.     default: return 0; 
  588.     } 
  589.  
  590. weight "item_doubler"
  591. {
  592.     switch(INVENTORY_SCOUT)
  593.     {
  594.     case 1: return PS(DUBW);
  595.     default: return 0; 
  596.     }
  597.  
  598. weight "item_ammoregen"
  599. {
  600.     switch(INVENTORY_SCOUT)
  601.     {
  602.     case 1: return PS(AMRW);
  603.     default: return 0; 
  604.     } 
  605.  
  606.  
  607. //=============================================
  608. // This is only used to pickup dropped CTF
  609. // flags now. The logic in here makes no
  610. // sense since the bot has specific CTF AI.
  611. // yet without it the bots barely move towards 
  612. // the opposing flags due to low flag weights.
  613. //=============================================
  614.  
  615. weight "team_CTF_redflag" 
  616. {
  617.     switch(INVENTORY_REDFLAG)
  618.     {
  619.     case 1: return FGW;
  620.     default: return 300;
  621.     } 
  622.  
  623. weight "team_CTF_blueflag" 
  624. {
  625.     switch(INVENTORY_BLUEFLAG)
  626.     {
  627.     case 1: return FGW;
  628.     default: return 300;
  629.     } 
  630.  
  631.  
  632. weight "team_CTF_neutralflag" 
  633. {
  634.     return FGW;
  635.  
  636. weight "item_redcube" 
  637. {
  638.     return REDCW;
  639.  
  640. weight "item_bluecube" 
  641. {
  642.     return BLCW;
  643.  
  644. weight "item_botroam"
  645. {
  646.     return 1;
  647.  
  648. weight "team_dom_pointWhite"
  649. {
  650.     return 1000;
  651. }
  652.  
  653. weight "team_dom_pointRed"
  654. {
  655.     return 700;
  656. }
  657.  
  658. weight "team_dom_pointBlue"
  659. {
  660.     return 700;
  661. }
  662.