mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-23 12:32:34 +00:00
- fixed the bloodspawning completely: It has to check for parent class's states, too, so that inherited blood still works
- made the 'Spray' state in P_SpawnBlood available for all games. SVN r3580 (trunk)
This commit is contained in:
parent
bf48b7620c
commit
a79bcb73ac
2 changed files with 34 additions and 16 deletions
|
@ -232,6 +232,11 @@ struct FActorInfo
|
|||
return FindState(1, &name);
|
||||
}
|
||||
|
||||
bool OwnsState(const FState *state)
|
||||
{
|
||||
return state >= OwnedStates && state < OwnedStates + NumOwnedStates;
|
||||
}
|
||||
|
||||
FActorInfo *GetReplacement (bool lookskill=true);
|
||||
FActorInfo *GetReplacee (bool lookskill=true);
|
||||
|
||||
|
|
|
@ -4657,19 +4657,20 @@ void P_SpawnBlood (fixed_t x, fixed_t y, fixed_t z, angle_t dir, int damage, AAc
|
|||
{
|
||||
th->Translation = TRANSLATION(TRANSLATION_Blood, bloodcolor.a);
|
||||
}
|
||||
|
||||
|
||||
FState *state = th->FindState(NAME_Spray);
|
||||
if (state != NULL)
|
||||
{
|
||||
if (damage > 13)
|
||||
{
|
||||
th->SetState (state);
|
||||
}
|
||||
else damage += 2;
|
||||
}
|
||||
|
||||
// Moved out of the blood actor so that replacing blood is easier
|
||||
if (gameinfo.gametype & GAME_DoomStrifeChex)
|
||||
{
|
||||
if (gameinfo.gametype == GAME_Strife)
|
||||
{
|
||||
if (damage > 13)
|
||||
{
|
||||
FState *state = th->FindState(NAME_Spray);
|
||||
if (state != NULL) th->SetState (state);
|
||||
}
|
||||
else damage += 2;
|
||||
}
|
||||
int advance = 0;
|
||||
if (damage <= 12 && damage >= 9)
|
||||
{
|
||||
|
@ -4679,19 +4680,31 @@ void P_SpawnBlood (fixed_t x, fixed_t y, fixed_t z, angle_t dir, int damage, AAc
|
|||
{
|
||||
advance = 2;
|
||||
}
|
||||
FActorInfo *ai = th->GetClass()->ActorInfo;
|
||||
for (; advance > 0; --advance)
|
||||
|
||||
PClass *cls = th->GetClass();
|
||||
|
||||
while (cls != RUNTIME_CLASS(AActor))
|
||||
{
|
||||
// [RH] Do not set to a state we do not own.
|
||||
if (th->SpawnState + advance < ai->OwnedStates + ai->NumOwnedStates)
|
||||
FActorInfo *ai = cls->ActorInfo;
|
||||
if (ai->OwnsState(th->SpawnState))
|
||||
{
|
||||
th->SetState(th->SpawnState + advance);
|
||||
break;
|
||||
for (; advance > 0; --advance)
|
||||
{
|
||||
// [RH] Do not set to a state we do not own.
|
||||
if (ai->OwnsState(th->SpawnState + advance))
|
||||
{
|
||||
th->SetState(th->SpawnState + advance);
|
||||
goto statedone;
|
||||
}
|
||||
}
|
||||
}
|
||||
cls = cls->ParentClass;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
statedone:
|
||||
|
||||
if (bloodtype >= 1)
|
||||
P_DrawSplash2 (40, x, y, z, dir, 2, bloodcolor);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue