mirror of
https://github.com/ZDoom/gzdoom-last-svn.git
synced 2025-05-30 08:51:02 +00:00
* Updated to ZDoom 4164:
- Properly transfer powerups between morphed and unmorphed actors by calling EndEffect() on the powerups before they transfer ownership, then calling InitEffect() on them after they transfer ownership. - Fixed: stat skyboxes output was broken. - Fixed: Skyboxes never cleared planes when a 3D floor was in view. git-svn-id: http://mancubus.net/svn/hosted/gzdoom/trunk@1532 b0f79afe-0144-0410-b225-9a4edf0717df
This commit is contained in:
parent
5f6aad30f5
commit
4ee531e60c
7 changed files with 61 additions and 12 deletions
|
@ -30,6 +30,9 @@ protected:
|
||||||
virtual void InitEffect ();
|
virtual void InitEffect ();
|
||||||
virtual void DoEffect ();
|
virtual void DoEffect ();
|
||||||
virtual void EndEffect ();
|
virtual void EndEffect ();
|
||||||
|
|
||||||
|
friend void EndAllPowerupEffects(AInventory *item);
|
||||||
|
friend void InitAllPowerupEffects(AInventory *item);
|
||||||
};
|
};
|
||||||
|
|
||||||
// An artifact is an item that gives the player a powerup when activated.
|
// An artifact is an item that gives the player a powerup when activated.
|
||||||
|
|
|
@ -74,6 +74,7 @@ bool P_MorphPlayer (player_t *activator, player_t *p, const PClass *spawntype, i
|
||||||
}
|
}
|
||||||
|
|
||||||
morphed = static_cast<APlayerPawn *>(Spawn (spawntype, actor->x, actor->y, actor->z, NO_REPLACE));
|
morphed = static_cast<APlayerPawn *>(Spawn (spawntype, actor->x, actor->y, actor->z, NO_REPLACE));
|
||||||
|
EndAllPowerupEffects(actor->Inventory);
|
||||||
DObject::StaticPointerSubstitution (actor, morphed);
|
DObject::StaticPointerSubstitution (actor, morphed);
|
||||||
if ((actor->tid != 0) && (style & MORPH_NEWTIDBEHAVIOUR))
|
if ((actor->tid != 0) && (style & MORPH_NEWTIDBEHAVIOUR))
|
||||||
{
|
{
|
||||||
|
@ -144,6 +145,7 @@ bool P_MorphPlayer (player_t *activator, player_t *p, const PClass *spawntype, i
|
||||||
}
|
}
|
||||||
item = next;
|
item = next;
|
||||||
}
|
}
|
||||||
|
InitAllPowerupEffects(morphed->Inventory);
|
||||||
morphed->ActivateMorphWeapon ();
|
morphed->ActivateMorphWeapon ();
|
||||||
if (p->camera == actor)
|
if (p->camera == actor)
|
||||||
{
|
{
|
||||||
|
@ -201,10 +203,8 @@ bool P_UndoPlayerMorph (player_t *activator, player_t *player, int unmorphflag,
|
||||||
}
|
}
|
||||||
pmo->player = NULL;
|
pmo->player = NULL;
|
||||||
|
|
||||||
mo->ObtainInventory (pmo);
|
|
||||||
DObject::StaticPointerSubstitution (pmo, mo);
|
|
||||||
// Remove the morph power if the morph is being undone prematurely.
|
// Remove the morph power if the morph is being undone prematurely.
|
||||||
for (AInventory *item = mo->Inventory, *next = NULL; item != NULL; item = next)
|
for (AInventory *item = pmo->Inventory, *next = NULL; item != NULL; item = next)
|
||||||
{
|
{
|
||||||
next = item->Inventory;
|
next = item->Inventory;
|
||||||
if (item->IsKindOf(RUNTIME_CLASS(APowerMorph)))
|
if (item->IsKindOf(RUNTIME_CLASS(APowerMorph)))
|
||||||
|
@ -213,6 +213,9 @@ bool P_UndoPlayerMorph (player_t *activator, player_t *player, int unmorphflag,
|
||||||
item->Destroy();
|
item->Destroy();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
EndAllPowerupEffects(pmo->Inventory);
|
||||||
|
mo->ObtainInventory (pmo);
|
||||||
|
DObject::StaticPointerSubstitution (pmo, mo);
|
||||||
if ((pmo->tid != 0) && (player->MorphStyle & MORPH_NEWTIDBEHAVIOUR))
|
if ((pmo->tid != 0) && (player->MorphStyle & MORPH_NEWTIDBEHAVIOUR))
|
||||||
{
|
{
|
||||||
mo->tid = pmo->tid;
|
mo->tid = pmo->tid;
|
||||||
|
@ -235,6 +238,7 @@ bool P_UndoPlayerMorph (player_t *activator, player_t *player, int unmorphflag,
|
||||||
mo->flags2 = (mo->flags2 & ~MF2_FLY) | (pmo->flags2 & MF2_FLY);
|
mo->flags2 = (mo->flags2 & ~MF2_FLY) | (pmo->flags2 & MF2_FLY);
|
||||||
mo->flags3 = (mo->flags3 & ~MF3_GHOST) | (pmo->flags3 & MF3_GHOST);
|
mo->flags3 = (mo->flags3 & ~MF3_GHOST) | (pmo->flags3 & MF3_GHOST);
|
||||||
mo->Score = pmo->Score;
|
mo->Score = pmo->Score;
|
||||||
|
InitAllPowerupEffects(mo->Inventory);
|
||||||
|
|
||||||
const PClass *exit_flash = player->MorphExitFlash;
|
const PClass *exit_flash = player->MorphExitFlash;
|
||||||
bool correctweapon = !!(player->MorphStyle & MORPH_LOSEACTUALWEAPON);
|
bool correctweapon = !!(player->MorphStyle & MORPH_LOSEACTUALWEAPON);
|
||||||
|
@ -538,6 +542,46 @@ bool P_MorphedDeath(AActor *actor, AActor **morphed, int *morphedstyle, int *mor
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//===========================================================================
|
||||||
|
//
|
||||||
|
// EndAllPowerupEffects
|
||||||
|
//
|
||||||
|
// Calls EndEffect() on every Powerup in the inventory list.
|
||||||
|
//
|
||||||
|
//===========================================================================
|
||||||
|
|
||||||
|
void EndAllPowerupEffects(AInventory *item)
|
||||||
|
{
|
||||||
|
while (item != NULL)
|
||||||
|
{
|
||||||
|
if (item->IsKindOf(RUNTIME_CLASS(APowerup)))
|
||||||
|
{
|
||||||
|
static_cast<APowerup *>(item)->EndEffect();
|
||||||
|
}
|
||||||
|
item = item->Inventory;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//===========================================================================
|
||||||
|
//
|
||||||
|
// InitAllPowerupEffects
|
||||||
|
//
|
||||||
|
// Calls InitEffect() on every Powerup in the inventory list.
|
||||||
|
//
|
||||||
|
//===========================================================================
|
||||||
|
|
||||||
|
void InitAllPowerupEffects(AInventory *item)
|
||||||
|
{
|
||||||
|
while (item != NULL)
|
||||||
|
{
|
||||||
|
if (item->IsKindOf(RUNTIME_CLASS(APowerup)))
|
||||||
|
{
|
||||||
|
static_cast<APowerup *>(item)->InitEffect();
|
||||||
|
}
|
||||||
|
item = item->Inventory;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Base class for morphing projectiles --------------------------------------
|
// Base class for morphing projectiles --------------------------------------
|
||||||
|
|
||||||
IMPLEMENT_CLASS(AMorphProjectile)
|
IMPLEMENT_CLASS(AMorphProjectile)
|
||||||
|
|
|
@ -140,6 +140,7 @@ void R_3D_EnterSkybox()
|
||||||
height_top = NULL;
|
height_top = NULL;
|
||||||
height_cur = NULL;
|
height_cur = NULL;
|
||||||
height_max = -1;
|
height_max = -1;
|
||||||
|
fakeActive = 0;
|
||||||
|
|
||||||
CurrentSkybox++;
|
CurrentSkybox++;
|
||||||
}
|
}
|
||||||
|
@ -157,6 +158,7 @@ void R_3D_LeaveSkybox()
|
||||||
height_top = current.height_top;
|
height_top = current.height_top;
|
||||||
height_cur = current.height_cur;
|
height_cur = current.height_cur;
|
||||||
height_max = current.height_max;
|
height_max = current.height_max;
|
||||||
|
fakeActive = height_top != NULL;
|
||||||
|
|
||||||
CurrentSkybox--;
|
CurrentSkybox--;
|
||||||
}
|
}
|
||||||
|
|
|
@ -762,7 +762,7 @@ void R_RenderActorView (AActor *actor, bool dontmaplines)
|
||||||
MaskedCycles.Reset();
|
MaskedCycles.Reset();
|
||||||
WallScanCycles.Reset();
|
WallScanCycles.Reset();
|
||||||
|
|
||||||
fakeActive = 0; // kg3D - reset fake floor idicator
|
fakeActive = 0; // kg3D - reset fake floor indicator
|
||||||
R_3D_ResetClip(); // reset clips (floor/ceiling)
|
R_3D_ResetClip(); // reset clips (floor/ceiling)
|
||||||
|
|
||||||
R_SetupBuffer ();
|
R_SetupBuffer ();
|
||||||
|
|
|
@ -1002,15 +1002,15 @@ static void R_DrawSkyStriped (visplane_t *pl)
|
||||||
CVAR (Bool, tilt, false, 0);
|
CVAR (Bool, tilt, false, 0);
|
||||||
//CVAR (Int, pa, 0, 0)
|
//CVAR (Int, pa, 0, 0)
|
||||||
|
|
||||||
void R_DrawPlanes ()
|
int R_DrawPlanes ()
|
||||||
{
|
{
|
||||||
visplane_t *pl;
|
visplane_t *pl;
|
||||||
int i;
|
int i;
|
||||||
int vpcount;
|
int vpcount = 0;
|
||||||
|
|
||||||
ds_color = 3;
|
ds_color = 3;
|
||||||
|
|
||||||
for (i = vpcount = 0; i < MAXVISPLANES; i++)
|
for (i = 0; i < MAXVISPLANES; i++)
|
||||||
{
|
{
|
||||||
for (pl = visplanes[i]; pl; pl = pl->next)
|
for (pl = visplanes[i]; pl; pl = pl->next)
|
||||||
{
|
{
|
||||||
|
@ -1024,6 +1024,7 @@ void R_DrawPlanes ()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return vpcount;
|
||||||
}
|
}
|
||||||
|
|
||||||
// kg3D - draw all visplanes with "height"
|
// kg3D - draw all visplanes with "height"
|
||||||
|
@ -1329,13 +1330,12 @@ void R_DrawSkyBoxes ()
|
||||||
|
|
||||||
for (*freehead = visplanes[MAXVISPLANES], visplanes[MAXVISPLANES] = NULL; *freehead; )
|
for (*freehead = visplanes[MAXVISPLANES], visplanes[MAXVISPLANES] = NULL; *freehead; )
|
||||||
freehead = &(*freehead)->next;
|
freehead = &(*freehead)->next;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ADD_STAT(skyboxes)
|
ADD_STAT(skyboxes)
|
||||||
{
|
{
|
||||||
FString out;
|
FString out;
|
||||||
out.Format (out, "%d skybox planes", numskyboxes);
|
out.Format ("%d skybox planes", numskyboxes);
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -87,7 +87,7 @@ void R_InitPlanes ();
|
||||||
void R_DeinitPlanes ();
|
void R_DeinitPlanes ();
|
||||||
void R_ClearPlanes (bool fullclear);
|
void R_ClearPlanes (bool fullclear);
|
||||||
|
|
||||||
void R_DrawPlanes ();
|
int R_DrawPlanes ();
|
||||||
void R_DrawSkyBoxes ();
|
void R_DrawSkyBoxes ();
|
||||||
void R_DrawSkyPlane (visplane_t *pl);
|
void R_DrawSkyPlane (visplane_t *pl);
|
||||||
void R_DrawNormalPlane (visplane_t *pl, fixed_t alpha, bool additive, bool masked);
|
void R_DrawNormalPlane (visplane_t *pl, fixed_t alpha, bool additive, bool masked);
|
||||||
|
|
|
@ -3,5 +3,5 @@
|
||||||
// This file was automatically generated by the
|
// This file was automatically generated by the
|
||||||
// updaterevision tool. Do not edit by hand.
|
// updaterevision tool. Do not edit by hand.
|
||||||
|
|
||||||
#define ZD_SVN_REVISION_STRING "4161"
|
#define ZD_SVN_REVISION_STRING "4164"
|
||||||
#define ZD_SVN_REVISION_NUMBER 4161
|
#define ZD_SVN_REVISION_NUMBER 4164
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue