1
0
Fork 0
forked from fte/fteqw
fteqw/quakec/fallout2/inventory.qc
Spoike b973799d06 most warnings fixed.
inventory system now works a bit better.


git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@1761 fc73d0e0-1445-4013-8a0c-d673dee63da5
2006-01-02 22:04:05 +00:00

764 lines
No EOL
17 KiB
C++

float IID_NONE = 0;
#define IsMelee(iid) (iid == IID_NONE || (iid >= IID_WP_TOOLKIT && iid <= IID_WP_POWERAXE))
#define IsGrenade(iid) (iid >= IID_GREN_FRAG && iid <= IID_GREN_FLASH)
#define IsRanged(iid) (iid >= IID_WP_USP && iid <= IID_WP_PULSERIFLE)
//weapons with ammo, things with a toggle state
#define NotStackable(iid) (IsRanged(iid))
//the ammoless weapons
float IID_WP_TOOLKIT = 400;
float IID_WP_KNIFE = 401;
float IID_WP_AXE = 402;
float IID_WP_VIBROBLADE = 403;
float IID_WP_POWERAXE = 404;
//the ammoed weapons
float IID_WP_USP = 405;
float IID_WP_DEAGLE = 406;
float IID_WP_NEEDLER = 407;
float IID_WP_ALIENBLASTER = 408;
float IID_WP_PIPERIFLE = 409;
float IID_WP_WINCHESTER = 410;
float IID_WP_MOSSBERG = 411;
float IID_WP_JACKHAMMER = 412;
float IID_WP_MP9 = 413;
float IID_WP_MP7 = 414;
float IID_WP_RANGERMASTER = 415;
float IID_WP_AK112 = 416;
float IID_WP_AK74 = 417;
float IID_WP_DKS1 = 418;
float IID_WP_MOONLIGHT = 419;
float IID_WP_SA80 = 420;
float IID_WP_GAUSERIFLE = 421;
float IID_WP_PULSERIFLE = 422;
//and ammo for those guns
float IID_AM_USP = 505;
float IID_AM_DEAGLE = 506;
float IID_AM_NEEDLER = 507;
float IID_AM_ALIENBLASTER = 508;
float IID_AM_PIPERIFLE = 509;
float IID_AM_WINCHESTER = 510;
float IID_AM_MOSSBERG = 511;
float IID_AM_JACKHAMMER = 512;
float IID_AM_MP9 = 513;
float IID_AM_MP7 = 514;
float IID_AM_RANGERMASTER = 515;
float IID_AM_AK112 = 516;
float IID_AM_AK74 = 517;
float IID_AM_DKS1 = 518;
float IID_AM_MOONLIGHT = 519;
float IID_AM_SA80 = 520;
float IID_AM_GAUSERIFLE = 521;
float IID_AM_PULSERIFLE = 522;
//grenade items
float IID_GREN_FRAG = 101;
float IID_GREN_EMP = 102;
float IID_GREN_SMOKE = 103;
float IID_GREN_FLASH = 104;
//armour
#define IsArmor(iid) (iid >= IID_ARM_SHIRT && iid <= IID_ARM_LPOWER)
float IID_ARM_SHIRT = 201;
float IID_ARM_LEATHER = 202;
float IID_ARM_KEVLAR = 203;
float IID_ARM_METAL = 204;
float IID_ARM_COMBAT = 205;
float IID_ARM_BROTHERHOOD = 206;
float IID_ARM_FORCE = 207;
float IID_ARM_LPOWER = 208;
//stims
#define IsChem(iid) (iid >= IID_CHEM_STIMPACK && iid <= IID_CHEM_BESERK)
float IID_CHEM_STIMPACK = 301;
float IID_CHEM_MEDICALBAG = 302;
float IID_CHEM_SUPERSTIM = 303;
float IID_CHEM_ADRENALINE = 304;
float IID_CHEM_PSYCHO = 305;
float IID_CHEM_BESERK = 306;
float IID_BUILD_MRAMMO = 350;
float IID_BUILD_SHIELDGEN = 351;
float IID_BUILD_AUTODOC = 352;
float IID_BUILD_ROBOFANG = 353;
#define IsShootable(iid) (IsMelee(iid) || IsRanged(iid) || IsGrenade(iid))
//slot1 and slot2 are the two hand slots
//slot3 is the armour slot.
//the other slots are for misilaneous things.
.float islot1;
.float islot2;
.float islot3;
.float islot4;
.float islot5;
.float islot6;
.float islot7;
.float islot8;
.float islot9;
.float islot10;
.float islot11;
.float islot12;
.float islot13;
.float islot14;
.float islot15;
.float islot16;
#define MAXSLOTS 16
void(float sttype, float stnum, string fieldname) clientstat = #232;
void() SetupStats =
{
//2 is ev_float
//32 is the first stat we are allowed to use
clientstat(2, 32, "islot1");
clientstat(2, 33, "islot2");
clientstat(2, 34, "islot3");
clientstat(2, 35, "islot4");
clientstat(2, 36, "islot5");
clientstat(2, 37, "islot6");
clientstat(2, 38, "islot7");
clientstat(2, 39, "islot8");
clientstat(2, 40, "islot9");
clientstat(2, 41, "islot10");
clientstat(2, 42, "islot11");
clientstat(2, 43, "islot12");
clientstat(2, 44, "islot13");
clientstat(2, 45, "islot14");
clientstat(2, 46, "islot15");
clientstat(2, 47, "islot16");
};
#define ToIID(it) floor(it/512)
#define ToStatus(it) (it&511)
#define SlotVal(iid,st) ((iid*512) | (st&511))
float(entity e, float slotno) ItemInSlot =
{
if (slotno == 1)
return e.islot1;
if (slotno == 2)
return e.islot2;
if (slotno == 3)
return e.islot3;
if (slotno == 4)
return e.islot4;
if (slotno == 5)
return e.islot5;
if (slotno == 6)
return e.islot6;
if (slotno == 7)
return e.islot7;
if (slotno == 8)
return e.islot8;
if (slotno == 9)
return e.islot9;
if (slotno == 10)
return e.islot10;
if (slotno == 11)
return e.islot11;
if (slotno == 12)
return e.islot12;
if (slotno == 13)
return e.islot13;
if (slotno == 14)
return e.islot14;
if (slotno == 15)
return e.islot15;
if (slotno == 16)
return e.islot16;
return 0;
};
void(entity e, float slotno, float item) SetItemSlot =
{
if (slotno == 1)
e.islot1 = item;
else if (slotno == 2)
e.islot2 = item;
else if (slotno == 3)
e.islot3 = item;
else if (slotno == 4)
e.islot4 = item;
else if (slotno == 5)
e.islot5 = item;
else if (slotno == 6)
e.islot6 = item;
else if (slotno == 7)
e.islot7 = item;
else if (slotno == 8)
e.islot8 = item;
else if (slotno == 9)
e.islot9 = item;
else if (slotno == 10)
e.islot10 = item;
else if (slotno == 11)
e.islot11 = item;
else if (slotno == 12)
e.islot12 = item;
else if (slotno == 13)
e.islot13 = item;
else if (slotno == 14)
e.islot14 = item;
else if (slotno == 15)
e.islot15 = item;
else if (slotno == 16)
e.islot16 = item;
};
float(entity e, float iid) SlotOfItem =
{
if (ToIID(e.islot1) == iid)
return 1;
if (ToIID(e.islot2) == iid)
return 2;
if (ToIID(e.islot3) == iid)
return 3;
if (ToIID(e.islot4) == iid)
return 4;
if (ToIID(e.islot5) == iid)
return 5;
if (ToIID(e.islot6) == iid)
return 6;
if (ToIID(e.islot7) == iid)
return 7;
if (ToIID(e.islot8) == iid)
return 8;
if (ToIID(e.islot9) == iid)
return 9;
if (ToIID(e.islot10) == iid)
return 10;
if (ToIID(e.islot11) == iid)
return 11;
if (ToIID(e.islot12) == iid)
return 12;
if (ToIID(e.islot13) == iid)
return 13;
if (ToIID(e.islot14) == iid)
return 14;
if (ToIID(e.islot15) == iid)
return 15;
if (ToIID(e.islot16) == iid)
return 16;
return 0;
};
typedef .float slot_t;
slot_t(float slot) SlotField =
{
if (slot == 1)
return islot1;
if (slot == 2)
return islot2;
if (slot == 3)
return islot3;
if (slot == 4)
return islot4;
if (slot == 5)
return islot5;
if (slot == 6)
return islot6;
if (slot == 7)
return islot7;
if (slot == 8)
return islot8;
if (slot == 9)
return islot9;
if (slot == 10)
return islot10;
if (slot == 11)
return islot11;
if (slot == 12)
return islot12;
if (slot == 13)
return islot13;
if (slot == 14)
return islot14;
if (slot == 15)
return islot15;
if (slot == 16)
return islot16;
bprint(PRINT_MEDIUM, "ERROR: Invalid slot number (", ftos(slot), ")\n");
return islot1;
};
string(float iid) GetItemVModel =
{
if (iid == IID_NONE)
return "progs/v_fist.mdl";
if (iid == IID_WP_KNIFE)
return "progs/v_knife.mdl";
if (iid == IID_WP_AXE)
return "progs/v_axe.mdl";
if (iid == IID_WP_VIBROBLADE)
return "progs/v_knife.mdl";
if (iid == IID_WP_POWERAXE)
return "progs/v_axe.mdl";
if (iid == IID_WP_USP)
return "progs/v_1911.mdl";
/*
if (iid == IID_WP_DEAGLE)
return "progs/v_deagle.mdl";
if (iid == IID_WP_NEEDLER)
return "progs/v_1911.mdl";
if (iid == IID_WP_ALIENBLASTER)
return "progs/v_alien.mdl";
if (iid == IID_WP_PIPERIFLE)
return "progs/v_piperifle.mdl";
if (iid == IID_WP_WINCHESTER)
return "progs/v_double.mdl";
if (iid == IID_WP_MOSSBERG)
return "progs/v_shotgun.mdl";
*/
if (iid == IID_WP_JACKHAMMER)
return "progs/v_jackhammer.mdl";
if (iid == IID_WP_MP9)
return "progs/v_mp9.mdl";
if (iid == IID_WP_MP7)
return "progs/v_smg.mdl";
if (iid == IID_WP_RANGERMASTER)
return "progs/v_rangem.mdl";
if (iid == IID_WP_AK112)
return "progs/v_ak47.mdl";
if (iid == IID_WP_AK74)
return "progs/v_ak47.mdl";
if (iid == IID_WP_DKS1)
return "progs/v_srifle.mdl";
if (iid == IID_WP_MOONLIGHT)
return "progs/v_night.mdl";
if (iid == IID_GREN_FRAG)
return "progs/v_handgren.mdl";
if (iid == IID_GREN_EMP)
return "progs/v_handgren.mdl";
if (iid == IID_GREN_SMOKE)
return "progs/v_handgren.mdl";
if (iid == IID_GREN_FLASH)
return "progs/v_handgren.mdl";
bprint(PRINT_MEDIUM, ftos(iid), " without a vmodel!\n");
return "";
};
string(float iid) GetItemWModel =
{
if (iid == IID_WP_KNIFE)
return "progs/w_knife.mdl";
if (iid == IID_WP_AXE)
return "progs/w_knife.mdl";
if (iid == IID_WP_VIBROBLADE)
return "progs/w_axe.mdl";
if (iid == IID_WP_POWERAXE)
return "progs/w_axe.mdl";
if (iid == IID_WP_USP)
return "progs/w_1911.mdl";
if (iid == IID_WP_DEAGLE)
return "progs/w_deagle.mdl";
if (iid == IID_WP_NEEDLER)
return "progs/w_1911.mdl";
if (iid == IID_WP_ALIENBLASTER)
return "progs/w_alien.mdl";
if (iid == IID_WP_PIPERIFLE)
return "progs/w_pipe.mdl";
if (iid == IID_WP_WINCHESTER)
return "progs/w_shotgun.mdl";
if (iid == IID_WP_MOSSBERG)
return "progs/w_pipe.mdl";
if (iid == IID_WP_JACKHAMMER)
return "progs/w_jackhammer.mdl";
if (iid == IID_WP_MP9)
return "progs/w_mp9.mdl";
if (iid == IID_WP_MP7)
return "progs/w_mp7.mdl";
if (iid == IID_WP_RANGERMASTER)
return "progs/w_rangem.mdl";
if (iid == IID_WP_AK112)
return "progs/w_ak47.mdl";
if (iid == IID_WP_AK74)
return "progs/w_ak47.mdl";
if (iid == IID_WP_DKS1)
return "progs/w_srifle.mdl";
if (iid == IID_WP_MOONLIGHT)
return "progs/w_night.mdl";
if (iid == IID_WP_SA80)
return "progs/w_sa80.mdl";
if (iid == IID_WP_GAUSERIFLE)
return "progs/w_gauss.mdl";
if (iid == IID_WP_PULSERIFLE)
return "progs/w_carbine.mdl";
if (iid == IID_GREN_FRAG)
return "progs/grenade2.mdl";
if (iid == IID_GREN_EMP)
return "progs/grenade2.mdl";
if (iid == IID_GREN_SMOKE)
return "progs/grenade2.mdl";
if (iid == IID_GREN_FLASH)
return "progs/grenade2.mdl";
if (iid == IID_CHEM_STIMPACK)
return "maps/b_bh10.bsp";
if (iid == IID_CHEM_MEDICALBAG)
return "maps/b_bh25.bsp";
if (iid == IID_CHEM_SUPERSTIM)
return "maps/b_bh100.bsp";
//fixme
if (iid == IID_CHEM_ADRENALINE)
return "maps/b_bh10.bsp";
if (iid == IID_CHEM_PSYCHO)
return "maps/b_bh25.bsp";
if (iid == IID_CHEM_BESERK)
return "maps/b_bh100.bsp";
return "progs/s_light.spr"; //no model. :/
};
float(float iid) WeaponAmmoType =
{
if (iid == IID_WP_USP)
return IID_AM_USP;
if (iid == IID_WP_DEAGLE)
return IID_AM_DEAGLE;
if (iid == IID_WP_NEEDLER)
return IID_AM_NEEDLER;
if (iid == IID_WP_ALIENBLASTER)
return IID_AM_ALIENBLASTER;
if (iid == IID_WP_PIPERIFLE)
return IID_AM_PIPERIFLE;
if (iid == IID_WP_WINCHESTER)
return IID_AM_WINCHESTER;
if (iid == IID_WP_MOSSBERG)
return IID_AM_MOSSBERG;
if (iid == IID_WP_JACKHAMMER)
return IID_AM_JACKHAMMER;
if (iid == IID_WP_MP9)
return IID_AM_MP9;
if (iid == IID_WP_MP7)
return IID_AM_MP7;
if (iid == IID_WP_RANGERMASTER)
return IID_AM_RANGERMASTER;
if (iid == IID_WP_AK112)
return IID_AM_AK112;
if (iid == IID_WP_AK74)
return IID_AM_AK74;
if (iid == IID_WP_DKS1)
return IID_AM_DKS1;
if (iid == IID_WP_MOONLIGHT)
return IID_AM_MOONLIGHT;
if (iid == IID_WP_SA80)
return IID_AM_SA80;
if (iid == IID_WP_GAUSERIFLE)
return IID_AM_GAUSERIFLE;
if (iid == IID_WP_PULSERIFLE)
return IID_AM_PULSERIFLE;
return IID_NONE;
};
float(float iid) WeaponMagQuant =
{
if (iid == IID_WP_USP)
return 12;
if (iid == IID_WP_DEAGLE)
return 7;
if (iid == IID_WP_NEEDLER)
return 15;
if (iid == IID_WP_ALIENBLASTER)
return 6;
if (iid == IID_WP_PIPERIFLE)
return 1;
if (iid == IID_WP_WINCHESTER)
return 2;
if (iid == IID_WP_MOSSBERG)
return 6;
if (iid == IID_WP_JACKHAMMER)
return 10;
if (iid == IID_WP_MP9)
return 30;
if (iid == IID_WP_MP7)
return 30;
if (iid == IID_WP_RANGERMASTER)
return 10;
if (iid == IID_WP_AK112)
return 24;
if (iid == IID_WP_AK74)
return 30;
if (iid == IID_WP_DKS1)
return 8;
if (iid == IID_WP_MOONLIGHT)
return 30;
if (iid == IID_WP_SA80)
return 30;
if (iid == IID_WP_GAUSERIFLE)
return 10;
if (iid == IID_WP_PULSERIFLE)
return 40;
return 0;
};
float(float iid) GetItemWeight =
{
if (iid == IID_NONE)
return 0;
if (iid == IID_WP_KNIFE)
return 1;
if (iid == IID_WP_AXE)
return 2;
if (iid == IID_WP_VIBROBLADE)
return 8;
if (iid == IID_WP_POWERAXE)
return 6;
if (iid == IID_WP_USP)
return 1;
if (iid == IID_WP_DEAGLE)
return 2;
if (iid == IID_WP_NEEDLER)
return 2;
if (iid == IID_WP_ALIENBLASTER)
return 2;
if (iid == IID_WP_PIPERIFLE)
return 3;
if (iid == IID_WP_WINCHESTER)
return 4;
if (iid == IID_WP_MOSSBERG)
return 5;
if (iid == IID_WP_JACKHAMMER)
return 6;
if (iid == IID_WP_MP9)
return 3;
if (iid == IID_WP_MP7)
return 3;
if (iid == IID_WP_RANGERMASTER)
return 5;
if (iid == IID_WP_AK112)
return 5;
if (iid == IID_WP_AK74)
return 5;
if (iid == IID_WP_DKS1)
return 7;
if (iid == IID_WP_MOONLIGHT)
return 5;
if (iid == IID_WP_SA80)
return 5;
if (iid == IID_WP_GAUSERIFLE)
return 9;
if (iid == IID_WP_PULSERIFLE)
return 10;
if (iid == IID_ARM_SHIRT)
return 3;
if (iid == IID_ARM_LEATHER)
return 5;
if (iid == IID_ARM_KEVLAR)
return 9;
if (iid == IID_ARM_METAL)
return 15;
if (iid == IID_ARM_COMBAT)
return 12;
if (iid == IID_ARM_BROTHERHOOD)
return 17;
if (iid == IID_ARM_FORCE)
return 6;
if (iid == IID_ARM_LPOWER)
return 20;
if (iid == IID_BUILD_MRAMMO)
return 2;
if (iid == IID_BUILD_SHIELDGEN)
return 4;
if (iid == IID_BUILD_AUTODOC)
return 3;
if (iid == IID_BUILD_ROBOFANG)
return 2;
// bprint(PRINT_MEDIUM, ftos(iid), " without a weight!\n");
return 0;
};
float(float item) GetItemsWeight =
{
local float iid;
iid = ToIID(item);
if (NotStackable(iid))
return GetItemWeight(iid);
else
return GetItemWeight(iid) * ToStatus(item);
};
string(float iid) GetItemName =
{
if (iid == IID_NONE)
return "nothing";
if (iid == IID_WP_TOOLKIT)
return "toolkit";
if (iid == IID_WP_KNIFE)
return "knife";
if (iid == IID_WP_AXE)
return "axe";
if (iid == IID_WP_VIBROBLADE)
return "ripper";
if (iid == IID_WP_POWERAXE)
return "poweraxe";
if (iid == IID_WP_USP)
return "1911";
if (iid == IID_WP_DEAGLE)
return "desert eagle";
if (iid == IID_WP_NEEDLER)
return "needler";
if (iid == IID_WP_ALIENBLASTER)
return "alien blaster";
if (iid == IID_WP_PIPERIFLE)
return "pipe rifle";
if (iid == IID_WP_WINCHESTER)
return "winchester";
if (iid == IID_WP_MOSSBERG)
return "mossberg";
if (iid == IID_WP_JACKHAMMER)
return "jackhammer";
if (iid == IID_WP_MP9)
return "mp9";
if (iid == IID_WP_MP7)
return "grease gun";
if (iid == IID_WP_RANGERMASTER)
return "rangemaster";
if (iid == IID_WP_AK112)
return "ak-112";
if (iid == IID_WP_AK74)
return "ak-74";
if (iid == IID_WP_DKS1)
return "dks-1";
if (iid == IID_WP_MOONLIGHT)
return "moonlight";
if (iid == IID_WP_SA80)
return "sa-80";
if (iid == IID_WP_GAUSERIFLE)
return "gauss rifle";
if (iid == IID_WP_PULSERIFLE)
return "laser carbine";
if (iid == IID_AM_USP)
return "ammo for 1911";
if (iid == IID_AM_DEAGLE)
return "ammo for desert eagle";
if (iid == IID_AM_NEEDLER)
return "ammo for needler";
if (iid == IID_AM_ALIENBLASTER)
return "ammo for alien blaster";
if (iid == IID_AM_PIPERIFLE)
return "ammo for pipe rifle";
if (iid == IID_AM_WINCHESTER)
return "ammo for winchester";
if (iid == IID_AM_MOSSBERG)
return "ammo for mossberg";
if (iid == IID_AM_JACKHAMMER)
return "ammo for jackhammer";
if (iid == IID_AM_MP9)
return "ammo for mp9";
if (iid == IID_AM_MP7)
return "ammo for grease gun";
if (iid == IID_AM_RANGERMASTER)
return "ammo for rangemaster";
if (iid == IID_AM_AK112)
return "ammo for ak-112";
if (iid == IID_AM_AK74)
return "ammo for ak-74";
if (iid == IID_AM_DKS1)
return "ammo for dks-1";
if (iid == IID_AM_MOONLIGHT)
return "ammo for moonlight";
if (iid == IID_AM_SA80)
return "ammo for sa-80";
if (iid == IID_AM_GAUSERIFLE)
return "ammo for gauss rifle";
if (iid == IID_AM_PULSERIFLE)
return "ammo for laser carbine";
if (iid == IID_GREN_FRAG)
return "frag grenade";
if (iid == IID_GREN_EMP)
return "emp grenade";
if (iid == IID_GREN_SMOKE)
return "smoke grenade";
if (iid == IID_GREN_FLASH)
return "flashbang";
if (iid == IID_ARM_SHIRT)
return "bulletproof shirt";
if (iid == IID_ARM_LEATHER)
return "leather armor";
if (iid == IID_ARM_KEVLAR)
return "kevlar armor";
if (iid == IID_ARM_METAL)
return "metal armor";
if (iid == IID_ARM_COMBAT)
return "combat armor";
if (iid == IID_ARM_BROTHERHOOD)
return "brotherhood armor";
if (iid == IID_ARM_FORCE)
return "force armor";
if (iid == IID_ARM_LPOWER)
return "light power armor";
if (iid == IID_CHEM_STIMPACK)
return "stimpack";
if (iid == IID_CHEM_MEDICALBAG)
return "medical bag";
if (iid == IID_CHEM_SUPERSTIM)
return "superstim";
if (iid == IID_CHEM_ADRENALINE)
return "adrenaline";
if (iid == IID_CHEM_PSYCHO)
return "psycho";
if (iid == IID_CHEM_BESERK)
return "beserk";
if (iid == IID_BUILD_MRAMMO)
return "mr. ammo";
if (iid == IID_BUILD_SHIELDGEN)
return "shield-gen";
if (iid == IID_BUILD_AUTODOC)
return "auto-doc";
if (iid == IID_BUILD_ROBOFANG)
return "robofang";
bprint(PRINT_MEDIUM, ftos(iid), " without a name!\n");
return "unknown";
};
float(float slotno, float iid) FitsInSlot =
{
if (slotno == 1 || slotno == 2)
return IsShootable(iid);
if (slotno == 3)
return IsArmor(iid);
return true;
};