- Updated thingdef_specials.h for the new thingdef_specials.gperf file.

- Created a new MorphedMonster class that Chicken and Pig now derive from.
  This class automatically takes care of unmorphing the monster when its
  time is up.
- Made PlayerClass and MonsterClass properties of EggFX. You can override
  these in a subclass to create new kinds of morpher projectiles. Along with
  that, MorphWeapon is a new property of PlayerPawn that controls what type
  of weapon you have available while morphed ("None" means you have no
  weapons).
- Changed morphed monsters to record the time when they want to unmorph, not
  the time left until they unmorph. This simplifies calling
  P_UpdateMorhpedMonster() because you don't need to pass it a tic count.
- Added an optional second parameter to A_SpawnDebris and an optional
  fifth parameter to A_SpawnItem that both do the same thing: If you set it
  to 1, then the spawned actor will be assigned the same translation table
  as the actor that called the function.
- Moved the blood colorization in P_SpawnBlood() ahead of the SetDamage()
  call so that the blood color will available to the states of the blood
  actor.
- Extended the puke command so that giving it a negative script number will
  act like ACS_ExecuteAlways and always execute the script. (Ugh. Why did I
  use's Raven's cheat code to name this command?)


SVN r296 (trunk)
This commit is contained in:
Randy Heit 2006-08-17 00:19:26 +00:00
commit a6d656b108
17 changed files with 601 additions and 629 deletions

View file

@ -382,6 +382,7 @@ BEGIN_STATELESS_DEFAULTS (APlayerPawn, Any, -1, 0)
PROP_PlayerPawn_SideMove2 (FRACUNIT)
PROP_PlayerPawn_ColorRange (0, 0)
PROP_PlayerPawn_SoundClass ("player")
PROP_PlayerPawn_MorphWeapon ("None")
END_DEFAULTS
IMPLEMENT_ABSTRACT_ACTOR (APlayerChunk)
@ -399,7 +400,8 @@ void APlayerPawn::Serialize (FArchive &arc)
<< SideMove2
<< ScoreIcon
<< InvFirst
<< InvSel;
<< InvSel
<< MorphWeapon;
}
//===========================================================================
@ -911,6 +913,32 @@ void APlayerPawn::MorphPlayerThink ()
void APlayerPawn::ActivateMorphWeapon ()
{
const PClass *morphweapon = PClass::FindClass (ENamedName(MorphWeapon));
player->PendingWeapon = WP_NOCHANGE;
player->psprites[ps_weapon].sy = WEAPONTOP;
if (morphweapon == NULL || !morphweapon->IsDescendantOf (RUNTIME_CLASS(AWeapon)))
{ // No weapon at all while morphed!
player->ReadyWeapon = NULL;
P_SetPsprite (player, ps_weapon, NULL);
}
else
{
player->ReadyWeapon = static_cast<AWeapon *>(player->mo->FindInventory (morphweapon));
if (player->ReadyWeapon == NULL)
{
player->ReadyWeapon = static_cast<AWeapon *>(player->mo->GiveInventoryType (morphweapon));
}
if (player->ReadyWeapon != NULL)
{
P_SetPsprite (player, ps_weapon, player->ReadyWeapon->GetReadyState());
}
else
{
P_SetPsprite (player, ps_weapon, NULL);
}
}
P_SetPsprite (player, ps_flash, NULL);
}
//===========================================================================