mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-26 22:11:43 +00:00
- Fixed: Cheats in demos must not access the weapon slots.
- Fixed: S_ChannelEnded didn't check for a NULL SfxInfo. - Fixed: R_InitTables did a typecast to angle_t instead of fixed_t. - Fixed: PowerProtection and PowerDamage applied their defaults incorrectly. - Fixed: The damage type property didn't properly read its factor. SVN r1257 (trunk)
This commit is contained in:
parent
7b82745665
commit
402d0e5fa1
6 changed files with 36 additions and 13 deletions
|
@ -1,3 +1,12 @@
|
|||
October 7, 2008 (Changes by Graf Zahl)
|
||||
- Fixed: Cheats in demos must not access the weapon slots.
|
||||
- Fixed: S_ChannelEnded didn't check for a NULL SfxInfo.
|
||||
- Fixed: R_InitTables did a typecast to angle_t instead of fixed_t.
|
||||
|
||||
October 6, 2008 (Changes by Graf Zahl)
|
||||
- Fixed: PowerProtection and PowerDamage applied their defaults incorrectly.
|
||||
- Fixed: The damage type property didn't properly read its factor.
|
||||
|
||||
October 5, 2008 (Changes by Graf Zahl)
|
||||
- Finally has the right idea how to restore Doom's original clipping of projectiles
|
||||
against decorations without breaking anything newer:
|
||||
|
|
|
@ -1476,12 +1476,17 @@ void APowerDamage::ModifyDamage(int damage, FName damageType, int &newdamage, bo
|
|||
if (!passive && damage > 0)
|
||||
{
|
||||
DmgFactors * df = GetClass()->ActorInfo->DamageFactors;
|
||||
if (df != NULL)
|
||||
if (df != NULL && df->CountUsed() != 0)
|
||||
{
|
||||
const fixed_t * pdf = df->CheckKey(damageType);
|
||||
if (pdf== NULL && damageType != NAME_None) pdf = df->CheckKey(NAME_None);
|
||||
if (pdf == NULL) pdf = &def;
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
pdf = &def;
|
||||
}
|
||||
if (pdf != NULL)
|
||||
{
|
||||
damage = newdamage = FixedMul(damage, *pdf);
|
||||
if (*pdf > 0 && damage == 0) damage = newdamage = 1; // don't allow zero damage as result of an underflow
|
||||
if (Owner != NULL && *pdf > FRACUNIT) S_Sound(Owner, 5, ActiveSound, 1.0f, ATTN_NONE);
|
||||
|
@ -1530,12 +1535,15 @@ void APowerProtection::ModifyDamage(int damage, FName damageType, int &newdamage
|
|||
if (passive && damage > 0)
|
||||
{
|
||||
DmgFactors * df = GetClass()->ActorInfo->DamageFactors;
|
||||
if (df != NULL)
|
||||
if (df != NULL && df->CountUsed() != 0)
|
||||
{
|
||||
const fixed_t * pdf = df->CheckKey(damageType);
|
||||
if (pdf== NULL && damageType != NAME_None) pdf = df->CheckKey(NAME_None);
|
||||
if (pdf == NULL) pdf = &def;
|
||||
}
|
||||
else pdf = &def;
|
||||
|
||||
if (pdf != NULL)
|
||||
{
|
||||
damage = newdamage = FixedMul(damage, *pdf);
|
||||
if (Owner != NULL && *pdf < FRACUNIT) S_Sound(Owner, 5, ActiveSound, 1.0f, ATTN_NONE);
|
||||
}
|
||||
|
|
|
@ -737,8 +737,10 @@ void cht_Give (player_t *player, const char *name, int amount)
|
|||
// Give the weapon only if it belongs to the current game or
|
||||
// is in a weapon slot. Unfortunately this check only works in
|
||||
// singleplayer games because the weapon slots are stored locally.
|
||||
// In multiplayer games all weapons must be given.
|
||||
if (multiplayer || type->ActorInfo->GameFilter == GAME_Any ||
|
||||
// In multiplayer games or demors all weapons must be given because the state of
|
||||
// the weapon slots is not guaranteed to be the same when recording or playing back.
|
||||
if (multiplayer || demorecording || demoplayback ||
|
||||
type->ActorInfo->GameFilter == GAME_Any ||
|
||||
(type->ActorInfo->GameFilter & gameinfo.gametype) ||
|
||||
LocalWeapons.LocateWeapon(type, NULL, NULL))
|
||||
{
|
||||
|
|
|
@ -370,16 +370,16 @@ void R_InitTables (void)
|
|||
const double pimul = PI*2/FINEANGLES;
|
||||
|
||||
// viewangle tangent table
|
||||
finetangent[0] = (angle_t)(FRACUNIT*tan ((0.5-FINEANGLES/4)*pimul)+0.5);
|
||||
finetangent[0] = (fixed_t)(FRACUNIT*tan ((0.5-FINEANGLES/4)*pimul)+0.5);
|
||||
for (i = 1; i < FINEANGLES/2; i++)
|
||||
{
|
||||
finetangent[i] = (angle_t)(FRACUNIT*tan ((i-FINEANGLES/4)*pimul)+0.5);
|
||||
finetangent[i] = (fixed_t)(FRACUNIT*tan ((i-FINEANGLES/4)*pimul)+0.5);
|
||||
}
|
||||
|
||||
// finesine table
|
||||
for (i = 0; i < FINEANGLES/4; i++)
|
||||
{
|
||||
finesine[i] = (angle_t)(FRACUNIT * sin (i*pimul));
|
||||
finesine[i] = (fixed_t)(FRACUNIT * sin (i*pimul));
|
||||
}
|
||||
for (i = 0; i < FINEANGLES/4; i++)
|
||||
{
|
||||
|
|
|
@ -1854,7 +1854,7 @@ void S_ChannelEnded(FISoundChannel *ichan)
|
|||
{
|
||||
evicted = true;
|
||||
}
|
||||
else
|
||||
else if (schan->SfxInfo != NULL)
|
||||
{
|
||||
unsigned int pos = GSnd->GetPosition(schan);
|
||||
unsigned int len = GSnd->GetSampleLength(schan->SfxInfo->data);
|
||||
|
@ -1867,6 +1867,10 @@ void S_ChannelEnded(FISoundChannel *ichan)
|
|||
evicted = (pos < len);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
evicted = false;
|
||||
}
|
||||
if (!evicted)
|
||||
{
|
||||
S_ReturnChannel(schan);
|
||||
|
|
|
@ -1149,7 +1149,7 @@ DEFINE_PROPERTY(damagetype, S, Actor)
|
|||
DEFINE_PROPERTY(damagefactor, SF, Actor)
|
||||
{
|
||||
PROP_STRING_PARM(str, 0);
|
||||
PROP_FIXED_PARM(id, 0);
|
||||
PROP_FIXED_PARM(id, 1);
|
||||
|
||||
if (bag.Info->DamageFactors == NULL) bag.Info->DamageFactors=new DmgFactors;
|
||||
|
||||
|
|
Loading…
Reference in a new issue