Page 1 of 1

Overlay flip/mirroring flags do not work on non-Weapon

PostPosted: Sat Jul 14, 2018 2:27 am
by Nash
Run example file, "give test". The fist sprite is not mirrored as expected.

This problem doesn't happen if the overlay is ran from a Weapon.

Problem also persists if the overlay is ran from PlayerPawn. But example file only demonstrates problem from CustomInventory context.

Wiki page suggests overlays can be ran from PlayerPawns and CustomInventory. https://zdoom.org/wiki/A_Overlay

Code: Select allExpand view

class Test 
: CustomInventory
{
    Default
    
{
        Inventory.MaxAmount 1;
        +INVENTORY.UNDROPPABLE
        
+INVENTORY.UNTOSSABLE
        
+INVENTORY.AUTOACTIVATE
    
}

    action void DoStuff(void)
    {
        Console.Printf("blah");
    }

    States
    
{
    Use:
        TNT1 A 0
        
{
            A_Overlay(666, "DoStuff");
            A_OverlayFlags(666, PSPF_FLIP | PSPF_MIRROR, true); // doesn't work
        }
        Fail;
    Pickup:
        TNT1 A 0
        
{
            return true;
        }
        Stop;
    DoStuff:
        PUNG A 1 DoStuff();
        Loop;
    }
}
 


UPDATE:

Seems like almost nothing works. Alpha, renderstyle, nothing.

Code: Select allExpand view

            A_Overlay
(666"DoStuff");
            
A_OverlayFlags(666PSPF_FLIP PSPF_MIRROR PSPF_ALPHA PSPF_RENDERSTYLEtrue);

            
// none of these work
            
A_OverlayRenderStyle(666STYLE_Translucent);
            
A_OverlayAlpha(6660.5);

            
// this works though
            
A_OverlayOffset(666, -50);

Re: Overlay flip/mirroring flags do not work on non-Weapon

PostPosted: Sat Jul 14, 2018 4:54 pm
by Major Cooke
Does this work on other renderers too? I.e. anything beside OpenGL? That's the only one in the code where I could find that has it specifically set to weapons.

Re: Overlay flip/mirroring flags do not work on non-Weapon

PostPosted: Sat Jul 14, 2018 11:40 pm
by Nash
Nope, the different renderers make no difference. Sprite is still unflipped despite being told to flip.

Re: Overlay flip/mirroring flags do not work on non-Weapon

PostPosted: Wed Aug 29, 2018 10:12 am
by Major Cooke
Alright, thanks to phantom we discovered it's simply not possible to set the overlay flags from an overlay that's not from the same source. It might be due to the ACTION_CALL_FROM_PSPRITE() function. Perhaps this could be changed to include all overlays instead?

Code: Select allExpand view
DEFINE_ACTION_FUNCTION(AActor, A_OverlayRenderStyle)
{
    PARAM_ACTION_PROLOGUE(AActor);
    PARAM_INT(layer);
    PARAM_INT(style);

    if (ACTION_CALL_FROM_PSPRITE())
    {
        DPSprite *pspr = self->player->FindPSprite((layer != 0) ? layer : stateinfo->mPSPIndex);

        if (pspr == nullptr || style >= STYLE_Count || style < 0)
            return 0;

        pspr->Renderstyle = ERenderStyle(style);
    }
    return 0;
}

Re: Overlay flip/mirroring flags do not work on non-Weapon

PostPosted: Wed Aug 29, 2018 10:14 am
by phantombeta
No, that's not what I said it was at all. You just can't use those functions from outside a PSprite. You can use them in Nash's example PK3 by moving the check to the overlay's states because overlays are PSprites.

Re: Overlay flip/mirroring flags do not work on non-Weapon

PostPosted: Wed Aug 29, 2018 3:14 pm
by Major Cooke
I know that. I was asking if that could be changed a little.