mirror of
https://github.com/ZDoom/gzdoom-gles.git
synced 2024-11-25 05:31:00 +00:00
- fixed: armor factor application was done wrong.
- fixed: APROP_Invulnerable could only be set and unset but not checked. - fixed: Two sided polyobjects applied thrust to sctors in a way that did not work. SVN r2620 (trunk)
This commit is contained in:
parent
7baeeeaab5
commit
5647fed0cf
3 changed files with 25 additions and 8 deletions
|
@ -211,16 +211,17 @@ void ABasicArmorPickup::Serialize (FArchive &arc)
|
||||||
AInventory *ABasicArmorPickup::CreateCopy (AActor *other)
|
AInventory *ABasicArmorPickup::CreateCopy (AActor *other)
|
||||||
{
|
{
|
||||||
ABasicArmorPickup *copy = static_cast<ABasicArmorPickup *> (Super::CreateCopy (other));
|
ABasicArmorPickup *copy = static_cast<ABasicArmorPickup *> (Super::CreateCopy (other));
|
||||||
copy->SavePercent = SavePercent;
|
|
||||||
copy->SaveAmount = SaveAmount;
|
|
||||||
copy->MaxAbsorb = MaxAbsorb;
|
|
||||||
copy->MaxFullAbsorb = MaxFullAbsorb;
|
|
||||||
|
|
||||||
if (!(ItemFlags & IF_IGNORESKILL))
|
if (!(ItemFlags & IF_IGNORESKILL))
|
||||||
{
|
{
|
||||||
SaveAmount = FixedMul(SaveAmount, G_SkillProperty(SKILLP_ArmorFactor));
|
SaveAmount = FixedMul(SaveAmount, G_SkillProperty(SKILLP_ArmorFactor));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
copy->SavePercent = SavePercent;
|
||||||
|
copy->SaveAmount = SaveAmount;
|
||||||
|
copy->MaxAbsorb = MaxAbsorb;
|
||||||
|
copy->MaxFullAbsorb = MaxFullAbsorb;
|
||||||
|
|
||||||
return copy;
|
return copy;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -291,6 +292,12 @@ void ABasicArmorBonus::Serialize (FArchive &arc)
|
||||||
AInventory *ABasicArmorBonus::CreateCopy (AActor *other)
|
AInventory *ABasicArmorBonus::CreateCopy (AActor *other)
|
||||||
{
|
{
|
||||||
ABasicArmorBonus *copy = static_cast<ABasicArmorBonus *> (Super::CreateCopy (other));
|
ABasicArmorBonus *copy = static_cast<ABasicArmorBonus *> (Super::CreateCopy (other));
|
||||||
|
|
||||||
|
if (!(ItemFlags & IF_IGNORESKILL))
|
||||||
|
{
|
||||||
|
SaveAmount = FixedMul(SaveAmount, G_SkillProperty(SKILLP_ArmorFactor));
|
||||||
|
}
|
||||||
|
|
||||||
copy->SavePercent = SavePercent;
|
copy->SavePercent = SavePercent;
|
||||||
copy->SaveAmount = SaveAmount;
|
copy->SaveAmount = SaveAmount;
|
||||||
copy->MaxSaveAmount = MaxSaveAmount;
|
copy->MaxSaveAmount = MaxSaveAmount;
|
||||||
|
@ -299,10 +306,6 @@ AInventory *ABasicArmorBonus::CreateCopy (AActor *other)
|
||||||
copy->MaxAbsorb = MaxAbsorb;
|
copy->MaxAbsorb = MaxAbsorb;
|
||||||
copy->MaxFullAbsorb = MaxFullAbsorb;
|
copy->MaxFullAbsorb = MaxFullAbsorb;
|
||||||
|
|
||||||
if (!(ItemFlags & IF_IGNORESKILL))
|
|
||||||
{
|
|
||||||
SaveAmount = FixedMul(SaveAmount, G_SkillProperty(SKILLP_ArmorFactor));
|
|
||||||
}
|
|
||||||
return copy;
|
return copy;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2759,6 +2759,7 @@ int DLevelScript::GetActorProperty (int tid, int property)
|
||||||
// so pretends it's normal.
|
// so pretends it's normal.
|
||||||
return STYLE_Normal;
|
return STYLE_Normal;
|
||||||
case APROP_Gravity: return actor->gravity;
|
case APROP_Gravity: return actor->gravity;
|
||||||
|
case APROP_Invulnerable:return !!(actor->flags2 & MF2_INVULNERABLE);
|
||||||
case APROP_Ambush: return !!(actor->flags & MF_AMBUSH);
|
case APROP_Ambush: return !!(actor->flags & MF_AMBUSH);
|
||||||
case APROP_Dropped: return !!(actor->flags & MF_DROPPED);
|
case APROP_Dropped: return !!(actor->flags & MF_DROPPED);
|
||||||
case APROP_ChaseGoal: return !!(actor->flags5 & MF5_CHASEGOAL);
|
case APROP_ChaseGoal: return !!(actor->flags5 & MF5_CHASEGOAL);
|
||||||
|
@ -2820,6 +2821,7 @@ int DLevelScript::CheckActorProperty (int tid, int property, int value)
|
||||||
|
|
||||||
// Boolean values need to compare to a binary version of value
|
// Boolean values need to compare to a binary version of value
|
||||||
case APROP_Ambush:
|
case APROP_Ambush:
|
||||||
|
case APROP_Invulnerable:
|
||||||
case APROP_Dropped:
|
case APROP_Dropped:
|
||||||
case APROP_ChaseGoal:
|
case APROP_ChaseGoal:
|
||||||
case APROP_Frightened:
|
case APROP_Frightened:
|
||||||
|
|
|
@ -1245,6 +1245,7 @@ bool FPolyObj::CheckMobjBlocking (side_t *sd)
|
||||||
bool blocked;
|
bool blocked;
|
||||||
|
|
||||||
ld = sd->linedef;
|
ld = sd->linedef;
|
||||||
|
|
||||||
top = (ld->bbox[BOXTOP]-bmaporgy) >> MAPBLOCKSHIFT;
|
top = (ld->bbox[BOXTOP]-bmaporgy) >> MAPBLOCKSHIFT;
|
||||||
bottom = (ld->bbox[BOXBOTTOM]-bmaporgy) >> MAPBLOCKSHIFT;
|
bottom = (ld->bbox[BOXBOTTOM]-bmaporgy) >> MAPBLOCKSHIFT;
|
||||||
left = (ld->bbox[BOXLEFT]-bmaporgx) >> MAPBLOCKSHIFT;
|
left = (ld->bbox[BOXLEFT]-bmaporgx) >> MAPBLOCKSHIFT;
|
||||||
|
@ -1294,6 +1295,17 @@ bool FPolyObj::CheckMobjBlocking (side_t *sd)
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
// We have a two-sided linedef so we should only check one side
|
||||||
|
// so that the thrust from both sides doesn't cancel each other out.
|
||||||
|
// Best use the one facing the player and ignore the back side.
|
||||||
|
if (ld->sidedef[1] != NULL)
|
||||||
|
{
|
||||||
|
int side = P_PointOnLineSide(mobj->x, mobj->y, ld);
|
||||||
|
if (ld->sidedef[side] != sd)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
ThrustMobj (mobj, sd);
|
ThrustMobj (mobj, sd);
|
||||||
blocked = true;
|
blocked = true;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue