Merge branch 'overlay-offsets' into 'master'

MT_OVERLAY exception flags

See merge request KartKrew/Kart!878
This commit is contained in:
James R 2023-01-21 20:26:23 +00:00 committed by NepDisk
parent 32bc196381
commit 05e926f540
3 changed files with 40 additions and 4 deletions

View file

@ -982,6 +982,12 @@ struct int_const_s const INT_CONST[] = {
// {"JT_RACENT",JT_RACENT},
// {"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)
{"PST_LIVE",PST_LIVE}, // Playing or camping.
{"PST_DEAD",PST_DEAD}, // Dead on the ground, view follows killer.

View file

@ -303,7 +303,13 @@ boolean P_MobjWasRemoved(mobj_t *th);
void P_RemoveSavegameMobj(mobj_t *th);
boolean P_SetPlayerMobjState(mobj_t *mobj, statenum_t state);
boolean P_SetMobjState(mobj_t *mobj, statenum_t state);
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_MobjThinker(mobj_t *mobj);
boolean P_RailThinker(mobj_t *mobj);

View file

@ -4181,13 +4181,14 @@ static void P_RefreshItemCapsuleParts(mobj_t *mobj)
while (count > 0)
{
if (P_MobjWasRemoved(part->tracer))
if (part->tracer == NULL || P_MobjWasRemoved(part->tracer))
{
P_SetTarget(&part->tracer, P_SpawnMobjFromMobj(mobj, 0, 0, 0, MT_OVERLAY));
P_SetTarget(&part->tracer->target, part);
P_SetMobjState(part->tracer, S_INVISIBLE);
part->tracer->spriteyoffset = 10*FRACUNIT;
part->tracer->spritexoffset = 13*numNumbers*FRACUNIT;
part->tracer->threshold = OV_DONTSCREENOFFSET;
}
part = part->tracer;
part->sprite = SPR_ITMN;
@ -5073,9 +5074,32 @@ void P_RunOverlays(void)
mo->eflags = (mo->eflags & ~MFE_VERTICALFLIP) | (mo->target->eflags & MFE_VERTICALFLIP);
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->rollangle = mo->target->rollangle;
mo->pitch = mo->target->pitch;
mo->roll = mo->target->roll;
if (!(mo->threshold & OV_DONTSCREENOFFSET))
{
mo->spritexoffset = mo->target->spritexoffset;
mo->spriteyoffset = mo->target->spriteyoffset;
}
if (!(mo->threshold & OV_DONT3DOFFSET))
{
mo->sprxoff = mo->target->sprxoff;
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;
}
if ((mo->flags & MF_DONTENCOREMAP) != (mo->target->flags & MF_DONTENCOREMAP))
mo->flags ^= MF_DONTENCOREMAP;