- Fixed: The check for no skill menu was incorrect when a custom player

class menu was present so instead of starting the game specific skill menu
  it always started Hexen's.
- Fixed: When a non-player tried to play a player sound it tried to access 
  the actor object as an APlayerPawn.
- Changed PlayAttacking2 to always use the melee state instead of different
  implementations per player and hard coding it to MissileState+1. Also
  changed PlayAttacking for the HereticPlayer to use the same animation as
  PlayAttacking2. Now the special handling for Heretic in the FireWeapon
  functions can be removed.

For R258:

- Fixed: PlayerStartItem created a duplicate of the item's class name before
  converting it into an FName.
- Removed game check for Doom from P_BloodSplatter. The BloodSplatter actor
  is compatible with all games now so the explicit handling is no longer needed.
- Moved replacement handling back into AActor::StaticSpawn but controlled
  by a (mandatory) parameter. Also added replacement to most other
  instances in the game where non-inventory items are spawned. Replacement is safe 
  nearly everywhere except for inventory related spawns.
- Fixed: Due to the player class inclusion A_NoBlocking never called
  NoBlockingSet for monsters.
- Changed: Sounds can be specified by full path now in SNDINFO and S_SKIN.


SVN r259 (trunk)
This commit is contained in:
Christoph Oelckers 2006-07-16 10:23:14 +00:00
parent ecce60e8f9
commit 93cd78ebfb
15 changed files with 31 additions and 47 deletions

View file

@ -1,4 +1,14 @@
July 16, 2006 (Changes by Graf Zahl) July 16, 2006 (Changes by Graf Zahl)
- Fixed: The check for no skill menu was incorrect when a custom player
class menu was present so instead of starting the game specific skill menu
it always started Hexen's.
- Fixed: When a non-player tried to play a player sound it tried to access
the actor object as an APlayerPawn.
- Changed PlayAttacking2 to always use the melee state instead of different
implementations per player and hard coding it to MissileState+1. Also
changed PlayAttacking for the HereticPlayer to use the same animation as
PlayAttacking2. Now the special handling for Heretic in the FireWeapon
functions can be removed.
- Fixed: PlayerStartItem created a duplicate of the item's class name before - Fixed: PlayerStartItem created a duplicate of the item's class name before
converting it into an FName. converting it into an FName.
- Removed game check for Doom from P_BloodSplatter. The BloodSplatter actor - Removed game check for Doom from P_BloodSplatter. The BloodSplatter actor

View file

@ -69,8 +69,6 @@ public:
virtual void PlayIdle (); virtual void PlayIdle ();
virtual void PlayRunning (); virtual void PlayRunning ();
virtual void PlayAttacking ();
virtual void PlayAttacking2 ();
virtual void ThrowPoisonBag (); virtual void ThrowPoisonBag ();
virtual void GiveDefaultInventory (); virtual void GiveDefaultInventory ();
virtual void TweakSpeeds (int &forwardmove, int &sidemove); virtual void TweakSpeeds (int &forwardmove, int &sidemove);
@ -82,6 +80,8 @@ public:
virtual void GiveDeathmatchInventory (); virtual void GiveDeathmatchInventory ();
virtual void FilterCoopRespawnInventory (APlayerPawn *oldplayer); virtual void FilterCoopRespawnInventory (APlayerPawn *oldplayer);
void PlayAttacking ();
void PlayAttacking2 ();
const char *GetSoundClass (); const char *GetSoundClass ();
enum EInvulState enum EInvulState

View file

@ -92,6 +92,7 @@ IMPLEMENT_ACTOR (ADoomPlayer, Doom, -1, 0)
PROP_SeeState (S_PLAY_RUN) PROP_SeeState (S_PLAY_RUN)
PROP_PainState (S_PLAY_PAIN) PROP_PainState (S_PLAY_PAIN)
PROP_MissileState (S_PLAY_ATK) PROP_MissileState (S_PLAY_ATK)
PROP_MeleeState (S_PLAY_ATK+1)
PROP_DeathState (S_PLAY_DIE) PROP_DeathState (S_PLAY_DIE)
PROP_XDeathState (S_PLAY_XDIE) PROP_XDeathState (S_PLAY_XDIE)

View file

@ -156,6 +156,7 @@ IMPLEMENT_ACTOR (AChickenPlayer, Heretic, -1, 0)
PROP_SeeState (S_CHICPLAY_RUN) PROP_SeeState (S_CHICPLAY_RUN)
PROP_PainState (S_CHICPLAY_PAIN) PROP_PainState (S_CHICPLAY_PAIN)
PROP_MissileState (S_CHICPLAY_ATK) PROP_MissileState (S_CHICPLAY_ATK)
PROP_MeleeState (S_CHICPLAY_ATK)
PROP_DeathState (S_CHICPLAY_DIE) PROP_DeathState (S_CHICPLAY_DIE)
// [GRB] // [GRB]

View file

@ -125,7 +125,8 @@ IMPLEMENT_ACTOR (AHereticPlayer, Heretic, -1, 0)
PROP_SpawnState (S_PLAY) PROP_SpawnState (S_PLAY)
PROP_SeeState (S_PLAY_RUN) PROP_SeeState (S_PLAY_RUN)
PROP_PainState (S_PLAY_PAIN) PROP_PainState (S_PLAY_PAIN)
PROP_MissileState (S_PLAY_ATK) PROP_MissileState (S_PLAY_ATK+1) // Heretic never uses the non-flash attack state directly.
PROP_MeleeState (S_PLAY_ATK+1)
PROP_DeathState (S_PLAY_DIE) PROP_DeathState (S_PLAY_DIE)
PROP_XDeathState (S_PLAY_XDIE) PROP_XDeathState (S_PLAY_XDIE)
PROP_BDeathState (S_PLAY_FDTH) PROP_BDeathState (S_PLAY_FDTH)

View file

@ -101,6 +101,7 @@ IMPLEMENT_ACTOR (AClericPlayer, Hexen, -1, 0)
PROP_SeeState (S_CPLAY_RUN1) PROP_SeeState (S_CPLAY_RUN1)
PROP_PainState (S_CPLAY_PAIN) PROP_PainState (S_CPLAY_PAIN)
PROP_MissileState (S_CPLAY_ATK1) PROP_MissileState (S_CPLAY_ATK1)
PROP_MeleeState (S_CPLAY_ATK1)
PROP_DeathState (S_CPLAY_DIE1) PROP_DeathState (S_CPLAY_DIE1)
PROP_XDeathState (S_CPLAY_XDIE1) PROP_XDeathState (S_CPLAY_XDIE1)
PROP_BDeathState (S_PLAY_C_FDTH) PROP_BDeathState (S_PLAY_C_FDTH)
@ -118,11 +119,6 @@ IMPLEMENT_ACTOR (AClericPlayer, Hexen, -1, 0)
PROP_PainSound ("PlayerClericPain") PROP_PainSound ("PlayerClericPain")
END_DEFAULTS END_DEFAULTS
void AClericPlayer::PlayAttacking2 ()
{
SetState (MissileState);
}
void AClericPlayer::GiveDefaultInventory () void AClericPlayer::GiveDefaultInventory ()
{ {
Super::GiveDefaultInventory (); Super::GiveDefaultInventory ();

View file

@ -99,6 +99,7 @@ IMPLEMENT_ACTOR (AFighterPlayer, Hexen, -1, 0)
PROP_SeeState (S_FPLAY_RUN) PROP_SeeState (S_FPLAY_RUN)
PROP_PainState (S_FPLAY_PAIN) PROP_PainState (S_FPLAY_PAIN)
PROP_MissileState (S_FPLAY_ATK) PROP_MissileState (S_FPLAY_ATK)
PROP_MeleeState (S_FPLAY_ATK)
PROP_DeathState (S_FPLAY_DIE) PROP_DeathState (S_FPLAY_DIE)
PROP_XDeathState (S_FPLAY_XDIE) PROP_XDeathState (S_FPLAY_XDIE)
PROP_BDeathState (S_PLAY_F_FDTH) PROP_BDeathState (S_PLAY_F_FDTH)
@ -120,11 +121,6 @@ IMPLEMENT_ACTOR (AFighterPlayer, Hexen, -1, 0)
PROP_PainSound ("PlayerFighterPain") PROP_PainSound ("PlayerFighterPain")
END_DEFAULTS END_DEFAULTS
void AFighterPlayer::PlayAttacking2 ()
{
SetState (MissileState);
}
void AFighterPlayer::GiveDefaultInventory () void AFighterPlayer::GiveDefaultInventory ()
{ {
Super::GiveDefaultInventory (); Super::GiveDefaultInventory ();

View file

@ -81,7 +81,6 @@ class AFighterPlayer : public APlayerPawn
{ {
DECLARE_ACTOR (AFighterPlayer, APlayerPawn) DECLARE_ACTOR (AFighterPlayer, APlayerPawn)
public: public:
void PlayAttacking2 ();
void GiveDefaultInventory (); void GiveDefaultInventory ();
bool DoHealingRadius (APlayerPawn *other); bool DoHealingRadius (APlayerPawn *other);
}; };
@ -97,7 +96,6 @@ class AClericPlayer : public APlayerPawn
{ {
DECLARE_ACTOR (AClericPlayer, APlayerPawn) DECLARE_ACTOR (AClericPlayer, APlayerPawn)
public: public:
void PlayAttacking2 ();
void GiveDefaultInventory (); void GiveDefaultInventory ();
void SpecialInvulnerabilityHandling (EInvulState state, fixed_t * pAlpha); void SpecialInvulnerabilityHandling (EInvulState state, fixed_t * pAlpha);
}; };
@ -113,7 +111,6 @@ class AMagePlayer : public APlayerPawn
{ {
DECLARE_ACTOR (AMagePlayer, APlayerPawn) DECLARE_ACTOR (AMagePlayer, APlayerPawn)
public: public:
void PlayAttacking2 ();
void GiveDefaultInventory (); void GiveDefaultInventory ();
bool DoHealingRadius (APlayerPawn *other); bool DoHealingRadius (APlayerPawn *other);
void SpecialInvulnerabilityHandling (EInvulState state, fixed_t * pAlpha); void SpecialInvulnerabilityHandling (EInvulState state, fixed_t * pAlpha);

View file

@ -98,6 +98,7 @@ IMPLEMENT_ACTOR (AMagePlayer, Hexen, -1, 0)
PROP_SeeState (S_MPLAY_RUN1) PROP_SeeState (S_MPLAY_RUN1)
PROP_PainState (S_MPLAY_PAIN) PROP_PainState (S_MPLAY_PAIN)
PROP_MissileState (S_MPLAY_ATK1) PROP_MissileState (S_MPLAY_ATK1)
PROP_MeleeState (S_MPLAY_ATK1)
PROP_DeathState (S_MPLAY_DIE1) PROP_DeathState (S_MPLAY_DIE1)
PROP_XDeathState (S_MPLAY_XDIE1) PROP_XDeathState (S_MPLAY_XDIE1)
PROP_BDeathState (S_PLAY_M_FDTH) PROP_BDeathState (S_PLAY_M_FDTH)
@ -119,11 +120,6 @@ IMPLEMENT_ACTOR (AMagePlayer, Hexen, -1, 0)
PROP_PainSound ("PlayerMagePain") PROP_PainSound ("PlayerMagePain")
END_DEFAULTS END_DEFAULTS
void AMagePlayer::PlayAttacking2 ()
{
SetState (MissileState);
}
void AMagePlayer::GiveDefaultInventory () void AMagePlayer::GiveDefaultInventory ()
{ {
Super::GiveDefaultInventory (); Super::GiveDefaultInventory ();

View file

@ -143,6 +143,7 @@ IMPLEMENT_ACTOR (APigPlayer, Hexen, -1, 0)
PROP_SeeState (S_PIGPLAY_RUN1) PROP_SeeState (S_PIGPLAY_RUN1)
PROP_PainState (S_PIGPLAY_PAIN) PROP_PainState (S_PIGPLAY_PAIN)
PROP_MissileState (S_PIGPLAY_ATK1) PROP_MissileState (S_PIGPLAY_ATK1)
PROP_MeleeState (S_PIGPLAY_ATK1)
PROP_DeathState (S_PIGPLAY_DIE1) PROP_DeathState (S_PIGPLAY_DIE1)
PROP_IDeathState (S_PIGPLAY_ICE) PROP_IDeathState (S_PIGPLAY_ICE)

View file

@ -126,6 +126,7 @@ IMPLEMENT_ACTOR (AStrifePlayer, Strife, -1, 0)
PROP_SeeState (S_PLAY_RUN) PROP_SeeState (S_PLAY_RUN)
PROP_PainState (S_PLAY_PAIN) PROP_PainState (S_PLAY_PAIN)
PROP_MissileState (S_PLAY_ATK) PROP_MissileState (S_PLAY_ATK)
PROP_MeleeState (S_PLAY_ATK+1)
PROP_DeathState (S_PLAY_DIE) PROP_DeathState (S_PLAY_DIE)
PROP_XDeathState (S_PLAY_XDIE) PROP_XDeathState (S_PLAY_XDIE)
PROP_BDeathState (S_PLAY_BURNDEATH) PROP_BDeathState (S_PLAY_BURNDEATH)

View file

@ -1843,9 +1843,9 @@ static void M_ChooseClass (int choice)
{ {
M_SetupNextMenu (&EpiDef); M_SetupNextMenu (&EpiDef);
} }
else if (!EpisodeNoSkill[0]) else if (EpisodeNoSkill[0])
{ {
M_SetupNextMenu (&HexenSkillMenu); M_ChooseSkill(2);
} }
else if (gameinfo.gametype & (GAME_Doom|GAME_Strife)) else if (gameinfo.gametype & (GAME_Doom|GAME_Strife))
{ {

View file

@ -269,14 +269,7 @@ void P_FireWeapon (player_t *player)
return; return;
} }
if (gameinfo.gametype == GAME_Heretic)
{
player->mo->PlayAttacking2 ();
}
else
{
player->mo->PlayAttacking (); player->mo->PlayAttacking ();
}
weapon->bAltFire = false; weapon->bAltFire = false;
P_SetPsprite (player, ps_weapon, P_SetPsprite (player, ps_weapon,
player->refire ? weapon->GetHoldAtkState() : weapon->GetAtkState()); player->refire ? weapon->GetHoldAtkState() : weapon->GetAtkState());
@ -309,14 +302,7 @@ void P_FireWeaponAlt (player_t *player)
return; return;
} }
if (gameinfo.gametype == GAME_Heretic)
{
player->mo->PlayAttacking2 ();
}
else
{
player->mo->PlayAttacking (); player->mo->PlayAttacking ();
}
weapon->bAltFire = true; weapon->bAltFire = true;
P_SetPsprite (player, ps_weapon, P_SetPsprite (player, ps_weapon,
player->refire ? weapon->AltHoldAtkState : weapon->AltAtkState); player->refire ? weapon->AltHoldAtkState : weapon->AltAtkState);

View file

@ -842,7 +842,7 @@ void APlayerPawn::PlayAttacking ()
void APlayerPawn::PlayAttacking2 () void APlayerPawn::PlayAttacking2 ()
{ {
SetState (MissileState+1); SetState (MeleeState);
} }
void APlayerPawn::ThrowPoisonBag () void APlayerPawn::ThrowPoisonBag ()

View file

@ -1427,18 +1427,16 @@ int S_FindSkinnedSound (AActor *actor, const char *name)
int S_FindSkinnedSound (AActor *actor, int refid) int S_FindSkinnedSound (AActor *actor, int refid)
{ {
const char *pclass; const char *pclass;
int gender; int gender = GENDER_MALE;
if (actor != NULL && actor->player != NULL) if (actor != NULL && actor->IsKindOf(RUNTIME_CLASS(APlayerPawn)))
{ {
pclass = actor->player->mo->GetSoundClass (); pclass = static_cast<APlayerPawn*>(actor)->GetSoundClass ();
gender = actor->player->userinfo.gender; if (actor->player != NULL) gender = actor->player->userinfo.gender;
} }
else else
{ {
pclass = pclass = gameinfo.gametype == GAME_Hexen? "fighter" : "player";
((APlayerPawn *)GetDefaultByType (PlayerClasses[0].Type))->GetSoundClass ();
gender = GENDER_MALE;
} }
return S_LookupPlayerSound (pclass, gender, refid); return S_LookupPlayerSound (pclass, gender, refid);