mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
MFE_DRAWONLYFORPx stuff ported to OpenGL, and MT_DRIFTDUST respects Boo powers
This commit is contained in:
parent
d8f4f7c8a7
commit
8c748120b7
2 changed files with 136 additions and 33 deletions
|
|
@ -59,7 +59,7 @@ struct hwdriver_s hwdriver;
|
||||||
// ==========================================================================
|
// ==========================================================================
|
||||||
|
|
||||||
|
|
||||||
static void HWR_AddSprites(sector_t *sec);
|
static void HWR_AddSprites(sector_t *sec, UINT8 ssplayer);
|
||||||
static void HWR_ProjectSprite(mobj_t *thing);
|
static void HWR_ProjectSprite(mobj_t *thing);
|
||||||
#ifdef HWPRECIP
|
#ifdef HWPRECIP
|
||||||
static void HWR_ProjectPrecipitationSprite(precipmobj_t *thing);
|
static void HWR_ProjectPrecipitationSprite(precipmobj_t *thing);
|
||||||
|
|
@ -3234,7 +3234,7 @@ static void HWR_AddPolyObjectPlanes(void)
|
||||||
// : Draw one or more line segments.
|
// : Draw one or more line segments.
|
||||||
// Notes : Sets gr_cursectorlight to the light of the parent sector, to modulate wall textures
|
// Notes : Sets gr_cursectorlight to the light of the parent sector, to modulate wall textures
|
||||||
// -----------------+
|
// -----------------+
|
||||||
static void HWR_Subsector(size_t num)
|
static void HWR_Subsector(size_t num, UINT8 ssplayer)
|
||||||
{
|
{
|
||||||
INT16 count;
|
INT16 count;
|
||||||
seg_t *line;
|
seg_t *line;
|
||||||
|
|
@ -3602,7 +3602,7 @@ static void HWR_Subsector(size_t num)
|
||||||
{
|
{
|
||||||
// draw sprites first, coz they are clipped to the solidsegs of
|
// draw sprites first, coz they are clipped to the solidsegs of
|
||||||
// subsectors more 'in front'
|
// subsectors more 'in front'
|
||||||
HWR_AddSprites(gr_frontsector);
|
HWR_AddSprites(gr_frontsector, ssplayer);
|
||||||
|
|
||||||
//Hurdler: at this point validcount must be the same, but is not because
|
//Hurdler: at this point validcount must be the same, but is not because
|
||||||
// gr_frontsector doesn't point anymore to sub->sector due to
|
// gr_frontsector doesn't point anymore to sub->sector due to
|
||||||
|
|
@ -3654,7 +3654,7 @@ static boolean HWR_CheckHackBBox(fixed_t *bb)
|
||||||
// BP: big hack for a test in lighning ref : 1249753487AB
|
// BP: big hack for a test in lighning ref : 1249753487AB
|
||||||
fixed_t *hwbbox;
|
fixed_t *hwbbox;
|
||||||
|
|
||||||
static void HWR_RenderBSPNode(INT32 bspnum)
|
static void HWR_RenderBSPNode(INT32 bspnum, UINT8 ssplayer)
|
||||||
{
|
{
|
||||||
/*//GZDoom code
|
/*//GZDoom code
|
||||||
if(bspnum == -1)
|
if(bspnum == -1)
|
||||||
|
|
@ -3694,12 +3694,12 @@ static void HWR_RenderBSPNode(INT32 bspnum)
|
||||||
if (bspnum == -1)
|
if (bspnum == -1)
|
||||||
{
|
{
|
||||||
//*(gr_drawsubsector_p++) = 0;
|
//*(gr_drawsubsector_p++) = 0;
|
||||||
HWR_Subsector(0);
|
HWR_Subsector(0, ssplayer);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//*(gr_drawsubsector_p++) = bspnum&(~NF_SUBSECTOR);
|
//*(gr_drawsubsector_p++) = bspnum&(~NF_SUBSECTOR);
|
||||||
HWR_Subsector(bspnum&(~NF_SUBSECTOR));
|
HWR_Subsector(bspnum&(~NF_SUBSECTOR), ssplayer);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -3711,14 +3711,14 @@ static void HWR_RenderBSPNode(INT32 bspnum)
|
||||||
hwbbox = bsp->bbox[side];
|
hwbbox = bsp->bbox[side];
|
||||||
|
|
||||||
// Recursively divide front space.
|
// Recursively divide front space.
|
||||||
HWR_RenderBSPNode(bsp->children[side]);
|
HWR_RenderBSPNode(bsp->children[side], ssplayer);
|
||||||
|
|
||||||
// Possibly divide back space.
|
// Possibly divide back space.
|
||||||
if (HWR_CheckBBox(bsp->bbox[side^1]))
|
if (HWR_CheckBBox(bsp->bbox[side^1]))
|
||||||
{
|
{
|
||||||
// BP: big hack for a test in lighning ref : 1249753487AB
|
// BP: big hack for a test in lighning ref : 1249753487AB
|
||||||
hwbbox = bsp->bbox[side^1];
|
hwbbox = bsp->bbox[side^1];
|
||||||
HWR_RenderBSPNode(bsp->children[side^1]);
|
HWR_RenderBSPNode(bsp->children[side^1], ssplayer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -5110,7 +5110,7 @@ static void HWR_DrawSprites(void)
|
||||||
// During BSP traversal, this adds sprites by sector.
|
// During BSP traversal, this adds sprites by sector.
|
||||||
// --------------------------------------------------------------------------
|
// --------------------------------------------------------------------------
|
||||||
static UINT8 sectorlight;
|
static UINT8 sectorlight;
|
||||||
static void HWR_AddSprites(sector_t *sec)
|
static void HWR_AddSprites(sector_t *sec, UINT8 ssplayer)
|
||||||
{
|
{
|
||||||
mobj_t *thing;
|
mobj_t *thing;
|
||||||
#ifdef HWPRECIP
|
#ifdef HWPRECIP
|
||||||
|
|
@ -5140,6 +5140,25 @@ static void HWR_AddSprites(sector_t *sec)
|
||||||
if (thing->sprite == SPR_NULL || thing->flags2 & MF2_DONTDRAW)
|
if (thing->sprite == SPR_NULL || thing->flags2 & MF2_DONTDRAW)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
if (splitscreen)
|
||||||
|
{
|
||||||
|
if (thing->eflags & MFE_DRAWONLYFORP1)
|
||||||
|
if (ssplayer != 1)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (thing->eflags & MFE_DRAWONLYFORP2)
|
||||||
|
if (ssplayer != 2)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (thing->eflags & MFE_DRAWONLYFORP3 && splitscreen > 1)
|
||||||
|
if (ssplayer != 3)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (thing->eflags & MFE_DRAWONLYFORP4 && splitscreen > 2)
|
||||||
|
if (ssplayer != 4)
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
approx_dist = P_AproxDistance(viewx-thing->x, viewy-thing->y);
|
approx_dist = P_AproxDistance(viewx-thing->x, viewy-thing->y);
|
||||||
|
|
||||||
if (approx_dist <= limit_dist)
|
if (approx_dist <= limit_dist)
|
||||||
|
|
@ -5150,8 +5169,31 @@ static void HWR_AddSprites(sector_t *sec)
|
||||||
{
|
{
|
||||||
// Draw everything in sector, no checks
|
// Draw everything in sector, no checks
|
||||||
for (thing = sec->thinglist; thing; thing = thing->snext)
|
for (thing = sec->thinglist; thing; thing = thing->snext)
|
||||||
if (!(thing->sprite == SPR_NULL || thing->flags2 & MF2_DONTDRAW))
|
{
|
||||||
HWR_ProjectSprite(thing);
|
if (thing->sprite == SPR_NULL || thing->flags2 & MF2_DONTDRAW)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (splitscreen)
|
||||||
|
{
|
||||||
|
if (thing->eflags & MFE_DRAWONLYFORP1)
|
||||||
|
if (ssplayer != 1)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (thing->eflags & MFE_DRAWONLYFORP2)
|
||||||
|
if (ssplayer != 2)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (thing->eflags & MFE_DRAWONLYFORP3 && splitscreen > 1)
|
||||||
|
if (ssplayer != 3)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (thing->eflags & MFE_DRAWONLYFORP4 && splitscreen > 2)
|
||||||
|
if (ssplayer != 4)
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
HWR_ProjectSprite(thing);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HWPRECIP
|
#ifdef HWPRECIP
|
||||||
|
|
@ -5666,13 +5708,31 @@ void HWR_RenderSkyboxView(INT32 viewnumber, player_t *player)
|
||||||
{
|
{
|
||||||
const float fpov = FIXED_TO_FLOAT(cv_grfov.value+player->fovadd);
|
const float fpov = FIXED_TO_FLOAT(cv_grfov.value+player->fovadd);
|
||||||
postimg_t *type;
|
postimg_t *type;
|
||||||
|
UINT8 ssplayer = 0;
|
||||||
|
|
||||||
if (splitscreen && player == &players[secondarydisplayplayer])
|
if (splitscreen)
|
||||||
type = &postimgtype2;
|
{
|
||||||
else if (splitscreen > 1 && player == &players[thirddisplayplayer])
|
if (player == &players[secondarydisplayplayer])
|
||||||
type = &postimgtype3;
|
{
|
||||||
else if (splitscreen > 2 && player == &players[fourthdisplayplayer])
|
type = &postimgtype2;
|
||||||
type = &postimgtype4;
|
ssplayer = 2;
|
||||||
|
}
|
||||||
|
else if (splitscreen > 1 && player == &players[thirddisplayplayer])
|
||||||
|
{
|
||||||
|
type = &postimgtype3;
|
||||||
|
ssplayer = 3;
|
||||||
|
}
|
||||||
|
else if (splitscreen > 2 && player == &players[fourthdisplayplayer])
|
||||||
|
{
|
||||||
|
type = &postimgtype4;
|
||||||
|
ssplayer = 4;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
type = &postimgtype;
|
||||||
|
ssplayer = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
type = &postimgtype;
|
type = &postimgtype;
|
||||||
|
|
||||||
|
|
@ -5789,7 +5849,7 @@ if (0)
|
||||||
|
|
||||||
validcount++;
|
validcount++;
|
||||||
|
|
||||||
HWR_RenderBSPNode((INT32)numnodes-1);
|
HWR_RenderBSPNode((INT32)numnodes-1, ssplayer);
|
||||||
|
|
||||||
// Make a viewangle int so we can render things based on mouselook
|
// Make a viewangle int so we can render things based on mouselook
|
||||||
if (player == &players[consoleplayer])
|
if (player == &players[consoleplayer])
|
||||||
|
|
@ -5806,18 +5866,18 @@ if (0)
|
||||||
{
|
{
|
||||||
dup_viewangle += ANGLE_90;
|
dup_viewangle += ANGLE_90;
|
||||||
HWR_ClearClipSegs();
|
HWR_ClearClipSegs();
|
||||||
HWR_RenderBSPNode((INT32)numnodes-1); //left
|
HWR_RenderBSPNode((INT32)numnodes-1, ssplayer); //left
|
||||||
|
|
||||||
dup_viewangle += ANGLE_90;
|
dup_viewangle += ANGLE_90;
|
||||||
if (((INT32)aimingangle > ANGLE_45 || (INT32)aimingangle<-ANGLE_45))
|
if (((INT32)aimingangle > ANGLE_45 || (INT32)aimingangle<-ANGLE_45))
|
||||||
{
|
{
|
||||||
HWR_ClearClipSegs();
|
HWR_ClearClipSegs();
|
||||||
HWR_RenderBSPNode((INT32)numnodes-1); //back
|
HWR_RenderBSPNode((INT32)numnodes-1, ssplayer); //back
|
||||||
}
|
}
|
||||||
|
|
||||||
dup_viewangle += ANGLE_90;
|
dup_viewangle += ANGLE_90;
|
||||||
HWR_ClearClipSegs();
|
HWR_ClearClipSegs();
|
||||||
HWR_RenderBSPNode((INT32)numnodes-1); //right
|
HWR_RenderBSPNode((INT32)numnodes-1, ssplayer); //right
|
||||||
|
|
||||||
dup_viewangle += ANGLE_90;
|
dup_viewangle += ANGLE_90;
|
||||||
}
|
}
|
||||||
|
|
@ -5881,17 +5941,35 @@ void HWR_RenderPlayerView(INT32 viewnumber, player_t *player)
|
||||||
{
|
{
|
||||||
const float fpov = FIXED_TO_FLOAT(cv_grfov.value+player->fovadd);
|
const float fpov = FIXED_TO_FLOAT(cv_grfov.value+player->fovadd);
|
||||||
postimg_t *type;
|
postimg_t *type;
|
||||||
|
UINT8 ssplayer = 0;
|
||||||
|
|
||||||
const boolean skybox = (skyboxmo[0] && cv_skybox.value); // True if there's a skybox object and skyboxes are on
|
const boolean skybox = (skyboxmo[0] && cv_skybox.value); // True if there's a skybox object and skyboxes are on
|
||||||
|
|
||||||
FRGBAFloat ClearColor;
|
FRGBAFloat ClearColor;
|
||||||
|
|
||||||
if (splitscreen && player == &players[secondarydisplayplayer])
|
if (splitscreen)
|
||||||
type = &postimgtype2;
|
{
|
||||||
else if (splitscreen > 1 && player == &players[thirddisplayplayer])
|
if (player == &players[secondarydisplayplayer])
|
||||||
type = &postimgtype3;
|
{
|
||||||
else if (splitscreen > 2 && player == &players[fourthdisplayplayer])
|
type = &postimgtype2;
|
||||||
type = &postimgtype4;
|
ssplayer = 2;
|
||||||
|
}
|
||||||
|
else if (splitscreen > 1 && player == &players[thirddisplayplayer])
|
||||||
|
{
|
||||||
|
type = &postimgtype3;
|
||||||
|
ssplayer = 3;
|
||||||
|
}
|
||||||
|
else if (splitscreen > 2 && player == &players[fourthdisplayplayer])
|
||||||
|
{
|
||||||
|
type = &postimgtype4;
|
||||||
|
ssplayer = 4;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
type = &postimgtype;
|
||||||
|
ssplayer = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
type = &postimgtype;
|
type = &postimgtype;
|
||||||
|
|
||||||
|
|
@ -6019,7 +6097,7 @@ if (0)
|
||||||
|
|
||||||
validcount++;
|
validcount++;
|
||||||
|
|
||||||
HWR_RenderBSPNode((INT32)numnodes-1);
|
HWR_RenderBSPNode((INT32)numnodes-1, ssplayer);
|
||||||
|
|
||||||
// Make a viewangle int so we can render things based on mouselook
|
// Make a viewangle int so we can render things based on mouselook
|
||||||
if (player == &players[consoleplayer])
|
if (player == &players[consoleplayer])
|
||||||
|
|
@ -6036,18 +6114,18 @@ if (0)
|
||||||
{
|
{
|
||||||
dup_viewangle += ANGLE_90;
|
dup_viewangle += ANGLE_90;
|
||||||
HWR_ClearClipSegs();
|
HWR_ClearClipSegs();
|
||||||
HWR_RenderBSPNode((INT32)numnodes-1); //left
|
HWR_RenderBSPNode((INT32)numnodes-1, ssplayer); //left
|
||||||
|
|
||||||
dup_viewangle += ANGLE_90;
|
dup_viewangle += ANGLE_90;
|
||||||
if (((INT32)aimingangle > ANGLE_45 || (INT32)aimingangle<-ANGLE_45))
|
if (((INT32)aimingangle > ANGLE_45 || (INT32)aimingangle<-ANGLE_45))
|
||||||
{
|
{
|
||||||
HWR_ClearClipSegs();
|
HWR_ClearClipSegs();
|
||||||
HWR_RenderBSPNode((INT32)numnodes-1); //back
|
HWR_RenderBSPNode((INT32)numnodes-1, ssplayer); //back
|
||||||
}
|
}
|
||||||
|
|
||||||
dup_viewangle += ANGLE_90;
|
dup_viewangle += ANGLE_90;
|
||||||
HWR_ClearClipSegs();
|
HWR_ClearClipSegs();
|
||||||
HWR_RenderBSPNode((INT32)numnodes-1); //right
|
HWR_RenderBSPNode((INT32)numnodes-1, ssplayer); //right
|
||||||
|
|
||||||
dup_viewangle += ANGLE_90;
|
dup_viewangle += ANGLE_90;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
29
src/k_kart.c
29
src/k_kart.c
|
|
@ -1968,10 +1968,35 @@ void K_DriftDustHandling(mobj_t *spawner)
|
||||||
dust->momz = P_MobjFlip(spawner) * P_RandomRange(1, 4)<<FRACBITS;
|
dust->momz = P_MobjFlip(spawner) * P_RandomRange(1, 4)<<FRACBITS;
|
||||||
dust->scale = spawner->scale/2;
|
dust->scale = spawner->scale/2;
|
||||||
dust->destscale = spawner->scale * 3;
|
dust->destscale = spawner->scale * 3;
|
||||||
|
|
||||||
if (leveltime % 6 == 0)
|
if (leveltime % 6 == 0)
|
||||||
{
|
|
||||||
S_StartSound(spawner, sfx_screec);
|
S_StartSound(spawner, sfx_screec);
|
||||||
}
|
|
||||||
|
// Now time for a bunch of flag shit, groooooaann...
|
||||||
|
if (spawner->flags2 & MF2_DONTDRAW)
|
||||||
|
dust->flags2 |= MF2_DONTDRAW;
|
||||||
|
else
|
||||||
|
dust->flags2 &= ~MF2_DONTDRAW;
|
||||||
|
|
||||||
|
if (spawner->eflags & MFE_DRAWONLYFORP1)
|
||||||
|
dust->eflags |= MFE_DRAWONLYFORP1;
|
||||||
|
else
|
||||||
|
dust->eflags &= ~MFE_DRAWONLYFORP1;
|
||||||
|
|
||||||
|
if (spawner->eflags & MFE_DRAWONLYFORP2)
|
||||||
|
dust->eflags |= MFE_DRAWONLYFORP2;
|
||||||
|
else
|
||||||
|
dust->eflags &= ~MFE_DRAWONLYFORP2;
|
||||||
|
|
||||||
|
if (spawner->eflags & MFE_DRAWONLYFORP3)
|
||||||
|
dust->eflags |= MFE_DRAWONLYFORP3;
|
||||||
|
else
|
||||||
|
dust->eflags &= ~MFE_DRAWONLYFORP3;
|
||||||
|
|
||||||
|
if (spawner->eflags & MFE_DRAWONLYFORP4)
|
||||||
|
dust->eflags |= MFE_DRAWONLYFORP4;
|
||||||
|
else
|
||||||
|
dust->eflags &= ~MFE_DRAWONLYFORP4;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue