mirror of
https://github.com/ZDoom/gzdoom-gles.git
synced 2025-01-18 22:51:39 +00:00
- Added Gez's real morph fix.
SVN r1857 (trunk)
This commit is contained in:
parent
f646a89216
commit
857002e12f
5 changed files with 13 additions and 10 deletions
|
@ -1230,7 +1230,7 @@ void G_PlayerFinishLevel (int player, EFinishLevelType mode, bool resetinventory
|
||||||
|
|
||||||
if (p->morphTics)
|
if (p->morphTics)
|
||||||
{ // Undo morph
|
{ // Undo morph
|
||||||
P_UndoPlayerMorph (p, p, true);
|
P_UndoPlayerMorph (p, p, 0, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Clears the entire inventory and gives back the defaults for starting a game
|
// Clears the entire inventory and gives back the defaults for starting a game
|
||||||
|
|
|
@ -24,7 +24,7 @@ bool AArtiTomeOfPower::Use (bool pickup)
|
||||||
{
|
{
|
||||||
if (Owner->player->morphTics && (Owner->player->MorphStyle & MORPH_UNDOBYTOMEOFPOWER))
|
if (Owner->player->morphTics && (Owner->player->MorphStyle & MORPH_UNDOBYTOMEOFPOWER))
|
||||||
{ // Attempt to undo chicken
|
{ // Attempt to undo chicken
|
||||||
if (!P_UndoPlayerMorph (Owner->player, Owner->player))
|
if (!P_UndoPlayerMorph (Owner->player, Owner->player, MORPH_UNDOBYTOMEOFPOWER))
|
||||||
{ // Failed
|
{ // Failed
|
||||||
if (!(Owner->player->MorphStyle & MORPH_FAILNOTELEFRAG))
|
if (!(Owner->player->MorphStyle & MORPH_FAILNOTELEFRAG))
|
||||||
{
|
{
|
||||||
|
|
|
@ -45,7 +45,8 @@ bool AArtiTeleport::Use (bool pickup)
|
||||||
bool canlaugh = true;
|
bool canlaugh = true;
|
||||||
if (Owner->player->morphTics && (Owner->player->MorphStyle & MORPH_UNDOBYCHAOSDEVICE))
|
if (Owner->player->morphTics && (Owner->player->MorphStyle & MORPH_UNDOBYCHAOSDEVICE))
|
||||||
{ // Teleporting away will undo any morph effects (pig)
|
{ // Teleporting away will undo any morph effects (pig)
|
||||||
if (!P_UndoPlayerMorph (Owner->player, Owner->player) && (Owner->player->MorphStyle & MORPH_FAILNOLAUGH))
|
if (!P_UndoPlayerMorph (Owner->player, Owner->player, MORPH_UNDOBYCHAOSDEVICE)
|
||||||
|
&& (Owner->player->MorphStyle & MORPH_FAILNOLAUGH))
|
||||||
{
|
{
|
||||||
canlaugh = false;
|
canlaugh = false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -173,7 +173,7 @@ bool P_MorphPlayer (player_t *activator, player_t *p, const PClass *spawntype, i
|
||||||
//
|
//
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
|
|
||||||
bool P_UndoPlayerMorph (player_t *activator, player_t *player, bool force)
|
bool P_UndoPlayerMorph (player_t *activator, player_t *player, int unmorphflag, bool force)
|
||||||
{
|
{
|
||||||
AWeapon *beastweap;
|
AWeapon *beastweap;
|
||||||
APlayerPawn *mo;
|
APlayerPawn *mo;
|
||||||
|
@ -192,10 +192,12 @@ bool P_UndoPlayerMorph (player_t *activator, player_t *player, bool force)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((pmo->flags2 & MF2_INVULNERABLE) // If the player is invulnerable
|
bool DeliberateUnmorphIsOkay = !!(player->MorphStyle & unmorphflag);
|
||||||
&& ((player != activator) // and either did not decide to unmorph,
|
|
||||||
|| (!((player->MorphStyle & MORPH_WHENINVULNERABLE) // or the morph style does not allow it
|
if ((pmo->flags2 & MF2_INVULNERABLE) // If the player is invulnerable
|
||||||
&& (player->MorphStyle != MORPH_OLDEFFECTS))))) // (but standard morph styles always allow it),
|
&& ((player != activator) // and either did not decide to unmorph,
|
||||||
|
|| (!((player->MorphStyle & MORPH_WHENINVULNERABLE) // or the morph style does not allow it
|
||||||
|
|| (DeliberateUnmorphIsOkay))))) // (but standard morph styles always allow it),
|
||||||
{ // Then the player is immune to the unmorph.
|
{ // Then the player is immune to the unmorph.
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,7 +17,7 @@ enum
|
||||||
MORPH_UNDOBYCHAOSDEVICE = 0x00000008, // Player unmorphs upon activating a Chaos Device
|
MORPH_UNDOBYCHAOSDEVICE = 0x00000008, // Player unmorphs upon activating a Chaos Device
|
||||||
MORPH_FAILNOTELEFRAG = 0x00000010, // Player stays morphed if unmorph by Tome of Power fails
|
MORPH_FAILNOTELEFRAG = 0x00000010, // Player stays morphed if unmorph by Tome of Power fails
|
||||||
MORPH_FAILNOLAUGH = 0x00000020, // Player doesn't laugh if unmorph by Chaos Device fails
|
MORPH_FAILNOLAUGH = 0x00000020, // Player doesn't laugh if unmorph by Chaos Device fails
|
||||||
MORPH_WHENINVULNERABLE = 0x00000040, // Player can morph (or scripted unmorph) when invulnerable but ONLY if doing it to themselves
|
MORPH_WHENINVULNERABLE = 0x00000040, // Player can morph when invulnerable but ONLY if doing it to themselves
|
||||||
MORPH_LOSEACTUALWEAPON = 0x00000080, // Player loses specified morph weapon only (not "whichever they have when unmorphing")
|
MORPH_LOSEACTUALWEAPON = 0x00000080, // Player loses specified morph weapon only (not "whichever they have when unmorphing")
|
||||||
MORPH_NEWTIDBEHAVIOUR = 0x00000100, // Actor TID is by default transferred from the old actor to the new actor
|
MORPH_NEWTIDBEHAVIOUR = 0x00000100, // Actor TID is by default transferred from the old actor to the new actor
|
||||||
MORPH_UNDOBYDEATH = 0x00000200, // Actor unmorphs when killed and (unless MORPH_UNDOBYDEATHSAVES) stays dead
|
MORPH_UNDOBYDEATH = 0x00000200, // Actor unmorphs when killed and (unless MORPH_UNDOBYDEATHSAVES) stays dead
|
||||||
|
@ -32,7 +32,7 @@ class AMorphedMonster;
|
||||||
|
|
||||||
bool P_MorphPlayer (player_t *activator, player_t *player, const PClass *morphclass, int duration = 0, int style = 0,
|
bool P_MorphPlayer (player_t *activator, player_t *player, const PClass *morphclass, int duration = 0, int style = 0,
|
||||||
const PClass *enter_flash = NULL, const PClass *exit_flash = NULL);
|
const PClass *enter_flash = NULL, const PClass *exit_flash = NULL);
|
||||||
bool P_UndoPlayerMorph (player_t *activator, player_t *player, bool force = false);
|
bool P_UndoPlayerMorph (player_t *activator, player_t *player, int unmorphflag = 0, bool force = false);
|
||||||
bool P_MorphMonster (AActor *actor, const PClass *morphclass, int duration = 0, int style = 0,
|
bool P_MorphMonster (AActor *actor, const PClass *morphclass, int duration = 0, int style = 0,
|
||||||
const PClass *enter_flash = NULL, const PClass *exit_flash = NULL);
|
const PClass *enter_flash = NULL, const PClass *exit_flash = NULL);
|
||||||
bool P_UndoMonsterMorph (AMorphedMonster *beast, bool force = false);
|
bool P_UndoMonsterMorph (AMorphedMonster *beast, bool force = false);
|
||||||
|
|
Loading…
Reference in a new issue