mirror of
https://github.com/ZDoom/gzdoom-gles.git
synced 2024-11-14 00:20:38 +00:00
- Fixed: When starting a level while the music has been paused S_Start has
to stop the old music so the new one always starts at the beginning. - Fixed:: AActor::master was not serialized. - Fixed: Sound targets pointing to dead players should be cleared before respawning the player. - Fixed: When the DONTMOVE flag is set A_Chase must not call P_NewChaseDir. - Changed PowerupGiver initialization so that the actual powerup class is looked up during postprocessing. - Gave Strife's instant death sector type its own damage type. SVN r778 (trunk)
This commit is contained in:
parent
3b991c3070
commit
03617dc6f0
8 changed files with 77 additions and 19 deletions
|
@ -1,3 +1,14 @@
|
||||||
|
March 1, 2008 (Changes by Graf Zahl)
|
||||||
|
- Fixed: When starting a level while the music has been paused S_Start has
|
||||||
|
to stop the old music so the new one always starts at the beginning.
|
||||||
|
- Fixed:: AActor::master was not serialized.
|
||||||
|
- Fixed: Sound targets pointing to dead players should be cleared before
|
||||||
|
respawning the player.
|
||||||
|
- Fixed: When the DONTMOVE flag is set A_Chase must not call P_NewChaseDir.
|
||||||
|
- Changed PowerupGiver initialization so that the actual powerup class is looked
|
||||||
|
up during postprocessing.
|
||||||
|
- Gave Strife's instant death sector type its own damage type.
|
||||||
|
|
||||||
February 29, 2008
|
February 29, 2008
|
||||||
- Fixed: R_SetupAddClampCol() checked add4cols' memory instead of
|
- Fixed: R_SetupAddClampCol() checked add4cols' memory instead of
|
||||||
adclamp4cols' memory when deciding if it should skip modification.
|
adclamp4cols' memory when deciding if it should skip modification.
|
||||||
|
|
|
@ -185,6 +185,7 @@ xx(BFGSplash)
|
||||||
xx(DrainLife) // A weapon like the Sigil that drains your life away.
|
xx(DrainLife) // A weapon like the Sigil that drains your life away.
|
||||||
xx(Massacre) // For death by a cheater!
|
xx(Massacre) // For death by a cheater!
|
||||||
//(Melee) already defined above, so don't define it again
|
//(Melee) already defined above, so don't define it again
|
||||||
|
xx(InstantDeath) // Strife "instant death"
|
||||||
|
|
||||||
// Special death name for getting killed excessively. Could be used as
|
// Special death name for getting killed excessively. Could be used as
|
||||||
// a damage type if you wanted to force an extreme death.
|
// a damage type if you wanted to force an extreme death.
|
||||||
|
|
|
@ -1895,7 +1895,7 @@ void A_DoChase (AActor *actor, bool fastchase, FState *meleestate, FState *missi
|
||||||
if (actor->flags & MF_JUSTATTACKED)
|
if (actor->flags & MF_JUSTATTACKED)
|
||||||
{
|
{
|
||||||
actor->flags &= ~MF_JUSTATTACKED;
|
actor->flags &= ~MF_JUSTATTACKED;
|
||||||
if (!actor->isFast())
|
if (!actor->isFast() && !dontmove)
|
||||||
{
|
{
|
||||||
P_NewChaseDir (actor);
|
P_NewChaseDir (actor);
|
||||||
}
|
}
|
||||||
|
|
|
@ -320,6 +320,9 @@ void AActor::Serialize (FArchive &arc)
|
||||||
<< gravity
|
<< gravity
|
||||||
<< FastChaseStrafeCount;
|
<< FastChaseStrafeCount;
|
||||||
|
|
||||||
|
if (SaveVersion >=778)
|
||||||
|
arc << master;
|
||||||
|
|
||||||
if (arc.IsStoring ())
|
if (arc.IsStoring ())
|
||||||
{
|
{
|
||||||
int convnum = 0;
|
int convnum = 0;
|
||||||
|
@ -3645,6 +3648,23 @@ void P_SpawnPlayer (mapthing2_t *mthing, bool tempplayer)
|
||||||
else if (state == PST_REBORN)
|
else if (state == PST_REBORN)
|
||||||
{
|
{
|
||||||
assert (oldactor != NULL);
|
assert (oldactor != NULL);
|
||||||
|
|
||||||
|
// before relocating all pointers to the player all sound targets
|
||||||
|
// pointing to the old actor have to be NULLed. Otherwise all
|
||||||
|
// monsters who last targeted this player will wake up immediately
|
||||||
|
// after the player has respawned.
|
||||||
|
AActor *th;
|
||||||
|
TThinkerIterator<AActor> it;
|
||||||
|
while ((th = it.Next()))
|
||||||
|
{
|
||||||
|
if (th->LastHeard == oldactor) th->LastHeard = NULL;
|
||||||
|
}
|
||||||
|
for(int i = 0; i < numsectors; i++)
|
||||||
|
{
|
||||||
|
if (sectors[i].SoundTarget == oldactor) sectors[i].SoundTarget = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
DObject::PointerSubstitution (oldactor, p->mo);
|
DObject::PointerSubstitution (oldactor, p->mo);
|
||||||
// PointerSubstitution() will also affect the bodyque, so undo that now.
|
// PointerSubstitution() will also affect the bodyque, so undo that now.
|
||||||
for (int ii=0; ii < BODYQUESIZE; ++ii)
|
for (int ii=0; ii < BODYQUESIZE; ++ii)
|
||||||
|
|
|
@ -412,7 +412,7 @@ void P_PlayerInSpecialSector (player_t *player)
|
||||||
|
|
||||||
case Damage_InstantDeath:
|
case Damage_InstantDeath:
|
||||||
// Strife's instant death sector
|
// Strife's instant death sector
|
||||||
P_DamageMobj (player->mo, NULL, NULL, 999, NAME_None);
|
P_DamageMobj (player->mo, NULL, NULL, 999, NAME_InstantDeath);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case dDamage_Hellslime:
|
case dDamage_Hellslime:
|
||||||
|
|
|
@ -443,9 +443,15 @@ void S_Start ()
|
||||||
LastLocalSndSeq = LocalSndSeq;
|
LastLocalSndSeq = LocalSndSeq;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SoundPaused = false;
|
||||||
|
|
||||||
|
// stop the old music if it has been paused.
|
||||||
|
// This ensures that the new music is started from the beginning
|
||||||
|
// if it's the same as the last one and it has been paused.
|
||||||
|
if (MusicPaused) S_StopMusic(true);
|
||||||
|
|
||||||
// start new music for the level
|
// start new music for the level
|
||||||
MusicPaused = false;
|
MusicPaused = false;
|
||||||
SoundPaused = false;
|
|
||||||
|
|
||||||
// [RH] This is a lot simpler now.
|
// [RH] This is a lot simpler now.
|
||||||
if (!savegamerestore)
|
if (!savegamerestore)
|
||||||
|
|
|
@ -539,6 +539,41 @@ void FinishThingdef()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (ti->IsDescendantOf(RUNTIME_CLASS(APowerupGiver)) && ti != RUNTIME_CLASS(APowerupGiver))
|
||||||
|
{
|
||||||
|
FString typestr;
|
||||||
|
APowerupGiver * defaults=(APowerupGiver *)ti->Defaults;
|
||||||
|
fuglyname v;
|
||||||
|
|
||||||
|
v = defaults->PowerupType;
|
||||||
|
if (v != NAME_None && v.IsValidName())
|
||||||
|
{
|
||||||
|
typestr.Format ("Power%s", v.GetChars());
|
||||||
|
const PClass * powertype=PClass::FindClass(typestr);
|
||||||
|
if (!powertype) powertype=PClass::FindClass(v.GetChars());
|
||||||
|
|
||||||
|
if (!powertype)
|
||||||
|
{
|
||||||
|
Printf("Unknown powerup type '%s' in '%s'\n", v.GetChars(), ti->TypeName.GetChars());
|
||||||
|
errorcount++;
|
||||||
|
}
|
||||||
|
else if (!powertype->IsDescendantOf(RUNTIME_CLASS(APowerup)))
|
||||||
|
{
|
||||||
|
Printf("Invalid powerup type '%s' in '%s'\n", v.GetChars(), ti->TypeName.GetChars());
|
||||||
|
errorcount++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
defaults->PowerupType=powertype;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (v == NAME_None)
|
||||||
|
{
|
||||||
|
Printf("No powerup type specified in '%s'\n", ti->TypeName.GetChars());
|
||||||
|
errorcount++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// the typeinfo properties of weapons have to be fixed here after all actors have been declared
|
// the typeinfo properties of weapons have to be fixed here after all actors have been declared
|
||||||
if (ti->IsDescendantOf(RUNTIME_CLASS(AWeapon)))
|
if (ti->IsDescendantOf(RUNTIME_CLASS(AWeapon)))
|
||||||
{
|
{
|
||||||
|
|
|
@ -2136,23 +2136,8 @@ static void PowerupMode (FScanner &sc, APowerupGiver *defaults, Baggage &bag)
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
static void PowerupType (FScanner &sc, APowerupGiver *defaults, Baggage &bag)
|
static void PowerupType (FScanner &sc, APowerupGiver *defaults, Baggage &bag)
|
||||||
{
|
{
|
||||||
FString typestr;
|
|
||||||
|
|
||||||
sc.MustGetString();
|
sc.MustGetString();
|
||||||
typestr.Format ("Power%s", sc.String);
|
defaults->PowerupType = fuglyname(sc.String);
|
||||||
const PClass * powertype=PClass::FindClass(typestr);
|
|
||||||
if (!powertype)
|
|
||||||
{
|
|
||||||
sc.ScriptError("Unknown powerup type '%s' in '%s'\n", sc.String, bag.Info->Class->TypeName.GetChars());
|
|
||||||
}
|
|
||||||
else if (!powertype->IsDescendantOf(RUNTIME_CLASS(APowerup)))
|
|
||||||
{
|
|
||||||
sc.ScriptError("Invalid powerup type '%s' in '%s'\n", sc.String, bag.Info->Class->TypeName.GetChars());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
defaults->PowerupType=powertype;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
|
Loading…
Reference in a new issue