From 9402a006f4f9f0e86bb38cdf3003075c75044149 Mon Sep 17 00:00:00 2001 From: Alug Date: Thu, 7 Dec 2023 18:35:27 +0100 Subject: [PATCH 01/12] FF_HORIZONTALFLIP and mobj->mirrored from: https://git.do.srb2.org/STJr/SRB2/-/merge_requests/987 --- src/dehacked.c | 1 + src/hardware/hw_drv.h | 2 +- src/hardware/hw_main.c | 7 +++++++ src/hardware/hw_md2.c | 3 ++- src/hardware/r_opengl/r_opengl.c | 15 +++++++++------ src/lua_mobjlib.c | 1 + src/p_mobj.h | 1 + src/p_pspr.h | 2 ++ src/p_saveg.c | 2 ++ src/r_things.c | 9 +++++++-- 10 files changed, 33 insertions(+), 10 deletions(-) diff --git a/src/dehacked.c b/src/dehacked.c index 349b66e7c..c641887fa 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -8277,6 +8277,7 @@ struct { // Frame settings {"FF_FRAMEMASK",FF_FRAMEMASK}, + {"FF_HORIZONTALFLIP",FF_HORIZONTALFLIP}, {"FF_PAPERSPRITE",FF_PAPERSPRITE}, {"FF_ANIMATE",FF_ANIMATE}, {"FF_FULLBRIGHT",FF_FULLBRIGHT}, diff --git a/src/hardware/hw_drv.h b/src/hardware/hw_drv.h index 56055a9dc..b80543f76 100644 --- a/src/hardware/hw_drv.h +++ b/src/hardware/hw_drv.h @@ -49,7 +49,7 @@ EXPORT void HWRAPI(SetSpecialState) (hwdspecialstate_t IdState, INT32 Value); //Hurdler: added for new development -EXPORT void HWRAPI(DrawModel) (model_t *model, INT32 frameIndex, float duration, float tics, INT32 nextFrameIndex, FTransform *pos, float hscale, float vscale, UINT8 flipped, FSurfaceInfo *Surface); +EXPORT void HWRAPI(DrawModel) (model_t *model, INT32 frameIndex, float duration, float tics, INT32 nextFrameIndex, FTransform *pos, float hscale, float vscale, UINT8 flipped, UINT8 hflipped, FSurfaceInfo *Surface); EXPORT void HWRAPI(CreateModelVBOs) (model_t *model); EXPORT void HWRAPI(SetTransform) (FTransform *stransform); diff --git a/src/hardware/hw_main.c b/src/hardware/hw_main.c index 12dfa7683..8a912e59c 100644 --- a/src/hardware/hw_main.c +++ b/src/hardware/hw_main.c @@ -5505,6 +5505,9 @@ void HWR_ProjectSprite(mobj_t *thing) size_t lumpoff; unsigned rot; UINT8 flip; + boolean mirrored = thing->mirrored; + boolean hflip = (!(thing->frame & FF_HORIZONTALFLIP) != !mirrored); + angle_t ang; const boolean papersprite = (thing->frame & FF_PAPERSPRITE); INT32 heightsec, phs; @@ -5606,6 +5609,8 @@ void HWR_ProjectSprite(mobj_t *thing) #endif ang = R_PointToAngle (interp.x, interp.y) - interp.angle; + if (mirrored) + ang = InvAngle(ang); if (sprframe->rotate == SRF_SINGLE) { @@ -5710,6 +5715,8 @@ void HWR_ProjectSprite(mobj_t *thing) this_xscale = spritexscale * this_scale; this_yscale = spriteyscale * this_scale; + + flip = !flip != !hflip; if (flip) { diff --git a/src/hardware/hw_md2.c b/src/hardware/hw_md2.c index b3e6b8e95..9cd077588 100644 --- a/src/hardware/hw_md2.c +++ b/src/hardware/hw_md2.c @@ -1149,6 +1149,7 @@ void HWR_DrawMD2(gr_vissprite_t *spr) INT32 tics = spr->mobj->tics; //mdlframe_t *next = NULL; const UINT8 flip = (UINT8)((spr->mobj->eflags & MFE_VERTICALFLIP) == MFE_VERTICALFLIP); + const UINT8 hflip = (UINT8)(!(spr->mobj->mirrored) != !(spr->mobj->frame & FF_HORIZONTALFLIP)); spritedef_t *sprdef; spriteframe_t *sprframe; spriteinfo_t *sprinfo; @@ -1435,7 +1436,7 @@ void HWR_DrawMD2(gr_vissprite_t *spr) p.y += ox * gr_viewcos; p.z += oy; - HWD.pfnDrawModel(md2->model, frame, durs, tics, nextFrame, &p, md2->scale * xs, md2->scale * ys, flip, &Surf); + HWD.pfnDrawModel(md2->model, frame, durs, tics, nextFrame, &p, md2->scale * xs, md2->scale * ys, flip, hflip, &Surf); } } } diff --git a/src/hardware/r_opengl/r_opengl.c b/src/hardware/r_opengl/r_opengl.c index b69a3c951..9292f8236 100644 --- a/src/hardware/r_opengl/r_opengl.c +++ b/src/hardware/r_opengl/r_opengl.c @@ -3552,7 +3552,7 @@ EXPORT void HWRAPI(CreateModelVBOs) (model_t *model) #define BUFFER_OFFSET(i) ((char*)(i)) -static void DrawModelEx(model_t *model, INT32 frameIndex, float duration, float tics, INT32 nextFrameIndex, FTransform *pos, float hscale, float vscale, UINT8 flipped, FSurfaceInfo *Surface) +static void DrawModelEx(model_t *model, INT32 frameIndex, float duration, float tics, INT32 nextFrameIndex, FTransform *pos, float hscale, float vscale, UINT8 flipped, UINT8 hflipped, FSurfaceInfo *Surface) { static GLRGBAFloat poly = {0,0,0,0}; static GLRGBAFloat tint = {0,0,0,0}; @@ -3613,12 +3613,13 @@ static void DrawModelEx(model_t *model, INT32 frameIndex, float duration, float pglEnable(GL_NORMALIZE); #ifdef USE_FTRANSFORM_MIRROR - // flipped is if the object is flipped + // flipped is if the object is vertically flipped + // hflipped is if the object is horizontally flipped // pos->flip is if the screen is flipped vertically // pos->mirror is if the screen is flipped horizontally // XOR all the flips together to figure out what culling to use! { - boolean reversecull = (flipped ^ pos->flip ^ pos->mirror); + boolean reversecull = (flipped ^ hflipped ^ pos->flip ^ pos->mirror); if (reversecull) pglCullFace(GL_FRONT); else @@ -3626,7 +3627,7 @@ static void DrawModelEx(model_t *model, INT32 frameIndex, float duration, float } #else // pos->flip is if the screen is flipped too - if (flipped != pos->flip) // If either are active, but not both, invert the model's culling + if (flipped ^ hflipped ^ pos->flip) // If one or three of these are active, but not two, invert the model's culling pglCullFace(GL_FRONT); else pglCullFace(GL_BACK); @@ -3636,6 +3637,8 @@ static void DrawModelEx(model_t *model, INT32 frameIndex, float duration, float pglTranslatef(pos->x, pos->z, pos->y); if (flipped) scaley = -scaley; + if (hflipped) + scalez = -scalez; #ifdef USE_FTRANSFORM_ANGLEZ pglRotatef(pos->anglez, 0.0f, 0.0f, -1.0f); // rotate by slope from Kart #endif @@ -3764,9 +3767,9 @@ static void DrawModelEx(model_t *model, INT32 frameIndex, float duration, float // -----------------+ // HWRAPI DrawModel : Draw a model // -----------------+ -EXPORT void HWRAPI(DrawModel) (model_t *model, INT32 frameIndex, float duration, float tics, INT32 nextFrameIndex, FTransform *pos, float hscale, float vscale, UINT8 flipped, FSurfaceInfo *Surface) +EXPORT void HWRAPI(DrawModel) (model_t *model, INT32 frameIndex, float duration, float tics, INT32 nextFrameIndex, FTransform *pos, float hscale, float vscale, UINT8 flipped, UINT8 hflipped, FSurfaceInfo *Surface) { - DrawModelEx(model, frameIndex, duration, tics, nextFrameIndex, pos, hscale, vscale, flipped, Surface); + DrawModelEx(model, frameIndex, duration, tics, nextFrameIndex, pos, hscale, vscale, flipped, hflipped, Surface); } // -----------------+ diff --git a/src/lua_mobjlib.c b/src/lua_mobjlib.c index 06c56645f..52eda4554 100644 --- a/src/lua_mobjlib.c +++ b/src/lua_mobjlib.c @@ -143,6 +143,7 @@ static const udata_field_t mobj_fields[] = { FIELD(mobj_t, cvmem, udatalib_getter_int32, udatalib_setter_int32), FIELD(mobj_t, standingslope, udatalib_getter_slope, mobj_standingslope_noset), FIELD(mobj_t, colorized, udatalib_getter_boolean, udatalib_setter_boolean), + FIELD(mobj_t, mirrored, udatalib_getter_boolean, udatalib_setter_boolean), FIELD(mobj_t, rollmodel, udatalib_getter_boolean, udatalib_setter_boolean), { NULL }, }; diff --git a/src/p_mobj.h b/src/p_mobj.h index 67a579c11..d53d7e3f0 100644 --- a/src/p_mobj.h +++ b/src/p_mobj.h @@ -395,6 +395,7 @@ typedef struct mobj_s boolean resetinterp; // if true, some fields should not be interpolated (see R_InterpolateMobjState implementation) boolean colorized; // Whether the mobj uses the rainbow colormap + boolean mirrored; // The object's rotations will be mirrored left to right, e.g., see frame AL from the right and AR from the left boolean rollmodel; // OpenGL: Should this model rotate? tic_t slamsoundtimer; diff --git a/src/p_pspr.h b/src/p_pspr.h index e74266002..5ac1d1d84 100644 --- a/src/p_pspr.h +++ b/src/p_pspr.h @@ -37,6 +37,8 @@ /// \brief Frame flags: only the frame number #define FF_FRAMEMASK 0x1ff +/// \brief Frame flags: Flip sprite horizontally +#define FF_HORIZONTALFLIP 0x400 /// \brief Frame flags: Thin, paper-like sprite (for collision equivalent, see MF_PAPERCOLLISION) #define FF_PAPERSPRITE 0x800 /// \brief Frame flags: Simple stateless animation diff --git a/src/p_saveg.c b/src/p_saveg.c index 530a0834c..d4e9b2f5e 100644 --- a/src/p_saveg.c +++ b/src/p_saveg.c @@ -1990,6 +1990,8 @@ static void LoadMobjThinker(actionf_p1 thinker) mobj->stretchslam = 0; mobj->slamsoundtimer = 0; + mobj->mirrored = 0; + mobj->z = z; mobj->floorz = floorz; mobj->ceilingz = ceilingz; diff --git a/src/r_things.c b/src/r_things.c index 6334716ce..0278bf32a 100644 --- a/src/r_things.c +++ b/src/r_things.c @@ -1315,9 +1315,10 @@ static void R_ProjectSprite(mobj_t *thing) size_t rot; UINT8 flip; - /*boolean vflip = (!(thing->eflags & MFE_VERTICALFLIP) != !R_ThingVerticallyFlipped(thing)); + /*boolean vflip = (!(thing->eflags & MFE_VERTICALFLIP) != !R_ThingVerticallyFlipped(thing));*/ + boolean mirrored = thing->mirrored; - boolean hflip = (!R_ThingHorizontallyFlipped(thing) != !mirrored);*/ + boolean hflip = (!(thing->frame & FF_HORIZONTALFLIP) != !mirrored); INT32 lindex; @@ -1445,6 +1446,8 @@ static void R_ProjectSprite(mobj_t *thing) if (sprframe->rotate != SRF_SINGLE || papersprite) { ang = R_PointToAngle (interp.x, interp.y) - interp.angle; + if (mirrored) + ang = InvAngle(ang); if (papersprite) ang_scale = abs(FINESINE(ang>>ANGLETOFINESHIFT)); } @@ -1539,6 +1542,8 @@ static void R_ProjectSprite(mobj_t *thing) spr_offset += interp.spritexoffset * flipoffset; spr_topoffset += interp.spriteyoffset * flipoffset; } + + flip = !flip != !hflip; if (flip) offset = spr_offset - spr_width; -- 2.54.0 From 9b8c569c9e675d0566713b7d6ce88145b4790bc3 Mon Sep 17 00:00:00 2001 From: Alug Date: Sat, 9 Dec 2023 07:38:12 +0100 Subject: [PATCH 02/12] reorder things a little --- src/hardware/hw_main.c | 37 +++++++++++++++++-------------------- src/hardware/hw_main.h | 2 +- src/m_fixed.h | 1 - src/r_defs.h | 2 ++ 4 files changed, 20 insertions(+), 22 deletions(-) diff --git a/src/hardware/hw_main.c b/src/hardware/hw_main.c index 12dfa7683..b04040bb1 100644 --- a/src/hardware/hw_main.c +++ b/src/hardware/hw_main.c @@ -685,7 +685,7 @@ static FUINT HWR_CalcSlopeLight(FUINT lightnum, angle_t dir, fixed_t delta) // HWR_RenderPlane // Render a floor or ceiling convex polygon -void HWR_RenderPlane(extrasubsector_t *xsub, boolean isceiling, fixed_t fixedheight, FBITFIELD PolyFlags, INT32 lightlevel, lumpnum_t lumpnum, sector_t *FOFsector, UINT8 alpha, extracolormap_t *planecolormap, subsector_t *subsector) +void HWR_RenderPlane(subsector_t *subsector, extrasubsector_t *xsub, boolean isceiling, fixed_t fixedheight, FBITFIELD PolyFlags, INT32 lightlevel, lumpnum_t lumpnum, sector_t *FOFsector, UINT8 alpha, extracolormap_t *planecolormap) { polyvertex_t * pv; float height; //constant y for all points on the convex flat polygon @@ -840,8 +840,8 @@ void HWR_RenderPlane(extrasubsector_t *xsub, boolean isceiling, fixed_t fixedhei #define SETUP3DVERT(vert, vx, vy) {\ /* Hurdler: add scrolling texture on floor/ceiling */\ - vert->s = (float)(((vx) / fflatsize) - flatxref + scrollx);\ - vert->t = (float)(flatyref - ((vy) / fflatsize) + scrolly);\ + vert->s = (float)(((vx) / fflatsize) - flatxref + scrollx);\ + vert->t = (float)(flatyref - ((vy) / fflatsize) + scrolly);\ \ /* Need to rotate before translate */\ if (angle) /* Only needs to be done if there's an altered angle */\ @@ -910,7 +910,7 @@ void HWR_RenderPlane(extrasubsector_t *xsub, boolean isceiling, fixed_t fixedhei for (i = 0; i < subsector->numlines; i++, line++) { - if (line->linedef->special == 41 && R_PointOnSegSide(dup_viewx, dup_viewy, line) == 0) + if (line->linedef->special == HORIZONSPECIAL && R_PointOnSegSide(dup_viewx, dup_viewy, line) == 0) { P_ClosestPointOnLine(viewx, viewy, line->linedef, &v); dist = FIXED_TO_FLOAT(R_PointToDist(v.x, v.y)); @@ -2290,7 +2290,7 @@ void HWR_ProcessSeg(void) // Sort of like GLWall::Process in GZDoom { // Single sided line... Deal only with the middletexture (if one exists) gr_midtexture = R_GetTextureNum(gr_sidedef->midtexture); - if (gr_midtexture && gr_linedef->special != 41) // (Ignore horizon line for OGL) + if (gr_midtexture && gr_linedef->special != HORIZONSPECIAL) // Ignore horizon line for OGL { { fixed_t texturevpeg; @@ -3400,11 +3400,8 @@ void HWR_RenderPolyObjectPlane(polyobj_t *polysector, boolean isceiling, fixed_t } // reference point for flat texture coord for each vertex around the polygon - flatxref = FIXED_TO_FLOAT(polysector->origVerts[0].x); - flatyref = FIXED_TO_FLOAT(polysector->origVerts[0].y); - - flatxref = (float)(((fixed_t)flatxref & (~flatflag)) / fflatsize); - flatyref = (float)(((fixed_t)flatyref & (~flatflag)) / fflatsize); + flatxref = (float)((polysector->origVerts[0].x & (~flatflag)) / fflatsize); + flatyref = (float)((polysector->origVerts[0].y & (~flatflag)) / fflatsize); // transform v3d = planeVerts; @@ -3709,11 +3706,11 @@ void HWR_Subsector(size_t num) if (sub->validcount != validcount) { HWR_GetFlat(levelflats[gr_frontsector->floorpic].lumpnum, R_NoEncore(gr_frontsector, false)); - HWR_RenderPlane(&extrasubsectors[num], false, + HWR_RenderPlane(sub, &extrasubsectors[num], false, // Hack to make things continue to work around slopes. locFloorHeight == cullFloorHeight ? locFloorHeight : gr_frontsector->floorheight, // We now return you to your regularly scheduled rendering. - PF_Occlude, floorlightlevel, levelflats[gr_frontsector->floorpic].lumpnum, NULL, 255, floorcolormap, sub); + PF_Occlude, floorlightlevel, levelflats[gr_frontsector->floorpic].lumpnum, NULL, 255, floorcolormap); } } } @@ -3725,11 +3722,11 @@ void HWR_Subsector(size_t num) if (sub->validcount != validcount) { HWR_GetFlat(levelflats[gr_frontsector->ceilingpic].lumpnum, R_NoEncore(gr_frontsector, true)); - HWR_RenderPlane(&extrasubsectors[num], true, + HWR_RenderPlane(sub, &extrasubsectors[num], true, // Hack to make things continue to work around slopes. locCeilingHeight == cullCeilingHeight ? locCeilingHeight : gr_frontsector->ceilingheight, // We now return you to your regularly scheduled rendering. - PF_Occlude, ceilinglightlevel, levelflats[gr_frontsector->ceilingpic].lumpnum,NULL, 255, ceilingcolormap, sub); + PF_Occlude, ceilinglightlevel, levelflats[gr_frontsector->ceilingpic].lumpnum,NULL, 255, ceilingcolormap); } } } @@ -3794,8 +3791,8 @@ void HWR_Subsector(size_t num) { HWR_GetFlat(levelflats[*rover->bottompic].lumpnum, R_NoEncore(gr_frontsector, false)); light = R_GetPlaneLight(gr_frontsector, centerHeight, viewz < cullHeight ? true : false); - HWR_RenderPlane(&extrasubsectors[num], false, *rover->bottomheight, (rover->flags & FF_RIPPLE ? PF_Ripple : 0)|PF_Occlude, *gr_frontsector->lightlist[light].lightlevel, levelflats[*rover->bottompic].lumpnum, - rover->master->frontsector, 255, gr_frontsector->lightlist[light].extra_colormap, sub); + HWR_RenderPlane(sub, &extrasubsectors[num], false, *rover->bottomheight, (rover->flags & FF_RIPPLE ? PF_Ripple : 0)|PF_Occlude, *gr_frontsector->lightlist[light].lightlevel, levelflats[*rover->bottompic].lumpnum, + rover->master->frontsector, 255, gr_frontsector->lightlist[light].extra_colormap); } } @@ -3846,8 +3843,8 @@ void HWR_Subsector(size_t num) { HWR_GetFlat(levelflats[*rover->toppic].lumpnum, R_NoEncore(gr_frontsector, true)); light = R_GetPlaneLight(gr_frontsector, centerHeight, viewz < cullHeight ? true : false); - HWR_RenderPlane(&extrasubsectors[num], true, *rover->topheight, (rover->flags & FF_RIPPLE ? PF_Ripple : 0)|PF_Occlude, *gr_frontsector->lightlist[light].lightlevel, levelflats[*rover->toppic].lumpnum, - rover->master->frontsector, 255, gr_frontsector->lightlist[light].extra_colormap, sub); + HWR_RenderPlane(sub, &extrasubsectors[num], true, *rover->topheight, (rover->flags & FF_RIPPLE ? PF_Ripple : 0)|PF_Occlude, *gr_frontsector->lightlist[light].lightlevel, levelflats[*rover->toppic].lumpnum, + rover->master->frontsector, 255, gr_frontsector->lightlist[light].extra_colormap); } } } @@ -5263,8 +5260,8 @@ void HWR_RenderDrawNodes(void) if (!(plane->blend & PF_NoTexture)) HWR_GetFlat(plane->lumpnum, R_NoEncore(plane->FOFSector, plane->isceiling)); - HWR_RenderPlane(plane->xsub, plane->isceiling, plane->fixedheight, plane->blend, plane->lightlevel, - plane->lumpnum, plane->FOFSector, plane->alpha, plane->planecolormap, NULL); + HWR_RenderPlane(NULL, plane->xsub, plane->isceiling, plane->fixedheight, plane->blend, plane->lightlevel, + plane->lumpnum, plane->FOFSector, plane->alpha, plane->planecolormap); } else if (drawnode->type == DRAWNODE_POLYOBJECT_PLANE) { diff --git a/src/hardware/hw_main.h b/src/hardware/hw_main.h index 21495504c..3babbb29d 100644 --- a/src/hardware/hw_main.h +++ b/src/hardware/hw_main.h @@ -112,7 +112,7 @@ void HWR_MakeScreenFinalTexture(void); void HWR_DrawScreenFinalTexture(int width, int height); // hw_main.c: Planes -void HWR_RenderPlane(extrasubsector_t *xsub, boolean isceiling, fixed_t fixedheight, FBITFIELD PolyFlags, INT32 lightlevel, lumpnum_t lumpnum, sector_t *FOFsector, UINT8 alpha, extracolormap_t *planecolormap, subsector_t *subsector); +void HWR_RenderPlane(subsector_t *subsector, extrasubsector_t *xsub, boolean isceiling, fixed_t fixedheight, FBITFIELD PolyFlags, INT32 lightlevel, lumpnum_t lumpnum, sector_t *FOFsector, UINT8 alpha, extracolormap_t *planecolormap); void HWR_AddTransparentFloor(lumpnum_t lumpnum, extrasubsector_t *xsub, boolean isceiling, fixed_t fixedheight, INT32 lightlevel, INT32 alpha, sector_t *FOFSector, FBITFIELD blend, boolean fogplane, extracolormap_t *planecolormap); #ifdef POLYOBJECTS diff --git a/src/m_fixed.h b/src/m_fixed.h index 35287554d..9d1ea399f 100644 --- a/src/m_fixed.h +++ b/src/m_fixed.h @@ -58,7 +58,6 @@ FUNCMATH FUNCINLINE static ATTRINLINE fixed_t FloatToFixed(float f) #define FIXED_TO_FLOAT(x) FixedToFloat(x) // (((float)(x)) / ((float)FRACUNIT)) #define FLOAT_TO_FIXED(f) FloatToFixed(f) // (fixed_t)((f) * ((float)FRACUNIT)) - /** \brief The FixedMul function \param a fixed_t number diff --git a/src/r_defs.h b/src/r_defs.h index fa978ced2..8811d64e2 100644 --- a/src/r_defs.h +++ b/src/r_defs.h @@ -407,6 +407,8 @@ typedef enum ST_NEGATIVE } slopetype_t; +#define HORIZONSPECIAL 41 + typedef struct line_s { // Vertices, from v1 to v2. -- 2.54.0 From 0e2d793a7a5ad827a9a1381e765d17bf5581b8d7 Mon Sep 17 00:00:00 2001 From: Alug Date: Sat, 9 Dec 2023 07:42:13 +0100 Subject: [PATCH 03/12] add HWR_UseShader bool for shader stuff just to make things look neater --- src/hardware/hw_main.c | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/src/hardware/hw_main.c b/src/hardware/hw_main.c index b04040bb1..6837d9c90 100644 --- a/src/hardware/hw_main.c +++ b/src/hardware/hw_main.c @@ -477,6 +477,11 @@ static size_t gr_numportalcullsectors = 0; // Lighting // ========================================================================== +static boolean HWR_UseShader(void) +{ + return (cv_grshaders.value && gr_shadersavailable); +} + void HWR_Lighting(FSurfaceInfo *Surface, INT32 light_level, extracolormap_t *colormap) { RGBA_t poly_color, tint_color, fade_color; @@ -487,7 +492,7 @@ void HWR_Lighting(FSurfaceInfo *Surface, INT32 light_level, extracolormap_t *col fade_color.rgba = (colormap != NULL) ? (UINT32)colormap->fadergba : GL_DEFAULTFOG; // Crappy backup coloring if you can't do shaders - if (!cv_grshaders.value || !gr_shadersavailable) + if (!HWR_UseShader()) { // be careful, this may get negative for high lightlevel values. float tint_alpha, fade_alpha; @@ -572,7 +577,7 @@ UINT8 HWR_FogBlockAlpha(INT32 light, extracolormap_t *colormap) // Let's see if realcolor.rgba = (colormap != NULL) ? colormap->rgba : GL_DEFAULTMIX; - if (cv_grshaders.value && gr_shadersavailable) + if (HWR_UseShader()) { surfcolor.s.alpha = (255 - light); } @@ -880,7 +885,7 @@ void HWR_RenderPlane(subsector_t *subsector, extrasubsector_t *xsub, boolean isc else PolyFlags |= PF_Masked|PF_Modulated; - if (cv_grshaders.value && gr_shadersavailable) + if (HWR_UseShader()) { if (PolyFlags & PF_Fog) HWD.pfnSetShader(6); // fog shader @@ -1044,7 +1049,7 @@ static void HWR_DrawSegsSplats(FSurfaceInfo * pSurf) break; } - if (cv_grshaders.value && gr_shadersavailable) + if (HWR_UseShader()) { HWD.pfnSetShader(HWR_ShouldUsePaletteRendering() ? 10 : 2); // wall shader } @@ -1082,7 +1087,7 @@ void HWR_ProjectWall(FOutVector *wallVerts, FSurfaceInfo *pSurf, FBITFIELD blend { HWR_Lighting(pSurf, lightlevel, wallcolormap); - if (cv_grshaders.value && gr_shadersavailable) + if (HWR_UseShader()) { HWD.pfnSetShader(HWR_ShouldUsePaletteRendering() ? 10 : 2); // wall shader blendmode |= PF_ColorMapped; @@ -3483,7 +3488,7 @@ void HWR_RenderPolyObjectPlane(polyobj_t *polysector, boolean isceiling, fixed_t else blendmode |= PF_Masked|PF_Modulated; - if (cv_grshaders.value && gr_shadersavailable) + if (HWR_UseShader()) { HWD.pfnSetShader(HWR_ShouldUsePaletteRendering() ? 9 : 1); // floor shader blendmode |= PF_ColorMapped; @@ -4300,7 +4305,7 @@ static void HWR_DrawSpriteShadow(gr_vissprite_t *spr, GLPatch_t *gpatch, float t { sSurf.PolyColor.s.alpha = (UINT8)(sSurf.PolyColor.s.alpha - floorheight/4); - if (cv_grshaders.value && gr_shadersavailable) + if (HWR_UseShader()) { HWD.pfnSetShader(HWR_ShouldUsePaletteRendering() ? 9 : 1); // floor shader } @@ -4672,7 +4677,7 @@ static void HWR_SplitSprite(gr_vissprite_t *spr) Surf.PolyColor.s.alpha = alpha; - if (cv_grshaders.value && gr_shadersavailable) + if (HWR_UseShader()) { HWD.pfnSetShader(HWR_ShouldUsePaletteRendering() ? 10 : 3); // sprite shader blend |= PF_ColorMapped; @@ -4717,7 +4722,7 @@ static void HWR_SplitSprite(gr_vissprite_t *spr) Surf.PolyColor.s.alpha = alpha; - if (cv_grshaders.value && gr_shadersavailable) + if (HWR_UseShader()) { HWD.pfnSetShader(HWR_ShouldUsePaletteRendering() ? 10 : 3); // sprite shader blend |= PF_ColorMapped; @@ -4875,7 +4880,7 @@ static void HWR_DrawSprite(gr_vissprite_t *spr) blend = PF_Translucent|PF_Occlude; } - if (cv_grshaders.value && gr_shadersavailable) + if (HWR_UseShader()) { HWD.pfnSetShader(HWR_ShouldUsePaletteRendering() ? 10 : 3); // sprite shader blend |= PF_ColorMapped; @@ -4974,7 +4979,7 @@ static inline void HWR_DrawPrecipitationSprite(gr_vissprite_t *spr) blend = PF_Translucent|PF_Occlude; } - if (cv_grshaders.value && gr_shadersavailable) + if (HWR_UseShader()) { HWD.pfnSetShader(HWR_ShouldUsePaletteRendering() ? 10 : 3); // sprite shader blend |= PF_ColorMapped; @@ -6649,7 +6654,7 @@ void HWR_RenderWall(FOutVector *wallVerts, FSurfaceInfo *pSurf, FBITFIELD blend, if (!fogwall) { - if (cv_grshaders.value && gr_shadersavailable) + if (HWR_UseShader()) { HWD.pfnSetShader(HWR_ShouldUsePaletteRendering() ? 10 : 2); // wall shader blendmode |= PF_ColorMapped; -- 2.54.0 From 364eb1b0c82056e6e937fb2196bb3ba1a0d35433 Mon Sep 17 00:00:00 2001 From: Alug Date: Sat, 9 Dec 2023 07:52:11 +0100 Subject: [PATCH 04/12] clean up a little + add some comments --- src/k_kart.c | 41 ++++++++++++----------------------------- 1 file changed, 12 insertions(+), 29 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index a885f182c..f2ea952a1 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -58,11 +58,14 @@ consvar_t cv_want_yoffset = {"hud_wanted_yoffset", "0", CV_SAVE, NULL, NULL, 0, consvar_t cv_stat_xoffset = {"hud_stat_xoffset", "0", CV_SAVE, NULL, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_stat_yoffset = {"hud_stat_yoffset", "0", CV_SAVE, NULL, NULL, 0, NULL, NULL, 0, 0, NULL}; +// extra hud things consvar_t cv_showstats = {"showstats", "Off", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_showinput = {"showinput", "Off", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; + static CV_PossibleValue_t speedo_cons_t[] = {{1, "Default"}, {2, "Small"}, {3, "P-Meter"}, {0, NULL}}; consvar_t cv_newspeedometer = {"newspeedometer", "Default", CV_SAVE, speedo_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; +//hardcode satlyhop mhhm consvar_t cv_saltyhop = {"hardcodehop", "Off", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_saltyhopsfx = {"hardcodehopsfx", "On", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_saltysquish = {"hardcodehopsquish", "On", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; @@ -74,11 +77,11 @@ consvar_t cv_colorizeditembox = {"colorizeditembox", "Off", CV_SAVE, CV_OnOff, N static CV_PossibleValue_t HudColor_cons_t[MAXSKINCOLORS+1]; consvar_t cv_colorizedhudcolor = {"colorizedhudcolor", "Skin Color", CV_SAVE, HudColor_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; -consvar_t cv_darkitembox = {"darkitembox", "On", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_highresportrait = {"highresportrait", "Off", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; //make char potraits use their high-res version instead -consvar_t cv_biglaps = {"biglaphud", "On", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; // here for ppl who dont want to make 2 more patches for their custom hud +consvar_t cv_darkitembox = {"darkitembox", "On", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; //itembox gets a dark box with specific items -consvar_t cv_highresportrait = {"highresportrait", "Off", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_biglaps = {"biglaphud", "On", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; //here for ppl who dont want to make 2 more patches for their custom hud // SOME IMPORTANT VARIABLES DEFINED IN DOOMDEF.H: @@ -7875,12 +7878,8 @@ static void K_drawKartItem(void) break; case KITEM_INVINCIBILITY: localpatch = localinv; - if (cv_darkitembox.value){ - if (cv_colorizeditembox.value && K_UseColorHud()) - localbg = kp_itembgclr[offset+1]; - else - localbg = kp_itembg[offset+1]; - } + if (cv_darkitembox.value) + localbg = (cv_colorizeditembox.value && K_UseColorHud()) ? kp_itembgclr[offset + 1] : kp_itembg[offset + 1]; break; case KITEM_BANANA: localpatch = kp_banana[offset]; @@ -7902,12 +7901,8 @@ static void K_drawKartItem(void) break; case KITEM_SPB: localpatch = kp_selfpropelledbomb[offset]; - if (cv_darkitembox.value){ - if (cv_colorizeditembox.value && K_UseColorHud()) - localbg = kp_itembgclr[offset+1]; - else - localbg = kp_itembg[offset+1]; - } + if (cv_darkitembox.value) + localbg = (cv_colorizeditembox.value && K_UseColorHud()) ? kp_itembgclr[offset + 1] : kp_itembg[offset + 1]; break; case KITEM_GROW: localpatch = kp_grow[offset]; @@ -7917,12 +7912,8 @@ static void K_drawKartItem(void) break; case KITEM_THUNDERSHIELD: localpatch = kp_thundershield[offset]; - if (cv_darkitembox.value){ - if (cv_colorizeditembox.value && K_UseColorHud()) - localbg = kp_itembgclr[offset+1]; - else - localbg = kp_itembg[offset+1]; - } + if (cv_darkitembox.value) + localbg = (cv_colorizeditembox.value && K_UseColorHud()) ? kp_itembgclr[offset + 1] : kp_itembg[offset + 1]; break; case KITEM_HYUDORO: localpatch = kp_hyudoro[offset]; @@ -7992,18 +7983,10 @@ static void K_drawKartItem(void) if (cv_colorizeditembox.value && K_UseColorHud()) - { V_DrawMappedPatch(fx, fy, V_HUDTRANS|fflags, localbg,colormap); - } else - { V_DrawScaledPatch(fx, fy, V_HUDTRANS|fflags, localbg); - } - - - - // Then, the numbers: if (stplyr->kartstuff[k_itemamount] >= numberdisplaymin && !stplyr->kartstuff[k_itemroulette]) { -- 2.54.0 From f10608ea2c07eec1c50ce8844bba84eac77d8b4f Mon Sep 17 00:00:00 2001 From: Alug Date: Sat, 9 Dec 2023 07:52:47 +0100 Subject: [PATCH 05/12] smh --- src/k_kart.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index f2ea952a1..f009c4f36 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -58,14 +58,14 @@ consvar_t cv_want_yoffset = {"hud_wanted_yoffset", "0", CV_SAVE, NULL, NULL, 0, consvar_t cv_stat_xoffset = {"hud_stat_xoffset", "0", CV_SAVE, NULL, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_stat_yoffset = {"hud_stat_yoffset", "0", CV_SAVE, NULL, NULL, 0, NULL, NULL, 0, 0, NULL}; -// extra hud things +//extra hud things consvar_t cv_showstats = {"showstats", "Off", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_showinput = {"showinput", "Off", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; static CV_PossibleValue_t speedo_cons_t[] = {{1, "Default"}, {2, "Small"}, {3, "P-Meter"}, {0, NULL}}; consvar_t cv_newspeedometer = {"newspeedometer", "Default", CV_SAVE, speedo_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; -//hardcode satlyhop mhhm +//hardcode saltyhop mhhm consvar_t cv_saltyhop = {"hardcodehop", "Off", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_saltyhopsfx = {"hardcodehopsfx", "On", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_saltysquish = {"hardcodehopsquish", "On", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; -- 2.54.0 From 52b5db7ad036f706cc631995fad0be4049fd63ce Mon Sep 17 00:00:00 2001 From: Alug Date: Sat, 9 Dec 2023 08:14:33 +0100 Subject: [PATCH 06/12] use hwr_useshader also in palshader this ensures palshader stuff can only do things when shaders are on AND availible --- src/hardware/hw_main.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/hardware/hw_main.c b/src/hardware/hw_main.c index 6837d9c90..f06ff9bf1 100644 --- a/src/hardware/hw_main.c +++ b/src/hardware/hw_main.c @@ -162,12 +162,12 @@ consvar_t cv_grslopecontrast = {"gr_slopecontrast", "Off", CV_SAVE, CV_OnOff, NU boolean HWR_ShouldUsePaletteRendering(void) { - return (cv_grpaletteshader.value && cv_grshaders.value); + return (cv_grpaletteshader.value && HWR_UseShader()); } boolean HWR_PalRenderFlashpal(void) { - return (cv_grpaletteshader.value && cv_grshaders.value && cv_grflashpal.value); + return (cv_grpaletteshader.value && HWR_UseShader() && cv_grflashpal.value); } static void CV_filtermode_ONChange(void) @@ -190,11 +190,11 @@ static void CV_screentextures_ONChange(void) static void CV_grshaders_OnChange(void) { - if (rendermode == render_opengl) + if (rendermode == render_opengl) { if (HWR_ShouldUsePaletteRendering()) { - InitPalette(0, false); + InitPalette(0, false); } V_SetPalette(0); @@ -203,9 +203,9 @@ static void CV_grshaders_OnChange(void) static void CV_useCustomShaders_ONChange(void) { - if (rendermode == render_opengl) + if (rendermode == render_opengl) { - if (cv_grshaders.value) + if (HWR_UseShader()) HWD.pfnInitCustomShaders(); } } @@ -477,7 +477,7 @@ static size_t gr_numportalcullsectors = 0; // Lighting // ========================================================================== -static boolean HWR_UseShader(void) +boolean HWR_UseShader(void) { return (cv_grshaders.value && gr_shadersavailable); } -- 2.54.0 From ff31eb7d1728eed431882a98c825bc3f670b8ed7 Mon Sep 17 00:00:00 2001 From: Alug Date: Sun, 10 Dec 2023 17:07:00 +0100 Subject: [PATCH 07/12] Zzz... --- src/hardware/hw_main.c | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/hardware/hw_main.c b/src/hardware/hw_main.c index f06ff9bf1..c22720b63 100644 --- a/src/hardware/hw_main.c +++ b/src/hardware/hw_main.c @@ -160,16 +160,6 @@ consvar_t cv_grfakecontrast = {"gr_fakecontrast", "Standard", CV_SAVE, grfakecon consvar_t cv_grslopecontrast = {"gr_slopecontrast", "Off", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; -boolean HWR_ShouldUsePaletteRendering(void) -{ - return (cv_grpaletteshader.value && HWR_UseShader()); -} - -boolean HWR_PalRenderFlashpal(void) -{ - return (cv_grpaletteshader.value && HWR_UseShader() && cv_grflashpal.value); -} - static void CV_filtermode_ONChange(void) { if (rendermode == render_opengl) @@ -201,11 +191,11 @@ static void CV_grshaders_OnChange(void) } } -static void CV_useCustomShaders_ONChange(void) +void CV_useCustomShaders_ONChange(void) { if (rendermode == render_opengl) { - if (HWR_UseShader()) + if (cv_grshaders.value) HWD.pfnInitCustomShaders(); } } @@ -477,11 +467,21 @@ static size_t gr_numportalcullsectors = 0; // Lighting // ========================================================================== -boolean HWR_UseShader(void) +static boolean HWR_UseShader(void) { return (cv_grshaders.value && gr_shadersavailable); } +boolean HWR_ShouldUsePaletteRendering(void) +{ + return (cv_grpaletteshader.value && cv_grshaders.value && gr_shadersavailable); +} + +boolean HWR_PalRenderFlashpal(void) +{ + return (cv_grpaletteshader.value && cv_grshaders.value && gr_shadersavailable && cv_grflashpal.value); +} + void HWR_Lighting(FSurfaceInfo *Surface, INT32 light_level, extracolormap_t *colormap) { RGBA_t poly_color, tint_color, fade_color; -- 2.54.0 From f741c3ff17e2f23ecd24e86c0b71cbd4f40cc9ff Mon Sep 17 00:00:00 2001 From: Alug Date: Sun, 10 Dec 2023 17:13:54 +0100 Subject: [PATCH 08/12] eee --- src/hardware/hw_main.c | 8 ++++---- src/hardware/hw_main.h | 4 ++++ 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/hardware/hw_main.c b/src/hardware/hw_main.c index c22720b63..f4de6283f 100644 --- a/src/hardware/hw_main.c +++ b/src/hardware/hw_main.c @@ -191,11 +191,11 @@ static void CV_grshaders_OnChange(void) } } -void CV_useCustomShaders_ONChange(void) +static void CV_useCustomShaders_ONChange(void) { if (rendermode == render_opengl) { - if (cv_grshaders.value) + if (HWR_UseShader()) HWD.pfnInitCustomShaders(); } } @@ -474,12 +474,12 @@ static boolean HWR_UseShader(void) boolean HWR_ShouldUsePaletteRendering(void) { - return (cv_grpaletteshader.value && cv_grshaders.value && gr_shadersavailable); + return (cv_grpaletteshader.value && HWR_UseShader()); } boolean HWR_PalRenderFlashpal(void) { - return (cv_grpaletteshader.value && cv_grshaders.value && gr_shadersavailable && cv_grflashpal.value); + return (cv_grpaletteshader.value && HWR_UseShader() && cv_grflashpal.value); } void HWR_Lighting(FSurfaceInfo *Surface, INT32 light_level, extracolormap_t *colormap) diff --git a/src/hardware/hw_main.h b/src/hardware/hw_main.h index 3babbb29d..2027e7f6f 100644 --- a/src/hardware/hw_main.h +++ b/src/hardware/hw_main.h @@ -89,6 +89,10 @@ void HWR_AddCommands(void); void HWR_SetTransform(float fpov, player_t *player); void HWR_ClearClipper(void); +static boolean HWR_UseShader(void); +boolean HWR_ShouldUsePaletteRendering(void); +boolean HWR_PalRenderFlashpal(void); + // My original intention was to split hw_main.c // into files like hw_bsp.c, hw_sprites.c... -- 2.54.0 From 1569ec7a8b8d8831c4e3712a6f7c77d2b833c208 Mon Sep 17 00:00:00 2001 From: Alug Date: Mon, 11 Dec 2023 14:51:08 +0100 Subject: [PATCH 09/12] shrug --- src/hardware/hw_main.c | 2 +- src/hardware/hw_main.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/hardware/hw_main.c b/src/hardware/hw_main.c index f4de6283f..3e3e23375 100644 --- a/src/hardware/hw_main.c +++ b/src/hardware/hw_main.c @@ -467,7 +467,7 @@ static size_t gr_numportalcullsectors = 0; // Lighting // ========================================================================== -static boolean HWR_UseShader(void) +boolean HWR_UseShader(void) { return (cv_grshaders.value && gr_shadersavailable); } diff --git a/src/hardware/hw_main.h b/src/hardware/hw_main.h index 2027e7f6f..ef211eb8b 100644 --- a/src/hardware/hw_main.h +++ b/src/hardware/hw_main.h @@ -89,7 +89,7 @@ void HWR_AddCommands(void); void HWR_SetTransform(float fpov, player_t *player); void HWR_ClearClipper(void); -static boolean HWR_UseShader(void); +boolean HWR_UseShader(void); boolean HWR_ShouldUsePaletteRendering(void); boolean HWR_PalRenderFlashpal(void); -- 2.54.0 From 84c2721d8bc025959a6747597778f79696666219 Mon Sep 17 00:00:00 2001 From: alufolie91 Date: Tue, 12 Dec 2023 04:56:22 +0100 Subject: [PATCH 10/12] disable here instead of in function itself --- src/k_kart.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index f009c4f36..6c25de19d 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -9754,9 +9754,6 @@ static void K_drawChallengerScreen(void) static void K_drawLapStartAnim(void) { - if (! cv_showlapemblem.value) - return; - // This is an EVEN MORE insanely complicated animation. const UINT8 progress = 80-stplyr->kartstuff[k_lapanimation]; UINT8 *colormap = R_GetTranslationColormap(TC_DEFAULT, K_GetHudColor(), GTC_CACHE); @@ -10136,7 +10133,7 @@ void K_drawKartHUD(void) { if (stplyr->exiting) K_drawKartFinish(); - else if (stplyr->kartstuff[k_lapanimation] && !splitscreen) + else if (stplyr->kartstuff[k_lapanimation] && !splitscreen && cv_showlapemblem.value) K_drawLapStartAnim(); } -- 2.54.0 From b9124e717d9ab037b7627ab58c49646ff51258b7 Mon Sep 17 00:00:00 2001 From: alufolie91 Date: Tue, 12 Dec 2023 06:35:48 +0100 Subject: [PATCH 11/12] i slep Zzz... --- src/k_kart.c | 167 +++++++++++++++++---------------------------------- 1 file changed, 56 insertions(+), 111 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index 6c25de19d..a73656e3b 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -83,7 +83,6 @@ consvar_t cv_darkitembox = {"darkitembox", "On", CV_SAVE, CV_OnOff, NULL, 0, NUL consvar_t cv_biglaps = {"biglaphud", "On", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; //here for ppl who dont want to make 2 more patches for their custom hud - // SOME IMPORTANT VARIABLES DEFINED IN DOOMDEF.H: // gamespeed is cc (0 for easy, 1 for normal, 2 for hard) // franticitems is Frantic Mode items, bool @@ -563,7 +562,7 @@ void K_GenerateKartColormap(UINT8 *dest_colormap, INT32 skinnum, UINT8 color, bo return; } - starttranscolor = (skinnum != TC_DEFAULT) ? ( (local) ? localskins : skins )[skinnum].starttranscolor : DEFAULT_STARTTRANSCOLOR; + starttranscolor = (skinnum != TC_DEFAULT) ? ((local) ? localskins : skins)[skinnum].starttranscolor : DEFAULT_STARTTRANSCOLOR; // Fill in the entries of the palette that are fixed for (i = 0; i < starttranscolor; i++) @@ -6901,21 +6900,15 @@ void K_UpdateSpectateGrief(void) INT32 i; if (nospectategrief) - { return; - } if (leveltime <= (starttime + 20*TICRATE)) - { return; - } for (i = 0; i < MAXPLAYERS; i++) { if (!playeringame[i] || players[i].spectator) - { continue; - } numingame++; } @@ -7053,12 +7046,12 @@ void K_LoadKartHUDGraphics(void) kp_karmasticker = W_CachePatchName("K_STKARM", PU_HUDGFX); kp_splitkarmabomb = W_CachePatchName("K_SPTKRM", PU_HUDGFX); kp_timeoutsticker = W_CachePatchName("K_STTOUT", PU_HUDGFX); - + if (big_lap){ kp_lapstickerbig = W_CachePatchName("K_STLAPB", PU_HUDGFX); kp_lapstickerbig2 = W_CachePatchName("K_STLA2B", PU_HUDGFX); - } - + } + //Colourized hud if (clr_hud) { @@ -7080,16 +7073,14 @@ void K_LoadKartHUDGraphics(void) kp_lapstickerbigclr = W_CachePatchName("K_SCLAPB", PU_HUDGFX); kp_lapstickerbig2clr = W_CachePatchName("K_SCLA2B", PU_HUDGFX); } - - if (snw_speedo){ + + if (snw_speedo) skp_smallstickerclr = W_CachePatchName("SC_SMSTC", PU_HUDGFX); - } - } //KartZ speedo - if (kartzspeedo){ - + if (kartzspeedo) + { kp_kartzspeedo[0] = W_CachePatchName("K_KZSP1", PU_HUDGFX); kp_kartzspeedo[1] = W_CachePatchName("K_KZSP2", PU_HUDGFX); kp_kartzspeedo[2] = W_CachePatchName("K_KZSP3", PU_HUDGFX); @@ -7115,8 +7106,6 @@ void K_LoadKartHUDGraphics(void) kp_kartzspeedo[22] = W_CachePatchName("K_KZSP23", PU_HUDGFX); kp_kartzspeedo[23] = W_CachePatchName("K_KZSP24", PU_HUDGFX); kp_kartzspeedo[24] = W_CachePatchName("K_KZSP25", PU_HUDGFX); - - } // Starting countdown @@ -7990,15 +7979,10 @@ static void K_drawKartItem(void) // Then, the numbers: if (stplyr->kartstuff[k_itemamount] >= numberdisplaymin && !stplyr->kartstuff[k_itemroulette]) { - //Colourized hud - if (K_UseColorHud()) - { - V_DrawMappedPatch(fx + (flipamount ? 48 : 0), fy, V_HUDTRANS|fflags|(flipamount ? V_FLIP : 0), kp_itemmulstickerclr[offset],colormap); // flip this graphic for p2 and p4 in split and shift it. - } - else - { - V_DrawScaledPatch(fx + (flipamount ? 48 : 0), fy, V_HUDTRANS|fflags|(flipamount ? V_FLIP : 0), kp_itemmulsticker[offset]); // flip this graphic for p2 and p4 in split and shift it. - } + if (!K_UseColorHud()) + V_DrawScaledPatch(fx + (flipamount ? 48 : 0), fy, V_HUDTRANS|fflags|(flipamount ? V_FLIP : 0), kp_itemmulsticker[offset]); + else //Colourized hud + V_DrawMappedPatch(fx + (flipamount ? 48 : 0), fy, V_HUDTRANS|fflags|(flipamount ? V_FLIP : 0), kp_itemmulstickerclr[offset], colormap); // flip this graphic for p2 and p4 in split and shift it. V_DrawFixedPatch(fx< 9) && (big_lap_color) && (cv_biglaps.value) && (!stplyr->exiting)); + else + return ((cv_numlaps.value > 9) && (big_lap) && (cv_biglaps.value) && (!stplyr->exiting)); +} + static void K_drawKartLaps(void) { INT32 splitflags = K_calcSplitFlags(V_SNAPTOBOTTOM|V_SNAPTOLEFT); @@ -8603,7 +8593,6 @@ static void K_drawKartLaps(void) if (splitscreen > 1) { - // pain and suffering defined below if (splitscreen < 2) // don't change shit for THIS splitscreen. { @@ -8628,8 +8617,6 @@ static void K_drawKartLaps(void) } } - - if (stplyr->exiting) // draw stuff as god intended. { V_DrawScaledPatch(fx, fy, V_HUDTRANS|fflags, kp_splitlapflag); @@ -8651,31 +8638,22 @@ static void K_drawKartLaps(void) } else { - - if (!K_UseColorHud()){ - if ((cv_numlaps.value > 9) && (big_lap) && (cv_biglaps.value) && (!stplyr->exiting)){ - if (stplyr->laps+1 > 9) - V_DrawScaledPatch(LAPS_X, LAPS_Y, V_HUDTRANS|splitflags, kp_lapstickerbig2); - else - V_DrawScaledPatch(LAPS_X, LAPS_Y, V_HUDTRANS|splitflags, kp_lapstickerbig); - } + if (!K_UseColorHud()) + { + if (K_BigLapSticker()) + V_DrawScaledPatch(LAPS_X, LAPS_Y, V_HUDTRANS|splitflags, ((stplyr->laps + 1 > 9) ? kp_lapstickerbig2 : kp_lapstickerbig)); else V_DrawScaledPatch(LAPS_X, LAPS_Y, V_HUDTRANS|splitflags, kp_lapsticker); } - else + else //Colourized hud { - //Colourized hud UINT8 *colormap = R_GetTranslationColormap(TC_DEFAULT, K_GetHudColor(), GTC_CACHE); - if ((cv_numlaps.value > 9) && (big_lap_color) && (cv_biglaps.value) && (!stplyr->exiting)){ - if (stplyr->laps+1 > 9) - V_DrawMappedPatch(LAPS_X, LAPS_Y, V_HUDTRANS|splitflags, kp_lapstickerbig2clr, colormap); - else - V_DrawMappedPatch(LAPS_X, LAPS_Y, V_HUDTRANS|splitflags, kp_lapstickerbigclr, colormap); - } + if (K_BigLapSticker()) + V_DrawMappedPatch(LAPS_X, LAPS_Y, V_HUDTRANS|splitflags, ((stplyr->laps + 1 > 9) ? kp_lapstickerbig2clr : kp_lapstickerbigclr), colormap); else V_DrawMappedPatch(LAPS_X, LAPS_Y, V_HUDTRANS|splitflags, kp_lapstickerclr, colormap); } - + if (stplyr->exiting) V_DrawKartString(LAPS_X+33, LAPS_Y+3, V_HUDTRANS|splitflags, "FIN"); else @@ -8723,7 +8701,7 @@ static void K_drawKartSpeedometer(void) } // man. - if ((cv_newspeedometer.value == 1) || (cv_newspeedometer.value == 2 && !snw_speedo) || (cv_newspeedometer.value == 3 && !kartzspeedo) ) + if ((cv_newspeedometer.value == 1) || (cv_newspeedometer.value == 2 && !snw_speedo) || (cv_newspeedometer.value == 3 && !kartzspeedo)) { switch (speedtype) { case 1: @@ -8742,27 +8720,26 @@ static void K_drawKartSpeedometer(void) V_DrawKartString(SPDM_X, SPDM_Y, V_HUDTRANS|splitflags, va("%4d %%", convSpeed)); } } - else if (cv_newspeedometer.value == 2 && snw_speedo) { // why bother if we dont? + else if (cv_newspeedometer.value == 2 && snw_speedo) // why bother if we dont? + { if (!K_UseColorHud()) V_DrawScaledPatch(SPDM_X + 1, SPDM_Y + 4, (V_HUDTRANS|splitflags), (skp_smallsticker)); - else + else //Colourized hud { - //Colourized hud UINT8 *colormap = R_GetTranslationColormap(TC_DEFAULT, K_GetHudColor(), GTC_CACHE); - V_DrawMappedPatch(SPDM_X + 1, SPDM_Y + 4, (V_HUDTRANS|splitflags), (skp_smallstickerclr), colormap); } V_DrawRankNum(SPDM_X + 26, SPDM_Y + 4, V_HUDTRANS|splitflags, convSpeed, 3, NULL); V_DrawScaledPatch(SPDM_X + 31, SPDM_Y + 4, V_HUDTRANS|splitflags, skp_speedpatches[cv_kartspeedometer.value]); - } + // Kart Z speedo bullshit... // Draw the Speed counter. // Warning large if statement below... - else if (cv_newspeedometer.value == 3 && kartzspeedo){ - + else if (cv_newspeedometer.value == 3 && kartzspeedo) + { fuspeed = FixedDiv(stplyr->speed, mapobjectscale)/FRACUNIT; if (fuspeed < 2 && fuspeed > 0) @@ -8821,11 +8798,8 @@ static void K_drawKartSpeedometer(void) spdpatch = 24; else if (fuspeed > 59 && !(leveltime&4)) spdpatch = 23; - - + V_DrawScaledPatch(SPDM_X, SPDM_Y, V_HUDTRANS|splitflags, kp_kartzspeedo[spdpatch]); - - } } @@ -8839,7 +8813,6 @@ static void K_drawKartBumpersOrKarma(void) if (splitscreen > 1) { - // we will reuse lap coords here since it's essentially the same shit. if (stplyr == &players[displayplayers[0]] || stplyr == &players[displayplayers[2]]) // If we are P1 or P3... @@ -8861,7 +8834,7 @@ static void K_drawKartBumpersOrKarma(void) V_DrawMappedPatch(fx, fy-1, V_HUDTRANS|fflags, kp_splitkarmabomb, colormap); V_DrawString(fx+13, fy+1, V_HUDTRANS|fflags, va("%d/2", stplyr->kartstuff[k_comebackpoints])); } - else // the above doesn't need to account for weird stuff since the max amount of karma necessary is always 2 ^^^^ + else // the above doesn't need to account for weird stuff since the max amount of karma necessary is always 2 ^^^^ { if (flipstring) // for p2 and p4, assume we can have more than 10 bumpers. It's retarded but who knows. { @@ -8870,7 +8843,7 @@ static void K_drawKartBumpersOrKarma(void) V_DrawMappedPatch(BASEVIDWIDTH-stringw-16, fy-1, V_HUDTRANS|fflags, kp_rankbumper, colormap); V_DrawRightAlignedString(BASEVIDWIDTH-3, fy+1, V_HUDTRANS|fflags, va("%d/%d", stplyr->kartstuff[k_bumper], cv_kartbumpers.value)); } - else // draw bumpers normally. + else // draw bumpers normally. { V_DrawMappedPatch(fx, fy-1, V_HUDTRANS|fflags, kp_rankbumper, colormap); V_DrawString(fx+13, fy+1, V_HUDTRANS|fflags, va("%d/%d", stplyr->kartstuff[k_bumper], cv_kartbumpers.value)); @@ -8881,39 +8854,15 @@ static void K_drawKartBumpersOrKarma(void) { if (stplyr->kartstuff[k_bumper] <= 0) { - //Colourized hud - if (K_UseColorHud()) - { - V_DrawMappedPatch(LAPS_X, LAPS_Y, V_HUDTRANS|splitflags, kp_karmastickerclr, colormap); - } - else - { - V_DrawMappedPatch(LAPS_X, LAPS_Y, V_HUDTRANS|splitflags, kp_karmasticker, colormap); - } + V_DrawMappedPatch(LAPS_X, LAPS_Y, V_HUDTRANS|splitflags, (K_UseColorHud() ? kp_karmastickerclr : kp_karmasticker), colormap); V_DrawKartString(LAPS_X+47, LAPS_Y+3, V_HUDTRANS|splitflags, va("%d/2", stplyr->kartstuff[k_comebackpoints])); } else { if (stplyr->kartstuff[k_bumper] > 9 && cv_kartbumpers.value > 9) - //Colourized hud - if (K_UseColorHud()) - { - V_DrawMappedPatch(LAPS_X, LAPS_Y, V_HUDTRANS|splitflags, kp_bumperstickerwideclr, colormap); - } - else - { - V_DrawMappedPatch(LAPS_X, LAPS_Y, V_HUDTRANS|splitflags, kp_bumperstickerwide, colormap); - } + V_DrawMappedPatch(LAPS_X, LAPS_Y, V_HUDTRANS|splitflags, (K_UseColorHud() ? kp_bumperstickerwideclr : kp_bumperstickerwide), colormap); else - //Colourized hud - if (K_UseColorHud()) - { - V_DrawMappedPatch(LAPS_X, LAPS_Y, V_HUDTRANS|splitflags, kp_bumperstickerclr, colormap); - } - else - { - V_DrawMappedPatch(LAPS_X, LAPS_Y, V_HUDTRANS|splitflags, kp_bumpersticker, colormap); - } + V_DrawMappedPatch(LAPS_X, LAPS_Y, V_HUDTRANS|splitflags, (K_UseColorHud() ? kp_bumperstickerclr : kp_bumpersticker), colormap); V_DrawKartString(LAPS_X+47, LAPS_Y+3, V_HUDTRANS|splitflags, va("%d/%d", stplyr->kartstuff[k_bumper], cv_kartbumpers.value)); } @@ -9093,7 +9042,7 @@ static void K_drawKartMinimapHead(mobj_t *mo, INT32 x, INT32 y, INT32 flags, pat fixed_t xscale, yscale, zoom; if (mo->skin) - skin = ((skin_t*)( (mo->localskin) ? mo->localskin : mo->skin ))-( (skinlocal) ? localskins : skins ); + skin = ((skin_t*)((mo->localskin) ? mo->localskin : mo->skin))-((skinlocal) ? localskins : skins); maxx = maxy = INT32_MAX; minx = miny = INT32_MIN; @@ -9137,39 +9086,37 @@ static void K_drawKartMinimapHead(mobj_t *mo, INT32 x, INT32 y, INT32 flags, pat if (encoremode) amnumxpos = -amnumxpos; - amxpos = amnumxpos + ((x + AutomapPic->width/2 - (( (skinlocal) ? localfacemmapprefix : facemmapprefix )[skin]->width/2))<height/2 - (( (skinlocal) ? localfacemmapprefix : facemmapprefix )[skin]->height/2))<width/2 - (((skinlocal) ? localfacemmapprefix : facemmapprefix)[skin]->width/2))<height/2 - (((skinlocal) ? localfacemmapprefix : facemmapprefix)[skin]->height/2))<color) // 'default' color V_DrawSciencePatch(amxpos, amypos, flags, ( (skinlocal) ? localfacemmapprefix : facemmapprefix )[skin], FRACUNIT); else { - UINT8 *colormap = R_GetTranslationColormap((mo->colorized) ? TC_RAINBOW : skin, mo->color, GTC_CACHE); + UINT8 *colormap; + if (mo->colorized) + colormap = R_GetTranslationColormap(TC_RAINBOW, mo->color, GTC_CACHE); + else + colormap = R_GetLocalTranslationColormap(mo->skin, mo->localskin, mo->color, GTC_CACHE, skinlocal); if (cv_minihead.value) - { - colormap = R_GetLocalTranslationColormap(mo->skin, mo->localskin, mo->color, GTC_CACHE, skinlocal); - V_DrawFixedPatch(amxpos + (2 * FRACUNIT), amypos + (2 * FRACUNIT), FRACUNIT/2, flags, ( (skinlocal) ? localfacemmapprefix : facemmapprefix )[skin], colormap); - } + V_DrawFixedPatch(amxpos + (2*FRACUNIT), amypos + (2*FRACUNIT), FRACUNIT/2, flags, ((skinlocal) ? localfacemmapprefix : facemmapprefix)[skin], colormap); else - { - colormap = R_GetLocalTranslationColormap(mo->skin, mo->localskin, mo->color, GTC_CACHE, skinlocal); - V_DrawFixedPatch(amxpos, amypos, FRACUNIT, flags, ( (skinlocal) ? localfacemmapprefix : facemmapprefix )[skin], colormap); - } + V_DrawFixedPatch(amxpos, amypos, FRACUNIT, flags, ((skinlocal) ? localfacemmapprefix : facemmapprefix)[skin], colormap); if (cv_showminimapnames.value && !(modeattacking || gamestate == GS_TIMEATTACK)) { const char *player_name = va("%c%s", V_GetSkincolorChar(mo->color), player_names[mo->player - players]); - V_DrawCenteredSmallStringAtFixed(amxpos + (4 * FRACUNIT), amypos - (3 * FRACUNIT), V_ALLOWLOWERCASE|flags, player_name); + V_DrawCenteredSmallStringAtFixed(amxpos + (4*FRACUNIT), amypos - (3*FRACUNIT), V_ALLOWLOWERCASE|flags, player_name); } if (mo->player && ((G_RaceGametype() && mo->player->kartstuff[k_position] == spbplace) || (G_BattleGametype() && K_IsPlayerWanted(mo->player)))) { if (cv_minihead.value) - V_DrawFixedPatch(amxpos, amypos, FRACUNIT / 2, flags, kp_wantedreticle, NULL); + V_DrawFixedPatch(amxpos, amypos, FRACUNIT/2, flags, kp_wantedreticle, NULL); else - V_DrawFixedPatch(amxpos - (4< Date: Tue, 12 Dec 2023 09:26:49 +0100 Subject: [PATCH 12/12] uh oops accidentally broke polyobjects --- src/hardware/hw_main.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/hardware/hw_main.c b/src/hardware/hw_main.c index 3e3e23375..99b75a181 100644 --- a/src/hardware/hw_main.c +++ b/src/hardware/hw_main.c @@ -3405,8 +3405,11 @@ void HWR_RenderPolyObjectPlane(polyobj_t *polysector, boolean isceiling, fixed_t } // reference point for flat texture coord for each vertex around the polygon - flatxref = (float)((polysector->origVerts[0].x & (~flatflag)) / fflatsize); - flatyref = (float)((polysector->origVerts[0].y & (~flatflag)) / fflatsize); + flatxref = FIXED_TO_FLOAT(polysector->origVerts[0].x); + flatyref = FIXED_TO_FLOAT(polysector->origVerts[0].y); + + flatxref = (float)(((fixed_t)flatxref & (~flatflag)) / fflatsize); + flatyref = (float)(((fixed_t)flatyref & (~flatflag)) / fflatsize); // transform v3d = planeVerts; -- 2.54.0