mirror of
https://github.com/ZDoom/gzdoom-gles.git
synced 2024-11-30 16:01:49 +00:00
- Fixed: ActorFlagSetOrReset() wasn't receiving the + or - character from
ParseActorProperties(). - Fixed: The decorate FindFlag() function returned flags from ActorFlags instead of the passed flags set. - Fixed: The CHT_CHAINSAW, CHT_POWER, CHT_HEALTH, and CHT_RESSURECT needed NULL player->mo checks. - Fixed: The "give all" command didn't give the backpack in Doom, and it must give the backpack before giving ammo. - Fixed: P_SetPsprite() must not call the action function if the player is not attached to an actor. This can happen, for instance, if the level is destroyed while the player is holding a powered-up Phoenix Rod. As part of its EndPowerup() function, it sets the psprite to the regular version, but the player actor has already been destroyed. - Fixed: FinishThingdef() needs to check for valid names, because weapons could have inherited valid pointers from their superclass. - Fixed: fuglyname didn't work. - Fixed: Redefining $ambient sounds leaked memory. - Added Jim's crashcatcher.c fix for better shell support. - VC7.1 seems to have no trouble distinguishing between passing a (const TypeInfo *) reference to operator<< and the generic, templated (object *) version, so a few places that can benefit from it now use it. I believe VC6 had problems with this, which is why I didn't do it all along. The function's implementation was also moved out of dobject.cpp and into farchive.cpp. - Fixed: UnpackPixels() unpacked all chunks in a byte, which is wrong for the last byte in a row if the image width is not an even multiple of the number pixels per byte. - Fixed: P_TranslateLineDef() should only clear monster activation for secret useable lines, not crossable lines. - Fixed: Some leftover P_IsHostile() calls still needed to be rewritten. - Fixed: AWeaponHolder::Serialize() wrote the class type in all circumstances. SVN r20 (trunk)
This commit is contained in:
parent
4acc8a6954
commit
09c28e5bf9
19 changed files with 176 additions and 103 deletions
|
@ -1,3 +1,36 @@
|
||||||
|
March 13, 2006
|
||||||
|
- Fixed: ActorFlagSetOrReset() wasn't receiving the + or - character from
|
||||||
|
ParseActorProperties().
|
||||||
|
- Fixed: The decorate FindFlag() function returned flags from ActorFlags
|
||||||
|
instead of the passed flags set.
|
||||||
|
- Fixed: The CHT_CHAINSAW, CHT_POWER, CHT_HEALTH, and CHT_RESSURECT needed
|
||||||
|
NULL player->mo checks.
|
||||||
|
- Fixed: The "give all" command didn't give the backpack in Doom, and it
|
||||||
|
must give the backpack before giving ammo.
|
||||||
|
- Fixed: P_SetPsprite() must not call the action function if the player is
|
||||||
|
not attached to an actor. This can happen, for instance, if the level is
|
||||||
|
destroyed while the player is holding a powered-up Phoenix Rod. As part
|
||||||
|
of its EndPowerup() function, it sets the psprite to the regular version,
|
||||||
|
but the player actor has already been destroyed.
|
||||||
|
- Fixed: FinishThingdef() needs to check for valid names, because weapons
|
||||||
|
could have inherited valid pointers from their superclass.
|
||||||
|
- Fixed: fuglyname didn't work.
|
||||||
|
- Fixed: Redefining $ambient sounds leaked memory.
|
||||||
|
- Added Jim's crashcatcher.c fix for better shell support.
|
||||||
|
- VC7.1 seems to have no trouble distinguishing between passing a (const
|
||||||
|
TypeInfo *) reference to operator<< and the generic, templated (object *)
|
||||||
|
version, so a few places that can benefit from it now use it. I believe
|
||||||
|
VC6 had problems with this, which is why I didn't do it all along. The
|
||||||
|
function's implementation was also moved out of dobject.cpp and into
|
||||||
|
farchive.cpp.
|
||||||
|
- Fixed: UnpackPixels() unpacked all chunks in a byte, which is wrong for the
|
||||||
|
last byte in a row if the image width is not an even multiple of the number
|
||||||
|
pixels per byte.
|
||||||
|
- Fixed: P_TranslateLineDef() should only clear monster activation for secret
|
||||||
|
useable lines, not crossable lines.
|
||||||
|
- Fixed: Some leftover P_IsHostile() calls still needed to be rewritten.
|
||||||
|
- Fixed: AWeaponHolder::Serialize() wrote the class type in all circumstances.
|
||||||
|
|
||||||
March 12, 2006
|
March 12, 2006
|
||||||
- Fixed: A_SpawnItem() should use CopyFriendliness().
|
- Fixed: A_SpawnItem() should use CopyFriendliness().
|
||||||
- Fixed: AExplosiveBarrel should have MF2_MCROSS set.
|
- Fixed: AExplosiveBarrel should have MF2_MCROSS set.
|
||||||
|
|
|
@ -702,19 +702,6 @@ void DObject::CheckIfSerialized () const
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
FArchive &operator<< (FArchive &arc, const TypeInfo * &info)
|
|
||||||
{
|
|
||||||
if (arc.IsStoring ())
|
|
||||||
{
|
|
||||||
arc.UserWriteClass (info);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
arc.UserReadClass (info);
|
|
||||||
}
|
|
||||||
return arc;
|
|
||||||
}
|
|
||||||
|
|
||||||
ADD_STAT (destroys, out)
|
ADD_STAT (destroys, out)
|
||||||
{
|
{
|
||||||
sprintf (out, "Pointer fixing: %d in %04.1f ms",
|
sprintf (out, "Pointer fixing: %d in %04.1f ms",
|
||||||
|
|
|
@ -1420,3 +1420,16 @@ void FArchive::UserReadClass (const TypeInfo *&type)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FArchive &operator<< (FArchive &arc, const TypeInfo * &info)
|
||||||
|
{
|
||||||
|
if (arc.IsStoring ())
|
||||||
|
{
|
||||||
|
arc.UserWriteClass (info);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
arc.UserReadClass (info);
|
||||||
|
}
|
||||||
|
return arc;
|
||||||
|
}
|
||||||
|
|
|
@ -1337,7 +1337,6 @@ void A_FireBFG (AActor *actor)
|
||||||
player->userinfo.aimdist = storedaimdist;
|
player->userinfo.aimdist = storedaimdist;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool thebfugu;
|
|
||||||
int EvalExpressionI (int id, AActor *self);
|
int EvalExpressionI (int id, AActor *self);
|
||||||
//
|
//
|
||||||
// A_BFGSpray
|
// A_BFGSpray
|
||||||
|
|
|
@ -150,14 +150,7 @@ END_DEFAULTS
|
||||||
void AHeresiarch::Serialize (FArchive &arc)
|
void AHeresiarch::Serialize (FArchive &arc)
|
||||||
{
|
{
|
||||||
Super::Serialize (arc);
|
Super::Serialize (arc);
|
||||||
if (arc.IsStoring())
|
arc << StopBall;
|
||||||
{
|
|
||||||
arc.UserWriteClass (StopBall);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
arc.UserReadClass (StopBall);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void AHeresiarch::Die (AActor *source, AActor *inflictor)
|
void AHeresiarch::Die (AActor *source, AActor *inflictor)
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
#include "s_sound.h"
|
#include "s_sound.h"
|
||||||
#include "p_local.h"
|
#include "p_local.h"
|
||||||
#include "p_lnspec.h"
|
#include "p_lnspec.h"
|
||||||
|
#include "a_hexenglobal.h"
|
||||||
|
|
||||||
static FRandom pr_pottery ("PotteryExplode");
|
static FRandom pr_pottery ("PotteryExplode");
|
||||||
static FRandom pr_bit ("PotteryChooseBit");
|
static FRandom pr_bit ("PotteryChooseBit");
|
||||||
|
|
|
@ -23,15 +23,7 @@ END_DEFAULTS
|
||||||
void AFourthWeaponPiece::Serialize (FArchive &arc)
|
void AFourthWeaponPiece::Serialize (FArchive &arc)
|
||||||
{
|
{
|
||||||
Super::Serialize (arc);
|
Super::Serialize (arc);
|
||||||
if (arc.IsStoring ())
|
arc << FourthWeaponClass << PieceValue << TempFourthWeapon;
|
||||||
{
|
|
||||||
arc.UserWriteClass (FourthWeaponClass);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
arc.UserReadClass (FourthWeaponClass);
|
|
||||||
}
|
|
||||||
arc << PieceValue << TempFourthWeapon;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *AFourthWeaponPiece::PickupMessage ()
|
const char *AFourthWeaponPiece::PickupMessage ()
|
||||||
|
|
|
@ -16,9 +16,7 @@ public:
|
||||||
void Serialize (FArchive &arc)
|
void Serialize (FArchive &arc)
|
||||||
{
|
{
|
||||||
Super::Serialize(arc);
|
Super::Serialize(arc);
|
||||||
arc << PieceMask ;
|
arc << PieceMask << PieceWeapon;
|
||||||
if (arc.IsStoring()) arc.UserWriteClass(PieceWeapon);
|
|
||||||
else arc.UserWriteClass(PieceWeapon);
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -36,9 +34,7 @@ END_DEFAULTS
|
||||||
void AWeaponPiece::Serialize (FArchive &arc)
|
void AWeaponPiece::Serialize (FArchive &arc)
|
||||||
{
|
{
|
||||||
Super::Serialize (arc);
|
Super::Serialize (arc);
|
||||||
if (arc.IsStoring()) arc.UserWriteClass(WeaponClass); else arc.UserReadClass(WeaponClass);
|
arc << WeaponClass << FullWeapon << PieceValue;
|
||||||
arc << FullWeapon;
|
|
||||||
arc << PieceValue;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
|
|
@ -162,12 +162,15 @@ void cht_DoCheat (player_t *player, int cheat)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CHT_CHAINSAW:
|
case CHT_CHAINSAW:
|
||||||
|
if (player->mo != NULL)
|
||||||
|
{
|
||||||
type = TypeInfo::FindType ("Chainsaw");
|
type = TypeInfo::FindType ("Chainsaw");
|
||||||
if (player->mo->FindInventory (type) == NULL)
|
if (player->mo->FindInventory (type) == NULL)
|
||||||
{
|
{
|
||||||
player->mo->GiveInventoryType (type);
|
player->mo->GiveInventoryType (type);
|
||||||
}
|
}
|
||||||
msg = GStrings("STSTR_CHOPPERS");
|
msg = GStrings("STSTR_CHOPPERS");
|
||||||
|
}
|
||||||
// [RH] The original cheat also set powers[pw_invulnerability] to true.
|
// [RH] The original cheat also set powers[pw_invulnerability] to true.
|
||||||
// Since this is a timer and not a boolean, it effectively turned off
|
// Since this is a timer and not a boolean, it effectively turned off
|
||||||
// the invulnerability powerup, although it looks like it was meant to
|
// the invulnerability powerup, although it looks like it was meant to
|
||||||
|
@ -175,6 +178,8 @@ void cht_DoCheat (player_t *player, int cheat)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CHT_POWER:
|
case CHT_POWER:
|
||||||
|
if (player->mo != NULL)
|
||||||
|
{
|
||||||
item = player->mo->FindInventory (RUNTIME_CLASS(APowerWeaponLevel2));
|
item = player->mo->FindInventory (RUNTIME_CLASS(APowerWeaponLevel2));
|
||||||
if (item != NULL)
|
if (item != NULL)
|
||||||
{
|
{
|
||||||
|
@ -186,6 +191,7 @@ void cht_DoCheat (player_t *player, int cheat)
|
||||||
player->mo->GiveInventoryType (RUNTIME_CLASS(APowerWeaponLevel2));
|
player->mo->GiveInventoryType (RUNTIME_CLASS(APowerWeaponLevel2));
|
||||||
msg = GStrings("TXT_CHEATPOWERON");
|
msg = GStrings("TXT_CHEATPOWERON");
|
||||||
}
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CHT_IDKFA:
|
case CHT_IDKFA:
|
||||||
|
@ -250,8 +256,11 @@ void cht_DoCheat (player_t *player, int cheat)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CHT_HEALTH:
|
case CHT_HEALTH:
|
||||||
|
if (player->mo != NULL)
|
||||||
|
{
|
||||||
player->health = player->mo->health = player->mo->GetDefault()->health;
|
player->health = player->mo->health = player->mo->GetDefault()->health;
|
||||||
msg = GStrings("TXT_CHEATHEALTH");
|
msg = GStrings("TXT_CHEATHEALTH");
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CHT_KEYS:
|
case CHT_KEYS:
|
||||||
|
@ -261,7 +270,7 @@ void cht_DoCheat (player_t *player, int cheat)
|
||||||
|
|
||||||
// [GRB]
|
// [GRB]
|
||||||
case CHT_RESSURECT:
|
case CHT_RESSURECT:
|
||||||
if (player->playerstate != PST_LIVE)
|
if (player->playerstate != PST_LIVE && player->mo != NULL)
|
||||||
{
|
{
|
||||||
player->playerstate = PST_LIVE;
|
player->playerstate = PST_LIVE;
|
||||||
player->health = player->mo->health = player->mo->GetDefault()->health;
|
player->health = player->mo->health = player->mo->GetDefault()->health;
|
||||||
|
@ -274,7 +283,7 @@ void cht_DoCheat (player_t *player, int cheat)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CHT_TAKEWEAPS:
|
case CHT_TAKEWEAPS:
|
||||||
if (player->morphTics)
|
if (player->morphTics || player->mo != NULL)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -314,7 +323,7 @@ void cht_DoCheat (player_t *player, int cheat)
|
||||||
case CHT_MDK:
|
case CHT_MDK:
|
||||||
if (player->mo == NULL)
|
if (player->mo == NULL)
|
||||||
{
|
{
|
||||||
Printf ("MDK won't work outside of a game.\n");
|
Printf ("What do you want to kill outside of a game?\n");
|
||||||
}
|
}
|
||||||
else if (!deathmatch)
|
else if (!deathmatch)
|
||||||
{
|
{
|
||||||
|
@ -456,6 +465,34 @@ void cht_Give (player_t *player, char *name, int amount)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (giveall || stricmp (name, "backpack") == 0)
|
||||||
|
{
|
||||||
|
// Select the correct type of backpack based on the game
|
||||||
|
if (gameinfo.gametype == GAME_Heretic)
|
||||||
|
{
|
||||||
|
type = TypeInfo::FindType ("BagOfHolding");
|
||||||
|
}
|
||||||
|
else if (gameinfo.gametype == GAME_Strife)
|
||||||
|
{
|
||||||
|
type = TypeInfo::FindType ("AmmoSatchel");
|
||||||
|
}
|
||||||
|
else if (gameinfo.gametype == GAME_Doom)
|
||||||
|
{
|
||||||
|
type = TypeInfo::FindType ("Backpack");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{ // Hexen doesn't have a backpack, foo!
|
||||||
|
type = NULL;
|
||||||
|
}
|
||||||
|
if (type != NULL)
|
||||||
|
{
|
||||||
|
GiveSpawner (player, type, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!giveall)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (giveall || stricmp (name, "ammo") == 0)
|
if (giveall || stricmp (name, "ammo") == 0)
|
||||||
{
|
{
|
||||||
// Find every unique type of ammo. Give it to the player if
|
// Find every unique type of ammo. Give it to the player if
|
||||||
|
@ -596,23 +633,6 @@ void cht_Give (player_t *player, char *name, int amount)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (giveall || stricmp (name, "backpack") == 0)
|
|
||||||
{
|
|
||||||
// Select the correct type of backpack based on the game
|
|
||||||
if (gameinfo.gametype == GAME_Heretic)
|
|
||||||
{
|
|
||||||
name = "BagOfHolding";
|
|
||||||
}
|
|
||||||
else if (gameinfo.gametype == GAME_Strife)
|
|
||||||
{
|
|
||||||
name = "AmmoSatchel";
|
|
||||||
}
|
|
||||||
else if (gameinfo.gametype == GAME_Hexen && giveall)
|
|
||||||
{ // Hexen doesn't have a backpack, foo!
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
type = TypeInfo::IFindType (name);
|
type = TypeInfo::IFindType (name);
|
||||||
if (type == NULL || !type->IsDescendantOf (RUNTIME_CLASS(AInventory)))
|
if (type == NULL || !type->IsDescendantOf (RUNTIME_CLASS(AInventory)))
|
||||||
{
|
{
|
||||||
|
|
|
@ -869,6 +869,7 @@ static void UnpackPixels (int width, int bytesPerRow, int bitdepth, BYTE *row)
|
||||||
{
|
{
|
||||||
BYTE *out, *in;
|
BYTE *out, *in;
|
||||||
BYTE pack;
|
BYTE pack;
|
||||||
|
int lastbyte;
|
||||||
|
|
||||||
out = row + width;
|
out = row + width;
|
||||||
in = row + bytesPerRow;
|
in = row + bytesPerRow;
|
||||||
|
@ -876,6 +877,22 @@ static void UnpackPixels (int width, int bytesPerRow, int bitdepth, BYTE *row)
|
||||||
switch (bitdepth)
|
switch (bitdepth)
|
||||||
{
|
{
|
||||||
case 1:
|
case 1:
|
||||||
|
|
||||||
|
lastbyte=width&7;
|
||||||
|
if (lastbyte!=0)
|
||||||
|
{
|
||||||
|
in--;
|
||||||
|
pack = *in;
|
||||||
|
out-=lastbyte;
|
||||||
|
out[0] = (pack >> 7) & 1;
|
||||||
|
if (lastbyte >= 2) out[1] = (pack >> 6) & 1;
|
||||||
|
if (lastbyte >= 3) out[2] = (pack >> 5) & 1;
|
||||||
|
if (lastbyte >= 4) out[3] = (pack >> 4) & 1;
|
||||||
|
if (lastbyte >= 5) out[4] = (pack >> 3) & 1;
|
||||||
|
if (lastbyte >= 6) out[5] = (pack >> 2) & 1;
|
||||||
|
if (lastbyte == 7) out[6] = (pack >> 1) & 1;
|
||||||
|
}
|
||||||
|
|
||||||
while (in-- > row)
|
while (in-- > row)
|
||||||
{
|
{
|
||||||
pack = *in;
|
pack = *in;
|
||||||
|
@ -892,6 +909,18 @@ static void UnpackPixels (int width, int bytesPerRow, int bitdepth, BYTE *row)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 2:
|
case 2:
|
||||||
|
|
||||||
|
lastbyte=width&3;
|
||||||
|
if (lastbyte!=0)
|
||||||
|
{
|
||||||
|
in--;
|
||||||
|
pack = *in;
|
||||||
|
out-=lastbyte;
|
||||||
|
out[0] = pack >> 6;
|
||||||
|
if (lastbyte >= 2) out[1] = (pack >> 4) & 3;
|
||||||
|
if (lastbyte == 3) out[2] = (pack >> 2) & 3;
|
||||||
|
}
|
||||||
|
|
||||||
while (in-- > row)
|
while (in-- > row)
|
||||||
{
|
{
|
||||||
pack = *in;
|
pack = *in;
|
||||||
|
@ -904,6 +933,15 @@ static void UnpackPixels (int width, int bytesPerRow, int bitdepth, BYTE *row)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 4:
|
case 4:
|
||||||
|
lastbyte=width&1;
|
||||||
|
if (lastbyte!=0)
|
||||||
|
{
|
||||||
|
in--;
|
||||||
|
pack = *in;
|
||||||
|
out-=lastbyte;
|
||||||
|
out[0] = pack >> 4;
|
||||||
|
}
|
||||||
|
|
||||||
while (in-- > row)
|
while (in-- > row)
|
||||||
{
|
{
|
||||||
pack = *in;
|
pack = *in;
|
||||||
|
|
|
@ -34,6 +34,8 @@ public:
|
||||||
int SetName (const char *text, bool noCreate) { return Index = FindName (text, false); }
|
int SetName (const char *text, bool noCreate) { return Index = FindName (text, false); }
|
||||||
int SetName (const string &text, bool noCreate) { return Index = FindName (text.GetChars(), false); }
|
int SetName (const string &text, bool noCreate) { return Index = FindName (text.GetChars(), false); }
|
||||||
|
|
||||||
|
bool IsValidName() const { return (unsigned int)Index < NameArray.Size(); }
|
||||||
|
|
||||||
// Note that the comparison operators compare the names' indices, not
|
// Note that the comparison operators compare the names' indices, not
|
||||||
// their text, so they cannot be used to do a lexicographical sort.
|
// their text, so they cannot be used to do a lexicographical sort.
|
||||||
bool operator == (const name &other) const { return Index == other.Index; }
|
bool operator == (const name &other) const { return Index == other.Index; }
|
||||||
|
|
|
@ -1195,7 +1195,7 @@ bool AActor::OkayToSwitchTarget (AActor *other)
|
||||||
if ((master != NULL && other->IsA(master->GetClass())) || // don't attack your master (or others of its type)
|
if ((master != NULL && other->IsA(master->GetClass())) || // don't attack your master (or others of its type)
|
||||||
(other->master != NULL && IsA(other->master->GetClass()))) // don't attack your minion (or those of others of your type)
|
(other->master != NULL && IsA(other->master->GetClass()))) // don't attack your minion (or those of others of your type)
|
||||||
{
|
{
|
||||||
if (!P_IsHostile(this, other) && // allow target switch if other is considered hostile
|
if (!IsHostile (other) && // allow target switch if other is considered hostile
|
||||||
(other->tid != TIDtoHate || TIDtoHate == 0) && // or has the tid we hate
|
(other->tid != TIDtoHate || TIDtoHate == 0) && // or has the tid we hate
|
||||||
other->TIDtoHate == TIDtoHate) // or has different hate information
|
other->TIDtoHate == TIDtoHate) // or has different hate information
|
||||||
{
|
{
|
||||||
|
@ -1205,7 +1205,7 @@ bool AActor::OkayToSwitchTarget (AActor *other)
|
||||||
|
|
||||||
if ((other->flags3 & MF3_NOTARGET) &&
|
if ((other->flags3 & MF3_NOTARGET) &&
|
||||||
(other->tid != TIDtoHate || TIDtoHate == 0) &&
|
(other->tid != TIDtoHate || TIDtoHate == 0) &&
|
||||||
!P_IsHostile (this, other))
|
!IsHostile (other))
|
||||||
return false;
|
return false;
|
||||||
if (threshold != 0 && !(flags4 & MF4_QUICKTORETALIATE))
|
if (threshold != 0 && !(flags4 & MF4_QUICKTORETALIATE))
|
||||||
return false;
|
return false;
|
||||||
|
@ -1214,7 +1214,7 @@ bool AActor::OkayToSwitchTarget (AActor *other)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if ((gameinfo.gametype == GAME_Strife || infighting < 0) &&
|
if ((gameinfo.gametype == GAME_Strife || infighting < 0) &&
|
||||||
other->player == NULL && !P_IsHostile (this, other))
|
other->player == NULL && !IsHostile (other))
|
||||||
{
|
{
|
||||||
return false; // Strife & infighting off: Non-friendlies don't target other non-friendlies
|
return false; // Strife & infighting off: Non-friendlies don't target other non-friendlies
|
||||||
}
|
}
|
||||||
|
|
|
@ -945,7 +945,7 @@ BOOL PIT_CheckThing (AActor *thing)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Monsters that are clearly hostile can always hurt each other
|
// Monsters that are clearly hostile can always hurt each other
|
||||||
if (!P_IsHostile(thing, tmthing->target))
|
if (!thing->IsHostile (tmthing->target))
|
||||||
{
|
{
|
||||||
// The same if the shooter hates the target
|
// The same if the shooter hates the target
|
||||||
if (thing->tid == 0 || tmthing->target->tid != thing->tid)
|
if (thing->tid == 0 || tmthing->target->tid != thing->tid)
|
||||||
|
@ -972,7 +972,7 @@ BOOL PIT_CheckThing (AActor *thing)
|
||||||
if (thing->GetSpecies() == tmthing->target->GetSpecies())
|
if (thing->GetSpecies() == tmthing->target->GetSpecies())
|
||||||
{
|
{
|
||||||
// Don't hurt same species or any relative
|
// Don't hurt same species or any relative
|
||||||
if (!P_IsHostile(thing, tmthing->target))
|
if (!thing->IsHostile (tmthing->target))
|
||||||
{
|
{
|
||||||
// But only if the target isn't one's hostile.
|
// But only if the target isn't one's hostile.
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -4484,7 +4484,7 @@ bool AActor::IsFriend (AActor *other)
|
||||||
//
|
//
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
|
||||||
bool P_IsHostile (AActor *other)
|
bool AActor::IsHostile (AActor *other)
|
||||||
{
|
{
|
||||||
// Both monsters are non-friendlies so hostilities depend on infighting settings
|
// Both monsters are non-friendlies so hostilities depend on infighting settings
|
||||||
if (!((flags | other->flags) & MF_FRIENDLY)) return false;
|
if (!((flags | other->flags) & MF_FRIENDLY)) return false;
|
||||||
|
@ -4493,8 +4493,8 @@ bool P_IsHostile (AActor *other)
|
||||||
if (flags & other->flags & MF_FRIENDLY)
|
if (flags & other->flags & MF_FRIENDLY)
|
||||||
{
|
{
|
||||||
return deathmatch &&
|
return deathmatch &&
|
||||||
self->FriendPlayer != other->FriendPlayer &&
|
FriendPlayer != other->FriendPlayer &&
|
||||||
self->FriendPlayer !=0 &&
|
FriendPlayer !=0 &&
|
||||||
other->FriendPlayer != 0;
|
other->FriendPlayer != 0;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -125,9 +125,12 @@ void P_SetPsprite (player_t *player, int position, FState *state)
|
||||||
// Yes, I know this is truly awful but it is the only method I can think of
|
// Yes, I know this is truly awful but it is the only method I can think of
|
||||||
// that does not involve changing stuff throughout the code.
|
// that does not involve changing stuff throughout the code.
|
||||||
// Of course this should be rewritten ASAP.
|
// Of course this should be rewritten ASAP.
|
||||||
CallingState=state;
|
CallingState = state;
|
||||||
// Call action routine.
|
// Call action routine.
|
||||||
|
if (player->mo != NULL)
|
||||||
|
{
|
||||||
state->GetAction() (player->mo);
|
state->GetAction() (player->mo);
|
||||||
|
}
|
||||||
if (!psp->state)
|
if (!psp->state)
|
||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -116,13 +116,6 @@ void P_TranslateLineDef (line_t *ld, maplinedef_t *mld)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* if (special == 52 || special == 124 || special == 51 || special == 11)
|
|
||||||
{
|
|
||||||
Printf ("Line %d has special %d (%d,%d)-(%d,%d)\n", ld-lines, special,
|
|
||||||
vertexes[mld->v1].x>>16, vertexes[mld->v1].y>>16,
|
|
||||||
vertexes[mld->v2].x>>16, vertexes[mld->v2].y>>16);
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
if (tlatebase.GetMem() == NULL)
|
if (tlatebase.GetMem() == NULL)
|
||||||
{
|
{
|
||||||
if (gameinfo.gametype == GAME_Doom)
|
if (gameinfo.gametype == GAME_Doom)
|
||||||
|
@ -191,7 +184,7 @@ void P_TranslateLineDef (line_t *ld, maplinedef_t *mld)
|
||||||
ld->args[4] = tag;
|
ld->args[4] = tag;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (ld->flags & ML_SECRET)
|
if ((ld->flags & ML_SECRET) && (GET_SPAC(ld->flags) == SPAC_USE || GET_SPAC(ld->flags) == SPAC_USETHROUGH))
|
||||||
{
|
{
|
||||||
ld->flags &= ~ML_MONSTERSCANACTIVATE;
|
ld->flags &= ~ML_MONSTERSCANACTIVATE;
|
||||||
}
|
}
|
||||||
|
|
|
@ -619,11 +619,15 @@ static void S_AddSNDINFO (int lump)
|
||||||
Printf ("Bad ambient index (%d)\n", sc_Number);
|
Printf ("Bad ambient index (%d)\n", sc_Number);
|
||||||
ambient = &dummy;
|
ambient = &dummy;
|
||||||
}
|
}
|
||||||
else
|
else if (Ambients[sc_Number] == NULL)
|
||||||
{
|
{
|
||||||
ambient = new AmbientSound;
|
ambient = new AmbientSound;
|
||||||
Ambients[sc_Number] = ambient;
|
Ambients[sc_Number] = ambient;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ambient = Ambients[sc_Number];
|
||||||
|
}
|
||||||
memset (ambient, 0, sizeof(AmbientSound));
|
memset (ambient, 0, sizeof(AmbientSound));
|
||||||
|
|
||||||
SC_MustGetString ();
|
SC_MustGetString ();
|
||||||
|
|
|
@ -349,10 +349,10 @@ static void crash_catcher(int signum, siginfo_t *siginfo, void *context)
|
||||||
{
|
{
|
||||||
char buf[256];
|
char buf[256];
|
||||||
snprintf(buf, sizeof(buf),
|
snprintf(buf, sizeof(buf),
|
||||||
"if (which gxmessage > /dev/null 2> &1);"
|
"if (which gxmessage > /dev/null 2>&1);"
|
||||||
"then gxmessage -buttons \"Damn it:0\" -center -title \"Very Fatal Error\" -file %s;"
|
"then gxmessage -buttons \"Damn it:0\" -center -title \"Very Fatal Error\" -file %s;"
|
||||||
"elif (which xmessage > /dev/null 2> &1);"
|
"elif (which xmessage > /dev/null 2>&1);"
|
||||||
"then xmessage -buttons \"Damn it:0\" -center -file %s;"
|
"then xmessage -buttons \"Damn it:0\" -center -file %s -geometry 600x400;"
|
||||||
"fi", cc_logfile, cc_logfile);
|
"fi", cc_logfile, cc_logfile);
|
||||||
system(buf);
|
system(buf);
|
||||||
}
|
}
|
||||||
|
|
|
@ -282,7 +282,7 @@ static flagdef *FindFlag (flagdef *flags, int numflags, const char *flag)
|
||||||
int lexval = stricmp (flag, flags[mid].name);
|
int lexval = stricmp (flag, flags[mid].name);
|
||||||
if (lexval == 0)
|
if (lexval == 0)
|
||||||
{
|
{
|
||||||
return &ActorFlags[mid];
|
return &flags[mid];
|
||||||
}
|
}
|
||||||
else if (lexval > 0)
|
else if (lexval > 0)
|
||||||
{
|
{
|
||||||
|
@ -1954,7 +1954,7 @@ void ParseActorProperties (Baggage &bag)
|
||||||
strlwr (sc_String);
|
strlwr (sc_String);
|
||||||
propname += sc_String;
|
propname += sc_String;
|
||||||
}
|
}
|
||||||
else
|
else if (sc_String[0] != '-' && sc_String[1] != '+')
|
||||||
{
|
{
|
||||||
SC_UnGet ();
|
SC_UnGet ();
|
||||||
}
|
}
|
||||||
|
@ -2957,7 +2957,8 @@ public:
|
||||||
}
|
}
|
||||||
fuglyname &operator= (const TypeInfo *foo)
|
fuglyname &operator= (const TypeInfo *foo)
|
||||||
{
|
{
|
||||||
name(*this) = ENamedName(reinterpret_cast<size_t>(foo));
|
name *p = this;
|
||||||
|
*p = ENamedName(reinterpret_cast<size_t>(foo));
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -3299,7 +3300,7 @@ void FinishThingdef()
|
||||||
fuglyname v;
|
fuglyname v;
|
||||||
|
|
||||||
v = defaults->AmmoType1;
|
v = defaults->AmmoType1;
|
||||||
if (v != NAME_None)
|
if (v != NAME_None && v.IsValidName())
|
||||||
{
|
{
|
||||||
defaults->AmmoType1 = TypeInfo::FindType(v.GetChars());
|
defaults->AmmoType1 = TypeInfo::FindType(v.GetChars());
|
||||||
if (!defaults->AmmoType1)
|
if (!defaults->AmmoType1)
|
||||||
|
@ -3313,7 +3314,7 @@ void FinishThingdef()
|
||||||
}
|
}
|
||||||
|
|
||||||
v = defaults->AmmoType2;
|
v = defaults->AmmoType2;
|
||||||
if (v != NAME_None)
|
if (v != NAME_None && v.IsValidName())
|
||||||
{
|
{
|
||||||
defaults->AmmoType2 = TypeInfo::FindType(v.GetChars());
|
defaults->AmmoType2 = TypeInfo::FindType(v.GetChars());
|
||||||
if (!defaults->AmmoType2)
|
if (!defaults->AmmoType2)
|
||||||
|
@ -3327,7 +3328,7 @@ void FinishThingdef()
|
||||||
}
|
}
|
||||||
|
|
||||||
v = defaults->SisterWeaponType;
|
v = defaults->SisterWeaponType;
|
||||||
if (v != NAME_None)
|
if (v != NAME_None && v.IsValidName())
|
||||||
{
|
{
|
||||||
defaults->SisterWeaponType = TypeInfo::FindType(v.GetChars());
|
defaults->SisterWeaponType = TypeInfo::FindType(v.GetChars());
|
||||||
if (!defaults->SisterWeaponType)
|
if (!defaults->SisterWeaponType)
|
||||||
|
@ -3373,5 +3374,3 @@ void FinishThingdef()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue