mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-22 04:01:31 +00:00
Fixed Pre(Un)Morph being called out of order.
- This had broken several mods that relied on the inventory being in place before the switch, which was the intended way to begin with.
This commit is contained in:
parent
5fc3d44ba5
commit
3e91d38582
3 changed files with 37 additions and 6 deletions
|
@ -5345,6 +5345,42 @@ int MorphPointerSubstitution(AActor* from, AActor* to)
|
|||
return false;
|
||||
}
|
||||
|
||||
// [MC] Had to move this here since ObtainInventory was also moved as well. Should be called
|
||||
// before any transference of items since that's what was intended when introduced.
|
||||
if (!from->alternative) // Morphing into
|
||||
{
|
||||
{
|
||||
IFVIRTUALPTR(from, AActor, PreMorph)
|
||||
{
|
||||
VMValue params[] = { from, to, false };
|
||||
VMCall(func, params, 3, nullptr, 0);
|
||||
}
|
||||
}
|
||||
{
|
||||
IFVIRTUALPTR(to, AActor, PreMorph)
|
||||
{
|
||||
VMValue params[] = { to, from, true };
|
||||
VMCall(func, params, 3, nullptr, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
else // Unmorphing back
|
||||
{
|
||||
{
|
||||
IFVIRTUALPTR(from, AActor, PreUnmorph)
|
||||
{
|
||||
VMValue params[] = { from, to, false };
|
||||
VMCall(func, params, 3, nullptr, 0);
|
||||
}
|
||||
}
|
||||
{
|
||||
IFVIRTUALPTR(to, AActor, PreUnmorph)
|
||||
{
|
||||
VMValue params[] = { to, from, true };
|
||||
VMCall(func, params, 3, nullptr, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
// Since the check is good, move the inventory items over. This should always be done when
|
||||
// morphing to emulate Heretic/Hexen's behavior since those stored the inventory in their
|
||||
// player structs.
|
||||
|
|
|
@ -99,6 +99,7 @@ extend class Actor
|
|||
}
|
||||
|
||||
// [MC] Called when an actor morphs, on both the previous form (!current) and present form (current).
|
||||
// Due to recent changes, these are now called internally instead of within the virtuals.
|
||||
virtual void PreMorph(Actor mo, bool current) {}
|
||||
virtual void PostMorph(Actor mo, bool current) {}
|
||||
virtual void PreUnmorph(Actor mo, bool current) {}
|
||||
|
|
|
@ -129,9 +129,6 @@ extend class PlayerPawn
|
|||
return false;
|
||||
}
|
||||
|
||||
PreMorph(morphed, false);
|
||||
morphed.PreMorph(self, true);
|
||||
|
||||
morphed.EndAllPowerupEffects();
|
||||
|
||||
if ((style & MRF_TRANSFERTRANSLATION) && !morphed.bDontTranslate)
|
||||
|
@ -259,9 +256,6 @@ extend class PlayerPawn
|
|||
if (!MorphInto(alt))
|
||||
return false;
|
||||
|
||||
PreUnmorph(alt, false); // This body's about to be left.
|
||||
alt.PreUnmorph(self, true); // This one's about to become current.
|
||||
|
||||
alt.EndAllPowerupEffects();
|
||||
|
||||
// Remove the morph power if the morph is being undone prematurely.
|
||||
|
|
Loading…
Reference in a new issue