- 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
|
|
@ -162,12 +162,15 @@ void cht_DoCheat (player_t *player, int cheat)
|
|||
break;
|
||||
|
||||
case CHT_CHAINSAW:
|
||||
type = TypeInfo::FindType ("Chainsaw");
|
||||
if (player->mo->FindInventory (type) == NULL)
|
||||
if (player->mo != NULL)
|
||||
{
|
||||
player->mo->GiveInventoryType (type);
|
||||
type = TypeInfo::FindType ("Chainsaw");
|
||||
if (player->mo->FindInventory (type) == NULL)
|
||||
{
|
||||
player->mo->GiveInventoryType (type);
|
||||
}
|
||||
msg = GStrings("STSTR_CHOPPERS");
|
||||
}
|
||||
msg = GStrings("STSTR_CHOPPERS");
|
||||
// [RH] The original cheat also set powers[pw_invulnerability] to true.
|
||||
// Since this is a timer and not a boolean, it effectively turned off
|
||||
// the invulnerability powerup, although it looks like it was meant to
|
||||
|
|
@ -175,16 +178,19 @@ void cht_DoCheat (player_t *player, int cheat)
|
|||
break;
|
||||
|
||||
case CHT_POWER:
|
||||
item = player->mo->FindInventory (RUNTIME_CLASS(APowerWeaponLevel2));
|
||||
if (item != NULL)
|
||||
if (player->mo != NULL)
|
||||
{
|
||||
item->Destroy ();
|
||||
msg = GStrings("TXT_CHEATPOWEROFF");
|
||||
}
|
||||
else
|
||||
{
|
||||
player->mo->GiveInventoryType (RUNTIME_CLASS(APowerWeaponLevel2));
|
||||
msg = GStrings("TXT_CHEATPOWERON");
|
||||
item = player->mo->FindInventory (RUNTIME_CLASS(APowerWeaponLevel2));
|
||||
if (item != NULL)
|
||||
{
|
||||
item->Destroy ();
|
||||
msg = GStrings("TXT_CHEATPOWEROFF");
|
||||
}
|
||||
else
|
||||
{
|
||||
player->mo->GiveInventoryType (RUNTIME_CLASS(APowerWeaponLevel2));
|
||||
msg = GStrings("TXT_CHEATPOWERON");
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
|
|
@ -250,8 +256,11 @@ void cht_DoCheat (player_t *player, int cheat)
|
|||
break;
|
||||
|
||||
case CHT_HEALTH:
|
||||
player->health = player->mo->health = player->mo->GetDefault()->health;
|
||||
msg = GStrings("TXT_CHEATHEALTH");
|
||||
if (player->mo != NULL)
|
||||
{
|
||||
player->health = player->mo->health = player->mo->GetDefault()->health;
|
||||
msg = GStrings("TXT_CHEATHEALTH");
|
||||
}
|
||||
break;
|
||||
|
||||
case CHT_KEYS:
|
||||
|
|
@ -261,7 +270,7 @@ void cht_DoCheat (player_t *player, int cheat)
|
|||
|
||||
// [GRB]
|
||||
case CHT_RESSURECT:
|
||||
if (player->playerstate != PST_LIVE)
|
||||
if (player->playerstate != PST_LIVE && player->mo != NULL)
|
||||
{
|
||||
player->playerstate = PST_LIVE;
|
||||
player->health = player->mo->health = player->mo->GetDefault()->health;
|
||||
|
|
@ -274,7 +283,7 @@ void cht_DoCheat (player_t *player, int cheat)
|
|||
break;
|
||||
|
||||
case CHT_TAKEWEAPS:
|
||||
if (player->morphTics)
|
||||
if (player->morphTics || player->mo != NULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
|
@ -314,7 +323,7 @@ void cht_DoCheat (player_t *player, int cheat)
|
|||
case CHT_MDK:
|
||||
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)
|
||||
{
|
||||
|
|
@ -456,6 +465,34 @@ void cht_Give (player_t *player, char *name, int amount)
|
|||
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)
|
||||
{
|
||||
// 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;
|
||||
}
|
||||
|
||||
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);
|
||||
if (type == NULL || !type->IsDescendantOf (RUNTIME_CLASS(AInventory)))
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue