===========================================================================
*/
-// WEAPONTODO: move to the .qh file
+
.float weapon_frametime;
float W_WeaponRateFactor()
// to free:
// call again with ""
// remove the ent
-
-//#define WEP_MODEL_FIRSTPERSON model // h_ // wep.WEP_MODEL_FIRSTPERSON
-//#define WEP_MODEL_THIRDPERSON model2 // v_ // wep.WEP_MODEL_THIRDPERSON
-//#define WEP_MODEL_PICKUP model3 // g_ // wep.WEP_MODEL_PICKUP
-//#define WEP_MODEL_SIMPLE mdl
-void CL_WeaponEntity_SetModel(entity wep)
+void CL_WeaponEntity_SetModel(string name)
{
float v_shot_idx;
- if(wep)
+ if (name != "")
{
// if there is a child entity, hide it until we're sure we use it
if (self.weaponentity)
self.weaponentity.model = "";
- setmodel(self, wep.WEP_MODEL_THIRDPERSON); // precision set below
+ setmodel(self, strcat("models/weapons/v_", name, ".md3")); // precision set below
v_shot_idx = gettagindex(self, "shot"); // used later
if(!v_shot_idx)
v_shot_idx = gettagindex(self, "tag_shot");
- setmodel(self, wep.WEP_MODEL_FIRSTPERSON); // precision set below
+ setmodel(self, strcat("models/weapons/h_", name, ".iqm")); // precision set below
// preset some defaults that work great for renamed zym files (which don't need an animinfo)
self.anim_fire1 = animfixfps(self, '0 1 0.01', '0 0 0');
self.anim_fire2 = animfixfps(self, '1 1 0.01', '0 0 0');
{
if (!self.weaponentity)
self.weaponentity = spawn();
- setmodel(self.weaponentity, wep.WEP_MODEL_THIRDPERSON); // precision does not matter
+ setmodel(self.weaponentity, strcat("models/weapons/v_", name, ".md3")); // precision does not matter
setattachment(self.weaponentity, self, "weapon");
}
else if(gettagindex(self, "tag_weapon"))
{
if (!self.weaponentity)
self.weaponentity = spawn();
- setmodel(self.weaponentity, wep.WEP_MODEL_THIRDPERSON); // precision does not matter
+ setmodel(self.weaponentity, strcat("models/weapons/v_", name, ".md3")); // precision does not matter
setattachment(self.weaponentity, self, "tag_weapon");
}
else
vector CL_Weapon_GetShotOrg(float wpn)
{
- entity oldself;
+ entity wi, oldself;
vector ret;
+ wi = get_weaponinfo(wpn);
oldself = self;
self = spawn();
- CL_WeaponEntity_SetModel(get_weaponinfo(wpn));
+ CL_WeaponEntity_SetModel(wi.mdl);
ret = self.movedir;
- CL_WeaponEntity_SetModel(world);
+ CL_WeaponEntity_SetModel("");
remove(self);
self = oldself;
return ret;
self.weaponentity.model = "";
return;
}
- if (self.weaponname != self.owner.weaponname || self.dmg != self.owner.modelindex || self.deadflag != self.owner.deadflag) // WEAPONTODO: get rid of .weaponname, handle model directly
+ if (self.weaponname != self.owner.weaponname || self.dmg != self.owner.modelindex || self.deadflag != self.owner.deadflag)
{
self.weaponname = self.owner.weaponname;
self.dmg = self.owner.modelindex;
self.deadflag = self.owner.deadflag;
- // WEAPONTODO: get weapon entity from here!
- //CL_WeaponEntity_SetModel(self.owner.weaponname);
+ CL_WeaponEntity_SetModel(self.owner.weaponname);
}
tb = (self.effects & (EF_TELEPORT_BIT | EF_RESTARTANIM_BIT));
self.switchingweapon = self.switchweapon;
entity newwep = get_weaponinfo(self.switchweapon);
- //self.items &= ~IT_AMMO;
- //self.items = self.items | (newwep.items & IT_AMMO);
-
// the two weapon entities will notice this has changed and update their models
self.weapon = self.switchweapon;
self.weaponname = newwep.mdl;
- self.bulletcounter = 0; // WEAPONTODO
+ self.bulletcounter = 0;
//self.ammo_field = newwep.ammo_field;
WEP_ACTION(self.switchweapon, WR_SETUP);
self.weaponentity.state = WS_RAISE;
else
self.clip_load = self.clip_size = 0;
- // VorteX: add player model weapon select frame here
- // setcustomframe(PlayerWeaponRaise);
weapon_thinkf(WFRAME_IDLE, newwep.switchdelay_raise, w_ready);
- //print(sprintf("W_WeaponFrame(): cvar: %s, value: %f\n", sprintf("g_balance_%s_switchdelay_raise", newwep.netname), cvar(sprintf("g_balance_%s_switchdelay_raise", newwep.netname))));
}
else if (self.weaponentity.state == WS_DROP)
{
{
// start switching!
self.switchingweapon = self.switchweapon;
-
entity oldwep = get_weaponinfo(self.weapon);
-
-#ifndef INDEPENDENT_ATTACK_FINISHED
+
+ // set up weapon switch think in the future, and start drop anim
+ #ifndef INDEPENDENT_ATTACK_FINISHED
if(ATTACK_FINISHED(self) <= time + self.weapon_frametime * 0.5)
{
-#endif
- sound (self, CH_WEAPON_SINGLE, "weapons/weapon_switch.wav", VOL_BASE, ATTN_NORM);
- self.weaponentity.state = WS_DROP;
- // set up weapon switch think in the future, and start drop anim
- weapon_thinkf(WFRAME_DONTCHANGE, oldwep.switchdelay_drop, w_clear);
- //print(sprintf("W_WeaponFrame(): cvar: %s, value: %f\n", sprintf("g_balance_%s_switchdelay_drop", oldwep.netname), cvar(sprintf("g_balance_%s_switchdelay_drop", oldwep.netname))));
-#ifndef INDEPENDENT_ATTACK_FINISHED
+ #endif
+ sound(self, CH_WEAPON_SINGLE, "weapons/weapon_switch.wav", VOL_BASE, ATTN_NORM);
+ self.weaponentity.state = WS_DROP;
+ weapon_thinkf(WFRAME_DONTCHANGE, oldwep.switchdelay_drop, w_clear);
+ #ifndef INDEPENDENT_ATTACK_FINISHED
}
-#endif
+ #endif
}
}
self.clip_load -= ammo_use;
self.(weapon_load[self.weapon]) = self.clip_load;
}
- else
+ else if(wep.ammo_field != ammo_none)
+ {
self.(wep.ammo_field) -= ammo_use;
+ if(self.(wep.ammo_field) < 0)
+ {
+ backtrace(sprintf(
+ "W_DecreaseAmmo(%.2f): '%s' subtracted too much %s from '%s', resulting with '%.2f' left... "
+ "Please notify Samual immediately with a copy of this backtrace!\n",
+ ammo_use,
+ wep.netname,
+ GetAmmoPicture(wep.ammo_field),
+ self.netname,
+ self.(wep.ammo_field)
+ ));
+ }
+ }
}
// weapon reloading code