home *** CD-ROM | disk | FTP | other *** search
- //===========================================================================
- //
- // Name: fw_items.c
- // Function: file to start with for fuzzy logic interbreeding sessions
- // Programmer: Mr Elusive (MrElusive@idsoftware.com)
- // Last update: 1999-09-08
- // Tab Size: 4 (real tabs)
- // Notes: -
- //===========================================================================
-
-
- //#define WEAPONS_STAY
-
- //balance range
- #define BR_ARMOR 30
- #define BR_HEALTH 30
- #define BR_WEAPON 30
- #define BR_AMMO 30
- #define BR_POWERUP 30
-
- //balance macros
- #define MZ(value) (value) < 0 ? 0 : (value)
- #define ARMOR_SCALE(v) balance($evalfloat(MZ(FS_ARMOR*v)), $evalfloat(MZ(FS_ARMOR*v-BR_ARMOR)), $evalfloat(MZ(FS_ARMOR*v+BR_ARMOR)))
- #define HEALTH_SCALE(v) balance($evalfloat(MZ(FS_HEALTH*v)), $evalfloat(MZ(FS_HEALTH*v-BR_HEALTH)), $evalfloat(MZ(FS_HEALTH*v+BR_HEALTH)))
- #define WEAPON_SCALE(v) balance($evalfloat(MZ(v)), $evalfloat(MZ(v-BR_WEAPON)), $evalfloat(MZ(v+BR_WEAPON)))
- #define AMMO_SCALE(v) balance($evalfloat(MZ(v)), $evalfloat(MZ(v-BR_AMMO)), $evalfloat(MZ(v+BR_AMMO)))
- #define POWERUP_SCALE(v) balance($evalfloat(MZ(v)), $evalfloat(MZ(v-BR_POWERUP)), $evalfloat(MZ(v+BR_POWERUP)))
-
- //=============================================
- // ARMOR
- //=============================================
-
- weight "item_armor_shard"
- {
- switch(INVENTORY_ARMOR)
- {
- case 10: return ARMOR_SCALE(20);
- case 20: return ARMOR_SCALE(20);
- case 30: return ARMOR_SCALE(20);
- case 40: return ARMOR_SCALE(20);
- case 50: return ARMOR_SCALE(20);
- case 60: return ARMOR_SCALE(15);
- case 70: return ARMOR_SCALE(15);
- case 80: return ARMOR_SCALE(15);
- case 90: return ARMOR_SCALE(15);
- case 100: return ARMOR_SCALE(15);
- case 110: return ARMOR_SCALE(10);
- case 120: return ARMOR_SCALE(10);
- case 130: return ARMOR_SCALE(10);
- case 140: return ARMOR_SCALE(10);
- case 150: return ARMOR_SCALE(10);
- case 160: return ARMOR_SCALE(10);
- case 170: return ARMOR_SCALE(10);
- case 180: return ARMOR_SCALE(10);
- case 190: return ARMOR_SCALE(10);
- case 200: return ARMOR_SCALE(10);
- default: return ARMOR_SCALE(1);
- } //end switch
- } //end weight
-
- weight "item_armor_combat"
- {
- switch(INVENTORY_ARMOR)
- {
- case 10: return ARMOR_SCALE(60);
- case 20: return ARMOR_SCALE(60);
- case 30: return ARMOR_SCALE(60);
- case 40: return ARMOR_SCALE(60);
- case 50: return ARMOR_SCALE(60);
- case 60: return ARMOR_SCALE(50);
- case 70: return ARMOR_SCALE(50);
- case 80: return ARMOR_SCALE(50);
- case 90: return ARMOR_SCALE(50);
- case 100: return ARMOR_SCALE(50);
- case 110: return ARMOR_SCALE(40);
- case 120: return ARMOR_SCALE(40);
- case 130: return ARMOR_SCALE(40);
- case 140: return ARMOR_SCALE(40);
- case 150: return ARMOR_SCALE(40);
- case 160: return ARMOR_SCALE(40);
- case 170: return ARMOR_SCALE(40);
- case 180: return ARMOR_SCALE(40);
- case 190: return ARMOR_SCALE(40);
- case 200: return ARMOR_SCALE(40);
- default: return ARMOR_SCALE(1);
- } //end switch
- } //end weight
-
- weight "item_armor_body"
- {
- switch(INVENTORY_ARMOR)
- {
- case 10: return ARMOR_SCALE(90);
- case 20: return ARMOR_SCALE(90);
- case 30: return ARMOR_SCALE(90);
- case 40: return ARMOR_SCALE(90);
- case 50: return ARMOR_SCALE(90);
- case 60: return ARMOR_SCALE(50);
- case 70: return ARMOR_SCALE(50);
- case 80: return ARMOR_SCALE(50);
- case 90: return ARMOR_SCALE(50);
- case 100: return ARMOR_SCALE(50);
- case 110: return ARMOR_SCALE(20);
- case 120: return ARMOR_SCALE(20);
- case 130: return ARMOR_SCALE(20);
- case 140: return ARMOR_SCALE(20);
- case 150: return ARMOR_SCALE(20);
- case 160: return ARMOR_SCALE(20);
- case 170: return ARMOR_SCALE(20);
- case 180: return ARMOR_SCALE(20);
- case 190: return ARMOR_SCALE(20);
- case 200: return ARMOR_SCALE(20);
- default: return ARMOR_SCALE(1);
- } //end switch
- } //end weight
-
- //=============================================
- // HEALTH
- //=============================================
-
- weight "item_health_small"
- {
- switch(INVENTORY_HEALTH)
- {
- case 10: return HEALTH_SCALE(80);
- case 20: return HEALTH_SCALE(80);
- case 30: return HEALTH_SCALE(80);
- case 40: return HEALTH_SCALE(80);
- case 50: return HEALTH_SCALE(70);
- case 60: return HEALTH_SCALE(70);
- case 70: return HEALTH_SCALE(60);
- case 80: return HEALTH_SCALE(60);
- case 90: return HEALTH_SCALE(50);
- case 100: return HEALTH_SCALE(50);
- default: return 0;
- } //end switch
- } //end weight
-
- weight "item_health"
- {
- switch(INVENTORY_HEALTH)
- {
- case 10: return HEALTH_SCALE(90);
- case 20: return HEALTH_SCALE(90);
- case 30: return HEALTH_SCALE(90);
- case 40: return HEALTH_SCALE(90);
- case 50: return HEALTH_SCALE(80);
- case 60: return HEALTH_SCALE(80);
- case 70: return HEALTH_SCALE(60);
- case 80: return HEALTH_SCALE(60);
- case 90: return HEALTH_SCALE(50);
- case 100: return HEALTH_SCALE(50);
- default: return 0;
- } //end switch
- } //end weight
-
- weight "item_health_large"
- {
- switch(INVENTORY_HEALTH)
- {
- case 10: return HEALTH_SCALE(100);
- case 20: return HEALTH_SCALE(100);
- case 30: return HEALTH_SCALE(100);
- case 40: return HEALTH_SCALE(100);
- case 50: return HEALTH_SCALE(90);
- case 60: return HEALTH_SCALE(90);
- case 70: return HEALTH_SCALE(80);
- case 80: return HEALTH_SCALE(80);
- case 90: return HEALTH_SCALE(50);
- case 100: return HEALTH_SCALE(50);
- default: return 0;
- } //end switch
- } //end weight
-
- weight "item_health_mega"
- {
- switch(INVENTORY_HEALTH)
- {
- case 10: return HEALTH_SCALE(110);
- case 20: return HEALTH_SCALE(110);
- case 30: return HEALTH_SCALE(110);
- case 40: return HEALTH_SCALE(110);
- case 50: return HEALTH_SCALE(100);
- case 60: return HEALTH_SCALE(100);
- case 70: return HEALTH_SCALE(90);
- case 80: return HEALTH_SCALE(90);
- case 90: return HEALTH_SCALE(80);
- case 100: return HEALTH_SCALE(80);
- default: return HEALTH_SCALE(50);
- } //end switch
- } //end weight
-
- //=============================================
- // WEAPONS
- //=============================================
-
- weight "weapon_shotgun"
- {
- switch(INVENTORY_SHOTGUN)
- {
- case 1:
- {
- switch(INVENTORY_SHELLS)
- {
- case 10: return WEAPON_SCALE(W_SHOTGUN - 10);
- default: return WEAPON_SCALE(W_SHOTGUN);
- } //end switch
- } //end case
- default:
- {
- #ifdef WEAPONS_STAY
- switch(INVENTORY_SHELLS)
- {
- case 10: return WEAPON_SCALE(GWW_SHOTGUN);
- case 100: return WEAPON_SCALE(GWW_SHOTGUN - 10);
- default: return balance(5, 3, 7);
- } //end switch
- #else
- return 1;
- #endif
- } //end default
- } //end switch
- } //end weight
-
- weight "weapon_machinegun"
- {
- switch(INVENTORY_MACHINEGUN)
- {
- case 1:
- {
- switch(INVENTORY_BULLETS)
- {
- case 40: return WEAPON_SCALE(W_MACHINEGUN - 10);
- default: return WEAPON_SCALE(W_MACHINEGUN);
- } //end switch
- } //end case
- default:
- {
- #ifdef WEAPONS_STAY
- switch(INVENTORY_BULLETS)
- {
- case 50: return WEAPON_SCALE(GWW_MACHINEGUN);
- case 200: return WEAPON_SCALE(GWW_MACHINEGUN - 10);
- default: return balance(5, 3, 7);
- } //end switch
- #else
- return 1;
- #endif
- } //end default
- } //switch
- } //end weight
-
- weight "weapon_grenadelauncher"
- {
- switch(INVENTORY_GRENADELAUNCHER)
- {
- case 1: return WEAPON_SCALE(W_GRENADELAUNCHER);
- default:
- {
- #ifdef WEAPONS_STAY
- switch(INVENTORY_GRENADES)
- {
- case 16: return WEAPON_SCALE(GWW_GRENADELAUNCHER);
- case 50: return WEAPON_SCALE(GWW_GRENADELAUNCHER - 10);
- default: return balance(5, 3, 7);
- } //end switch
- #else
- return 1;
- #endif
- } //end default
- } //end switch
- } //end weight
-
- weight "weapon_rocketlauncher"
- {
- switch(INVENTORY_ROCKETLAUNCHER)
- {
- case 1: return WEAPON_SCALE(W_ROCKETLAUNCHER);
- default:
- {
- #ifdef WEAPONS_STAY
- switch(INVENTORY_ROCKETS)
- {
- case 16: return WEAPON_SCALE(GWW_ROCKETLAUNCHER);
- case 50: return WEAPON_SCALE(GWW_ROCKETLAUNCHER - 10);
- default: return balance(5, 3, 7);
- } //end switch
- #else
- return 1;
- #endif
- } //end default
- } //end switch
- } //end weight
-
- weight "weapon_lightning"
- {
- switch(INVENTORY_LIGHTNING)
- {
- case 1: return WEAPON_SCALE(W_LIGHTNING);
- default:
- {
- #ifdef WEAPONS_STAY
- switch(INVENTORY_LIGHTNINGAMMO)
- {
- case 16: return WEAPON_SCALE(GWW_LIGHTNING);
- case 50: return WEAPON_SCALE(GWW_LIGHTNING - 10);
- default: return balance(5, 3, 7);
- } //end switch
- #else
- return 1;
- #endif
- } //end default
- } //end switch
- } //end weight
-
- weight "weapon_railgun"
- {
- switch(INVENTORY_RAILGUN)
- {
- case 1: return WEAPON_SCALE(W_RAILGUN);
- default:
- {
- #ifdef WEAPONS_STAY
- switch(INVENTORY_SLUGS)
- {
- case 16: return WEAPON_SCALE(GWW_RAILGUN);
- case 50: return WEAPON_SCALE(GWW_RAILGUN - 10);
- default: return balance(5, 3, 7);
- } //end switch
- #else
- return 1;
- #endif
- } //end default
- } //end switch
- } //end weight
-
- weight "weapon_plasmagun"
- {
- switch(INVENTORY_PLASMAGUN)
- {
- case 1: return WEAPON_SCALE(W_PLASMAGUN);
- default:
- {
- #ifdef WEAPONS_STAY
- switch(INVENTORY_CELLS)
- {
- case 16: return WEAPON_SCALE(GWW_PLASMAGUN);
- case 50: return WEAPON_SCALE(GWW_PLASMAGUN - 10);
- default: return balance(5, 3, 7);
- } //end switch
- #else
- return 1;
- #endif
- } //end default
- } //end switch
- } //end weight
-
- weight "weapon_bfg"
- {
- switch(INVENTORY_BFG10K)
- {
- case 1: return WEAPON_SCALE(W_BFG10K);
- default:
- {
- #ifdef WEAPONS_STAY
- switch(INVENTORY_BFGAMMO)
- {
- case 16: return WEAPON_SCALE(GWW_BFG10K);
- case 200: return WEAPON_SCALE(GWW_BFG10K - 10);
- default: return balance(5, 3, 7);
- } //end switch
- #else
- return 1;
- #endif
- } //end default
- } //end switch
- } //end weight
-
- //=============================================
- // AMMO
- //=============================================
-
- weight "ammo_shells"
- {
- switch(INVENTORY_SHELLS)
- {
- case 20: return AMMO_SCALE(20);
- case 40: return AMMO_SCALE(20);
- case 60: return AMMO_SCALE(20);
- case 80: return AMMO_SCALE(20);
- case 100: return AMMO_SCALE(20);
- case 120: return AMMO_SCALE(20);
- case 140: return AMMO_SCALE(20);
- case 160: return AMMO_SCALE(20);
- case 180: return AMMO_SCALE(20);
- case 200: return AMMO_SCALE(20);
- default: return 0;
- } //end switch
- } //end weight
-
- weight "ammo_bullets"
- {
- switch(INVENTORY_BULLETS)
- {
- case 20: return AMMO_SCALE(20);
- case 40: return AMMO_SCALE(20);
- case 60: return AMMO_SCALE(20);
- case 80: return AMMO_SCALE(20);
- case 100: return AMMO_SCALE(20);
- case 120: return AMMO_SCALE(20);
- case 140: return AMMO_SCALE(20);
- case 160: return AMMO_SCALE(20);
- case 180: return AMMO_SCALE(20);
- case 200: return AMMO_SCALE(20);
- default: return 0;
- } //end switch
- } //end weight
-
- weight "ammo_grenades"
- {
- switch(INVENTORY_GRENADES)
- {
- case 20: return AMMO_SCALE(20);
- case 40: return AMMO_SCALE(20);
- case 60: return AMMO_SCALE(20);
- case 80: return AMMO_SCALE(20);
- case 100: return AMMO_SCALE(20);
- case 120: return AMMO_SCALE(20);
- case 140: return AMMO_SCALE(20);
- case 160: return AMMO_SCALE(20);
- case 180: return AMMO_SCALE(20);
- case 200: return AMMO_SCALE(20);
- default: return 0;
- } //end switch
- } //end weight
-
- weight "ammo_cells"
- {
- switch(INVENTORY_CELLS)
- {
- case 20: return AMMO_SCALE(20);
- case 40: return AMMO_SCALE(20);
- case 60: return AMMO_SCALE(20);
- case 80: return AMMO_SCALE(20);
- case 100: return AMMO_SCALE(20);
- case 120: return AMMO_SCALE(20);
- case 140: return AMMO_SCALE(20);
- case 160: return AMMO_SCALE(20);
- case 180: return AMMO_SCALE(20);
- case 200: return AMMO_SCALE(20);
- default: return 0;
- } //end switch
- } //end weight
-
- weight "ammo_lightning"
- {
- switch(INVENTORY_LIGHTNINGAMMO)
- {
- case 20: return AMMO_SCALE(20);
- case 40: return AMMO_SCALE(20);
- case 60: return AMMO_SCALE(20);
- case 80: return AMMO_SCALE(20);
- case 100: return AMMO_SCALE(20);
- case 120: return AMMO_SCALE(20);
- case 140: return AMMO_SCALE(20);
- case 160: return AMMO_SCALE(20);
- case 180: return AMMO_SCALE(20);
- case 200: return AMMO_SCALE(20);
- default: return 0;
- } //end switch
- } //end weight
-
- weight "ammo_rockets"
- {
- switch(INVENTORY_ROCKETS)
- {
- case 20: return AMMO_SCALE(20);
- case 40: return AMMO_SCALE(20);
- case 60: return AMMO_SCALE(20);
- case 80: return AMMO_SCALE(20);
- case 100: return AMMO_SCALE(20);
- case 120: return AMMO_SCALE(20);
- case 140: return AMMO_SCALE(20);
- case 160: return AMMO_SCALE(20);
- case 180: return AMMO_SCALE(20);
- case 200: return AMMO_SCALE(20);
- default: return 0;
- } //end switch
- } //end weight
-
- weight "ammo_slugs"
- {
- switch(INVENTORY_SLUGS)
- {
- case 20: return AMMO_SCALE(20);
- case 40: return AMMO_SCALE(20);
- case 60: return AMMO_SCALE(20);
- case 80: return AMMO_SCALE(20);
- case 100: return AMMO_SCALE(20);
- case 120: return AMMO_SCALE(20);
- case 140: return AMMO_SCALE(20);
- case 160: return AMMO_SCALE(20);
- case 180: return AMMO_SCALE(20);
- case 200: return AMMO_SCALE(20);
- default: return 0;
- } //end switch
- } //end weight
-
- weight "ammo_bfg"
- {
- switch(INVENTORY_BFGAMMO)
- {
- case 20: return AMMO_SCALE(20);
- case 40: return AMMO_SCALE(20);
- case 60: return AMMO_SCALE(20);
- case 80: return AMMO_SCALE(20);
- case 100: return AMMO_SCALE(20);
- case 120: return AMMO_SCALE(20);
- case 140: return AMMO_SCALE(20);
- case 160: return AMMO_SCALE(20);
- case 180: return AMMO_SCALE(20);
- case 200: return AMMO_SCALE(20);
- default: return 0;
- } //end switch
- } //end weight
-
-
- //=============================================
- // POWERUPS
- //=============================================
-
- weight "holdable_teleporter"
- {
- switch(INVENTORY_TELEPORTER)
- {
- case 1:
- {
- switch(INVENTORY_MEDKIT)
- {
- case 1: return POWERUP_SCALE(W_TELEPORTER);
- default: return 0; //already has a medkit
- } //end switch
- } //end case
- default: return 0; //already has a personal teleporter
- } //end switch
- } //end weight
-
- weight "holdable_medkit"
- {
- switch(INVENTORY_MEDKIT)
- {
- case 1:
- {
- switch(INVENTORY_TELEPORTER)
- {
- case 1: return POWERUP_SCALE(W_MEDKIT);
- default: return 0; //already has a personal teleporter
- } //end switch
- } //end case
- default: return 0; //already has a medkit
- } //end switch
- } //end weight
-
- weight "item_quad"
- {
- return POWERUP_SCALE(W_QUAD);
- } //end weight
-
- weight "item_enviro"
- {
- return POWERUP_SCALE(W_ENVIRO);
- } //end weight
-
- weight "item_haste"
- {
- return POWERUP_SCALE(W_HASTE);
- } //end weight
-
- weight "item_invisibility"
- {
- return POWERUP_SCALE(W_INVISIBILITY);
- } //end weight
-
- weight "item_regen"
- {
- return POWERUP_SCALE(W_REGEN);
- } //end weight
-
- weight "item_flight"
- {
- return 0;//POWERUP_SCALE(W_FLIGHT);
- } //end weight
-
- //=============================================
- // This is only used to pickup dropped CTF
- // flags now. The logic in here makes no
- // sense since the bot has specific CTF AI.
- //=============================================
-
- weight "team_CTF_redflag" //Red Flag
- {
- switch(INVENTORY_REDFLAG)
- {
- case 1: //not carrying the red flag
- {
- switch(INVENTORY_BLUEFLAG)
- {
- case 1: //not carrying the blue flag
- {
- return FLAG_WEIGHT;
- } //end case
- default: //bot carrying the blue flag so go back to the base
- {
- return 200;
- } //end case
- } //end switch
- } //end case
- default: //bot carrying the red flag, so don't go back
- {
- return 0;
- } //end default
- } //end switch
- } //end weight
-
- weight "team_CTF_blueflag" //Blue Flag
- {
- switch(INVENTORY_BLUEFLAG)
- {
- case 1: //not carrying the blue flag
- {
- switch(INVENTORY_REDFLAG)
- {
- case 1: //not carrying the red flag
- {
- return FLAG_WEIGHT;
- } //end case
- default: //bot is carrying the red flag so go back to the base
- {
- return 200;
- } //end case
- } //end switch
- } //end case
- default: //bot is carrying the blue flag, so don't go back
- {
- return 0;
- } //end default
- } //end switch
- } //end weight
-
- //=============================================
- // bot roam goal
- //=============================================
-
- weight "item_botroam"
- {
- return 1;
- } //end weight
-
-
-