mirror of
https://github.com/ZDoom/gzdoom-gles.git
synced 2024-11-28 23:11:58 +00:00
- Added a DropAmmoFactor field to WeaponGiver so that ModifyDropAmount() can record the drop
amount modifier into it without fiddling with the actual AmmoGiveX fields. SVN r4246 (trunk)
This commit is contained in:
parent
163d8ba3e6
commit
d86b16d540
3 changed files with 32 additions and 37 deletions
|
@ -359,7 +359,17 @@ enum
|
||||||
WIF_BOT_BFG = 1<<28, // this is a BFG
|
WIF_BOT_BFG = 1<<28, // this is a BFG
|
||||||
};
|
};
|
||||||
|
|
||||||
#define S_LIGHTDONE 0
|
class AWeaponGiver : public AWeapon
|
||||||
|
{
|
||||||
|
DECLARE_CLASS(AWeaponGiver, AWeapon)
|
||||||
|
|
||||||
|
public:
|
||||||
|
bool TryPickup(AActor *&toucher);
|
||||||
|
void Serialize(FArchive &arc);
|
||||||
|
|
||||||
|
fixed_t DropAmmoFactor;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
// Health is some item that gives the player health when picked up.
|
// Health is some item that gives the player health when picked up.
|
||||||
class AHealth : public AInventory
|
class AHealth : public AInventory
|
||||||
|
|
|
@ -705,16 +705,17 @@ FState *AWeapon::GetZoomState ()
|
||||||
|
|
||||||
/* Weapon giver ***********************************************************/
|
/* Weapon giver ***********************************************************/
|
||||||
|
|
||||||
class AWeaponGiver : public AWeapon
|
|
||||||
{
|
|
||||||
DECLARE_CLASS(AWeaponGiver, AWeapon)
|
|
||||||
|
|
||||||
public:
|
|
||||||
bool TryPickup(AActor *&toucher);
|
|
||||||
};
|
|
||||||
|
|
||||||
IMPLEMENT_CLASS(AWeaponGiver)
|
IMPLEMENT_CLASS(AWeaponGiver)
|
||||||
|
|
||||||
|
void AWeaponGiver::Serialize(FArchive &arc)
|
||||||
|
{
|
||||||
|
Super::Serialize(arc);
|
||||||
|
if (SaveVersion >= 4246)
|
||||||
|
{
|
||||||
|
arc << DropAmmoFactor;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool AWeaponGiver::TryPickup(AActor *&toucher)
|
bool AWeaponGiver::TryPickup(AActor *&toucher)
|
||||||
{
|
{
|
||||||
FDropItem *di = GetDropItems();
|
FDropItem *di = GetDropItems();
|
||||||
|
@ -734,36 +735,15 @@ bool AWeaponGiver::TryPickup(AActor *&toucher)
|
||||||
weap->ItemFlags &= ~IF_ALWAYSPICKUP; // use the flag of this item only.
|
weap->ItemFlags &= ~IF_ALWAYSPICKUP; // use the flag of this item only.
|
||||||
weap->flags = (weap->flags & ~MF_DROPPED) | (this->flags & MF_DROPPED);
|
weap->flags = (weap->flags & ~MF_DROPPED) | (this->flags & MF_DROPPED);
|
||||||
|
|
||||||
// If we're not overriding the ammo given amounts, then apply dropped
|
// If our ammo gives are non-negative, transfer them to the real weapon.
|
||||||
// item modifications if needed.
|
if (AmmoGive1 >= 0) weap->AmmoGive1 = AmmoGive1;
|
||||||
if (weap->flags & MF_DROPPED)
|
if (AmmoGive2 >= 0) weap->AmmoGive2 = AmmoGive2;
|
||||||
{
|
|
||||||
dropammofactor = G_SkillProperty(SKILLP_DropAmmoFactor);
|
|
||||||
if (dropammofactor < 0)
|
|
||||||
{
|
|
||||||
dropammofactor = FRACUNIT/2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
dropammofactor = FRACUNIT;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (AmmoGive1 < 0)
|
// If DropAmmoFactor is non-negative, modify the given ammo amounts.
|
||||||
|
if (DropAmmoFactor > 0)
|
||||||
{
|
{
|
||||||
weap->AmmoGive1 = FixedMul(weap->AmmoGive1, dropammofactor);
|
weap->AmmoGive1 = FixedMul(weap->AmmoGive1, DropAmmoFactor);
|
||||||
}
|
weap->AmmoGive2 = FixedMul(weap->AmmoGive2, DropAmmoFactor);
|
||||||
else
|
|
||||||
{
|
|
||||||
weap->AmmoGive1 = AmmoGive1;
|
|
||||||
}
|
|
||||||
if (AmmoGive2 < 0)
|
|
||||||
{
|
|
||||||
weap->AmmoGive2 = FixedMul(weap->AmmoGive2, dropammofactor);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
weap->AmmoGive2 = AmmoGive2;
|
|
||||||
}
|
}
|
||||||
weap->BecomeItem();
|
weap->BecomeItem();
|
||||||
}
|
}
|
||||||
|
|
|
@ -3025,6 +3025,11 @@ void ModifyDropAmount(AInventory *inv, int dropamount)
|
||||||
inv->Amount = inv->GetClass()->Meta.GetMetaInt (AIMETA_DropAmount, MAX(1, FixedMul(inv->Amount, dropammofactor)));
|
inv->Amount = inv->GetClass()->Meta.GetMetaInt (AIMETA_DropAmount, MAX(1, FixedMul(inv->Amount, dropammofactor)));
|
||||||
inv->ItemFlags |= flagmask;
|
inv->ItemFlags |= flagmask;
|
||||||
}
|
}
|
||||||
|
else if (inv->IsKindOf (RUNTIME_CLASS(AWeaponGiver)))
|
||||||
|
{
|
||||||
|
static_cast<AWeaponGiver *>(inv)->DropAmmoFactor = dropammofactor;
|
||||||
|
inv->ItemFlags |= flagmask;
|
||||||
|
}
|
||||||
else if (inv->IsKindOf (RUNTIME_CLASS(AWeapon)))
|
else if (inv->IsKindOf (RUNTIME_CLASS(AWeapon)))
|
||||||
{
|
{
|
||||||
// The same goes for ammo from a weapon.
|
// The same goes for ammo from a weapon.
|
||||||
|
|
Loading…
Reference in a new issue