mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
Seperate MF2_DONTDRAW and MF2_SHADOW into it's own varied set of flags -- drawflags.
- Split MF2_DONTDRAW into MFD_DONTDRAWP[1-4], also replaces MFE_DRAWONLYFORP[1-4]. - Split MF2_SHADOW into MFD_FULLBRIGHT and MFD_TRANS80. I also added an entire spectrum of options for transparency & brightness overrides, since I've found myself wishing for stuff like that before. - Tethering was updated for it's client-sided drawing to apply to splitscreens too. - Removed cv_transparency. The transparency overrides don't seem to work yet (obvious on things using MFD_SHADOW), just running out of time to look into it so I'm pushing what I have.
This commit is contained in:
parent
f7f27199a6
commit
a6ef3c12b0
16 changed files with 324 additions and 373 deletions
|
|
@ -8033,7 +8033,7 @@ static const char *const MOBJFLAG2_LIST[] = {
|
|||
"AXIS", // It's a NiGHTS axis! (For faster checking)
|
||||
"TWOD", // Moves like it's in a 2D level
|
||||
"DONTRESPAWN", // Don't respawn this object!
|
||||
"DONTDRAW", // Don't generate a vissprite
|
||||
"\x01", // free: 1<<3 (name un-matchable)
|
||||
"AUTOMATIC", // Thrown ring has automatic properties
|
||||
"RAILRING", // Thrown ring has rail properties
|
||||
"BOUNCERING", // Thrown ring has bounce properties
|
||||
|
|
@ -8050,7 +8050,7 @@ static const char *const MOBJFLAG2_LIST[] = {
|
|||
"JUSTATTACKED", // can be pushed by other moving mobjs
|
||||
"FIRING", // turret fire
|
||||
"SUPERFIRE", // Firing something with Super Sonic-stopping properties. Or, if mobj has MF_MISSILE, this is the actual fire from it.
|
||||
"SHADOW", // Fuzzy draw, makes targeting harder.
|
||||
"\x01", // free: 1<<20 (name un-matchable)
|
||||
"STRONGBOX", // Flag used for "strong" random monitors.
|
||||
"OBJECTFLIP", // Flag for objects that always have flipped gravity.
|
||||
"SKULLFLY", // Special handling: skull in flight.
|
||||
|
|
@ -8073,10 +8073,6 @@ static const char *const MOBJEFLAG_LIST[] = {
|
|||
"JUSTBOUNCEDWALL", // SRB2Kart: Mobj already bounced off a wall this tic
|
||||
"SPRUNG", // Mobj was already sprung this tic
|
||||
"APPLYPMOMZ", // Platform movement
|
||||
"DRAWONLYFORP1", // SRB2Kart: Splitscreen sprite draw flags
|
||||
"DRAWONLYFORP2",
|
||||
"DRAWONLYFORP3",
|
||||
"DRAWONLYFORP4",
|
||||
NULL
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -2510,7 +2510,7 @@ static inline void G_PlayerFinishLevel(INT32 player)
|
|||
memset(p->kartstuff, 0, sizeof (p->kartstuff)); // SRB2kart
|
||||
p->ringweapons = 0;
|
||||
|
||||
p->mo->flags2 &= ~MF2_SHADOW; // cancel invisibility
|
||||
p->mo->drawflags &= ~(MFD_TRANSMASK|MFD_BRIGHTMASK); // cancel invisibility
|
||||
P_FlashPal(p, 0, 0); // Resets
|
||||
p->starpostangle = 0;
|
||||
p->starposttime = 0;
|
||||
|
|
@ -5982,7 +5982,7 @@ void G_PreviewRewind(tic_t previewtime)
|
|||
if (!info->playerinfo[i].ingame || !info->playerinfo[i].player.mo)
|
||||
{
|
||||
if (players[i].mo)
|
||||
players[i].mo->flags2 |= MF2_DONTDRAW;
|
||||
players[i].mo->drawflags |= MFD_DONTDRAW;
|
||||
|
||||
continue;
|
||||
}
|
||||
|
|
@ -5990,7 +5990,7 @@ void G_PreviewRewind(tic_t previewtime)
|
|||
if (!players[i].mo)
|
||||
continue; //@TODO spawn temp object to act as a player display
|
||||
|
||||
players[i].mo->flags2 &= ~MF2_DONTDRAW;
|
||||
players[i].mo->drawflags &= ~MFD_DONTDRAW;
|
||||
|
||||
P_UnsetThingPosition(players[i].mo);
|
||||
#define TWEEN(pr) info->playerinfo[i].mobj.pr + FixedMul((INT32) (next_info->playerinfo[i].mobj.pr - info->playerinfo[i].mobj.pr), tweenvalue)
|
||||
|
|
|
|||
|
|
@ -4256,45 +4256,12 @@ static void HWR_DrawSpriteShadow(gr_vissprite_t *spr, GLPatch_t *gpatch, float t
|
|||
sSurf.FlatColor.s.blue = 0x00;
|
||||
sSurf.FlatColor.s.green = 0x00;
|
||||
|
||||
/*if (spr->mobj->frame & FF_TRANSMASK || spr->mobj->flags2 & MF2_SHADOW)
|
||||
{
|
||||
sector_t *sector = spr->mobj->subsector->sector;
|
||||
UINT8 lightlevel = 255;
|
||||
extracolormap_t *colormap = sector->extra_colormap;
|
||||
|
||||
if (sector->numlights)
|
||||
{
|
||||
INT32 light = R_GetPlaneLight(sector, spr->mobj->floorz, false);
|
||||
|
||||
if (!(spr->mobj->frame & FF_FULLBRIGHT))
|
||||
{
|
||||
lightlevel = *sector->lightlist[light].lightlevel;
|
||||
if (spr->mobj->frame & FF_SEMIBRIGHT)
|
||||
lightlevel = 128 + (lightlevel>>1);
|
||||
}
|
||||
|
||||
if (sector->lightlist[light].extra_colormap)
|
||||
colormap = sector->lightlist[light].extra_colormap;
|
||||
}
|
||||
else
|
||||
{
|
||||
lightlevel = sector->lightlevel;
|
||||
|
||||
if (sector->extra_colormap)
|
||||
colormap = sector->extra_colormap;
|
||||
}
|
||||
|
||||
if (colormap)
|
||||
sSurf.FlatColor.rgba = HWR_Lighting(lightlevel/2, colormap->rgba, colormap->fadergba, false, true);
|
||||
else
|
||||
sSurf.FlatColor.rgba = HWR_Lighting(lightlevel/2, NORMALFOG, FADEFOG, false, true);
|
||||
}*/
|
||||
|
||||
// shadow is always half as translucent as the sprite itself
|
||||
if (!cv_translucency.value) // use default translucency (main sprite won't have any translucency)
|
||||
sSurf.FlatColor.s.alpha = 0x80; // default
|
||||
else if (spr->mobj->flags2 & MF2_SHADOW)
|
||||
sSurf.FlatColor.s.alpha = 0x20;
|
||||
if (spr->mobj->drawflags & MFD_TRANSMASK)
|
||||
{
|
||||
HWR_TranstableToAlpha((spr->mobj->drawflags & MFD_TRANSMASK) - MFD_TRANS10, &sSurf);
|
||||
sSurf.FlatColor.s.alpha /= 2; //cut alpha in half!
|
||||
}
|
||||
else if (spr->mobj->frame & FF_TRANSMASK)
|
||||
{
|
||||
HWR_TranstableToAlpha((spr->mobj->frame & FF_TRANSMASK)>>FF_TRANSSHIFT, &sSurf);
|
||||
|
|
@ -4356,6 +4323,7 @@ static void HWR_SplitSprite(gr_vissprite_t *spr)
|
|||
FUINT lightlevel;
|
||||
FBITFIELD blend = 0;
|
||||
UINT8 alpha;
|
||||
UINT8 brightmode = 0;
|
||||
|
||||
INT32 i;
|
||||
float realtop, realbot, top, bot;
|
||||
|
|
@ -4468,16 +4436,8 @@ static void HWR_SplitSprite(gr_vissprite_t *spr)
|
|||
// co-ordinates
|
||||
memcpy(wallVerts, baseWallVerts, sizeof(baseWallVerts));
|
||||
|
||||
if (!cv_translucency.value) // translucency disabled
|
||||
{
|
||||
Surf.FlatColor.s.alpha = 0xFF;
|
||||
blend = PF_Translucent|PF_Occlude;
|
||||
}
|
||||
else if (spr->mobj->flags2 & MF2_SHADOW)
|
||||
{
|
||||
Surf.FlatColor.s.alpha = 0x40;
|
||||
blend = PF_Translucent;
|
||||
}
|
||||
if (spr->mobj->drawflags & MFD_TRANSMASK)
|
||||
blend = HWR_TranstableToAlpha((spr->mobj->drawflags & MFD_TRANSMASK) - MFD_TRANS10, &Surf);
|
||||
else if (spr->mobj->frame & FF_TRANSMASK)
|
||||
blend = HWR_TranstableToAlpha((spr->mobj->frame & FF_TRANSMASK)>>FF_TRANSSHIFT, &Surf);
|
||||
else
|
||||
|
|
@ -4494,15 +4454,30 @@ static void HWR_SplitSprite(gr_vissprite_t *spr)
|
|||
|
||||
temp = FLOAT_TO_FIXED(realtop);
|
||||
|
||||
if (spr->mobj->drawflags & MFD_BRIGHTMASK)
|
||||
{
|
||||
if (spr->mobj->drawflags & MFD_FULLBRIGHT)
|
||||
brightmode = 1;
|
||||
else if (spr->mobj->drawflags & MFD_SEMIBRIGHT)
|
||||
brightmode = 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (spr->mobj->frame & FF_FULLBRIGHT)
|
||||
brightmode = 1;
|
||||
else if (spr->mobj->frame & FF_SEMIBRIGHT)
|
||||
brightmode = 2;
|
||||
}
|
||||
|
||||
#ifdef ESLOPE
|
||||
// Start with the lightlevel and colormap from the top of the sprite
|
||||
lightlevel = 255;
|
||||
colormap = list[sector->numlights - 1].extra_colormap;
|
||||
|
||||
if (!(spr->mobj->frame & FF_FULLBRIGHT))
|
||||
if (brightmode != 1)
|
||||
{
|
||||
lightlevel = *list[sector->numlights - 1].lightlevel;
|
||||
if (spr->mobj->frame & FF_SEMIBRIGHT)
|
||||
if (brightmode == 2)
|
||||
lightlevel = 128 + (lightlevel>>1);
|
||||
}
|
||||
|
||||
|
|
@ -4512,10 +4487,10 @@ static void HWR_SplitSprite(gr_vissprite_t *spr)
|
|||
: sector->lightlist[i].height;
|
||||
if (h <= temp)
|
||||
{
|
||||
if (!(spr->mobj->frame & FF_FULLBRIGHT))
|
||||
if (brightmode != 1)
|
||||
{
|
||||
lightlevel = *list[i-1].lightlevel;
|
||||
if (spr->mobj->frame & FF_SEMIBRIGHT)
|
||||
if (brightmode == 2)
|
||||
lightlevel = 128 + (lightlevel>>1);
|
||||
}
|
||||
colormap = list[i-1].extra_colormap;
|
||||
|
|
@ -4524,10 +4499,10 @@ static void HWR_SplitSprite(gr_vissprite_t *spr)
|
|||
}
|
||||
#else
|
||||
i = R_GetPlaneLight(sector, temp, false);
|
||||
if (!(spr->mobj->frame & FF_FULLBRIGHT))
|
||||
if (brightmode != 1)
|
||||
{
|
||||
lightlevel = *list[i].lightlevel;
|
||||
if (spr->mobj->frame & FF_SEMIBRIGHT)
|
||||
if (brightmode == 2)
|
||||
lightlevel = 128 + (lightlevel>>1);
|
||||
}
|
||||
colormap = list[i].extra_colormap;
|
||||
|
|
@ -4544,10 +4519,10 @@ static void HWR_SplitSprite(gr_vissprite_t *spr)
|
|||
// even if we aren't changing colormap or lightlevel, we still need to continue drawing down the sprite
|
||||
if (!(list[i].flags & FF_NOSHADE) && (list[i].flags & FF_CUTSPRITES))
|
||||
{
|
||||
if (!(spr->mobj->frame & FF_FULLBRIGHT))
|
||||
if (brightmode != 1)
|
||||
{
|
||||
lightlevel = *list[i].lightlevel;
|
||||
if (spr->mobj->frame & FF_SEMIBRIGHT)
|
||||
if (brightmode == 2)
|
||||
lightlevel = 128 + (lightlevel>>1);
|
||||
}
|
||||
colormap = list[i].extra_colormap;
|
||||
|
|
@ -4839,12 +4814,28 @@ static void HWR_DrawSprite(gr_vissprite_t *spr)
|
|||
{
|
||||
sector_t *sector = spr->mobj->subsector->sector;
|
||||
UINT8 lightlevel = 255;
|
||||
UINT8 brightmode = 0;
|
||||
extracolormap_t *colormap = sector->extra_colormap;
|
||||
|
||||
if (!(spr->mobj->frame & FF_FULLBRIGHT))
|
||||
if (spr->mobj->drawflags & MFD_BRIGHTMASK)
|
||||
{
|
||||
if (spr->mobj->drawflags & MFD_FULLBRIGHT)
|
||||
brightmode = 1;
|
||||
else if (spr->mobj->drawflags & MFD_SEMIBRIGHT)
|
||||
brightmode = 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (spr->mobj->frame & FF_FULLBRIGHT)
|
||||
brightmode = 1;
|
||||
else if (spr->mobj->frame & FF_SEMIBRIGHT)
|
||||
brightmode = 2;
|
||||
}
|
||||
|
||||
if (brightmode != 1)
|
||||
{
|
||||
lightlevel = sector->lightlevel;
|
||||
if (spr->mobj->frame & FF_SEMIBRIGHT)
|
||||
if (brightmode == 2)
|
||||
lightlevel = 128 + (lightlevel>>1);
|
||||
}
|
||||
|
||||
|
|
@ -4856,16 +4847,9 @@ static void HWR_DrawSprite(gr_vissprite_t *spr)
|
|||
|
||||
{
|
||||
FBITFIELD blend = 0;
|
||||
if (!cv_translucency.value) // translucency disabled
|
||||
{
|
||||
Surf.FlatColor.s.alpha = 0xFF;
|
||||
blend = PF_Translucent|PF_Occlude;
|
||||
}
|
||||
else if (spr->mobj->flags2 & MF2_SHADOW)
|
||||
{
|
||||
Surf.FlatColor.s.alpha = 0x40;
|
||||
blend = PF_Translucent;
|
||||
}
|
||||
|
||||
if (spr->mobj->drawflags & MFD_TRANSMASK)
|
||||
blend = HWR_TranstableToAlpha((spr->mobj->frame & MFD_TRANSMASK) - MFD_TRANS10, &Surf);
|
||||
else if (spr->mobj->frame & FF_TRANSMASK)
|
||||
blend = HWR_TranstableToAlpha((spr->mobj->frame & FF_TRANSMASK)>>FF_TRANSSHIFT, &Surf);
|
||||
else
|
||||
|
|
@ -4934,15 +4918,31 @@ static inline void HWR_DrawPrecipitationSprite(gr_vissprite_t *spr)
|
|||
{
|
||||
sector_t *sector = spr->mobj->subsector->sector;
|
||||
UINT8 lightlevel = 255;
|
||||
UINT8 brightmode = 0;
|
||||
extracolormap_t *colormap = sector->extra_colormap;
|
||||
|
||||
if (spr->mobj->drawflags & MFD_BRIGHTMASK)
|
||||
{
|
||||
if (spr->mobj->drawflags & MFD_FULLBRIGHT)
|
||||
brightmode = 1;
|
||||
else if (spr->mobj->drawflags & MFD_SEMIBRIGHT)
|
||||
brightmode = 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (spr->mobj->frame & FF_FULLBRIGHT)
|
||||
brightmode = 1;
|
||||
else if (spr->mobj->frame & FF_SEMIBRIGHT)
|
||||
brightmode = 2;
|
||||
}
|
||||
|
||||
if (sector->numlights)
|
||||
{
|
||||
INT32 light;
|
||||
|
||||
light = R_GetPlaneLight(sector, spr->mobj->z + spr->mobj->height, false); // Always use the light at the top instead of whatever I was doing before
|
||||
|
||||
if (!(spr->mobj->frame & FF_FULLBRIGHT))
|
||||
if (brightmode != 1)
|
||||
lightlevel = *sector->lightlist[light].lightlevel;
|
||||
|
||||
if (sector->lightlist[light].extra_colormap)
|
||||
|
|
@ -4950,14 +4950,14 @@ static inline void HWR_DrawPrecipitationSprite(gr_vissprite_t *spr)
|
|||
}
|
||||
else
|
||||
{
|
||||
if (!(spr->mobj->frame & FF_FULLBRIGHT))
|
||||
if (brightmode != 1)
|
||||
lightlevel = sector->lightlevel;
|
||||
|
||||
if (sector->extra_colormap)
|
||||
colormap = sector->extra_colormap;
|
||||
}
|
||||
|
||||
if (spr->mobj->frame & FF_SEMIBRIGHT)
|
||||
if (brightmode == 2)
|
||||
lightlevel = 128 + (lightlevel>>1);
|
||||
|
||||
if (colormap)
|
||||
|
|
@ -4966,11 +4966,8 @@ static inline void HWR_DrawPrecipitationSprite(gr_vissprite_t *spr)
|
|||
Surf.FlatColor.rgba = HWR_Lighting(lightlevel, NORMALFOG, FADEFOG, false, false);
|
||||
}
|
||||
|
||||
if (spr->mobj->flags2 & MF2_SHADOW)
|
||||
{
|
||||
Surf.FlatColor.s.alpha = 0x40;
|
||||
blend = PF_Translucent;
|
||||
}
|
||||
if (spr->mobj->drawflags & MFD_TRANSMASK)
|
||||
blend = HWR_TranstableToAlpha((spr->mobj->frame & MFD_TRANSMASK) - MFD_TRANS10, &Surf);
|
||||
else if (spr->mobj->frame & FF_TRANSMASK)
|
||||
blend = HWR_TranstableToAlpha((spr->mobj->frame & FF_TRANSMASK)>>FF_TRANSSHIFT, &Surf);
|
||||
else
|
||||
|
|
@ -5062,7 +5059,7 @@ static void HWR_SortVisSprites(void)
|
|||
best = gr_vsprsortedhead.next;
|
||||
for (i = 0; i < gr_visspritecount; i++)
|
||||
{
|
||||
if ((best->mobj->flags2 & MF2_SHADOW) || (best->mobj->frame & FF_TRANSMASK))
|
||||
if ((best->mobj->drawflags & MFD_TRANSMASK) || (best->mobj->frame & FF_TRANSMASK))
|
||||
{
|
||||
if (best == gr_vsprsortedhead.next)
|
||||
{
|
||||
|
|
@ -5482,27 +5479,14 @@ static void HWR_AddSprites(sector_t *sec)
|
|||
{
|
||||
for (thing = sec->thinglist; thing; thing = thing->snext)
|
||||
{
|
||||
if (thing->sprite == SPR_NULL || thing->flags2 & MF2_DONTDRAW)
|
||||
if (thing->sprite == SPR_NULL)
|
||||
continue;
|
||||
|
||||
if (splitscreen)
|
||||
{
|
||||
if (thing->eflags & MFE_DRAWONLYFORP1)
|
||||
if (viewssnum != 0)
|
||||
continue;
|
||||
|
||||
if (thing->eflags & MFE_DRAWONLYFORP2)
|
||||
if (viewssnum != 1)
|
||||
continue;
|
||||
|
||||
if (thing->eflags & MFE_DRAWONLYFORP3 && splitscreen > 1)
|
||||
if (viewssnum != 2)
|
||||
continue;
|
||||
|
||||
if (thing->eflags & MFE_DRAWONLYFORP4 && splitscreen > 2)
|
||||
if (viewssnum != 3)
|
||||
continue;
|
||||
}
|
||||
if ((viewssnum == 0 && (thing->drawflags & MFD_DONTDRAWP1))
|
||||
|| (viewssnum == 1 && (thing->drawflags & MFD_DONTDRAWP2))
|
||||
|| (viewssnum == 2 && (thing->drawflags & MFD_DONTDRAWP3))
|
||||
|| (viewssnum == 3 && (thing->drawflags & MFD_DONTDRAWP4)))
|
||||
continue;
|
||||
|
||||
approx_dist = P_AproxDistance(viewx-thing->x, viewy-thing->y);
|
||||
|
||||
|
|
@ -5517,27 +5501,14 @@ static void HWR_AddSprites(sector_t *sec)
|
|||
// Draw everything in sector, no checks
|
||||
for (thing = sec->thinglist; thing; thing = thing->snext)
|
||||
{
|
||||
if (thing->sprite == SPR_NULL || thing->flags2 & MF2_DONTDRAW)
|
||||
if (thing->sprite == SPR_NULL)
|
||||
continue;
|
||||
|
||||
if (splitscreen)
|
||||
{
|
||||
if (thing->eflags & MFE_DRAWONLYFORP1)
|
||||
if (viewssnum != 0)
|
||||
continue;
|
||||
|
||||
if (thing->eflags & MFE_DRAWONLYFORP2)
|
||||
if (viewssnum != 1)
|
||||
continue;
|
||||
|
||||
if (thing->eflags & MFE_DRAWONLYFORP3 && splitscreen > 1)
|
||||
if (viewssnum != 2)
|
||||
continue;
|
||||
|
||||
if (thing->eflags & MFE_DRAWONLYFORP4 && splitscreen > 2)
|
||||
if (viewssnum != 3)
|
||||
continue;
|
||||
}
|
||||
if ((viewssnum == 0 && (thing->drawflags & MFD_DONTDRAWP1))
|
||||
|| (viewssnum == 1 && (thing->drawflags & MFD_DONTDRAWP2))
|
||||
|| (viewssnum == 2 && (thing->drawflags & MFD_DONTDRAWP3))
|
||||
|| (viewssnum == 3 && (thing->drawflags & MFD_DONTDRAWP4)))
|
||||
continue;
|
||||
|
||||
HWR_ProjectSprite(thing);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -879,15 +879,31 @@ void HWR_DrawMD2(gr_vissprite_t *spr)
|
|||
{
|
||||
sector_t *sector = spr->mobj->subsector->sector;
|
||||
UINT8 lightlevel = 255;
|
||||
UINT8 brightmode = 0;
|
||||
extracolormap_t *colormap = sector->extra_colormap;
|
||||
|
||||
if (spr->mobj->drawflags & MFD_BRIGHTMASK)
|
||||
{
|
||||
if (spr->mobj->drawflags & MFD_FULLBRIGHT)
|
||||
brightmode = 1;
|
||||
else if (spr->mobj->drawflags & MFD_SEMIBRIGHT)
|
||||
brightmode = 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (spr->mobj->frame & FF_FULLBRIGHT)
|
||||
brightmode = 1;
|
||||
else if (spr->mobj->frame & FF_SEMIBRIGHT)
|
||||
brightmode = 2;
|
||||
}
|
||||
|
||||
if (sector->numlights)
|
||||
{
|
||||
INT32 light;
|
||||
|
||||
light = R_GetPlaneLight(sector, spr->mobj->z + spr->mobj->height, false); // Always use the light at the top instead of whatever I was doing before
|
||||
|
||||
if (!(spr->mobj->frame & FF_FULLBRIGHT))
|
||||
if (brightmode != 1)
|
||||
lightlevel = *sector->lightlist[light].lightlevel;
|
||||
|
||||
if (sector->lightlist[light].extra_colormap)
|
||||
|
|
@ -895,13 +911,16 @@ void HWR_DrawMD2(gr_vissprite_t *spr)
|
|||
}
|
||||
else
|
||||
{
|
||||
if (!(spr->mobj->frame & FF_FULLBRIGHT))
|
||||
if (brightmode != 1)
|
||||
lightlevel = sector->lightlevel;
|
||||
|
||||
if (sector->extra_colormap)
|
||||
colormap = sector->extra_colormap;
|
||||
}
|
||||
|
||||
if (brightmode == 2)
|
||||
lightlevel = 128 + (lightlevel>>1);
|
||||
|
||||
if (colormap)
|
||||
Surf.FlatColor.rgba = HWR_Lighting(lightlevel, colormap->rgba, colormap->fadergba, false, false);
|
||||
else
|
||||
|
|
@ -927,8 +946,8 @@ void HWR_DrawMD2(gr_vissprite_t *spr)
|
|||
//if (tics > durs)
|
||||
//durs = tics;
|
||||
|
||||
if (spr->mobj->flags2 & MF2_SHADOW)
|
||||
Surf.FlatColor.s.alpha = 0x40;
|
||||
if (spr->mobj->drawflags & MFD_TRANSMASK)
|
||||
HWR_TranstableToAlpha((spr->mobj->drawflags & MFD_TRANSMASK) - MFD_TRANS10, &Surf);
|
||||
else if (spr->mobj->frame & FF_TRANSMASK)
|
||||
HWR_TranstableToAlpha((spr->mobj->frame & FF_TRANSMASK)>>FF_TRANSSHIFT, &Surf);
|
||||
else
|
||||
|
|
|
|||
95
src/k_kart.c
95
src/k_kart.c
|
|
@ -595,6 +595,24 @@ void K_RegisterKartStuff(void)
|
|||
|
||||
//}
|
||||
|
||||
// Not sure what's a good place for this function
|
||||
// I'll get around to splitting *everything* in this file into better places soon...
|
||||
UINT16 K_GetPlayerDontDrawFlag(player_t *player)
|
||||
{
|
||||
UINT16 flag = 0;
|
||||
|
||||
if (player == &players[displayplayers[0]])
|
||||
flag = MFD_DONTDRAWP1;
|
||||
else if (player == &players[displayplayers[1]])
|
||||
flag = MFD_DONTDRAWP2;
|
||||
else if (player == &players[displayplayers[2]])
|
||||
flag = MFD_DONTDRAWP3;
|
||||
else if (player == &players[displayplayers[3]])
|
||||
flag = MFD_DONTDRAWP4;
|
||||
|
||||
return flag;
|
||||
}
|
||||
|
||||
boolean K_IsPlayerLosing(player_t *player)
|
||||
{
|
||||
INT32 winningpos = 1;
|
||||
|
|
@ -1629,9 +1647,9 @@ static void K_DrawDraftCombiring(player_t *player, player_t *victim, fixed_t cur
|
|||
band->colorized = true;
|
||||
band->fuse = 2;
|
||||
if (transparent)
|
||||
band->flags2 |= MF2_SHADOW;
|
||||
if (!P_IsDisplayPlayer(player) && !P_IsDisplayPlayer(victim))
|
||||
band->flags2 |= MF2_DONTDRAW;
|
||||
band->drawflags |= MFD_SHADOW;
|
||||
|
||||
band->drawflags |= MFD_DONTDRAW & ~(K_GetPlayerDontDrawFlag(player) | K_GetPlayerDontDrawFlag(victim));
|
||||
}
|
||||
|
||||
curx += stepx;
|
||||
|
|
@ -1852,11 +1870,7 @@ void K_MatchGenericExtraFlags(mobj_t *mo, mobj_t *master)
|
|||
K_FlipFromObject(mo, master);
|
||||
|
||||
// visibility (usually for hyudoro)
|
||||
mo->flags2 = (mo->flags2 & ~MF2_DONTDRAW)|(master->flags2 & MF2_DONTDRAW);
|
||||
mo->eflags = (mo->eflags & ~MFE_DRAWONLYFORP1)|(master->eflags & MFE_DRAWONLYFORP1);
|
||||
mo->eflags = (mo->eflags & ~MFE_DRAWONLYFORP2)|(master->eflags & MFE_DRAWONLYFORP2);
|
||||
mo->eflags = (mo->eflags & ~MFE_DRAWONLYFORP3)|(master->eflags & MFE_DRAWONLYFORP3);
|
||||
mo->eflags = (mo->eflags & ~MFE_DRAWONLYFORP4)|(master->eflags & MFE_DRAWONLYFORP4);
|
||||
mo->drawflags = (master->drawflags & MFD_DONTDRAW);
|
||||
}
|
||||
|
||||
static void K_SpawnDashDustRelease(player_t *player)
|
||||
|
|
@ -1915,7 +1929,7 @@ static void K_SpawnBrakeDriftSparks(player_t *player) // Be sure to update the m
|
|||
P_SetTarget(&sparks->target, player->mo);
|
||||
P_SetScale(sparks, (sparks->destscale = player->mo->scale));
|
||||
K_MatchGenericExtraFlags(sparks, player->mo);
|
||||
sparks->flags2 |= MF2_DONTDRAW;
|
||||
sparks->drawflags |= MFD_DONTDRAW;
|
||||
}
|
||||
|
||||
/** \brief Calculates the respawn timer and drop-boosting
|
||||
|
|
@ -3390,7 +3404,7 @@ void K_SpawnWipeoutTrail(mobj_t *mo, boolean translucent)
|
|||
}
|
||||
|
||||
if (translucent)
|
||||
dust->flags2 |= MF2_SHADOW;
|
||||
dust->drawflags |= MFD_SHADOW;
|
||||
}
|
||||
|
||||
void K_SpawnDraftDust(mobj_t *mo)
|
||||
|
|
@ -4545,9 +4559,9 @@ static void K_MoveHeldObjects(player_t *player)
|
|||
cur->flags &= ~MF_NOCLIPTHING;
|
||||
|
||||
if (player->kartstuff[k_rocketsneakertimer] <= TICRATE && (leveltime & 1))
|
||||
cur->flags2 |= MF2_DONTDRAW;
|
||||
cur->drawflags |= MFD_DONTDRAW;
|
||||
else
|
||||
cur->flags2 &= ~MF2_DONTDRAW;
|
||||
cur->drawflags &= ~MFD_DONTDRAW;
|
||||
|
||||
if (num & 1)
|
||||
P_SetMobjStateNF(cur, (vibrate ? S_ROCKETSNEAKER_LVIBRATE : S_ROCKETSNEAKER_L));
|
||||
|
|
@ -5020,7 +5034,7 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
|
|||
//ghost->momy = (3*player->mo->momy)/4;
|
||||
//ghost->momz = (3*player->mo->momz)/4;
|
||||
if (leveltime & 1)
|
||||
ghost->flags2 |= MF2_DONTDRAW;
|
||||
ghost->drawflags |= MFD_DONTDRAW;
|
||||
}
|
||||
|
||||
if (P_IsObjectOnGround(player->mo))
|
||||
|
|
@ -5056,7 +5070,7 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
|
|||
debtflag->color = player->skincolor;
|
||||
debtflag->fuse = 2;
|
||||
if (P_IsDisplayPlayer(player))
|
||||
debtflag->flags2 |= MF2_DONTDRAW;
|
||||
debtflag->drawflags |= MFD_DONTDRAW;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -6430,61 +6444,31 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
|||
|
||||
if (player->kartstuff[k_hyudorotimer] > 0)
|
||||
{
|
||||
if (splitscreen)
|
||||
{
|
||||
if (leveltime & 1)
|
||||
player->mo->flags2 |= MF2_DONTDRAW;
|
||||
else
|
||||
player->mo->flags2 &= ~MF2_DONTDRAW;
|
||||
|
||||
if (player->kartstuff[k_hyudorotimer] >= (1*TICRATE/2) && player->kartstuff[k_hyudorotimer] <= hyudorotime-(1*TICRATE/2))
|
||||
{
|
||||
if (player == &players[displayplayers[1]])
|
||||
player->mo->eflags |= MFE_DRAWONLYFORP2;
|
||||
else if (player == &players[displayplayers[2]] && splitscreen > 1)
|
||||
player->mo->eflags |= MFE_DRAWONLYFORP3;
|
||||
else if (player == &players[displayplayers[3]] && splitscreen > 2)
|
||||
player->mo->eflags |= MFE_DRAWONLYFORP4;
|
||||
else if (player == &players[displayplayers[0]])
|
||||
player->mo->eflags |= MFE_DRAWONLYFORP1;
|
||||
else
|
||||
player->mo->flags2 |= MF2_DONTDRAW;
|
||||
}
|
||||
else
|
||||
player->mo->eflags &= ~(MFE_DRAWONLYFORP1|MFE_DRAWONLYFORP2|MFE_DRAWONLYFORP3|MFE_DRAWONLYFORP4);
|
||||
}
|
||||
if (leveltime & 1)
|
||||
player->mo->drawflags |= MFD_DONTDRAW;
|
||||
else
|
||||
{
|
||||
if (P_IsDisplayPlayer(player)
|
||||
|| (!P_IsDisplayPlayer(player) && (player->kartstuff[k_hyudorotimer] < (1*TICRATE/2) || player->kartstuff[k_hyudorotimer] > hyudorotime-(1*TICRATE/2))))
|
||||
{
|
||||
if (leveltime & 1)
|
||||
player->mo->flags2 |= MF2_DONTDRAW;
|
||||
else
|
||||
player->mo->flags2 &= ~MF2_DONTDRAW;
|
||||
}
|
||||
if (player->kartstuff[k_hyudorotimer] >= (TICRATE/2) && player->kartstuff[k_hyudorotimer] <= hyudorotime-(TICRATE/2))
|
||||
player->mo->drawflags &= ~K_GetPlayerDontDrawFlag(player);
|
||||
else
|
||||
player->mo->flags2 |= MF2_DONTDRAW;
|
||||
player->mo->drawflags &= ~MFD_DONTDRAW;
|
||||
}
|
||||
|
||||
player->powers[pw_flashing] = player->kartstuff[k_hyudorotimer]; // We'll do this for now, let's people know about the invisible people through subtle hints
|
||||
}
|
||||
else if (player->kartstuff[k_hyudorotimer] == 0)
|
||||
{
|
||||
player->mo->flags2 &= ~MF2_DONTDRAW;
|
||||
player->mo->eflags &= ~(MFE_DRAWONLYFORP1|MFE_DRAWONLYFORP2|MFE_DRAWONLYFORP3|MFE_DRAWONLYFORP4);
|
||||
}
|
||||
player->mo->drawflags &= ~MFD_DONTDRAW;
|
||||
|
||||
if (G_BattleGametype() && player->kartstuff[k_bumper] <= 0) // dead in match? you da bomb
|
||||
{
|
||||
K_DropItems(player); //K_StripItems(player);
|
||||
K_StripOther(player);
|
||||
player->mo->flags2 |= MF2_SHADOW;
|
||||
player->mo->drawflags |= MFD_SHADOW;
|
||||
player->powers[pw_flashing] = player->kartstuff[k_comebacktimer];
|
||||
}
|
||||
else if (G_RaceGametype() || player->kartstuff[k_bumper] > 0)
|
||||
{
|
||||
player->mo->flags2 &= ~MF2_SHADOW;
|
||||
player->mo->drawflags &= ~(MFD_TRANSMASK|MFD_BRIGHTMASK);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -9240,7 +9224,7 @@ static void K_drawKartFirstPerson(void)
|
|||
UINT8 *colmap = NULL;
|
||||
ticcmd_t *cmd = &stplyr->cmd;
|
||||
|
||||
if (stplyr->spectator || !stplyr->mo || (stplyr->mo->flags2 & MF2_DONTDRAW))
|
||||
if (stplyr->spectator || !stplyr->mo || (stplyr->mo->drawflags & MFD_DONTDRAW))
|
||||
return;
|
||||
|
||||
if (stplyr == &players[displayplayers[1]] && splitscreen)
|
||||
|
|
@ -9262,10 +9246,7 @@ static void K_drawKartFirstPerson(void)
|
|||
{
|
||||
if (stplyr->speed < (20*stplyr->mo->scale) && (leveltime & 1) && !splitscreen)
|
||||
y++;
|
||||
// the following isn't EXPLICITLY right, it just gets the result we want, but i'm too lazy to look up the right way to do it
|
||||
if (stplyr->mo->flags2 & MF2_SHADOW)
|
||||
splitflags |= FF_TRANS80;
|
||||
else if (stplyr->mo->frame & FF_TRANSMASK)
|
||||
if (stplyr->mo->frame & FF_TRANSMASK)
|
||||
splitflags |= (stplyr->mo->frame & FF_TRANSMASK);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@ UINT8 K_GetKartColorByName(const char *name);
|
|||
|
||||
void K_RegisterKartStuff(void);
|
||||
|
||||
UINT16 K_GetPlayerDontDrawFlag(player_t *player);
|
||||
boolean K_IsPlayerLosing(player_t *player);
|
||||
boolean K_IsPlayerWanted(player_t *player);
|
||||
fixed_t K_GetKartGameSpeedScalar(SINT8 value);
|
||||
|
|
|
|||
|
|
@ -3409,10 +3409,10 @@ void A_BubbleSpawn(mobj_t *actor)
|
|||
if (!(actor->eflags & MFE_UNDERWATER))
|
||||
{
|
||||
// Don't draw or spawn bubbles above water
|
||||
actor->flags2 |= MF2_DONTDRAW;
|
||||
actor->drawflags |= MFD_DONTDRAW;
|
||||
return;
|
||||
}
|
||||
actor->flags2 &= ~MF2_DONTDRAW;
|
||||
actor->drawflags &= ~MFD_DONTDRAW;
|
||||
|
||||
if (!(actor->flags2 & MF2_AMBUSH))
|
||||
{
|
||||
|
|
@ -3544,9 +3544,9 @@ void A_BubbleCheck(mobj_t *actor)
|
|||
return;
|
||||
#endif
|
||||
if (actor->eflags & MFE_UNDERWATER)
|
||||
actor->flags2 &= ~MF2_DONTDRAW; // underwater so draw
|
||||
actor->drawflags &= ~MFD_DONTDRAW; // underwater so draw
|
||||
else
|
||||
actor->flags2 |= MF2_DONTDRAW; // above water so don't draw
|
||||
actor->drawflags |= MFD_DONTDRAW; // above water so don't draw
|
||||
}
|
||||
|
||||
// Function: A_AttractChase
|
||||
|
|
@ -3659,9 +3659,9 @@ void A_AttractChase(mobj_t *actor)
|
|||
|
||||
// Rings flicker before disappearing
|
||||
if (actor->fuse && actor->fuse < 5*TICRATE && (leveltime & 1))
|
||||
actor->flags2 |= MF2_DONTDRAW;
|
||||
actor->drawflags |= MFD_DONTDRAW;
|
||||
else
|
||||
actor->flags2 &= ~MF2_DONTDRAW;
|
||||
actor->drawflags &= ~MFD_DONTDRAW;
|
||||
|
||||
// spilled rings have ghost trails and get capped to a certain speed
|
||||
if (actor->type == (mobjtype_t)actor->info->reactiontime)
|
||||
|
|
@ -3882,9 +3882,9 @@ void A_ThrownRing(mobj_t *actor)
|
|||
// spilled rings (and thrown bounce) flicker before disappearing
|
||||
if (leveltime & 1 && actor->fuse > 0 && actor->fuse < 2*TICRATE
|
||||
&& actor->type != MT_THROWNGRENADE)
|
||||
actor->flags2 |= MF2_DONTDRAW;
|
||||
actor->drawflags |= MFD_DONTDRAW;
|
||||
else
|
||||
actor->flags2 &= ~MF2_DONTDRAW;
|
||||
actor->drawflags &= ~MFD_DONTDRAW;
|
||||
|
||||
if (actor->tracer && actor->tracer->health <= 0)
|
||||
P_SetTarget(&actor->tracer, NULL);
|
||||
|
|
@ -5365,9 +5365,9 @@ void A_CrawlaCommanderThink(mobj_t *actor)
|
|||
thefloor = actor->floorz;
|
||||
|
||||
if (actor->fuse & 1)
|
||||
actor->flags2 |= MF2_DONTDRAW;
|
||||
actor->drawflags |= MFD_DONTDRAW;
|
||||
else
|
||||
actor->flags2 &= ~MF2_DONTDRAW;
|
||||
actor->drawflags &= ~MFD_DONTDRAW;
|
||||
|
||||
if (actor->reactiontime > 0)
|
||||
actor->reactiontime--;
|
||||
|
|
@ -8803,7 +8803,7 @@ void A_RandomShadowFrame(mobj_t *actor)
|
|||
fake->destscale = FRACUNIT*3/2;
|
||||
fake->angle = actor->angle;
|
||||
fake->tics = -1;
|
||||
actor->flags2 |= MF2_DONTDRAW;
|
||||
actor->drawflags |= MFD_DONTDRAW;
|
||||
actor->extravalue1 = 1;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2218,7 +2218,7 @@ void P_KillMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source)
|
|||
target->player->score = 0;
|
||||
}*/
|
||||
|
||||
target->flags2 &= ~MF2_DONTDRAW;
|
||||
target->drawflags &= ~MFD_DONTDRAW;
|
||||
}
|
||||
|
||||
// if killed by a player
|
||||
|
|
@ -2917,7 +2917,7 @@ static void P_KillPlayer(player_t *player, mobj_t *source, INT32 damage)
|
|||
{
|
||||
mobj_t *boom;
|
||||
player->mo->flags |= (MF_NOGRAVITY|MF_NOCLIP);
|
||||
player->mo->flags2 |= MF2_DONTDRAW;
|
||||
player->mo->drawflags |= MFD_DONTDRAW;
|
||||
boom = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_FZEROBOOM);
|
||||
boom->scale = player->mo->scale;
|
||||
boom->angle = player->mo->angle;
|
||||
|
|
|
|||
153
src/p_mobj.c
153
src/p_mobj.c
|
|
@ -6011,14 +6011,14 @@ static void P_NightsItemChase(mobj_t *thing)
|
|||
if (thing->info->painstate)
|
||||
P_SetMobjState(thing,thing->info->painstate);
|
||||
else
|
||||
thing->flags2 |= MF2_SHADOW;
|
||||
thing->drawflags |= MFD_SHADOW;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (thing->info->painstate)
|
||||
P_SetMobjState(thing,thing->info->spawnstate);
|
||||
else
|
||||
thing->flags2 &= ~MF2_SHADOW;
|
||||
thing->drawflags &= ~(MFD_TRANSMASK|MFD_BRIGHTMASK);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -6212,7 +6212,7 @@ void P_RunShadows(void)
|
|||
|
||||
if (!mobj->target || P_MobjWasRemoved(mobj->target))
|
||||
{
|
||||
mobj->flags2 |= MF2_DONTDRAW;
|
||||
mobj->drawflags |= MFD_DONTDRAW;
|
||||
continue; // shouldn't you already be dead?
|
||||
}
|
||||
|
||||
|
|
@ -6225,7 +6225,7 @@ void P_RunShadows(void)
|
|||
|
||||
if (((mobj->target->eflags & MFE_VERTICALFLIP) && mobj->target->z+mobj->target->height > mobj->target->ceilingz)
|
||||
|| (!(mobj->target->eflags & MFE_VERTICALFLIP) && mobj->target->z < floorz))
|
||||
mobj->flags2 |= MF2_DONTDRAW;
|
||||
mobj->drawflags |= MFD_DONTDRAW;
|
||||
|
||||
// First scale to the same radius
|
||||
P_SetScale(mobj, FixedDiv(mobj->target->radius, mobj->info->radius));
|
||||
|
|
@ -6619,30 +6619,7 @@ void P_MobjThinker(mobj_t *mobj)
|
|||
offz = mobj->target->height / 5;
|
||||
}
|
||||
|
||||
if (mobj->target->eflags & MFE_DRAWONLYFORP1) // groooooaann...
|
||||
mobj->eflags |= MFE_DRAWONLYFORP1;
|
||||
else
|
||||
mobj->eflags &= ~MFE_DRAWONLYFORP1;
|
||||
|
||||
if (mobj->target->eflags & MFE_DRAWONLYFORP2)
|
||||
mobj->eflags |= MFE_DRAWONLYFORP2;
|
||||
else
|
||||
mobj->eflags &= ~MFE_DRAWONLYFORP2;
|
||||
|
||||
if (mobj->target->eflags & MFE_DRAWONLYFORP3)
|
||||
mobj->eflags |= MFE_DRAWONLYFORP3;
|
||||
else
|
||||
mobj->eflags &= ~MFE_DRAWONLYFORP3;
|
||||
|
||||
if (mobj->target->eflags & MFE_DRAWONLYFORP4)
|
||||
mobj->eflags |= MFE_DRAWONLYFORP4;
|
||||
else
|
||||
mobj->eflags &= ~MFE_DRAWONLYFORP4;
|
||||
|
||||
if (mobj->target->flags2 & MF2_DONTDRAW)
|
||||
mobj->flags2 |= MF2_DONTDRAW;
|
||||
else
|
||||
mobj->flags2 &= ~MF2_DONTDRAW;
|
||||
mobj->drawflags = (mobj->target->drawflags & MFD_DONTDRAW);
|
||||
|
||||
if (mobj->target->eflags & MFE_VERTICALFLIP)
|
||||
offz += 4*FRACUNIT;
|
||||
|
|
@ -6705,7 +6682,7 @@ void P_MobjThinker(mobj_t *mobj)
|
|||
|| (P_IsDisplayPlayer(mobj->target->player))
|
||||
#endif
|
||||
)
|
||||
mobj->flags2 |= MF2_DONTDRAW;
|
||||
mobj->drawflags |= MFD_DONTDRAW;
|
||||
|
||||
P_UnsetThingPosition(mobj);
|
||||
mobj->x = mobj->target->x;
|
||||
|
|
@ -6755,7 +6732,7 @@ void P_MobjThinker(mobj_t *mobj)
|
|||
mobj->tracer->colorized = false;
|
||||
}
|
||||
|
||||
if (!(mobj->flags2 & MF2_DONTDRAW))
|
||||
if (!(mobj->drawflags & MFD_DONTDRAW))
|
||||
{
|
||||
const INT32 numberdisplaymin = ((mobj->target->player->kartstuff[k_itemtype] == KITEM_ORBINAUT) ? 5 : 2);
|
||||
|
||||
|
|
@ -6765,7 +6742,7 @@ void P_MobjThinker(mobj_t *mobj)
|
|||
P_SetMobjState(mobj, S_PLAYERARROW_BOX);
|
||||
mobj->tracer->sprite = SPR_ITEM;
|
||||
mobj->tracer->frame = FF_FULLBRIGHT|(((mobj->target->player->kartstuff[k_itemroulette] % (13*3)) / 3) + 1);
|
||||
mobj->tracer->flags2 &= ~MF2_DONTDRAW;
|
||||
mobj->tracer->drawflags &= ~MFD_DONTDRAW;
|
||||
}
|
||||
else if (mobj->target->player->kartstuff[k_stolentimer] > 0)
|
||||
{
|
||||
|
|
@ -6773,16 +6750,16 @@ void P_MobjThinker(mobj_t *mobj)
|
|||
mobj->tracer->sprite = SPR_ITEM;
|
||||
mobj->tracer->frame = FF_FULLBRIGHT|KITEM_HYUDORO;
|
||||
if (leveltime & 2)
|
||||
mobj->tracer->flags2 &= ~MF2_DONTDRAW;
|
||||
mobj->tracer->drawflags &= ~MFD_DONTDRAW;
|
||||
else
|
||||
mobj->tracer->flags2 |= MF2_DONTDRAW;
|
||||
mobj->tracer->drawflags |= MFD_DONTDRAW;
|
||||
}
|
||||
else if ((mobj->target->player->kartstuff[k_stealingtimer] > 0) && (leveltime & 2))
|
||||
{
|
||||
P_SetMobjState(mobj, S_PLAYERARROW_BOX);
|
||||
mobj->tracer->sprite = SPR_ITEM;
|
||||
mobj->tracer->frame = FF_FULLBRIGHT|KITEM_HYUDORO;
|
||||
mobj->tracer->flags2 &= ~MF2_DONTDRAW;
|
||||
mobj->tracer->drawflags &= ~MFD_DONTDRAW;
|
||||
}
|
||||
else if (mobj->target->player->kartstuff[k_eggmanexplode] > 1)
|
||||
{
|
||||
|
|
@ -6790,9 +6767,9 @@ void P_MobjThinker(mobj_t *mobj)
|
|||
mobj->tracer->sprite = SPR_ITEM;
|
||||
mobj->tracer->frame = FF_FULLBRIGHT|KITEM_EGGMAN;
|
||||
if (leveltime & 1)
|
||||
mobj->tracer->flags2 &= ~MF2_DONTDRAW;
|
||||
mobj->tracer->drawflags &= ~MFD_DONTDRAW;
|
||||
else
|
||||
mobj->tracer->flags2 |= MF2_DONTDRAW;
|
||||
mobj->tracer->drawflags |= MFD_DONTDRAW;
|
||||
}
|
||||
else if (mobj->target->player->kartstuff[k_rocketsneakertimer] > 1)
|
||||
{
|
||||
|
|
@ -6801,9 +6778,9 @@ void P_MobjThinker(mobj_t *mobj)
|
|||
mobj->tracer->sprite = SPR_ITEM;
|
||||
mobj->tracer->frame = FF_FULLBRIGHT|KITEM_ROCKETSNEAKER;
|
||||
if (leveltime & 1)
|
||||
mobj->tracer->flags2 &= ~MF2_DONTDRAW;
|
||||
mobj->tracer->drawflags &= ~MFD_DONTDRAW;
|
||||
else
|
||||
mobj->tracer->flags2 |= MF2_DONTDRAW;
|
||||
mobj->tracer->drawflags |= MFD_DONTDRAW;
|
||||
}
|
||||
else if (mobj->target->player->kartstuff[k_growshrinktimer] > 0)
|
||||
{
|
||||
|
|
@ -6812,9 +6789,9 @@ void P_MobjThinker(mobj_t *mobj)
|
|||
mobj->tracer->frame = FF_FULLBRIGHT|KITEM_GROW;
|
||||
|
||||
if (leveltime & 1)
|
||||
mobj->tracer->flags2 &= ~MF2_DONTDRAW;
|
||||
mobj->tracer->drawflags &= ~MFD_DONTDRAW;
|
||||
else
|
||||
mobj->tracer->flags2 |= MF2_DONTDRAW;
|
||||
mobj->tracer->drawflags |= MFD_DONTDRAW;
|
||||
}
|
||||
else if (mobj->target->player->kartstuff[k_itemtype] && mobj->target->player->kartstuff[k_itemamount] > 0)
|
||||
{
|
||||
|
|
@ -6843,12 +6820,12 @@ void P_MobjThinker(mobj_t *mobj)
|
|||
if (mobj->target->player->kartstuff[k_itemheld])
|
||||
{
|
||||
if (leveltime & 1)
|
||||
mobj->tracer->flags2 &= ~MF2_DONTDRAW;
|
||||
mobj->tracer->drawflags &= ~MFD_DONTDRAW;
|
||||
else
|
||||
mobj->tracer->flags2 |= MF2_DONTDRAW;
|
||||
mobj->tracer->drawflags |= MFD_DONTDRAW;
|
||||
}
|
||||
else
|
||||
mobj->tracer->flags2 &= ~MF2_DONTDRAW;
|
||||
mobj->tracer->drawflags &= ~MFD_DONTDRAW;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -6889,7 +6866,7 @@ void P_MobjThinker(mobj_t *mobj)
|
|||
mobj->movecount = 0;
|
||||
}
|
||||
else
|
||||
mobj->tracer->flags2 |= MF2_DONTDRAW;
|
||||
mobj->tracer->drawflags |= MFD_DONTDRAW;
|
||||
}
|
||||
else if (mobj->health > 0)
|
||||
{
|
||||
|
|
@ -6912,10 +6889,10 @@ void P_MobjThinker(mobj_t *mobj)
|
|||
return;
|
||||
}
|
||||
|
||||
if (mobj->tracer->flags2 & MF2_DONTDRAW)
|
||||
mobj->flags2 |= MF2_DONTDRAW;
|
||||
if (mobj->tracer->drawflags & MFD_DONTDRAW)
|
||||
mobj->drawflags |= MFD_DONTDRAW;
|
||||
else
|
||||
mobj->flags2 &= ~MF2_DONTDRAW;
|
||||
mobj->drawflags &= ~MFD_DONTDRAW;
|
||||
|
||||
P_UnsetThingPosition(mobj);
|
||||
mobj->x = mobj->target->x;
|
||||
|
|
@ -7015,9 +6992,10 @@ void P_MobjThinker(mobj_t *mobj)
|
|||
mobj->z = mobj->target->z + (mobj->target->height) + FixedMul(8*FRACUNIT, mobj->target->scale); // Adjust height for height changes
|
||||
|
||||
if (mobj->threshold <= 35)
|
||||
mobj->flags2 |= MF2_DONTDRAW;
|
||||
mobj->drawflags |= MFD_DONTDRAW;
|
||||
else
|
||||
mobj->flags2 &= ~MF2_DONTDRAW;
|
||||
mobj->drawflags &= ~MFD_DONTDRAW;
|
||||
|
||||
if (mobj->threshold <= 30)
|
||||
mobj->threshold = 40;
|
||||
mobj->threshold--;
|
||||
|
|
@ -7302,14 +7280,15 @@ void P_MobjThinker(mobj_t *mobj)
|
|||
break;
|
||||
case MT_PLAYER:
|
||||
/// \todo Have the player's dead body completely finish its animation even if they've already respawned.
|
||||
if (!(mobj->flags2 & MF2_DONTDRAW))
|
||||
// This feels like it has some serious potential for breakage. Is there anything else we can base this off of instead of a drawing flag?
|
||||
if (!(mobj->drawflags & MFD_DONTDRAW))
|
||||
{
|
||||
if (!mobj->fuse)
|
||||
{ // Go away.
|
||||
/// \todo Actually go ahead and remove mobj completely, and fix any bugs and crashes doing this creates. Chasecam should stop moving, and F12 should never return to it.
|
||||
mobj->momz = 0;
|
||||
if (mobj->player)
|
||||
mobj->flags2 |= MF2_DONTDRAW;
|
||||
mobj->drawflags |= MFD_DONTDRAW;
|
||||
else // safe to remove, nobody's going to complain!
|
||||
{
|
||||
P_RemoveMobj(mobj);
|
||||
|
|
@ -7338,7 +7317,7 @@ void P_MobjThinker(mobj_t *mobj)
|
|||
case MT_ORBINAUT_SHIELD:
|
||||
case MT_BANANA_SHIELD:
|
||||
case MT_EGGMANITEM_SHIELD:
|
||||
mobj->flags2 ^= MF2_DONTDRAW;
|
||||
mobj->drawflags ^= MFD_DONTDRAW;
|
||||
break;
|
||||
case MT_JAWZ:
|
||||
case MT_JAWZ_DUD:
|
||||
|
|
@ -7346,7 +7325,7 @@ void P_MobjThinker(mobj_t *mobj)
|
|||
P_SetMobjState(mobj, mobj->info->xdeathstate);
|
||||
// fallthru
|
||||
case MT_JAWZ_SHIELD:
|
||||
mobj->flags2 ^= MF2_DONTDRAW;
|
||||
mobj->drawflags ^= MFD_DONTDRAW;
|
||||
break;
|
||||
case MT_SSMINE:
|
||||
case MT_SPBEXPLOSION:
|
||||
|
|
@ -7366,7 +7345,7 @@ void P_MobjThinker(mobj_t *mobj)
|
|||
return;
|
||||
case MT_CDUFO:
|
||||
if (mobj->fuse > TICRATE)
|
||||
mobj->flags2 ^= MF2_DONTDRAW; // only by good fortune does this end with it having MF2_DONTDRAW... don't touch!
|
||||
mobj->drawflags ^= MFD_DONTDRAW; // only by good fortune does this end with it having MFD_DONTDRAW... don't touch!
|
||||
break;
|
||||
case MT_SMK_PIPE:
|
||||
if (mobj->flags2 & MF2_AMBUSH)
|
||||
|
|
@ -7375,7 +7354,7 @@ void P_MobjThinker(mobj_t *mobj)
|
|||
P_SetMobjStateNF(mobj, mobj->info->spawnstate);
|
||||
/* FALLTHRU */
|
||||
case MT_SMK_MOLE:
|
||||
mobj->flags2 ^= MF2_DONTDRAW;
|
||||
mobj->drawflags ^= MFD_DONTDRAW;
|
||||
if (P_IsObjectOnGround(mobj))
|
||||
{
|
||||
P_RemoveMobj(mobj);
|
||||
|
|
@ -7396,7 +7375,7 @@ void P_MobjThinker(mobj_t *mobj)
|
|||
mobj->frame &= (~FF_FULLBRIGHT);
|
||||
}
|
||||
|
||||
mobj->flags2 ^= MF2_DONTDRAW;
|
||||
mobj->drawflags ^= MFD_DONTDRAW;
|
||||
if (P_IsObjectOnGround(mobj))
|
||||
{
|
||||
P_RemoveMobj(mobj);
|
||||
|
|
@ -7675,7 +7654,7 @@ void P_MobjThinker(mobj_t *mobj)
|
|||
case MT_NIGHTSDRONE:
|
||||
if (mobj->state >= &states[S_NIGHTSDRONE_SPARKLING1] && mobj->state <= &states[S_NIGHTSDRONE_SPARKLING16])
|
||||
{
|
||||
mobj->flags2 &= ~MF2_DONTDRAW;
|
||||
mobj->drawflags &= ~MFD_DONTDRAW;
|
||||
mobj->z = mobj->floorz + mobj->height + (mobj->spawnpoint->options >> ZSHIFT) * FRACUNIT;
|
||||
mobj->angle = 0;
|
||||
|
||||
|
|
@ -7701,7 +7680,7 @@ void P_MobjThinker(mobj_t *mobj)
|
|||
{
|
||||
mobj->flags &= ~MF_NOGRAVITY;
|
||||
P_SetMobjState(mobj, S_NIGHTSDRONE1);
|
||||
mobj->flags2 |= MF2_DONTDRAW;
|
||||
mobj->drawflags |= MFD_DONTDRAW;
|
||||
}
|
||||
}
|
||||
else if (mobj->tracer && mobj->tracer->player)
|
||||
|
|
@ -7709,7 +7688,7 @@ void P_MobjThinker(mobj_t *mobj)
|
|||
if (!(mobj->tracer->player->pflags & PF_NIGHTSMODE))
|
||||
{
|
||||
mobj->flags &= ~MF_NOGRAVITY;
|
||||
mobj->flags2 &= ~MF2_DONTDRAW;
|
||||
mobj->drawflags &= ~MFD_DONTDRAW;
|
||||
P_SetMobjState(mobj, S_NIGHTSDRONE1);
|
||||
}
|
||||
else if (!mobj->tracer->player->bonustime)
|
||||
|
|
@ -7746,7 +7725,7 @@ void P_MobjThinker(mobj_t *mobj)
|
|||
P_RemoveMobj(mobj->target);
|
||||
P_SetTarget(&mobj->target, NULL);
|
||||
}
|
||||
mobj->flags2 |= MF2_DONTDRAW;
|
||||
mobj->drawflags |= MFD_DONTDRAW;
|
||||
}
|
||||
}
|
||||
else if (mobj->tracer && mobj->tracer->player)
|
||||
|
|
@ -7766,10 +7745,10 @@ void P_MobjThinker(mobj_t *mobj)
|
|||
mobj->flags |= MF_NOGRAVITY;
|
||||
}
|
||||
else
|
||||
mobj->flags2 |= MF2_DONTDRAW;
|
||||
mobj->drawflags |= MFD_DONTDRAW;
|
||||
}
|
||||
else // Not NiGHTS
|
||||
mobj->flags2 &= ~MF2_DONTDRAW;
|
||||
mobj->drawflags &= ~MFD_DONTDRAW;
|
||||
}
|
||||
mobj->angle += ANG10;
|
||||
if (mobj->z <= mobj->floorz)
|
||||
|
|
@ -8293,7 +8272,7 @@ void P_MobjThinker(mobj_t *mobj)
|
|||
|
||||
K_MatchGenericExtraFlags(mobj, mobj->target);
|
||||
if (leveltime & 1)
|
||||
mobj->flags2 |= MF2_DONTDRAW;
|
||||
mobj->drawflags |= MFD_DONTDRAW;
|
||||
}
|
||||
break;
|
||||
case MT_PLAYERRETICULE:
|
||||
|
|
@ -8305,7 +8284,7 @@ void P_MobjThinker(mobj_t *mobj)
|
|||
P_TeleportMove(mobj, mobj->target->x, mobj->target->y, mobj->target->z);
|
||||
break;
|
||||
case MT_INSTASHIELDB:
|
||||
mobj->flags2 ^= MF2_DONTDRAW;
|
||||
mobj->drawflags ^= MFD_DONTDRAW;
|
||||
K_MatchGenericExtraFlags(mobj, mobj->target);
|
||||
/* FALLTHRU */
|
||||
case MT_INSTASHIELDA:
|
||||
|
|
@ -8459,9 +8438,9 @@ void P_MobjThinker(mobj_t *mobj)
|
|||
if (state < mobj->info->spawnstate || state > mobj->info->spawnstate+19)
|
||||
P_SetMobjState(mobj, mobj->info->spawnstate);
|
||||
if (mobj->target->player->kartstuff[k_comebacktimer] < TICRATE && (leveltime & 1))
|
||||
mobj->flags2 &= ~MF2_DONTDRAW;
|
||||
mobj->drawflags &= ~MFD_DONTDRAW;
|
||||
else
|
||||
mobj->flags2 |= MF2_DONTDRAW;
|
||||
mobj->drawflags |= MFD_DONTDRAW;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -8476,9 +8455,9 @@ void P_MobjThinker(mobj_t *mobj)
|
|||
P_SetMobjState(mobj, mobj->info->painstate);
|
||||
|
||||
if (mobj->target->player->powers[pw_flashing] && (leveltime & 1))
|
||||
mobj->flags2 |= MF2_DONTDRAW;
|
||||
mobj->drawflags |= MFD_DONTDRAW;
|
||||
else
|
||||
mobj->flags2 &= ~MF2_DONTDRAW;
|
||||
mobj->drawflags &= ~MFD_DONTDRAW;
|
||||
}
|
||||
|
||||
// Update mobj antigravity status:
|
||||
|
|
@ -8508,10 +8487,10 @@ void P_MobjThinker(mobj_t *mobj)
|
|||
cur->colorized = true;
|
||||
K_FlipFromObject(cur, mobj->target);
|
||||
|
||||
if (mobj->flags2 & MF2_DONTDRAW)
|
||||
cur->flags2 |= MF2_DONTDRAW;
|
||||
if (mobj->drawflags & MFD_DONTDRAW)
|
||||
cur->drawflags |= MFD_DONTDRAW;
|
||||
else
|
||||
cur->flags2 &= ~MF2_DONTDRAW;
|
||||
cur->drawflags &= ~MFD_DONTDRAW;
|
||||
|
||||
cur = cur->hnext;
|
||||
}
|
||||
|
|
@ -9357,7 +9336,7 @@ for (i = ((mobj->flags2 & MF2_STRONGBOX) ? strongboxamt : weakboxamt); i; --i) s
|
|||
newmobj = P_SpawnMobj(mobj->x, mobj->y, mobj->z, mobj->type);
|
||||
|
||||
// Transfer flags2 (strongbox, objectflip)
|
||||
newmobj->flags2 = mobj->flags2 & ~MF2_DONTDRAW;
|
||||
newmobj->flags2 = mobj->flags2;
|
||||
}
|
||||
P_RemoveMobj(mobj); // make sure they disappear
|
||||
return;
|
||||
|
|
@ -9407,7 +9386,7 @@ for (i = ((mobj->flags2 & MF2_STRONGBOX) ? strongboxamt : weakboxamt); i; --i) s
|
|||
return;
|
||||
}
|
||||
else if (((mobj->type == MT_RANDOMITEM && mobj->threshold == 69) || mobj->type == MT_EGGMANITEM || mobj->type == MT_FALLINGROCK) && mobj->fuse <= TICRATE)
|
||||
mobj->flags2 ^= MF2_DONTDRAW;
|
||||
mobj->drawflags ^= MFD_DONTDRAW;
|
||||
}
|
||||
|
||||
I_Assert(mobj != NULL);
|
||||
|
|
@ -9629,13 +9608,13 @@ void P_SceneryThinker(mobj_t *mobj)
|
|||
&& mobj->extravalue1 > 0 && mobj->extravalue2 >= 2)
|
||||
{
|
||||
if (mobj->extravalue2 == 2) // I don't know why the normal logic doesn't work for this.
|
||||
mobj->flags2 ^= MF2_DONTDRAW;
|
||||
mobj->drawflags ^= MFD_DONTDRAW;
|
||||
else
|
||||
{
|
||||
if (mobj->fuse == mobj->extravalue2)
|
||||
mobj->flags2 &= ~MF2_DONTDRAW;
|
||||
mobj->drawflags &= ~MFD_DONTDRAW;
|
||||
else
|
||||
mobj->flags2 |= MF2_DONTDRAW;
|
||||
mobj->drawflags |= MFD_DONTDRAW;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -10188,10 +10167,18 @@ mobj_t *P_SpawnShadowMobj(mobj_t * caster)
|
|||
|
||||
// do not set the state with P_SetMobjState,
|
||||
// because action routines can not be called yet
|
||||
if (caster->frame & FF_FULLBRIGHT)
|
||||
st = &states[S_WHITESHADOW];
|
||||
st = &states[info->spawnstate];
|
||||
|
||||
if (caster->drawflags & MFD_BRIGHTMASK)
|
||||
{
|
||||
if (caster->drawflags & MFD_FULLBRIGHT)
|
||||
st = &states[S_WHITESHADOW];
|
||||
}
|
||||
else
|
||||
st = &states[info->spawnstate];
|
||||
{
|
||||
if (caster->frame & FF_FULLBRIGHT)
|
||||
st = &states[S_WHITESHADOW];
|
||||
}
|
||||
|
||||
mobj->state = st;
|
||||
mobj->tics = st->tics;
|
||||
|
|
@ -10980,7 +10967,7 @@ void P_SpawnPlayer(INT32 playernum)
|
|||
{
|
||||
mobj_t *overheadarrow = P_SpawnMobj(mobj->x, mobj->y, mobj->z + P_GetPlayerHeight(p)+16*FRACUNIT, MT_PLAYERARROW);
|
||||
P_SetTarget(&overheadarrow->target, mobj);
|
||||
overheadarrow->flags2 |= MF2_DONTDRAW;
|
||||
overheadarrow->drawflags |= MFD_DONTDRAW;
|
||||
P_SetScale(overheadarrow, mobj->destscale);
|
||||
|
||||
if (p->spectator && pcount > 1) // HEY! No being cheap...
|
||||
|
|
@ -11006,10 +10993,10 @@ void P_SpawnPlayer(INT32 playernum)
|
|||
P_SetTarget(&mo->target, mobj);
|
||||
mo->angle = (diff * (i-1));
|
||||
mo->color = mobj->color;
|
||||
if (mobj->flags2 & MF2_DONTDRAW)
|
||||
mo->flags2 |= MF2_DONTDRAW;
|
||||
if (mobj->drawflags & MFD_DONTDRAW)
|
||||
mo->drawflags |= MFD_DONTDRAW;
|
||||
else
|
||||
mo->flags2 &= ~MF2_DONTDRAW;
|
||||
mo->drawflags &= ~MFD_DONTDRAW;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
48
src/p_mobj.h
48
src/p_mobj.h
|
|
@ -108,7 +108,7 @@ typedef enum
|
|||
// Don't use the blocklinks (inert but displayable)
|
||||
MF_NOBLOCKMAP = 1<<4,
|
||||
// Thin, paper-like collision bound (for visual equivalent, see FF_PAPERSPRITE)
|
||||
MF_PAPERCOLLISION = 1<<5,
|
||||
MF_PAPERCOLLISION = 1<<5,
|
||||
// You can push this object. It can activate switches and things by pushing it on top.
|
||||
MF_PUSHABLE = 1<<6,
|
||||
// Object is a boss.
|
||||
|
|
@ -160,7 +160,7 @@ typedef enum
|
|||
MF_GRENADEBOUNCE = 1<<28,
|
||||
// Run the action thinker on spawn.
|
||||
MF_RUNSPAWNFUNC = 1<<29,
|
||||
// Don't remap in Encore mode.
|
||||
// Don't remap in Encore mode. (Not a drawflag so that it's settable by mobjinfo.)
|
||||
MF_DONTENCOREMAP = 1<<30,
|
||||
// free: 1<<31
|
||||
} mobjflag_t;
|
||||
|
|
@ -170,7 +170,7 @@ typedef enum
|
|||
MF2_AXIS = 1, // It's a NiGHTS axis! (For faster checking)
|
||||
MF2_TWOD = 1<<1, // Moves like it's in a 2D level
|
||||
MF2_DONTRESPAWN = 1<<2, // Don't respawn this object!
|
||||
MF2_DONTDRAW = 1<<3, // Don't generate a vissprite
|
||||
// free: 1<<3
|
||||
MF2_AUTOMATIC = 1<<4, // Thrown ring has automatic properties
|
||||
MF2_RAILRING = 1<<5, // Thrown ring has rail properties
|
||||
MF2_BOUNCERING = 1<<6, // Thrown ring has bounce properties
|
||||
|
|
@ -187,7 +187,7 @@ typedef enum
|
|||
MF2_JUSTATTACKED = 1<<17, // can be pushed by other moving mobjs
|
||||
MF2_FIRING = 1<<18, // turret fire
|
||||
MF2_SUPERFIRE = 1<<19, // Firing something with Super Sonic-stopping properties. Or, if mobj has MF_MISSILE, this is the actual fire from it.
|
||||
MF2_SHADOW = 1<<20, // Fuzzy draw, makes targeting harder.
|
||||
// free: 1<<20
|
||||
MF2_STRONGBOX = 1<<21, // Flag used for "strong" random monitors.
|
||||
MF2_OBJECTFLIP = 1<<22, // Flag for objects that always have flipped gravity.
|
||||
MF2_SKULLFLY = 1<<23, // Special handling: skull in flight.
|
||||
|
|
@ -241,14 +241,42 @@ typedef enum
|
|||
MFE_SPRUNG = 1<<8,
|
||||
// Platform movement
|
||||
MFE_APPLYPMOMZ = 1<<9,
|
||||
// SRB2Kart: Splitscreen sprite display; very wasteful but I couldn't think of another way to do it...
|
||||
MFE_DRAWONLYFORP1 = 1<<10,
|
||||
MFE_DRAWONLYFORP2 = 1<<11,
|
||||
MFE_DRAWONLYFORP3 = 1<<12,
|
||||
MFE_DRAWONLYFORP4 = 1<<13,
|
||||
// free: to and including 1<<15
|
||||
} mobjeflag_t;
|
||||
|
||||
//
|
||||
// Mobj drawing flags
|
||||
// Set by hex, to make masking shenanigans easier to keep track of.
|
||||
//
|
||||
typedef enum
|
||||
{
|
||||
// Don't generate a vissprite for individual screens
|
||||
MFD_DONTDRAWP1 = 0x0001,
|
||||
MFD_DONTDRAWP2 = 0x0002,
|
||||
MFD_DONTDRAWP3 = 0x0004,
|
||||
MFD_DONTDRAWP4 = 0x0008,
|
||||
// Transparency override flags
|
||||
MFD_TRANS10 = 0x0010,
|
||||
MFD_TRANS20 = 0x0020,
|
||||
MFD_TRANS30 = 0x0030,
|
||||
MFD_TRANS40 = 0x0040,
|
||||
MFD_TRANS50 = 0x0050,
|
||||
MFD_TRANS60 = 0x0060,
|
||||
MFD_TRANS70 = 0x0070,
|
||||
MFD_TRANS80 = 0x0080,
|
||||
MFD_TRANS90 = 0x0090,
|
||||
MFD_TRANSMASK = 0x00F0,
|
||||
// Brightness override flags
|
||||
MFD_FULLBRIGHT = 0x0100,
|
||||
MFD_SEMIBRIGHT = 0x0200,
|
||||
MFD_NOBRIGHT = 0x0300,
|
||||
MFD_BRIGHTMASK = 0x0F00,
|
||||
// Shortcuts
|
||||
MFD_DONTDRAW = MFD_DONTDRAWP1|MFD_DONTDRAWP2|MFD_DONTDRAWP3|MFD_DONTDRAWP4,
|
||||
MFD_SHADOW = MFD_TRANS80|MFD_FULLBRIGHT,
|
||||
// free: to and including 0x8000
|
||||
} mobjdflag_t;
|
||||
|
||||
//
|
||||
// PRECIPITATION flags ?! ?! ?!
|
||||
//
|
||||
|
|
@ -266,6 +294,7 @@ typedef enum {
|
|||
// Ran the thinker this tic.
|
||||
PCF_THUNK = 32,
|
||||
} precipflag_t;
|
||||
|
||||
// Map Object definition.
|
||||
typedef struct mobj_s
|
||||
{
|
||||
|
|
@ -306,6 +335,7 @@ typedef struct mobj_s
|
|||
UINT32 flags; // flags from mobjinfo tables
|
||||
UINT32 flags2; // MF2_ flags
|
||||
UINT16 eflags; // extra flags
|
||||
UINT16 drawflags; // Rendering-related flags. These are not synched.
|
||||
|
||||
void *skin; // overrides 'sprite' when non-NULL (for player bodies to 'remember' the skin)
|
||||
// Player and mobj sprites in multiplayer modes are modified
|
||||
|
|
|
|||
30
src/p_user.c
30
src/p_user.c
|
|
@ -650,7 +650,7 @@ static void P_DeNightserizePlayer(player_t *player)
|
|||
|
||||
player->mo->flags &= ~MF_NOGRAVITY;
|
||||
|
||||
player->mo->flags2 &= ~MF2_DONTDRAW;
|
||||
player->mo->drawflags &= ~MFD_DONTDRAW;
|
||||
|
||||
// Restore aiming angle
|
||||
if (player == &players[consoleplayer])
|
||||
|
|
@ -729,7 +729,7 @@ void P_NightserizePlayer(player_t *player, INT32 nighttime)
|
|||
|
||||
player->mo->flags |= MF_NOGRAVITY;
|
||||
|
||||
player->mo->flags2 |= MF2_DONTDRAW;
|
||||
player->mo->drawflags |= MFD_DONTDRAW;
|
||||
|
||||
player->nightstime = player->startedtime = nighttime*TICRATE;
|
||||
player->bonustime = false;
|
||||
|
|
@ -1605,7 +1605,7 @@ void P_SpawnShieldOrb(player_t *player)
|
|||
if (shieldobj->info->painstate)
|
||||
P_SetMobjState(shieldobj,shieldobj->info->painstate);
|
||||
else
|
||||
shieldobj->flags2 |= MF2_SHADOW;
|
||||
shieldobj->drawflags |= MFD_SHADOW;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -3361,7 +3361,7 @@ static void P_DoFiring(player_t *player, ticcmd_t *cmd) // SRB2kart - unused.
|
|||
return;
|
||||
P_SetWeaponDelay(player, (3*TICRATE)/2);
|
||||
|
||||
mo = P_SpawnPlayerMissile(player->mo, MT_REDRING, MF2_RAILRING|MF2_DONTDRAW);
|
||||
mo = P_SpawnPlayerMissile(player->mo, MT_REDRING, MF2_RAILRING);
|
||||
|
||||
// Rail has no unique thrown object, therefore its sound plays here.
|
||||
S_StartSound(player->mo, sfx_rail1);
|
||||
|
|
@ -4282,7 +4282,7 @@ static void P_SpectatorMovement(player_t *player)
|
|||
if (mo)
|
||||
{
|
||||
mo->flags2 |= MF2_RAILRING;
|
||||
mo->flags2 |= MF2_DONTDRAW;
|
||||
mo->drawflags |= MFD_DONTDRAW;
|
||||
mo->flags |= MF_NOCLIPHEIGHT;
|
||||
mo->flags |= MF_NOCLIP;
|
||||
mo->flags &= ~MF_MISSILE;
|
||||
|
|
@ -5025,7 +5025,7 @@ static void P_NiGHTSMovement(player_t *player)
|
|||
radius = player->mo->target->radius;
|
||||
|
||||
player->mo->flags |= MF_NOGRAVITY;
|
||||
player->mo->flags2 |= MF2_DONTDRAW;
|
||||
player->mo->drawflags |= MFD_DONTDRAW;
|
||||
P_SetScale(player->mo->tracer, player->mo->scale);
|
||||
|
||||
if (player->mo->eflags & MFE_VERTICALFLIP)
|
||||
|
|
@ -7042,7 +7042,7 @@ static void P_DeathThink(player_t *player)
|
|||
if (player->mo)
|
||||
{
|
||||
player->mo->flags |= (MF_NOGRAVITY|MF_NOCLIP);
|
||||
player->mo->flags2 |= MF2_DONTDRAW;
|
||||
player->mo->drawflags |= MFD_DONTDRAW;
|
||||
}
|
||||
}
|
||||
else
|
||||
|
|
@ -8250,9 +8250,9 @@ void P_PlayerThink(player_t *player)
|
|||
if (player->playerstate == PST_DEAD)
|
||||
{
|
||||
if (player->spectator)
|
||||
player->mo->flags2 |= MF2_SHADOW;
|
||||
player->mo->drawflags |= MFD_SHADOW;
|
||||
else
|
||||
player->mo->flags2 &= ~MF2_SHADOW;
|
||||
player->mo->drawflags &= ~(MFD_TRANSMASK|MFD_BRIGHTMASK);
|
||||
P_DeathThink(player);
|
||||
|
||||
return;
|
||||
|
|
@ -8431,7 +8431,7 @@ void P_PlayerThink(player_t *player)
|
|||
{
|
||||
if (player == &players[displayplayers[i]] && !camera[i].chase)
|
||||
{
|
||||
gmobj->flags2 |= MF2_DONTDRAW;
|
||||
gmobj->drawflags |= MFD_DONTDRAW;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
@ -8571,16 +8571,16 @@ void P_PlayerThink(player_t *player)
|
|||
{
|
||||
if (player->powers[pw_flashing] > 0 && player->powers[pw_flashing] < K_GetKartFlashing(player)
|
||||
&& (leveltime & 1))
|
||||
player->mo->flags2 |= MF2_DONTDRAW;
|
||||
player->mo->drawflags |= MFD_DONTDRAW;
|
||||
else
|
||||
player->mo->flags2 &= ~MF2_DONTDRAW;
|
||||
player->mo->drawflags &= ~MFD_DONTDRAW;
|
||||
}
|
||||
/*else if (player->mo->tracer)
|
||||
{
|
||||
if (player->powers[pw_flashing] & 1)
|
||||
player->mo->tracer->flags2 |= MF2_DONTDRAW;
|
||||
player->mo->tracer->drawflags |= MFD_DONTDRAW;
|
||||
else
|
||||
player->mo->tracer->flags2 &= ~MF2_DONTDRAW;
|
||||
player->mo->tracer->drawflags &= ~MFD_DONTDRAW;
|
||||
}*/
|
||||
|
||||
player->pflags &= ~PF_SLIDING;
|
||||
|
|
@ -8958,7 +8958,7 @@ void P_PlayerAfterThink(player_t *player)
|
|||
// spectator invisibility and nogravity.
|
||||
if ((netgame || multiplayer) && player->spectator)
|
||||
{
|
||||
player->mo->flags2 |= MF2_DONTDRAW;
|
||||
player->mo->drawflags |= MFD_DONTDRAW;
|
||||
player->mo->flags |= MF_NOGRAVITY;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -176,7 +176,6 @@ consvar_t cv_allowmlook = {"allowmlook", "Yes", CV_NETVAR, CV_YesNo, NULL, 0, NU
|
|||
consvar_t cv_showhud = {"showhud", "Yes", CV_CALL, CV_YesNo, R_SetViewSize, 0, NULL, NULL, 0, 0, NULL};
|
||||
consvar_t cv_translucenthud = {"translucenthud", "10", CV_SAVE, translucenthud_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL};
|
||||
|
||||
consvar_t cv_translucency = {"translucency", "On", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL};
|
||||
consvar_t cv_drawdist = {"drawdist", "Infinite", CV_SAVE, drawdist_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL};
|
||||
//consvar_t cv_drawdist_nights = {"drawdist_nights", "2048", CV_SAVE, drawdist_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL};
|
||||
consvar_t cv_drawdist_precip = {"drawdist_precip", "1024", CV_SAVE, drawdist_precip_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL};
|
||||
|
|
@ -1494,7 +1493,6 @@ void R_RegisterEngineStuff(void)
|
|||
return;
|
||||
|
||||
//CV_RegisterVar(&cv_precipdensity);
|
||||
CV_RegisterVar(&cv_translucency);
|
||||
CV_RegisterVar(&cv_drawdist);
|
||||
//CV_RegisterVar(&cv_drawdist_nights);
|
||||
CV_RegisterVar(&cv_drawdist_precip);
|
||||
|
|
|
|||
|
|
@ -77,7 +77,6 @@ extern consvar_t cv_homremoval;
|
|||
extern consvar_t cv_chasecam, cv_chasecam2, cv_chasecam3, cv_chasecam4;
|
||||
extern consvar_t cv_flipcam, cv_flipcam2, cv_flipcam3, cv_flipcam4;
|
||||
extern consvar_t cv_shadow, cv_shadowoffs;
|
||||
extern consvar_t cv_translucency;
|
||||
extern consvar_t /*cv_precipdensity,*/ cv_drawdist, /*cv_drawdist_nights,*/ cv_drawdist_precip;
|
||||
extern consvar_t cv_fov;
|
||||
extern consvar_t cv_skybox;
|
||||
|
|
|
|||
10
src/r_segs.c
10
src/r_segs.c
|
|
@ -179,14 +179,8 @@ static void R_DrawWallSplats(void)
|
|||
colfunc = basecolfunc;
|
||||
break;
|
||||
case SPLATDRAWMODE_TRANS:
|
||||
if (!cv_translucency.value)
|
||||
colfunc = basecolfunc;
|
||||
else
|
||||
{
|
||||
dc_transmap = transtables + ((tr_trans50 - 1)<<FF_TRANSSHIFT);
|
||||
colfunc = fuzzcolfunc;
|
||||
}
|
||||
|
||||
dc_transmap = transtables + ((tr_trans50 - 1)<<FF_TRANSSHIFT);
|
||||
colfunc = fuzzcolfunc;
|
||||
break;
|
||||
case SPLATDRAWMODE_SHADE:
|
||||
colfunc = shadecolfunc;
|
||||
|
|
|
|||
|
|
@ -1113,13 +1113,6 @@ static void R_SplitSprite(vissprite_t *sprite)
|
|||
|
||||
newsprite->extra_colormap = sector->lightlist[i].extra_colormap;
|
||||
|
||||
/*
|
||||
if (thing->frame & FF_TRANSMASK)
|
||||
;
|
||||
else if (thing->flags2 & MF2_SHADOW)
|
||||
;
|
||||
else
|
||||
*/
|
||||
if (!((newsprite->cut & SC_FULLBRIGHT)
|
||||
&& (!newsprite->extra_colormap || !(newsprite->extra_colormap->fog & 1))))
|
||||
{
|
||||
|
|
@ -1499,19 +1492,27 @@ static void R_ProjectSprite(mobj_t *thing)
|
|||
vis->transmap = NULL;
|
||||
|
||||
// specific translucency
|
||||
if (!cv_translucency.value)
|
||||
; // no translucency
|
||||
else if (thing->flags2 & MF2_SHADOW) // actually only the player should use this (temporary invisibility)
|
||||
vis->transmap = transtables + ((tr_trans80-1)<<FF_TRANSSHIFT); // because now the translucency is set through FF_TRANSMASK
|
||||
if (thing->drawflags & MFD_TRANSMASK) // Object is forcing transparency to a specific value
|
||||
vis->transmap = transtables + ((thing->drawflags & MFD_TRANSMASK) - MFD_TRANS10);
|
||||
else if (thing->frame & FF_TRANSMASK)
|
||||
vis->transmap = transtables + (thing->frame & FF_TRANSMASK) - 0x10000;
|
||||
vis->transmap = transtables + ((thing->frame & FF_TRANSMASK) - FF_TRANS10);
|
||||
|
||||
if (thing->frame & FF_FULLBRIGHT || thing->flags2 & MF2_SHADOW)
|
||||
vis->cut |= SC_FULLBRIGHT;
|
||||
else if (thing->frame & FF_SEMIBRIGHT)
|
||||
vis->cut |= SC_SEMIBRIGHT;
|
||||
if (thing->drawflags & MFD_BRIGHTMASK)
|
||||
{
|
||||
if (thing->drawflags & MFD_FULLBRIGHT)
|
||||
vis->cut |= SC_FULLBRIGHT;
|
||||
else if (thing->drawflags & MFD_SEMIBRIGHT)
|
||||
vis->cut |= SC_SEMIBRIGHT;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (thing->frame & FF_FULLBRIGHT)
|
||||
vis->cut |= SC_FULLBRIGHT;
|
||||
else if (thing->frame & FF_SEMIBRIGHT)
|
||||
vis->cut |= SC_SEMIBRIGHT;
|
||||
}
|
||||
|
||||
if (vis->cut & SC_FULLBRIGHT
|
||||
if ((vis->cut & SC_FULLBRIGHT)
|
||||
&& (!vis->extra_colormap || !(vis->extra_colormap->fog & 1)))
|
||||
{
|
||||
// full bright: goggles
|
||||
|
|
@ -1702,7 +1703,7 @@ static void R_ProjectPrecipitationSprite(precipmobj_t *thing)
|
|||
|
||||
// specific translucency
|
||||
if (thing->frame & FF_TRANSMASK)
|
||||
vis->transmap = (thing->frame & FF_TRANSMASK) - 0x10000 + transtables;
|
||||
vis->transmap = ((thing->frame & FF_TRANSMASK) - FF_TRANS10) + transtables;
|
||||
else
|
||||
vis->transmap = NULL;
|
||||
|
||||
|
|
@ -1758,27 +1759,14 @@ void R_AddSprites(sector_t *sec, INT32 lightlevel)
|
|||
{
|
||||
for (thing = sec->thinglist; thing; thing = thing->snext)
|
||||
{
|
||||
if (thing->sprite == SPR_NULL || thing->flags2 & MF2_DONTDRAW)
|
||||
if (thing->sprite == SPR_NULL)
|
||||
continue;
|
||||
|
||||
if (splitscreen)
|
||||
{
|
||||
if (thing->eflags & MFE_DRAWONLYFORP1)
|
||||
if (viewssnum != 0)
|
||||
continue;
|
||||
|
||||
if (thing->eflags & MFE_DRAWONLYFORP2)
|
||||
if (viewssnum != 1)
|
||||
continue;
|
||||
|
||||
if (thing->eflags & MFE_DRAWONLYFORP3 && splitscreen > 1)
|
||||
if (viewssnum != 2)
|
||||
continue;
|
||||
|
||||
if (thing->eflags & MFE_DRAWONLYFORP4 && splitscreen > 2)
|
||||
if (viewssnum != 3)
|
||||
continue;
|
||||
}
|
||||
if ((viewssnum == 0 && (thing->drawflags & MFD_DONTDRAWP1))
|
||||
|| (viewssnum == 1 && (thing->drawflags & MFD_DONTDRAWP2))
|
||||
|| (viewssnum == 2 && (thing->drawflags & MFD_DONTDRAWP3))
|
||||
|| (viewssnum == 3 && (thing->drawflags & MFD_DONTDRAWP4)))
|
||||
continue;
|
||||
|
||||
approx_dist = P_AproxDistance(viewx-thing->x, viewy-thing->y);
|
||||
|
||||
|
|
@ -1793,27 +1781,14 @@ void R_AddSprites(sector_t *sec, INT32 lightlevel)
|
|||
// Draw everything in sector, no checks
|
||||
for (thing = sec->thinglist; thing; thing = thing->snext)
|
||||
{
|
||||
if (thing->sprite == SPR_NULL || thing->flags2 & MF2_DONTDRAW)
|
||||
if (thing->sprite == SPR_NULL)
|
||||
continue;
|
||||
|
||||
if (splitscreen)
|
||||
{
|
||||
if (thing->eflags & MFE_DRAWONLYFORP1)
|
||||
if (viewssnum != 0)
|
||||
continue;
|
||||
|
||||
if (thing->eflags & MFE_DRAWONLYFORP2)
|
||||
if (viewssnum != 1)
|
||||
continue;
|
||||
|
||||
if (thing->eflags & MFE_DRAWONLYFORP3 && splitscreen > 1)
|
||||
if (viewssnum != 2)
|
||||
continue;
|
||||
|
||||
if (thing->eflags & MFE_DRAWONLYFORP4 && splitscreen > 2)
|
||||
if (viewssnum != 3)
|
||||
continue;
|
||||
}
|
||||
if ((viewssnum == 0 && (thing->drawflags & MFD_DONTDRAWP1))
|
||||
|| (viewssnum == 1 && (thing->drawflags & MFD_DONTDRAWP2))
|
||||
|| (viewssnum == 2 && (thing->drawflags & MFD_DONTDRAWP3))
|
||||
|| (viewssnum == 3 && (thing->drawflags & MFD_DONTDRAWP4)))
|
||||
continue;
|
||||
|
||||
R_ProjectSprite(thing);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -147,7 +147,7 @@ typedef struct vissprite_s
|
|||
lighttable_t *colormap; // for color translation and shadow draw
|
||||
// maxbright frames as well
|
||||
|
||||
UINT8 *transmap; // for MF2_SHADOW sprites, which translucency table to use
|
||||
UINT8 *transmap; // which translucency table to use
|
||||
|
||||
INT32 mobjflags;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue