Introduce MT_OVERLAY exception flags

- Applied via threshold of Overlay mobj
    - OV_DONTSCREENOFFSET
        - spritexoffset, spriteyoffset
        - Given to Item Capsule quantity numbers
    - OV_DONT3DOFFSET
        - sprxoffset, spryoffset, sprzoffset
    - OV_DONTXYSCALE
        - spritexscale, spriteyscale
    - OV_DONTROLL
        - rollangle, pitch, roll
Makes overlay on UFO emerald follow the emerald's spriteyoffset now
This commit is contained in:
toaster 2023-01-08 18:16:04 +00:00
parent cf609113f3
commit c7525fb5a6
3 changed files with 37 additions and 12 deletions

View file

@ -6443,6 +6443,12 @@ struct int_const_s const INT_CONST[] = {
// {"JT_RACENT",JT_RACENT}, // {"JT_RACENT",JT_RACENT},
// {"JT_CONTSC",JT_CONTSC}, // {"JT_CONTSC",JT_CONTSC},
// Overlay exception settings
{"OV_DONTSCREENOFFSET", OV_DONTSCREENOFFSET},
{"OV_DONT3DOFFSET", OV_DONT3DOFFSET},
{"OV_DONTXYSCALE", OV_DONTXYSCALE},
{"OV_DONTROLL", OV_DONTROLL},
// Player state (playerstate_t) // Player state (playerstate_t)
{"PST_LIVE",PST_LIVE}, // Playing or camping. {"PST_LIVE",PST_LIVE}, // Playing or camping.
{"PST_DEAD",PST_DEAD}, // Dead on the ground, view follows killer. {"PST_DEAD",PST_DEAD}, // Dead on the ground, view follows killer.

View file

@ -295,7 +295,13 @@ boolean P_MobjWasRemoved(mobj_t *th);
void P_RemoveSavegameMobj(mobj_t *th); void P_RemoveSavegameMobj(mobj_t *th);
boolean P_SetPlayerMobjState(mobj_t *mobj, statenum_t state); boolean P_SetPlayerMobjState(mobj_t *mobj, statenum_t state);
boolean P_SetMobjState(mobj_t *mobj, statenum_t state); boolean P_SetMobjState(mobj_t *mobj, statenum_t state);
void P_RunOverlays(void); void P_RunOverlays(void);
#define OV_DONTSCREENOFFSET 1
#define OV_DONT3DOFFSET 1<<1
#define OV_DONTXYSCALE 1<<2
#define OV_DONTROLL 1<<3
void P_HandleMinecartSegments(mobj_t *mobj); void P_HandleMinecartSegments(mobj_t *mobj);
void P_MobjThinker(mobj_t *mobj); void P_MobjThinker(mobj_t *mobj);
boolean P_RailThinker(mobj_t *mobj); boolean P_RailThinker(mobj_t *mobj);

View file

@ -4406,6 +4406,7 @@ static void P_RefreshItemCapsuleParts(mobj_t *mobj)
P_SetMobjState(part->tracer, S_INVISIBLE); P_SetMobjState(part->tracer, S_INVISIBLE);
part->tracer->spriteyoffset = 10*FRACUNIT; part->tracer->spriteyoffset = 10*FRACUNIT;
part->tracer->spritexoffset = 13*numNumbers*FRACUNIT; part->tracer->spritexoffset = 13*numNumbers*FRACUNIT;
part->threshold = OV_DONTSCREENOFFSET;
} }
part = part->tracer; part = part->tracer;
part->sprite = SPR_ITMN; part->sprite = SPR_ITMN;
@ -5310,20 +5311,32 @@ void P_RunOverlays(void)
mo->eflags = (mo->eflags & ~MFE_VERTICALFLIP) | (mo->target->eflags & MFE_VERTICALFLIP); mo->eflags = (mo->eflags & ~MFE_VERTICALFLIP) | (mo->target->eflags & MFE_VERTICALFLIP);
mo->scale = mo->destscale = FixedMul(mo->target->scale, mo->movefactor); mo->scale = mo->destscale = FixedMul(mo->target->scale, mo->movefactor);
mo->angle = (mo->target->player ? mo->target->player->drawangle : mo->target->angle) + mo->movedir; mo->angle = (mo->target->player ? mo->target->player->drawangle : mo->target->angle) + mo->movedir;
mo->rollangle = mo->target->rollangle;
mo->pitch = mo->target->pitch;
mo->roll = mo->target->roll;
#if 0 if (!(mo->threshold & OV_DONTSCREENOFFSET))
mo->spritexoffset = mo->target->spritexoffset; {
mo->spriteyoffset = mo->target->spriteyoffset; mo->spritexoffset = mo->target->spritexoffset;
mo->spritexscale = mo->target->spritexscale; mo->spriteyoffset = mo->target->spriteyoffset;
mo->spriteyscale = mo->target->spriteyscale; }
mo->sprxoff = mo->target->sprxoff; if (!(mo->threshold & OV_DONT3DOFFSET))
mo->spryoff = mo->target->spryoff; {
mo->sprzoff = mo->target->sprzoff; mo->sprxoff = mo->target->sprxoff;
#endif mo->spryoff = mo->target->spryoff;
mo->sprzoff = mo->target->sprzoff;
}
if (!(mo->threshold & OV_DONTXYSCALE))
{
mo->spritexscale = mo->target->spritexscale;
mo->spriteyscale = mo->target->spriteyscale;
}
if (!(mo->threshold & OV_DONTROLL))
{
mo->rollangle = mo->target->rollangle;
mo->pitch = mo->target->pitch;
mo->roll = mo->target->roll;
}
mo->hitlag = mo->target->hitlag; mo->hitlag = mo->target->hitlag;
mo->eflags = (mo->eflags & ~MFE_DAMAGEHITLAG) | (mo->target->eflags & MFE_DAMAGEHITLAG); mo->eflags = (mo->eflags & ~MFE_DAMAGEHITLAG) | (mo->target->eflags & MFE_DAMAGEHITLAG);