From 26eff18473782d53d94b571151d28b0636579ffe Mon Sep 17 00:00:00 2001 From: Alug Date: Mon, 19 Feb 2024 01:52:44 +0100 Subject: [PATCH 01/79] Nametags from Chaoskart https://gitlab.com/Fafabis/kart-chaotic/-/commit/8b4a12e144fbff587ee70c30e7f461900d839650#025e5c90ea9aeb6187b4fe002e0fbb277ef4b33d_7024_7035 --- src/d_main.c | 10 +- src/d_main.h | 7 +- src/d_netcmd.c | 23 ++++ src/d_netcmd.h | 9 ++ src/k_kart.c | 311 ++++++++++++++++++++++++++++++++++++++++++++++++- src/k_kart.h | 1 + src/m_menu.c | 52 +++++++-- src/p_local.h | 2 + src/p_sight.c | 308 ++++++++++++++++++++++++++++++++++++++++++++++++ src/v_video.c | 195 +++++++++++++++++++++++++++++++ src/v_video.h | 3 + 11 files changed, 902 insertions(+), 19 deletions(-) diff --git a/src/d_main.c b/src/d_main.c index 885a0be26..206d6f47a 100644 --- a/src/d_main.c +++ b/src/d_main.c @@ -1074,6 +1074,7 @@ static boolean AddIWAD(void) } } +// extra graphic patches for saturn specific thingies boolean found_extra_kart; boolean found_extra2_kart; @@ -1081,8 +1082,9 @@ boolean snw_speedo; // snowy speedometer check boolean clr_hud; // colour hud check boolean big_lap; // bigger lap counter boolean big_lap_color; // bigger lap counter but colour -boolean kartzspeedo; // kartZ speedometer -boolean statdp; // New stat +boolean kartzspeedo; // kartZ speedo +boolean statdp; // stat display for extended player setup +boolean nametaggfx; // Nametag stuffs static void IdentifyVersion(void) { @@ -1472,6 +1474,10 @@ void D_SRB2Main(void) if (W_CheckMultipleLumps("K_STATNB", "K_STATN1", "K_STATN2", "K_STATN3", "K_STATN4", \ "K_STATN5", "K_STATN6", NULL)) statdp = true; + + // Nametag stuffs + if (W_CheckMultipleLumps("NTLINE", "NTLINEV", NULL)) + nametaggfx = true; } // diff --git a/src/d_main.h b/src/d_main.h index 4214e06a4..909c1b7fb 100644 --- a/src/d_main.h +++ b/src/d_main.h @@ -31,9 +31,10 @@ extern boolean found_extra2_kart; // for use in k_kart.c extern boolean snw_speedo; // snowy speedometer check extern boolean clr_hud; // colour hud check extern boolean big_lap; // bigger lap counter -extern boolean big_lap_color; //bigger lap counter but colour -extern boolean kartzspeedo; //kartZ speedo -extern boolean statdp; //stat display for extended player setup +extern boolean big_lap_color; // bigger lap counter but colour +extern boolean kartzspeedo; // kartZ speedo +extern boolean statdp; // stat display for extended player setup +extern boolean nametaggfx; // Nametag stuffs extern boolean autoloading; extern boolean autoloaded; diff --git a/src/d_netcmd.c b/src/d_netcmd.c index 21f60b7cd..d49d0a3e0 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -513,6 +513,19 @@ consvar_t cv_mute = {"mute", "Off", CV_NETVAR|CV_CALL, CV_OnOff, Mute_OnChange, consvar_t cv_sleep = {"cpusleep", "1", CV_SAVE, sleeping_cons_t, NULL, -1, NULL, NULL, 0, 0, NULL}; +static CV_PossibleValue_t nametagtrans_cons_t[] = { + {0, "Never"}, {1, "Far only"}, {2, "Dynamic"}, {3, "Always"}, {0, NULL}}; +static CV_PossibleValue_t nametagscaling_cons_t[] = { + {0, "MIN"}, {320, "MAX"}, {0, NULL}}; +consvar_t cv_nametag = {"kartnametag", "On", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_nametagtrans = {"nametagtransparency", "Dynamic", CV_SAVE, nametagtrans_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_nametagfacerank = {"nametagfacerank", "On", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_nametagdist = {"nametagdist", "300", CV_SAVE, CV_Unsigned, NULL, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_nametagmaxplayers = {"nametagmaxplayers", "8", CV_SAVE, CV_Unsigned, NULL, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_nametagmaxlenght = {"nametagmaxlenght", "12", CV_SAVE, CV_Unsigned, NULL, 0, NULL, NULL, 0, 0, NULL}; +//consvar_t cv_nametagscaling = {"nametagscaling", "160", CV_SAVE, nametagscaling_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_showownnametag = {"showownnametag", "Off", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; + static CV_PossibleValue_t skinselectspin_cons_t[] = { {0, "Off"}, {1, "Slow"}, {2, "2"}, {3, "3"}, {4, "4"}, {5, "5"}, {6, "6"}, {7, "7"}, {8, "8"}, {9, "9"}, {10, "Fast"}, {SKINSELECTSPIN_PAIN, "Pain"}, {0, NULL}}; consvar_t cv_skinselectspin = {"skinselectspin", "5", CV_SAVE, skinselectspin_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; @@ -1103,6 +1116,16 @@ void D_RegisterClientCommands(void) CV_RegisterVar(&cv_scr_height); CV_RegisterVar(&cv_soundtest); + + CV_RegisterVar(&cv_nametag); + CV_RegisterVar(&cv_nametagtrans); + CV_RegisterVar(&cv_nametagfacerank); + CV_RegisterVar(&cv_nametagmaxplayers); + CV_RegisterVar(&cv_nametagmaxlenght); + //CV_RegisterVar(&cv_nametagscaling); + CV_RegisterVar(&cv_nametagdist); + CV_RegisterVar(&cv_showownnametag); + CV_RegisterVar(&cv_perfstats); CV_RegisterVar(&cv_ps_thinkframe_page); diff --git a/src/d_netcmd.h b/src/d_netcmd.h index 8fbdf1d5f..2df6499d9 100644 --- a/src/d_netcmd.h +++ b/src/d_netcmd.h @@ -173,6 +173,15 @@ extern consvar_t cv_skipmapcheck; extern consvar_t cv_sleep; +extern consvar_t cv_nametag; +extern consvar_t cv_nametagtrans; +extern consvar_t cv_nametagfacerank; +extern consvar_t cv_nametagmaxplayers; +extern consvar_t cv_nametagmaxlenght; +//extern consvar_t cv_nametagscaling; +extern consvar_t cv_nametagdist; +extern consvar_t cv_showownnametag; + #define SKINSELECTSPIN_PAIN 25 extern consvar_t cv_skinselectspin; diff --git a/src/k_kart.c b/src/k_kart.c index 920a607fb..d0ffef299 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -5,16 +5,27 @@ /// All of the SRB2kart-unique stuff. #include "doomdef.h" +#include "doomstat.h" +#include "doomtype.h" +#include "command.h" +#include "d_netcmd.h" +#include "d_player.h" #include "hu_stuff.h" #include "g_game.h" +#include "m_fixed.h" #include "m_random.h" #include "m_menu.h" // ffdhidshfuisduifigergho9igj89dgodhfih AAAAAAAAAA #include "p_local.h" #include "p_slopes.h" +#include "r_defs.h" #include "r_draw.h" #include "r_local.h" +#include "r_state.h" +#include "r_things.h" #include "s_sound.h" +#include "screen.h" #include "st_stuff.h" +#include "tables.h" #include "v_video.h" #include "z_zone.h" #include "m_misc.h" @@ -7011,6 +7022,9 @@ static patch_t *kp_lapanim_number[10][3]; static patch_t *kp_lapanim_emblem[2]; static patch_t *kp_lapanim_hand[3]; +static patch_t *nametagpic; +static patch_t *nametagline; + static patch_t *kp_yougotem; static patch_t *skp_smallsticker; @@ -7042,7 +7056,7 @@ void K_LoadKartHUDGraphics(void) kp_lapstickerbig2 = W_CachePatchName("K_STLA2B", PU_HUDGFX); } - //Colourized hud + // Colourized hud if (clr_hud) { kp_timestickerclr = W_CachePatchName("K_SCTIME", PU_HUDGFX); @@ -7068,7 +7082,7 @@ void K_LoadKartHUDGraphics(void) skp_smallstickerclr = W_CachePatchName("SC_SMSTC", PU_HUDGFX); } - //KartZ speedo + // KartZ speedo if (kartzspeedo) { kp_kartzspeedo[0] = W_CachePatchName("K_KZSP1", PU_HUDGFX); @@ -7097,7 +7111,13 @@ void K_LoadKartHUDGraphics(void) kp_kartzspeedo[23] = W_CachePatchName("K_KZSP24", PU_HUDGFX); kp_kartzspeedo[24] = W_CachePatchName("K_KZSP25", PU_HUDGFX); } - + + // Nametags + if (nametaggfx){ + nametagpic = W_CachePatchName("NTLINE", PU_HUDGFX); + nametagline = W_CachePatchName("NTLINEV", PU_HUDGFX); + } + // Starting countdown kp_startcountdown[0] = W_CachePatchName("K_CNT3A", PU_HUDGFX); kp_startcountdown[1] = W_CachePatchName("K_CNT2A", PU_HUDGFX); @@ -8862,6 +8882,288 @@ static void K_drawKartBumpersOrKarma(void) } } +static UINT8 *nametagtxtcm[MAXSKINCOLORS]; + +static void K_GenerateNametagTextColormap(void) +{ + INT32 i; + + for (i = 0; i < MAXSKINCOLORS && !nametagtxtcm[i]; i++) + { + nametagtxtcm[i] = Z_Malloc(121, PU_STATIC, NULL); + nametagtxtcm[i][31] = 31; + nametagtxtcm[i][120] = colortranslations[i][8]; + + // too dark + if (nametagtxtcm[i][120] > 20 && nametagtxtcm[i][120] <= 31) + nametagtxtcm[i][120] = 20; + else if (nametagtxtcm[i][120] > 107 && nametagtxtcm[i][120] <= 111) + nametagtxtcm[i][120] = 107; + else if (nametagtxtcm[i][120] > 235 && nametagtxtcm[i][120] <= 246) + nametagtxtcm[i][120] = 235; + } +} + +// \/ ported from the nametag addon with permission + +//Shoutout to Lat for the ScreenCoords +//With alot of edit because of god damn no-green-screen, fov, and render bullshit +static void K_GetNameTagPos(vector2_t *vec, player_t player, camera_t camera, float mx, float my, float mz) +{ + fixed_t camx, camy, camz, camangle, camaiming; + fixed_t finalset; + fixed_t distfact; + fixed_t res; + fixed_t resfov; + fixed_t fovplz; + fixed_t adjustres; + fixed_t y; + angle_t x; + + if (player.awayviewtics) { + camx = player.awayviewmobj->x; + camy = player.awayviewmobj->y; + camz = player.awayviewmobj->z; + camangle = player.awayviewmobj->angle; + camaiming = player.awayviewaiming; + } + else if (camera.chase) { + camx = camera.x; + camy = camera.y; + camz = camera.z; + camangle = camera.angle; + camaiming = camera.aiming; + } + else { + camx = player.mo->x; + camy = player.mo->y; + camz = player.viewz-20*FRACUNIT; + camangle = player.mo->angle; + camaiming = player.aiming; + } + + x = camangle-R_PointToAngle2(camx, camy, mx, my); + + res = (vid.width*100)/(vid.height); // we do a simple math + fovplz = (cv_fov.value/FRACUNIT)*res/90; //adding fov support, not everybody use 90 + resfov = (res*2)-fovplz; //more maths + adjustres = 0; //because square resolutions are motherfuckers + + if (res == fovplz) { + if (res < 160) //Square resolution + adjustres = 160-res; + else if (res > 160) //Wide Resolution + adjustres = res-160; + } + + finalset = (resfov)+(adjustres); //+(players[i].djust.value) + //tadaa, and we add the adjust command incase some resolution doesn't work + + distfact = FINECOSINE((x>>ANGLETOFINESHIFT) & FINEMASK); + if (!distfact) + distfact = 1; + + x = FixedMul(FINETANGENT(((x+ANGLE_90)>>ANGLETOFINESHIFT) & 4095), finalset<>ANGLETOFINESHIFT) & 4095)*finalset; + + vec->y = y; + vec->x = x; +} + +typedef struct +{ + fixed_t dist; + UINT8 node; +} sortarray; + +static int nametagsort(const void* a, const void* b) +{ + const sortarray *a2 = (const sortarray*)a; + const sortarray *b2 = (const sortarray*)b; + return (a2->dist - b2->dist); +} + +static void K_drawNameTags(void) +{ + sortarray array[MAXPLAYERS]; + UINT8 i, j; + INT32 trans = 0; + vector2_t pos; + fixed_t st; + + if (!stplyr->mo || stplyr->spectator || splitscreen) + return; + + if (!nametagtxtcm[MAXSKINCOLORS-1]) + K_GenerateNametagTextColormap(); + + if (leveltime < starttime) + goto showownnametag; + + for (i = 0; i < MAXPLAYERS; i++) + { + if (!players[i].mo || P_MobjWasRemoved(players[i].mo) || players[i].spectator || !playeringame[i] || i == displayplayers[0]) + continue; + + array[i].dist = P_AproxDistance(players[i].mo->x - (stplyr->mo->x + stplyr->mo->momx), players[i].mo->y - (stplyr->mo->y + stplyr->mo->momy)); + array[i].node = i; + } + + // sort + qsort(array, MAXPLAYERS, sizeof(sortarray), nametagsort); + + for (j = MAXPLAYERS; j > 0; j--) + { + UINT8 *cm; + UINT8 *textcm; + fixed_t distance = 0; + fixed_t maxdistance = (cv_nametagdist.value*10)< cv_nametagmaxplayers.value) + return; + + i = array[j].node; + + if (i > PLAYERSMASK) + continue; + if (i == displayplayers[0]) + continue; + if (!players[i].mo || P_MobjWasRemoved(players[i].mo) || players[i].spectator || !playeringame[i]) + continue; + if (players[i].kartstuff[k_hyudorotimer]) // player is invisible + continue; + distance = array[j].dist; + if (distance > maxdistance) + continue; + an = R_PointToAngle2(camera[0].x, camera[0].y, players[i].mo->x, players[i].mo->y) - camera[0].angle; + if (an > ANGLE_90 && an < ANGLE_270) + continue; // behind back + if (!P_CheckSight2(players[i].mo, stplyr->mo)) + continue; + + cm = R_GetTranslationColormap(players[i].skin, players[i].mo->color, GTC_CACHE); + textcm = nametagtxtcm[players[i].mo->color]; + + switch (cv_nametagtrans.value) + { + case 0: + trans = 0; + break; + case 1: + if (distance > (maxdistance*3/4)) + trans = V_60TRANS; + else + trans = 0; + break; + case 2: + if (distance > (maxdistance*3/1)) + trans = V_90TRANS; + else if (distance > (maxdistance*3/2)) + trans = V_80TRANS; + else if (distance > (maxdistance*3/3)) + trans = V_60TRANS; + else if (distance > (maxdistance*3/4)) + trans = V_40TRANS; + else if (distance > (maxdistance*3/5)) + trans = V_20TRANS; + else + trans = 0; + break; + case 3: + trans = V_60TRANS; + break; + } + + K_GetNameTagPos(&pos, *stplyr, camera[0], players[i].mo->x, players[i].mo->y, players[i].mo->z + players[i].mo->height); + + pos.y -= players[i].mo->height/2; + if (players[i].mo->eflags & MFE_VERTICALFLIP && !(players[i].pflags & PF_FLIPCAM)) + pos.y += players[i].mo->height; + + if (encoremode) + pos.x = (320<eflags & MFE_VERTICALFLIP && !(players[i].pflags & PF_FLIPCAM)) + { + V_DrawFixedPatch(pos.x, pos.y-(3<mo->eflags & MFE_VERTICALFLIP && !(stplyr->pflags & PF_FLIPCAM)) + V_DrawFixedPatch(pos.x+((st+8)<mo->x, stplyr->mo->y, stplyr->mo->z + stplyr->mo->height); + + pos.y -= stplyr->mo->height/2; + + if (encoremode) + pos.x = (320< starttime/2) + trans = V_60TRANS; + else if (leveltime > starttime/2.95) + trans = V_40TRANS; + else if (leveltime > starttime/1.8) + trans = V_20TRANS; + + UINT8 *cm = R_GetTranslationColormap(stplyr->skin, stplyr->mo->color, GTC_CACHE); + + st = V_ThinStringWidth(player_names[p], V_ALLOWLOWERCASE); + + V_DrawFixedPatch(pos.x, pos.y+(10<mo->color]); + + if (!cv_nametagfacerank.value) + { + V_DrawStretchyFixedPatch(pos.x+(6<skin], cm); + } + } +} + static fixed_t K_FindCheckX(fixed_t px, fixed_t py, angle_t ang, fixed_t mx, fixed_t my) { fixed_t dist, x; @@ -9946,6 +10248,9 @@ void K_drawKartHUD(void) if (LUA_HudEnabled(hud_item) && !freecam) #endif K_drawKartItem(); + + if (cv_nametag.value && nametaggfx) + K_drawNameTags(); // If not splitscreen, draw... if (!splitscreen && !demo.title) diff --git a/src/k_kart.h b/src/k_kart.h index 803594790..35f132610 100644 --- a/src/k_kart.h +++ b/src/k_kart.h @@ -81,6 +81,7 @@ void K_CalculateBattleWanted(void); void K_CheckBumpers(void); void K_CheckSpectateStatus(void); void K_UpdateSpectateGrief(void); +void K_AutoAdjustNameTagPos(void); // sound stuff for lua void K_PlayAttackTaunt(mobj_t *source); diff --git a/src/m_menu.c b/src/m_menu.c index 14f333992..259f36fb4 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -358,12 +358,17 @@ menu_t OP_SaturnCreditsDef; // Bird menu_t OP_BirdDef; + // Stuff, yknow. menu_t OP_ForkedBirdDef; menu_t OP_LocalSkinDef; menu_t OP_TiltDef; menu_t OP_AdvancedBirdDef; +// Chaotic +menu_t OP_NametagDef; +//menu_t OP_OGLShadowsDef; + #define numaddonsshown 4 // Replay hut @@ -460,6 +465,7 @@ static CV_PossibleValue_t map_cons_t[] = { {0, NULL} }; consvar_t cv_nextmap = {"nextmap", "1", CV_HIDEN|CV_CALL, map_cons_t, Nextmap_OnChange, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_nextmapaddon = {"nextmapaddon", "1", CV_HIDEN|CV_CALL, NULL, Nextmap_OnChange, 0, NULL, NULL, 0, 0, NULL}; static CV_PossibleValue_t skins_cons_t[MAXSKINS+1] = {{1, DEFAULTSKIN}}; consvar_t cv_chooseskin = {"chooseskin", DEFAULTSKIN, CV_HIDEN|CV_CALL, skins_cons_t, Nextmap_OnChange, 0, NULL, NULL, 0, 0, NULL}; @@ -1153,7 +1159,7 @@ enum // Prefix: OP_ static menuitem_t OP_MainMenu[] = { - {IT_SUBMENU|IT_STRING, NULL, "Control Setup...", &OP_ControlsDef, 0}, + {IT_SUBMENU|IT_STRING, NULL, "Control Setup...", &OP_ControlsDef, 0}, {IT_SUBMENU|IT_STRING, NULL, "Video Options...", &OP_VideoOptionsDef, 20}, {IT_SUBMENU|IT_STRING, NULL, "Sound Options...", &OP_SoundOptionsDef, 30}, @@ -1162,15 +1168,15 @@ static menuitem_t OP_MainMenu[] = {IT_SUBMENU|IT_STRING, NULL, "Gameplay Options...", &OP_GameOptionsDef, 60}, {IT_SUBMENU|IT_STRING, NULL, "Server Options...", &OP_ServerOptionsDef, 70}, - {IT_SUBMENU|IT_STRING, NULL, "Data Options...", &OP_DataOptionsDef, 90}, + {IT_SUBMENU|IT_STRING, NULL, "Data Options...", &OP_DataOptionsDef, 90}, {IT_CALL|IT_STRING, NULL, "Tricks & Secrets (F1)", M_Manual, 110}, {IT_CALL|IT_STRING, NULL, "Play Credits", M_Credits, 120}, {IT_SUBMENU|IT_STRING, NULL, "Saturn Options...", &OP_SaturnDef, 140}, - {IT_SUBMENU|IT_STRING, NULL, "Bird", &OP_BirdDef, 150}, - {IT_CALL|IT_STRING, NULL, "Local Skin Options...", M_LocalSkinMenu, 160}, + {IT_SUBMENU|IT_STRING, NULL, "Bird", &OP_BirdDef, 150}, + {IT_CALL|IT_STRING, NULL, "Local Skin Options...", M_LocalSkinMenu, 160}, }; static menuitem_t OP_ControlsMenu[] = @@ -2044,13 +2050,16 @@ static menuitem_t OP_SaturnMenu[] = {IT_STRING | IT_CVAR, NULL, "Small Minimap Players", &cv_minihead, 70}, {IT_STRING | IT_CVAR, NULL, "Show Cecho Messages", &cv_cechotoggle, 80}, {IT_STRING | IT_CVAR, NULL, "Show Localskin Menus", &cv_showlocalskinmenus, 85}, - - {IT_STRING | IT_CVAR, NULL, "Less Midnight Channel Flicker", &cv_lessflicker, 95}, + {IT_STRING | IT_SUBMENU, NULL, "Nametags...", &OP_NametagDef, 90}, - {IT_SUBMENU|IT_STRING, NULL, "Sprite Distortion...", &OP_PlayerDistortDef, 105}, - {IT_SUBMENU|IT_STRING, NULL, "Hud Offsets...", &OP_HudOffsetDef, 110}, + {IT_STRING | IT_CVAR, NULL, "Native keyboard layout", &cv_nativekeyboard, 95}, - {IT_SUBMENU|IT_STRING, NULL, "Saturn Credits", &OP_SaturnCreditsDef, 120}, // uwu + {IT_STRING | IT_CVAR, NULL, "Less Midnight Channel Flicker", &cv_lessflicker, 105}, + + {IT_SUBMENU|IT_STRING, NULL, "Sprite Distortion...", &OP_PlayerDistortDef, 115}, + {IT_SUBMENU|IT_STRING, NULL, "Hud Offsets...", &OP_HudOffsetDef, 115}, + + {IT_SUBMENU|IT_STRING, NULL, "Saturn Credits", &OP_SaturnCreditsDef, 125}, // uwu }; static const char* OP_SaturnTooltips[] = @@ -2070,6 +2079,8 @@ static const char* OP_SaturnTooltips[] = "Minimize the player icons on the minimap.", "Show the big Cecho Messages.", "Show Localskin Menus.", + "Nametag Options.", + "Use your native Keyboard Layout.", "Disables the flicker effect on Midnight Channel.", "Options for sprite distortion effects.", "Move position of HUD elements.", @@ -2091,6 +2102,10 @@ enum sm_lapemblem, sm_mapnames, sm_smallmap, + sm_cechotogle, + sm_showlocalskin, + sm_nametagmen, + sm_nativkey, sm_pisschannel, sm_distortionmenu, sm_hudoffsets, @@ -2287,6 +2302,18 @@ static menuitem_t OP_ForkedBirdMenu[] = {IT_STRING | IT_CVAR, NULL, "Lua Immersion", &cv_luaimmersion, 170}, }; +static menuitem_t OP_NametagMenu[] = +{ + {IT_HEADER, NULL, "Nametag", NULL, 0}, + {IT_STRING | IT_CVAR, NULL, "Nametag", &cv_nametag, 10}, + {IT_STRING | IT_CVAR, NULL, "Show Char image in Nametag", &cv_nametagfacerank, 20}, + {IT_STRING | IT_CVAR, NULL, "Show own Nametag", &cv_showownnametag, 30}, + {IT_STRING | IT_CVAR, NULL, "Nametag Max distance", &cv_nametagdist, 40}, + {IT_STRING | IT_CVAR, NULL, "Nametag Max Display Players", &cv_nametagmaxplayers, 50}, + {IT_STRING | IT_CVAR, NULL, "Nametag Transparency", &cv_nametagtrans, 60}, + //{IT_STRING | IT_CVAR, NULL, "Nametag Scaling", &cv_nametagscaling, 70} +}; + static menuitem_t OP_TiltMenu[] = { {IT_STRING | IT_CVAR, NULL, "Camera Tilting", &cv_tilting, 0}, @@ -2909,6 +2936,8 @@ menu_t OP_HudOffsetDef = DEFAULTSCROLLSTYLE(NULL, OP_HudOffsetMenu, &OP_SaturnDe menu_t OP_SaturnCreditsDef = DEFAULTMENUSTYLE(NULL, OP_SaturnCreditsMenu, &OP_SaturnDef, 30, 10); menu_t OP_BirdDef = DEFAULTMENUSTYLE(NULL, OP_BirdMenu, &OP_MainDef, 30, 30); +menu_t OP_NametagDef = DEFAULTMENUSTYLE(NULL, OP_NametagMenu, &OP_SaturnDef, 30, 60); + menu_t OP_TiltDef = DEFAULTMENUSTYLE(NULL, OP_TiltMenu, &OP_BirdDef, 30, 60); menu_t OP_AdvancedBirdDef = DEFAULTMENUSTYLE(NULL, OP_AdvancedBirdMenu, &OP_BirdDef, 30, 60); @@ -4502,6 +4531,9 @@ void M_Init(void) OP_SaturnMenu[sm_coloritem].status = IT_GRAYEDOUT; OP_SaturnMenu[sm_colorhud_customcolor].status = IT_GRAYEDOUT; } + + if (!nametaggfx) + OP_SaturnMenu[sm_nametagmen].status = IT_GRAYEDOUT; #ifndef NONET CV_RegisterVar(&cv_serversort); @@ -5343,8 +5375,6 @@ static void M_DrawGenericScrollMenu(void) } #endif - - if (currentMenu == &OP_SaturnDef) { if (!(OP_SaturnTooltips[itemOn] == NULL)) diff --git a/src/p_local.h b/src/p_local.h index df8df412e..b95940672 100644 --- a/src/p_local.h +++ b/src/p_local.h @@ -363,6 +363,8 @@ void P_BounceMove(mobj_t *mo); boolean P_CheckSight(mobj_t *t1, mobj_t *t2); void P_CheckHoopPosition(mobj_t *hoopthing, fixed_t x, fixed_t y, fixed_t z, fixed_t radius); +boolean P_CheckSight2(mobj_t *t1, mobj_t *t2); + boolean P_CheckSector(sector_t *sector, boolean crunch); void P_DelSeclist(msecnode_t *node); diff --git a/src/p_sight.c b/src/p_sight.c index f6fa5775f..8d7a5c718 100644 --- a/src/p_sight.c +++ b/src/p_sight.c @@ -169,6 +169,174 @@ static boolean P_CrossSubsecPolyObj(polyobj_t *po, register los_t *los) return true; } +static boolean P_CrossSubsector2(size_t num, register los_t *los) +{ + seg_t *seg; + INT32 count; + polyobj_t *po; // haleyjd 02/23/06 + +#ifdef RANGECHECK + if (num >= numsubsectors) + I_Error("P_CrossSubsector: ss %s with numss = %s\n", sizeu1(num), sizeu2(numsubsectors)); +#endif + + // haleyjd 02/23/06: this assignment should be after the above check + seg = segs + subsectors[num].firstline; + + // haleyjd 02/23/06: check polyobject lines + if ((po = subsectors[num].polyList)) + { + while (po) + { + if (po->validcount != validcount) + { + po->validcount = validcount; + if (!P_CrossSubsecPolyObj(po, los)) + return false; + } + po = (polyobj_t *)(po->link.next); + } + } + + for (count = subsectors[num].numlines; --count >= 0; seg++) // check lines + { + line_t *line = seg->linedef; + divline_t divl; + fixed_t popentop, popenbottom; + const sector_t *front, *back; + const vertex_t *v1,*v2; + fixed_t frac; + fixed_t frontf, backf, frontc, backc; + fixed_t fracx, fracy; + + // already checked other side? + if (line->validcount == validcount) + continue; + + line->validcount = validcount; + + // OPTIMIZE: killough 4/20/98: Added quick bounding-box rejection test + if (line->bbox[BOXLEFT ] > los->bbox[BOXRIGHT ] || + line->bbox[BOXRIGHT ] < los->bbox[BOXLEFT ] || + line->bbox[BOXBOTTOM] > los->bbox[BOXTOP ] || + line->bbox[BOXTOP] < los->bbox[BOXBOTTOM]) + continue; + + v1 = line->v1; + v2 = line->v2; + + // line isn't crossed? + if (P_DivlineSide(v1->x, v1->y, &los->strace) == + P_DivlineSide(v2->x, v2->y, &los->strace)) + continue; + + divl.dx = v2->x - (divl.x = v1->x); + divl.dy = v2->y - (divl.y = v1->y); + + // line isn't crossed? + if (P_DivlineSide(los->strace.x, los->strace.y, &divl) == + P_DivlineSide(los->t2x, los->t2y, &divl)) + continue; + + // stop because it is not two sided anyway + if (!(line->flags & ML_TWOSIDED)) + return false; + + // calculate fractional intercept (how far along we are divided by how far we are from t2) + frac = P_InterceptVector2(&los->strace, &divl); + + front = seg->frontsector; + back = seg->backsector; + // calculate position at intercept + fracx = los->strace.x + FixedMul(los->strace.dx, frac); + fracy = los->strace.y + FixedMul(los->strace.dy, frac); + // calculate sector heights + frontf = P_GetSectorFloorZAt (front, fracx, fracy); + frontc = P_GetSectorCeilingZAt(front, fracx, fracy); + backf = P_GetSectorFloorZAt (back , fracx, fracy); + backc = P_GetSectorCeilingZAt(back , fracx, fracy); + // crosses a two sided line + // no wall to block sight with? + if (frontf == backf && frontc == backc + && !front->ffloors & !back->ffloors) // (and no FOFs) + continue; + + // possible occluder + // because of ceiling height differences + popentop = min(frontc, backc); + + // because of floor height differences + popenbottom = max(frontf, backf); + + // quick test for totally closed doors + if (popenbottom >= popentop) + return false; + + if (frontf != backf) + { + fixed_t slope = FixedDiv(popenbottom - los->sightzstart , frac); + if (slope > los->bottomslope) + los->bottomslope = slope; + } + + if (frontc != backc) + { + fixed_t slope = FixedDiv(popentop - los->sightzstart , frac); + if (slope < los->topslope) + los->topslope = slope; + } + + if (los->topslope <= los->bottomslope) + return false; + + // Monster Iestyn: check FOFs! + if (front->ffloors || back->ffloors) + { + ffloor_t *rover; + fixed_t topslope, bottomslope; + fixed_t topz, bottomz; + // check front sector's FOFs first + for (rover = front->ffloors; rover; rover = rover->next) + { + if (!(rover->flags & FF_EXISTS) + || !(rover->flags & FF_RENDERSIDES) || (rover->flags & (FF_TRANSLUCENT|FF_FOG))) + { + continue; + } + + topz = P_GetFFloorTopZAt (rover, fracx, fracy); + bottomz = P_GetFFloorBottomZAt(rover, fracx, fracy); + topslope = FixedDiv( topz - los->sightzstart, frac); + bottomslope = FixedDiv(bottomz - los->sightzstart, frac); + if (topslope >= los->topslope && bottomslope <= los->bottomslope) + return false; // view completely blocked + } + // check back sector's FOFs as well + for (rover = back->ffloors; rover; rover = rover->next) + { + if (!(rover->flags & FF_EXISTS) + || !(rover->flags & FF_RENDERSIDES) || (rover->flags & (FF_TRANSLUCENT|FF_FOG))) + { + continue; + } + + topz = P_GetFFloorTopZAt (rover, fracx, fracy); + bottomz = P_GetFFloorBottomZAt(rover, fracx, fracy); + topslope = FixedDiv( topz - los->sightzstart, frac); + bottomslope = FixedDiv(bottomz - los->sightzstart, frac); + if (topslope >= los->topslope && bottomslope <= los->bottomslope) + return false; // view completely blocked + } + // TODO: figure out if it's worth considering partially blocked cases or not? + // maybe to adjust los's top/bottom slopes if needed + } + } + + // passed the subsector ok + return true; +} + + // // P_CrossSubsector // @@ -368,6 +536,26 @@ static boolean P_CrossBSPNode(INT32 bspnum, register los_t *los) P_CrossSubsector((bspnum == -1 ? 0 : bspnum & ~NF_SUBSECTOR), los); } +static boolean P_CrossBSPNode2(INT32 bspnum, register los_t *los) +{ + while (!(bspnum & NF_SUBSECTOR)) + { + register node_t *bsp = nodes + bspnum; + INT32 side = P_DivlineSide(los->strace.x,los->strace.y,(divline_t *)bsp)&1; + if (side == P_DivlineSide(los->t2x, los->t2y, (divline_t *) bsp)) + bspnum = bsp->children[side]; // doesn't touch the other side + else // the partition plane is crossed here + { + if (!P_CrossBSPNode2(bsp->children[side], los)) + return 0; // cross the starting side + else + bspnum = bsp->children[side^1]; // cross the ending side + } + } + return + P_CrossSubsector2((bspnum == -1 ? 0 : bspnum & ~NF_SUBSECTOR), los); +} + // // P_CheckSight // @@ -493,3 +681,123 @@ boolean P_CheckSight(mobj_t *t1, mobj_t *t2) // the head node is the last node output return P_CrossBSPNode((INT32)numnodes - 1, &los); } + +boolean P_CheckSight2(mobj_t *t1, mobj_t *t2) +{ + const sector_t *s1, *s2; + size_t pnum; + los_t los; + + // First check for trivial rejection. + if (!t1 || !t2) + return false; + + I_Assert(!P_MobjWasRemoved(t1)); + I_Assert(!P_MobjWasRemoved(t2)); + + if (!t1->subsector || !t2->subsector + || !t1->subsector->sector || !t2->subsector->sector) + return false; + + s1 = t1->subsector->sector; + s2 = t2->subsector->sector; + pnum = (s1-sectors)*numsectors + (s2-sectors); + + if (rejectmatrix != NULL) + { + // Check in REJECT table. + if (rejectmatrix[pnum>>3] & (1 << (pnum&7))) // can't possibly be connected + return false; + } + + // killough 11/98: shortcut for melee situations + // same subsector? obviously visible + // haleyjd 02/23/06: can't do this if there are polyobjects in the subsec + if (!t1->subsector->polyList && + t1->subsector == t2->subsector) + return true; + + // An unobstructed LOS is possible. + // Now look from eyes of t1 to any part of t2. + sightcounts[1]++; + + validcount++; + + los.topslope = + (los.bottomslope = t2->z - (los.sightzstart = + t1->z + t1->height - + (t1->height>>2))) + t2->height; + los.strace.dx = (los.t2x = t2->x) - (los.strace.x = t1->x); + los.strace.dy = (los.t2y = t2->y) - (los.strace.y = t1->y); + + if (t1->x > t2->x) + los.bbox[BOXRIGHT] = t1->x, los.bbox[BOXLEFT] = t2->x; + else + los.bbox[BOXRIGHT] = t2->x, los.bbox[BOXLEFT] = t1->x; + + if (t1->y > t2->y) + los.bbox[BOXTOP] = t1->y, los.bbox[BOXBOTTOM] = t2->y; + else + los.bbox[BOXTOP] = t2->y, los.bbox[BOXBOTTOM] = t1->y; + + // Prevent SOME cases of looking through 3dfloors + // + // This WILL NOT work for things like 3d stairs with monsters behind + // them - they will still see you! TODO: Fix. + // + if (s1 == s2) // Both sectors are the same. + { + ffloor_t *rover; + fixed_t topz1, bottomz1; // top, bottom heights at t1's position + fixed_t topz2, bottomz2; // likewise but for t2 + + for (rover = s1->ffloors; rover; rover = rover->next) + { + // Allow sight through water, fog, etc. + /// \todo Improve by checking fog density/translucency + /// and setting a sight limit. + if (!(rover->flags & FF_EXISTS) + || !(rover->flags & FF_RENDERPLANES) || (rover->flags & (FF_TRANSLUCENT|FF_FOG))) + { + continue; + } + + topz1 = P_GetFFloorTopZAt (rover, t1->x, t1->y); + topz2 = P_GetFFloorTopZAt (rover, t2->x, t2->y); + bottomz1 = P_GetFFloorBottomZAt(rover, t1->x, t1->y); + bottomz2 = P_GetFFloorBottomZAt(rover, t2->x, t2->y); + + // Check for blocking floors here. + if ((los.sightzstart < bottomz1 && t2->z >= topz2) + || (los.sightzstart >= topz1 && t2->z + t2->height < bottomz2)) + { + // no way to see through that + return false; + } + + if (rover->flags & FF_SOLID) + continue; // shortcut since neither mobj can be inside the 3dfloor + + if (rover->flags & FF_BOTHPLANES || !(rover->flags & FF_INVERTPLANES)) + { + if (los.sightzstart >= topz1 && t2->z + t2->height < topz2) + return false; // blocked by upper outside plane + + if (los.sightzstart < bottomz1 && t2->z >= bottomz2) + return false; // blocked by lower outside plane + } + + if (rover->flags & FF_BOTHPLANES || rover->flags & FF_INVERTPLANES) + { + if (los.sightzstart < topz1 && t2->z >= topz2) + return false; // blocked by upper inside plane + + if (los.sightzstart >= bottomz1 && t2->z + t2->height < bottomz2) + return false; // blocked by lower inside plane + } + } + } + + // the head node is the last node output + return P_CrossBSPNode2((INT32)numnodes - 1, &los); +} \ No newline at end of file diff --git a/src/v_video.c b/src/v_video.c index 0d0405208..fb0f38c0c 100644 --- a/src/v_video.c +++ b/src/v_video.c @@ -2322,6 +2322,201 @@ void V_DrawCenteredSmallStringAtFixed(fixed_t x, fixed_t y, INT32 option, const V_DrawSmallStringAtFixed(x, y, option, string); } +void V_DrawThinStringAtFixed(fixed_t x, fixed_t y, INT32 option, const char *string) +{ + fixed_t cx = x, cy = y; + INT32 w, c, dupx, dupy, scrwidth, center = 0, left = 0; + const char *ch = string; + INT32 spacewidth = 4, charwidth = 0; + INT32 charflags = 0; + const UINT8 *colormap = NULL; + INT32 lowercase = (option & V_ALLOWLOWERCASE); + option &= ~V_FLIP; // which is also shared with V_ALLOWLOWERCASE... + + if (option & V_NOSCALESTART) + { + dupx = vid.dupx; + dupy = vid.dupy; + scrwidth = vid.width; + } + else + { + dupx = dupy = 1; + scrwidth = vid.width/vid.dupx; + left = (scrwidth - BASEVIDWIDTH)/2; + scrwidth -= left; + } + + switch (option & V_SPACINGMASK) + { + case V_MONOSPACE: + spacewidth = 8; + /* FALLTHRU */ + case V_OLDSPACING: + charwidth = 8; + break; + case V_6WIDTHSPACE: + spacewidth = 6; + default: + break; + } + + charflags = (option & V_CHARCOLORMASK); + colormap = V_GetStringColormap(charflags); + + for (;;ch++) + { + if (!*ch) + break; + if (*ch & 0x80) //color parsing -x 2.16.09 + { + // manually set flags override color codes + if (!(option & V_CHARCOLORMASK)) + { + charflags = ((*ch & 0x7f) << V_CHARCOLORSHIFT) & V_CHARCOLORMASK; + colormap = V_GetStringColormap(charflags); + } + continue; + } + if (*ch == '\n') + { + cx = x; + + if (option & V_RETURN8) + cy += (8*dupy)<= HU_FONTSIZE || !tny_font[c]) + { + cx += (spacewidth * dupx)<width)*(dupx/2); + } + else + w = SHORT(tny_font[c]->width) * dupx; + + if ((cx>>FRACBITS) > scrwidth) + break; + if ((cx>>FRACBITS)+left + w < 0) //left boundary check + { + cx += w<= HU_FONTSIZE || !tny_font[c]) + { + cx += (spacewidth * dupx)<width)*(dupx/2); + } + else + w = SHORT(tny_font[c]->width) * dupx; + + if ((cx>>FRACBITS) > scrwidth) + break; + if ((cx>>FRACBITS)+left + w < 0) //left boundary check + { + cx += w< Date: Wed, 7 Feb 2024 09:36:37 +0100 Subject: [PATCH 02/79] forgor to comment this out --- src/d_netcmd.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/d_netcmd.c b/src/d_netcmd.c index d49d0a3e0..ec614722b 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -515,8 +515,8 @@ consvar_t cv_sleep = {"cpusleep", "1", CV_SAVE, sleeping_cons_t, NULL, -1, NULL, static CV_PossibleValue_t nametagtrans_cons_t[] = { {0, "Never"}, {1, "Far only"}, {2, "Dynamic"}, {3, "Always"}, {0, NULL}}; -static CV_PossibleValue_t nametagscaling_cons_t[] = { - {0, "MIN"}, {320, "MAX"}, {0, NULL}}; +/*static CV_PossibleValue_t nametagscaling_cons_t[] = { + {0, "MIN"}, {320, "MAX"}, {0, NULL}};*/ consvar_t cv_nametag = {"kartnametag", "On", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_nametagtrans = {"nametagtransparency", "Dynamic", CV_SAVE, nametagtrans_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_nametagfacerank = {"nametagfacerank", "On", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; -- 2.54.0 From 22fd9671314100b6e7b242abf6d0cf0afb342eb4 Mon Sep 17 00:00:00 2001 From: Alug Date: Wed, 7 Feb 2024 09:37:01 +0100 Subject: [PATCH 03/79] also turn this off --- src/d_netcmd.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/d_netcmd.c b/src/d_netcmd.c index ec614722b..4dcb49414 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -517,7 +517,7 @@ static CV_PossibleValue_t nametagtrans_cons_t[] = { {0, "Never"}, {1, "Far only"}, {2, "Dynamic"}, {3, "Always"}, {0, NULL}}; /*static CV_PossibleValue_t nametagscaling_cons_t[] = { {0, "MIN"}, {320, "MAX"}, {0, NULL}};*/ -consvar_t cv_nametag = {"kartnametag", "On", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_nametag = {"kartnametag", "Off", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_nametagtrans = {"nametagtransparency", "Dynamic", CV_SAVE, nametagtrans_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_nametagfacerank = {"nametagfacerank", "On", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_nametagdist = {"nametagdist", "300", CV_SAVE, CV_Unsigned, NULL, 0, NULL, NULL, 0, 0, NULL}; -- 2.54.0 From 85ebbbb3a1b1a3e279fe185541c79faccbe9a7c4 Mon Sep 17 00:00:00 2001 From: Alug Date: Wed, 7 Feb 2024 09:42:16 +0100 Subject: [PATCH 04/79] why add the same thing twice? --- src/k_kart.c | 2 +- src/p_local.h | 2 - src/p_sight.c | 307 -------------------------------------------------- 3 files changed, 1 insertion(+), 310 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index d0ffef299..0d69190be 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -9043,7 +9043,7 @@ static void K_drawNameTags(void) an = R_PointToAngle2(camera[0].x, camera[0].y, players[i].mo->x, players[i].mo->y) - camera[0].angle; if (an > ANGLE_90 && an < ANGLE_270) continue; // behind back - if (!P_CheckSight2(players[i].mo, stplyr->mo)) + if (!P_CheckSight(players[i].mo, stplyr->mo)) continue; cm = R_GetTranslationColormap(players[i].skin, players[i].mo->color, GTC_CACHE); diff --git a/src/p_local.h b/src/p_local.h index b95940672..df8df412e 100644 --- a/src/p_local.h +++ b/src/p_local.h @@ -363,8 +363,6 @@ void P_BounceMove(mobj_t *mo); boolean P_CheckSight(mobj_t *t1, mobj_t *t2); void P_CheckHoopPosition(mobj_t *hoopthing, fixed_t x, fixed_t y, fixed_t z, fixed_t radius); -boolean P_CheckSight2(mobj_t *t1, mobj_t *t2); - boolean P_CheckSector(sector_t *sector, boolean crunch); void P_DelSeclist(msecnode_t *node); diff --git a/src/p_sight.c b/src/p_sight.c index 8d7a5c718..b482403cb 100644 --- a/src/p_sight.c +++ b/src/p_sight.c @@ -169,173 +169,6 @@ static boolean P_CrossSubsecPolyObj(polyobj_t *po, register los_t *los) return true; } -static boolean P_CrossSubsector2(size_t num, register los_t *los) -{ - seg_t *seg; - INT32 count; - polyobj_t *po; // haleyjd 02/23/06 - -#ifdef RANGECHECK - if (num >= numsubsectors) - I_Error("P_CrossSubsector: ss %s with numss = %s\n", sizeu1(num), sizeu2(numsubsectors)); -#endif - - // haleyjd 02/23/06: this assignment should be after the above check - seg = segs + subsectors[num].firstline; - - // haleyjd 02/23/06: check polyobject lines - if ((po = subsectors[num].polyList)) - { - while (po) - { - if (po->validcount != validcount) - { - po->validcount = validcount; - if (!P_CrossSubsecPolyObj(po, los)) - return false; - } - po = (polyobj_t *)(po->link.next); - } - } - - for (count = subsectors[num].numlines; --count >= 0; seg++) // check lines - { - line_t *line = seg->linedef; - divline_t divl; - fixed_t popentop, popenbottom; - const sector_t *front, *back; - const vertex_t *v1,*v2; - fixed_t frac; - fixed_t frontf, backf, frontc, backc; - fixed_t fracx, fracy; - - // already checked other side? - if (line->validcount == validcount) - continue; - - line->validcount = validcount; - - // OPTIMIZE: killough 4/20/98: Added quick bounding-box rejection test - if (line->bbox[BOXLEFT ] > los->bbox[BOXRIGHT ] || - line->bbox[BOXRIGHT ] < los->bbox[BOXLEFT ] || - line->bbox[BOXBOTTOM] > los->bbox[BOXTOP ] || - line->bbox[BOXTOP] < los->bbox[BOXBOTTOM]) - continue; - - v1 = line->v1; - v2 = line->v2; - - // line isn't crossed? - if (P_DivlineSide(v1->x, v1->y, &los->strace) == - P_DivlineSide(v2->x, v2->y, &los->strace)) - continue; - - divl.dx = v2->x - (divl.x = v1->x); - divl.dy = v2->y - (divl.y = v1->y); - - // line isn't crossed? - if (P_DivlineSide(los->strace.x, los->strace.y, &divl) == - P_DivlineSide(los->t2x, los->t2y, &divl)) - continue; - - // stop because it is not two sided anyway - if (!(line->flags & ML_TWOSIDED)) - return false; - - // calculate fractional intercept (how far along we are divided by how far we are from t2) - frac = P_InterceptVector2(&los->strace, &divl); - - front = seg->frontsector; - back = seg->backsector; - // calculate position at intercept - fracx = los->strace.x + FixedMul(los->strace.dx, frac); - fracy = los->strace.y + FixedMul(los->strace.dy, frac); - // calculate sector heights - frontf = P_GetSectorFloorZAt (front, fracx, fracy); - frontc = P_GetSectorCeilingZAt(front, fracx, fracy); - backf = P_GetSectorFloorZAt (back , fracx, fracy); - backc = P_GetSectorCeilingZAt(back , fracx, fracy); - // crosses a two sided line - // no wall to block sight with? - if (frontf == backf && frontc == backc - && !front->ffloors & !back->ffloors) // (and no FOFs) - continue; - - // possible occluder - // because of ceiling height differences - popentop = min(frontc, backc); - - // because of floor height differences - popenbottom = max(frontf, backf); - - // quick test for totally closed doors - if (popenbottom >= popentop) - return false; - - if (frontf != backf) - { - fixed_t slope = FixedDiv(popenbottom - los->sightzstart , frac); - if (slope > los->bottomslope) - los->bottomslope = slope; - } - - if (frontc != backc) - { - fixed_t slope = FixedDiv(popentop - los->sightzstart , frac); - if (slope < los->topslope) - los->topslope = slope; - } - - if (los->topslope <= los->bottomslope) - return false; - - // Monster Iestyn: check FOFs! - if (front->ffloors || back->ffloors) - { - ffloor_t *rover; - fixed_t topslope, bottomslope; - fixed_t topz, bottomz; - // check front sector's FOFs first - for (rover = front->ffloors; rover; rover = rover->next) - { - if (!(rover->flags & FF_EXISTS) - || !(rover->flags & FF_RENDERSIDES) || (rover->flags & (FF_TRANSLUCENT|FF_FOG))) - { - continue; - } - - topz = P_GetFFloorTopZAt (rover, fracx, fracy); - bottomz = P_GetFFloorBottomZAt(rover, fracx, fracy); - topslope = FixedDiv( topz - los->sightzstart, frac); - bottomslope = FixedDiv(bottomz - los->sightzstart, frac); - if (topslope >= los->topslope && bottomslope <= los->bottomslope) - return false; // view completely blocked - } - // check back sector's FOFs as well - for (rover = back->ffloors; rover; rover = rover->next) - { - if (!(rover->flags & FF_EXISTS) - || !(rover->flags & FF_RENDERSIDES) || (rover->flags & (FF_TRANSLUCENT|FF_FOG))) - { - continue; - } - - topz = P_GetFFloorTopZAt (rover, fracx, fracy); - bottomz = P_GetFFloorBottomZAt(rover, fracx, fracy); - topslope = FixedDiv( topz - los->sightzstart, frac); - bottomslope = FixedDiv(bottomz - los->sightzstart, frac); - if (topslope >= los->topslope && bottomslope <= los->bottomslope) - return false; // view completely blocked - } - // TODO: figure out if it's worth considering partially blocked cases or not? - // maybe to adjust los's top/bottom slopes if needed - } - } - - // passed the subsector ok - return true; -} - // // P_CrossSubsector @@ -536,26 +369,6 @@ static boolean P_CrossBSPNode(INT32 bspnum, register los_t *los) P_CrossSubsector((bspnum == -1 ? 0 : bspnum & ~NF_SUBSECTOR), los); } -static boolean P_CrossBSPNode2(INT32 bspnum, register los_t *los) -{ - while (!(bspnum & NF_SUBSECTOR)) - { - register node_t *bsp = nodes + bspnum; - INT32 side = P_DivlineSide(los->strace.x,los->strace.y,(divline_t *)bsp)&1; - if (side == P_DivlineSide(los->t2x, los->t2y, (divline_t *) bsp)) - bspnum = bsp->children[side]; // doesn't touch the other side - else // the partition plane is crossed here - { - if (!P_CrossBSPNode2(bsp->children[side], los)) - return 0; // cross the starting side - else - bspnum = bsp->children[side^1]; // cross the ending side - } - } - return - P_CrossSubsector2((bspnum == -1 ? 0 : bspnum & ~NF_SUBSECTOR), los); -} - // // P_CheckSight // @@ -680,124 +493,4 @@ boolean P_CheckSight(mobj_t *t1, mobj_t *t2) // the head node is the last node output return P_CrossBSPNode((INT32)numnodes - 1, &los); -} - -boolean P_CheckSight2(mobj_t *t1, mobj_t *t2) -{ - const sector_t *s1, *s2; - size_t pnum; - los_t los; - - // First check for trivial rejection. - if (!t1 || !t2) - return false; - - I_Assert(!P_MobjWasRemoved(t1)); - I_Assert(!P_MobjWasRemoved(t2)); - - if (!t1->subsector || !t2->subsector - || !t1->subsector->sector || !t2->subsector->sector) - return false; - - s1 = t1->subsector->sector; - s2 = t2->subsector->sector; - pnum = (s1-sectors)*numsectors + (s2-sectors); - - if (rejectmatrix != NULL) - { - // Check in REJECT table. - if (rejectmatrix[pnum>>3] & (1 << (pnum&7))) // can't possibly be connected - return false; - } - - // killough 11/98: shortcut for melee situations - // same subsector? obviously visible - // haleyjd 02/23/06: can't do this if there are polyobjects in the subsec - if (!t1->subsector->polyList && - t1->subsector == t2->subsector) - return true; - - // An unobstructed LOS is possible. - // Now look from eyes of t1 to any part of t2. - sightcounts[1]++; - - validcount++; - - los.topslope = - (los.bottomslope = t2->z - (los.sightzstart = - t1->z + t1->height - - (t1->height>>2))) + t2->height; - los.strace.dx = (los.t2x = t2->x) - (los.strace.x = t1->x); - los.strace.dy = (los.t2y = t2->y) - (los.strace.y = t1->y); - - if (t1->x > t2->x) - los.bbox[BOXRIGHT] = t1->x, los.bbox[BOXLEFT] = t2->x; - else - los.bbox[BOXRIGHT] = t2->x, los.bbox[BOXLEFT] = t1->x; - - if (t1->y > t2->y) - los.bbox[BOXTOP] = t1->y, los.bbox[BOXBOTTOM] = t2->y; - else - los.bbox[BOXTOP] = t2->y, los.bbox[BOXBOTTOM] = t1->y; - - // Prevent SOME cases of looking through 3dfloors - // - // This WILL NOT work for things like 3d stairs with monsters behind - // them - they will still see you! TODO: Fix. - // - if (s1 == s2) // Both sectors are the same. - { - ffloor_t *rover; - fixed_t topz1, bottomz1; // top, bottom heights at t1's position - fixed_t topz2, bottomz2; // likewise but for t2 - - for (rover = s1->ffloors; rover; rover = rover->next) - { - // Allow sight through water, fog, etc. - /// \todo Improve by checking fog density/translucency - /// and setting a sight limit. - if (!(rover->flags & FF_EXISTS) - || !(rover->flags & FF_RENDERPLANES) || (rover->flags & (FF_TRANSLUCENT|FF_FOG))) - { - continue; - } - - topz1 = P_GetFFloorTopZAt (rover, t1->x, t1->y); - topz2 = P_GetFFloorTopZAt (rover, t2->x, t2->y); - bottomz1 = P_GetFFloorBottomZAt(rover, t1->x, t1->y); - bottomz2 = P_GetFFloorBottomZAt(rover, t2->x, t2->y); - - // Check for blocking floors here. - if ((los.sightzstart < bottomz1 && t2->z >= topz2) - || (los.sightzstart >= topz1 && t2->z + t2->height < bottomz2)) - { - // no way to see through that - return false; - } - - if (rover->flags & FF_SOLID) - continue; // shortcut since neither mobj can be inside the 3dfloor - - if (rover->flags & FF_BOTHPLANES || !(rover->flags & FF_INVERTPLANES)) - { - if (los.sightzstart >= topz1 && t2->z + t2->height < topz2) - return false; // blocked by upper outside plane - - if (los.sightzstart < bottomz1 && t2->z >= bottomz2) - return false; // blocked by lower outside plane - } - - if (rover->flags & FF_BOTHPLANES || rover->flags & FF_INVERTPLANES) - { - if (los.sightzstart < topz1 && t2->z >= topz2) - return false; // blocked by upper inside plane - - if (los.sightzstart >= bottomz1 && t2->z + t2->height < bottomz2) - return false; // blocked by lower inside plane - } - } - } - - // the head node is the last node output - return P_CrossBSPNode2((INT32)numnodes - 1, &los); } \ No newline at end of file -- 2.54.0 From 1bc90d22f7bc4a5b0c0f027641f4098e401b6aef Mon Sep 17 00:00:00 2001 From: Alug Date: Mon, 19 Feb 2024 01:53:47 +0100 Subject: [PATCH 05/79] option for small nametags --- src/d_netcmd.c | 6 ++-- src/d_netcmd.h | 1 + src/k_kart.c | 97 ++++++++++++++++++++++++++++++++------------------ src/v_video.c | 82 ++++++++++++++++++++++++++++++++++++++++++ src/v_video.h | 1 + 5 files changed, 150 insertions(+), 37 deletions(-) diff --git a/src/d_netcmd.c b/src/d_netcmd.c index 4dcb49414..340bb90f8 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -525,6 +525,7 @@ consvar_t cv_nametagmaxplayers = {"nametagmaxplayers", "8", CV_SAVE, CV_Unsigned consvar_t cv_nametagmaxlenght = {"nametagmaxlenght", "12", CV_SAVE, CV_Unsigned, NULL, 0, NULL, NULL, 0, 0, NULL}; //consvar_t cv_nametagscaling = {"nametagscaling", "160", CV_SAVE, nametagscaling_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_showownnametag = {"showownnametag", "Off", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_smallnametags = {"smallnametags", "Off", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; static CV_PossibleValue_t skinselectspin_cons_t[] = { {0, "Off"}, {1, "Slow"}, {2, "2"}, {3, "3"}, {4, "4"}, {5, "5"}, {6, "6"}, {7, "7"}, {8, "8"}, {9, "9"}, {10, "Fast"}, {SKINSELECTSPIN_PAIN, "Pain"}, {0, NULL}}; @@ -1125,6 +1126,7 @@ void D_RegisterClientCommands(void) //CV_RegisterVar(&cv_nametagscaling); CV_RegisterVar(&cv_nametagdist); CV_RegisterVar(&cv_showownnametag); + CV_RegisterVar(&cv_smallnametags); CV_RegisterVar(&cv_perfstats); @@ -1143,8 +1145,8 @@ void D_RegisterClientCommands(void) CV_RegisterVar(&cv_speed); CV_RegisterVar(&cv_opflags); CV_RegisterVar(&cv_mapthingnum); -// CV_RegisterVar(&cv_grid); -// CV_RegisterVar(&cv_snapto); + //CV_RegisterVar(&cv_grid); + //CV_RegisterVar(&cv_snapto); // add cheat commands COM_AddCommand("noclip", Command_CheatNoClip_f); diff --git a/src/d_netcmd.h b/src/d_netcmd.h index 2df6499d9..36e4766a8 100644 --- a/src/d_netcmd.h +++ b/src/d_netcmd.h @@ -181,6 +181,7 @@ extern consvar_t cv_nametagmaxlenght; //extern consvar_t cv_nametagscaling; extern consvar_t cv_nametagdist; extern consvar_t cv_showownnametag; +extern consvar_t cv_smallnametags; #define SKINSELECTSPIN_PAIN 25 extern consvar_t cv_skinselectspin; diff --git a/src/k_kart.c b/src/k_kart.c index 0d69190be..032b845b2 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -8994,7 +8994,8 @@ static void K_drawNameTags(void) INT32 trans = 0; vector2_t pos; fixed_t st; - + int smol = 0; + if (!stplyr->mo || stplyr->spectator || splitscreen) return; @@ -9003,7 +9004,12 @@ static void K_drawNameTags(void) if (leveltime < starttime) goto showownnametag; - + + if (cv_smallnametags.value) + smol = (20<height/2; if (players[i].mo->eflags & MFE_VERTICALFLIP && !(players[i].pflags & PF_FLIPCAM)) pos.y += players[i].mo->height; - + if (encoremode) pos.x = (320<eflags & MFE_VERTICALFLIP && !(players[i].pflags & PF_FLIPCAM)) { - V_DrawFixedPatch(pos.x, pos.y-(3<mo->eflags & MFE_VERTICALFLIP && !(stplyr->pflags & PF_FLIPCAM)) - V_DrawFixedPatch(pos.x+((st+8)<mo->eflags & MFE_VERTICALFLIP && !(stplyr->pflags & PF_FLIPCAM)) + V_DrawFixedPatch(pos.x+((st+8)<mo->color]); - - if (!cv_nametagfacerank.value) - { - V_DrawStretchyFixedPatch(pos.x+(6<mo->color]); else { - V_DrawStretchyFixedPatch(pos.x+(6<skin], cm); + V_DrawFixedPatch(pos.x, pos.y+(10<mo->color]); + } + + if ((!cv_smallnametags.value) && nametaggfx) + { + if (!cv_nametagfacerank.value) + { + V_DrawStretchyFixedPatch(pos.x+(6<skin], cm); + } } } } @@ -10249,7 +10276,7 @@ void K_drawKartHUD(void) #endif K_drawKartItem(); - if (cv_nametag.value && nametaggfx) + if (cv_nametag.value) K_drawNameTags(); // If not splitscreen, draw... diff --git a/src/v_video.c b/src/v_video.c index fb0f38c0c..0d184df86 100644 --- a/src/v_video.c +++ b/src/v_video.c @@ -2316,6 +2316,88 @@ void V_DrawSmallStringAtFixed(fixed_t x, fixed_t y, INT32 option, const char *st } } +void V_DrawSmallStringAtFixedCM(fixed_t x, fixed_t y, INT32 option, const char *string, UINT8* colormap) +{ + fixed_t cx = x, cy = y; + INT32 w, c, dupx, dupy, scrwidth, center = 0, left = 0; + const char *ch = string; + INT32 spacewidth = 2, charwidth = 0; + INT32 lowercase = (option & V_ALLOWLOWERCASE); + option &= ~V_FLIP; // which is also shared with V_ALLOWLOWERCASE... + if (option & V_NOSCALESTART) + { + dupx = vid.dupx; + dupy = vid.dupy; + scrwidth = vid.width; + } + else + { + dupx = dupy = 1; + scrwidth = vid.width/vid.dupx; + left = (scrwidth - BASEVIDWIDTH)/2; + scrwidth -= left; + } + if (option & V_NOSCALEPATCH) + scrwidth *= vid.dupx; + switch (option & V_SPACINGMASK) + { + case V_MONOSPACE: + spacewidth = 4; + /* FALLTHRU */ + case V_OLDSPACING: + charwidth = 4; + break; + case V_6WIDTHSPACE: + spacewidth = 3; + default: + break; + } + for (;;ch++) + { + if (!*ch) + break; + if (*ch & 0x80) //color parsing -x 2.16.09 + continue; + + if (*ch == '\n') + { + cx = x; + if (option & V_RETURN8) + cy += (4*dupy)<= HU_FONTSIZE || !hu_font[c]) + { + cx += (spacewidth * dupx)<width*(dupx/4); + } + else + w = hu_font[c]->width * dupx / 2; + if ((cx>>FRACBITS) > scrwidth) + break; + if ((cx>>FRACBITS)+left + w < 0) //left boundary check + { + cx += w< Date: Wed, 7 Feb 2024 10:49:04 +0100 Subject: [PATCH 06/79] fix menu stuff --- src/m_menu.c | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/src/m_menu.c b/src/m_menu.c index 259f36fb4..a3f68f71f 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -2057,9 +2057,9 @@ static menuitem_t OP_SaturnMenu[] = {IT_STRING | IT_CVAR, NULL, "Less Midnight Channel Flicker", &cv_lessflicker, 105}, {IT_SUBMENU|IT_STRING, NULL, "Sprite Distortion...", &OP_PlayerDistortDef, 115}, - {IT_SUBMENU|IT_STRING, NULL, "Hud Offsets...", &OP_HudOffsetDef, 115}, + {IT_SUBMENU|IT_STRING, NULL, "Hud Offsets...", &OP_HudOffsetDef, 120}, - {IT_SUBMENU|IT_STRING, NULL, "Saturn Credits", &OP_SaturnCreditsDef, 125}, // uwu + {IT_SUBMENU|IT_STRING, NULL, "Saturn Credits", &OP_SaturnCreditsDef, 130}, // uwu }; static const char* OP_SaturnTooltips[] = @@ -2307,13 +2307,26 @@ static menuitem_t OP_NametagMenu[] = {IT_HEADER, NULL, "Nametag", NULL, 0}, {IT_STRING | IT_CVAR, NULL, "Nametag", &cv_nametag, 10}, {IT_STRING | IT_CVAR, NULL, "Show Char image in Nametag", &cv_nametagfacerank, 20}, - {IT_STRING | IT_CVAR, NULL, "Show own Nametag", &cv_showownnametag, 30}, + {IT_STRING | IT_CVAR, NULL, "Show Own Nametag", &cv_showownnametag, 30}, {IT_STRING | IT_CVAR, NULL, "Nametag Max distance", &cv_nametagdist, 40}, {IT_STRING | IT_CVAR, NULL, "Nametag Max Display Players", &cv_nametagmaxplayers, 50}, {IT_STRING | IT_CVAR, NULL, "Nametag Transparency", &cv_nametagtrans, 60}, + {IT_STRING | IT_CVAR, NULL, "Small Nametags", &cv_smallnametags, 70}, //{IT_STRING | IT_CVAR, NULL, "Nametag Scaling", &cv_nametagscaling, 70} }; +enum +{ + nt_header, + nt_nametag, + nt_ntchar, + nt_owntag, + nt_maxdist, + nt_maxplayer, + nt_nttrans, + nt_smol, +}; + static menuitem_t OP_TiltMenu[] = { {IT_STRING | IT_CVAR, NULL, "Camera Tilting", &cv_tilting, 0}, @@ -4532,8 +4545,8 @@ void M_Init(void) OP_SaturnMenu[sm_colorhud_customcolor].status = IT_GRAYEDOUT; } - if (!nametaggfx) - OP_SaturnMenu[sm_nametagmen].status = IT_GRAYEDOUT; + if (cv_smallnametags.value || (!nametaggfx)) + OP_NametagMenu[nt_ntchar].status = IT_GRAYEDOUT; #ifndef NONET CV_RegisterVar(&cv_serversort); -- 2.54.0 From 16239edf1c5e5380c12c9c6c939ec1115081c7dd Mon Sep 17 00:00:00 2001 From: Alug Date: Wed, 7 Feb 2024 11:01:53 +0100 Subject: [PATCH 07/79] fix menu updating + add default to switch --- src/d_netcmd.c | 2 +- src/k_kart.c | 4 +++- src/m_menu.c | 50 ++++++++++++++++++++------------------------------ src/m_menu.h | 3 +++ 4 files changed, 27 insertions(+), 32 deletions(-) diff --git a/src/d_netcmd.c b/src/d_netcmd.c index 340bb90f8..d32bdc1c2 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -525,7 +525,7 @@ consvar_t cv_nametagmaxplayers = {"nametagmaxplayers", "8", CV_SAVE, CV_Unsigned consvar_t cv_nametagmaxlenght = {"nametagmaxlenght", "12", CV_SAVE, CV_Unsigned, NULL, 0, NULL, NULL, 0, 0, NULL}; //consvar_t cv_nametagscaling = {"nametagscaling", "160", CV_SAVE, nametagscaling_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_showownnametag = {"showownnametag", "Off", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; -consvar_t cv_smallnametags = {"smallnametags", "Off", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_smallnametags = {"smallnametags", "Off", CV_SAVE, CV_OnOff, Nametag_menu_Onchange, 0, NULL, NULL, 0, 0, NULL}; static CV_PossibleValue_t skinselectspin_cons_t[] = { {0, "Off"}, {1, "Slow"}, {2, "2"}, {3, "3"}, {4, "4"}, {5, "5"}, {6, "6"}, {7, "7"}, {8, "8"}, {9, "9"}, {10, "Fast"}, {SKINSELECTSPIN_PAIN, "Pain"}, {0, NULL}}; diff --git a/src/k_kart.c b/src/k_kart.c index 032b845b2..191b58dd5 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -9081,7 +9081,9 @@ static void K_drawNameTags(void) trans = 0; break; case 3: - trans = V_60TRANS; + trans = V_HUDTRANS; + break; + default: break; } diff --git a/src/m_menu.c b/src/m_menu.c index a3f68f71f..38d7a80a4 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -3292,6 +3292,12 @@ void Saturn_menu_Onchange(void) OP_SaturnMenu[sm_colorhud_customcolor].status = status; } +void Nametag_menu_Onchange(void) +{ + if (cv_smallnametags.value || (!nametaggfx)) + OP_NametagMenu[nt_ntchar].status = IT_GRAYEDOUT; +} + // ========================================================================== // END ORGANIZATION STUFF. // ========================================================================== @@ -4545,7 +4551,7 @@ void M_Init(void) OP_SaturnMenu[sm_colorhud_customcolor].status = IT_GRAYEDOUT; } - if (cv_smallnametags.value || (!nametaggfx)) + if (!nametaggfx) OP_NametagMenu[nt_ntchar].status = IT_GRAYEDOUT; #ifndef NONET @@ -5065,11 +5071,9 @@ static void M_DrawGenericMenu(void) W_CachePatchName("M_CURSOR", PU_CACHE)); V_DrawString(currentMenu->x, cursory, lowercase|highlightflags, currentMenu->menuitems[itemOn].text); } - - + // dumb hack // tooltips - if (currentMenu == &OP_ControlsDef) { if (!(OP_ControlsTooltips[itemOn] == NULL)) @@ -5079,7 +5083,7 @@ static void M_DrawGenericMenu(void) coolalphatimer--; } } - + if (currentMenu == &OP_MouseOptionsDef) { if (!(OP_MouseTooltips[itemOn] == NULL)) @@ -5089,7 +5093,7 @@ static void M_DrawGenericMenu(void) coolalphatimer--; } } - + if (currentMenu == &OP_VideoOptionsDef) { if (!(OP_VideoTooltips[itemOn] == NULL)) @@ -5099,7 +5103,7 @@ static void M_DrawGenericMenu(void) coolalphatimer--; } } - + if (currentMenu == &OP_SoundOptionsDef) { if (!(OP_SoundTooltips[itemOn] == NULL)) @@ -5109,7 +5113,7 @@ static void M_DrawGenericMenu(void) coolalphatimer--; } } - + if (currentMenu == &OP_SoundAdvancedDef) { if (!(OP_SoundAdvancedTooltips[itemOn] == NULL)) @@ -5119,7 +5123,7 @@ static void M_DrawGenericMenu(void) coolalphatimer--; } } - + if (currentMenu == &OP_ExpOptionsDef) { if (!(OP_ExpTooltips[itemOn] == NULL)) @@ -5129,7 +5133,7 @@ static void M_DrawGenericMenu(void) coolalphatimer--; } } - + if (currentMenu == &OP_ChatOptionsDef) { if (!(OP_ChatOptionsTooltips[itemOn] == NULL)) @@ -5140,8 +5144,6 @@ static void M_DrawGenericMenu(void) } } - - if (currentMenu == &OP_GameOptionsDef) { if (!(OP_GameTooltips[itemOn] == NULL)) @@ -5151,8 +5153,7 @@ static void M_DrawGenericMenu(void) coolalphatimer--; } } - - + if (currentMenu == &OP_ServerOptionsDef) { if (!(OP_ServerOptionsTooltips[itemOn] == NULL)) @@ -5162,8 +5163,7 @@ static void M_DrawGenericMenu(void) coolalphatimer--; } } - - + if (currentMenu == &OP_AdvServerOptionsDef) { if (!(OP_AdvServerOptionsTooltips[itemOn] == NULL)) @@ -5174,9 +5174,6 @@ static void M_DrawGenericMenu(void) } } - - - if (currentMenu == &OP_PlayerDistortDef) { if (!(OP_PlayerDistortTooltips[itemOn] == NULL)) @@ -5186,10 +5183,7 @@ static void M_DrawGenericMenu(void) coolalphatimer--; } } - - - - + if (currentMenu == &OP_SaturnCreditsDef) // C: { if (!(OP_CreditTooltips[itemOn] == NULL)) @@ -5199,7 +5193,7 @@ static void M_DrawGenericMenu(void) coolalphatimer--; } } - + if (currentMenu == &OP_BirdDef) { if (!(OP_BirdTooltips[itemOn] == NULL)) @@ -5209,7 +5203,7 @@ static void M_DrawGenericMenu(void) coolalphatimer--; } } - + if (currentMenu == &OP_TiltDef) { if (!(OP_TiltTooltips[itemOn] == NULL)) @@ -5219,7 +5213,7 @@ static void M_DrawGenericMenu(void) coolalphatimer--; } } - + if (currentMenu == &OP_AdvancedBirdDef) { if (!(OP_AdvancedBirdTooltips[itemOn] == NULL)) @@ -5229,8 +5223,6 @@ static void M_DrawGenericMenu(void) coolalphatimer--; } } - - } static void M_DrawGenericBackgroundMenu(void) @@ -5241,8 +5233,6 @@ static void M_DrawGenericBackgroundMenu(void) #define scrollareaheight 72 - - // note that alphakey is multiplied by 2 for scrolling menus to allow greater usage in UINT8 range. static void M_DrawGenericScrollMenu(void) { diff --git a/src/m_menu.h b/src/m_menu.h index 8d1ebb723..3b0bb3049 100644 --- a/src/m_menu.h +++ b/src/m_menu.h @@ -276,6 +276,9 @@ void Bird_menu_Onchange(void); // Saturn menu updating void Saturn_menu_Onchange(void); +// Nametags Menu updating +void Nametag_menu_Onchange(void); + void M_ReplayHut(INT32 choice); void M_SetPlaybackMenuPointer(void); -- 2.54.0 From 1656aee8d36b80dd90727b9fe9ef09b0361943b3 Mon Sep 17 00:00:00 2001 From: Alug Date: Wed, 7 Feb 2024 11:40:05 +0100 Subject: [PATCH 08/79] use this stuff --- src/d_netcmd.c | 4 +++- src/k_kart.c | 5 +++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/d_netcmd.c b/src/d_netcmd.c index d32bdc1c2..438b4eaed 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -517,10 +517,12 @@ static CV_PossibleValue_t nametagtrans_cons_t[] = { {0, "Never"}, {1, "Far only"}, {2, "Dynamic"}, {3, "Always"}, {0, NULL}}; /*static CV_PossibleValue_t nametagscaling_cons_t[] = { {0, "MIN"}, {320, "MAX"}, {0, NULL}};*/ +static CV_PossibleValue_t nametagdistance_cons_t[] = { + {0, "MIN"}, {640, "MAX"}, {0, NULL}}; consvar_t cv_nametag = {"kartnametag", "Off", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_nametagtrans = {"nametagtransparency", "Dynamic", CV_SAVE, nametagtrans_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_nametagfacerank = {"nametagfacerank", "On", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; -consvar_t cv_nametagdist = {"nametagdist", "300", CV_SAVE, CV_Unsigned, NULL, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_nametagdist = {"nametagdist", "300", CV_SAVE, nametagdistance_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_nametagmaxplayers = {"nametagmaxplayers", "8", CV_SAVE, CV_Unsigned, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_nametagmaxlenght = {"nametagmaxlenght", "12", CV_SAVE, CV_Unsigned, NULL, 0, NULL, NULL, 0, 0, NULL}; //consvar_t cv_nametagscaling = {"nametagscaling", "160", CV_SAVE, nametagscaling_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; diff --git a/src/k_kart.c b/src/k_kart.c index 191b58dd5..78db8ca9b 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -9015,7 +9015,8 @@ static void K_drawNameTags(void) if (!players[i].mo || P_MobjWasRemoved(players[i].mo) || players[i].spectator || !playeringame[i] || i == displayplayers[0]) continue; - array[i].dist = P_AproxDistance(players[i].mo->x - (stplyr->mo->x + stplyr->mo->momx), players[i].mo->y - (stplyr->mo->y + stplyr->mo->momy)); + //array[i].dist = P_AproxDistance(players[i].mo->x - (stplyr->mo->x + stplyr->mo->momx), players[i].mo->y - (stplyr->mo->y + stplyr->mo->momy)); + array[i].dist = R_PointToDist(players[i].mo->x, players[i].mo->y); array[i].node = i; } @@ -9027,7 +9028,7 @@ static void K_drawNameTags(void) UINT8 *cm; UINT8 *textcm; fixed_t distance = 0; - fixed_t maxdistance = (cv_nametagdist.value*10)< cv_nametagmaxplayers.value) -- 2.54.0 From 814d125fe09d86dd555aa7c9593ae90c6376f26f Mon Sep 17 00:00:00 2001 From: Alug Date: Wed, 7 Feb 2024 11:52:04 +0100 Subject: [PATCH 09/79] brap --- src/k_kart.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/k_kart.c b/src/k_kart.c index 78db8ca9b..4c8d1c6eb 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -9028,6 +9028,7 @@ static void K_drawNameTags(void) UINT8 *cm; UINT8 *textcm; fixed_t distance = 0; + //fixed_t maxdistance = (cv_nametagdist.value*10)< Date: Sat, 17 Feb 2024 02:57:11 -0500 Subject: [PATCH 10/79] Nametags Rewrites --- src/d_main.c | 2 +- src/d_netcmd.c | 15 +++- src/d_netcmd.h | 1 + src/k_kart.c | 227 ++++++++++++++++++++++++------------------------- src/m_menu.c | 29 ++++++- src/v_video.c | 91 ++++++++++++++++++++ src/v_video.h | 1 + 7 files changed, 246 insertions(+), 120 deletions(-) diff --git a/src/d_main.c b/src/d_main.c index 206d6f47a..9e0ace719 100644 --- a/src/d_main.c +++ b/src/d_main.c @@ -1476,7 +1476,7 @@ void D_SRB2Main(void) statdp = true; // Nametag stuffs - if (W_CheckMultipleLumps("NTLINE", "NTLINEV", NULL)) + if (W_CheckMultipleLumps("NTLINE", "NTLINEV","NTSP","NTWH", NULL)) nametaggfx = true; } diff --git a/src/d_netcmd.c b/src/d_netcmd.c index 438b4eaed..98e51da4b 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -514,20 +514,26 @@ consvar_t cv_mute = {"mute", "Off", CV_NETVAR|CV_CALL, CV_OnOff, Mute_OnChange, consvar_t cv_sleep = {"cpusleep", "1", CV_SAVE, sleeping_cons_t, NULL, -1, NULL, NULL, 0, 0, NULL}; static CV_PossibleValue_t nametagtrans_cons_t[] = { - {0, "Never"}, {1, "Far only"}, {2, "Dynamic"}, {3, "Always"}, {0, NULL}}; + {0, "Never"}, {1, "Far only"}, {2, "Dynamic"}, {3, "Always"}, {4, "HUD Trans."}, {0, NULL}}; /*static CV_PossibleValue_t nametagscaling_cons_t[] = { {0, "MIN"}, {320, "MAX"}, {0, NULL}};*/ static CV_PossibleValue_t nametagdistance_cons_t[] = { {0, "MIN"}, {640, "MAX"}, {0, NULL}}; -consvar_t cv_nametag = {"kartnametag", "Off", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; +static CV_PossibleValue_t nametagsize_cons_t[] = { + {0, "Off"}, {1, "Small"}, {2, "Minimal"}, {0, NULL}}; +static CV_PossibleValue_t nametagrestat_cons_t[] = { + {0, "Off"}, {1, "Restat"}, {2, "Always"}, {0, NULL}}; + +consvar_t cv_nametag = {"kartnametag", "On", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_nametagtrans = {"nametagtransparency", "Dynamic", CV_SAVE, nametagtrans_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; -consvar_t cv_nametagfacerank = {"nametagfacerank", "On", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_nametagfacerank = {"nametagfacerank", "Off", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_nametagrestat = {"nametagrestat", "Restat", CV_SAVE, nametagrestat_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_nametagdist = {"nametagdist", "300", CV_SAVE, nametagdistance_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_nametagmaxplayers = {"nametagmaxplayers", "8", CV_SAVE, CV_Unsigned, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_nametagmaxlenght = {"nametagmaxlenght", "12", CV_SAVE, CV_Unsigned, NULL, 0, NULL, NULL, 0, 0, NULL}; //consvar_t cv_nametagscaling = {"nametagscaling", "160", CV_SAVE, nametagscaling_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_showownnametag = {"showownnametag", "Off", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; -consvar_t cv_smallnametags = {"smallnametags", "Off", CV_SAVE, CV_OnOff, Nametag_menu_Onchange, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_smallnametags = {"smallnametags", "Off", CV_SAVE, nametagsize_cons_t, Nametag_menu_Onchange, 0, NULL, NULL, 0, 0, NULL}; static CV_PossibleValue_t skinselectspin_cons_t[] = { {0, "Off"}, {1, "Slow"}, {2, "2"}, {3, "3"}, {4, "4"}, {5, "5"}, {6, "6"}, {7, "7"}, {8, "8"}, {9, "9"}, {10, "Fast"}, {SKINSELECTSPIN_PAIN, "Pain"}, {0, NULL}}; @@ -1129,6 +1135,7 @@ void D_RegisterClientCommands(void) CV_RegisterVar(&cv_nametagdist); CV_RegisterVar(&cv_showownnametag); CV_RegisterVar(&cv_smallnametags); + CV_RegisterVar(&cv_nametagrestat); CV_RegisterVar(&cv_perfstats); diff --git a/src/d_netcmd.h b/src/d_netcmd.h index 36e4766a8..64573e95d 100644 --- a/src/d_netcmd.h +++ b/src/d_netcmd.h @@ -182,6 +182,7 @@ extern consvar_t cv_nametagmaxlenght; extern consvar_t cv_nametagdist; extern consvar_t cv_showownnametag; extern consvar_t cv_smallnametags; +extern consvar_t cv_nametagrestat; #define SKINSELECTSPIN_PAIN 25 extern consvar_t cv_skinselectspin; diff --git a/src/k_kart.c b/src/k_kart.c index 4c8d1c6eb..a578b11e3 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -7024,6 +7024,8 @@ static patch_t *kp_lapanim_hand[3]; static patch_t *nametagpic; static patch_t *nametagline; +static patch_t *nametagspeed; +static patch_t *nametagweight; static patch_t *kp_yougotem; @@ -7116,6 +7118,9 @@ void K_LoadKartHUDGraphics(void) if (nametaggfx){ nametagpic = W_CachePatchName("NTLINE", PU_HUDGFX); nametagline = W_CachePatchName("NTLINEV", PU_HUDGFX); + nametagspeed = W_CachePatchName("NTSP", PU_HUDGFX); + nametagweight = W_CachePatchName("NTWH", PU_HUDGFX); + } // Starting countdown @@ -8908,7 +8913,7 @@ static void K_GenerateNametagTextColormap(void) //Shoutout to Lat for the ScreenCoords //With alot of edit because of god damn no-green-screen, fov, and render bullshit -static void K_GetNameTagPos(vector2_t *vec, player_t player, camera_t camera, float mx, float my, float mz) +static void K_GetNameTagPos(vector2_t *vec, player_t player, camera_t came, float mx, float my, float mz) { fixed_t camx, camy, camz, camangle, camaiming; fixed_t finalset; @@ -8927,12 +8932,12 @@ static void K_GetNameTagPos(vector2_t *vec, player_t player, camera_t camera, fl camangle = player.awayviewmobj->angle; camaiming = player.awayviewaiming; } - else if (camera.chase) { - camx = camera.x; - camy = camera.y; - camz = camera.z; - camangle = camera.angle; - camaiming = camera.aiming; + else if (came.chase) { + camx = came.x; + camy = came.y; + camz = came.z; + camangle = came.angle; + camaiming = came.aiming; } else { camx = player.mo->x; @@ -8974,27 +8979,15 @@ static void K_GetNameTagPos(vector2_t *vec, player_t player, camera_t camera, fl vec->x = x; } -typedef struct -{ - fixed_t dist; - UINT8 node; -} sortarray; - -static int nametagsort(const void* a, const void* b) -{ - const sortarray *a2 = (const sortarray*)a; - const sortarray *b2 = (const sortarray*)b; - return (a2->dist - b2->dist); -} - +//Slighty fixed by Alug and further rewritten by NepDisk static void K_drawNameTags(void) { - sortarray array[MAXPLAYERS]; - UINT8 i, j; + UINT8 i; INT32 trans = 0; vector2_t pos; fixed_t st; int smol = 0; + fixed_t posx,posy,pos2x,pos2y; if (!stplyr->mo || stplyr->spectator || splitscreen) return; @@ -9002,50 +8995,33 @@ static void K_drawNameTags(void) if (!nametagtxtcm[MAXSKINCOLORS-1]) K_GenerateNametagTextColormap(); - if (leveltime < starttime) - goto showownnametag; - if (cv_smallnametags.value) smol = (20<x - (stplyr->mo->x + stplyr->mo->momx), players[i].mo->y - (stplyr->mo->y + stplyr->mo->momy)); - array[i].dist = R_PointToDist(players[i].mo->x, players[i].mo->y); - array[i].node = i; - } - - // sort - qsort(array, MAXPLAYERS, sizeof(sortarray), nametagsort); - - for (j = MAXPLAYERS; j > 0; j--) { UINT8 *cm; UINT8 *textcm; fixed_t distance = 0; - //fixed_t maxdistance = (cv_nametagdist.value*10)< cv_nametagmaxplayers.value) + if ((i - MAXPLAYERS) > cv_nametagmaxplayers.value) return; - - i = array[j].node; - + if (i > PLAYERSMASK) continue; - if (i == displayplayers[0]) - continue; if (!players[i].mo || P_MobjWasRemoved(players[i].mo) || players[i].spectator || !playeringame[i]) continue; + if (i == displayplayers[0] && !cv_showownnametag.value && !(leveltime < 130)) + continue; + if (!(i == displayplayers[0]) && leveltime < starttime) + continue; if (players[i].kartstuff[k_hyudorotimer]) // player is invisible continue; - distance = array[j].dist; + distance = R_PointToDist(players[i].mo->x, players[i].mo->y); if (distance > maxdistance) continue; an = R_PointToAngle2(camera[0].x, camera[0].y, players[i].mo->x, players[i].mo->y) - camera[0].angle; @@ -9083,6 +9059,9 @@ static void K_drawNameTags(void) trans = 0; break; case 3: + trans = V_40TRANS; + break; + case 4: trans = V_HUDTRANS; break; default: @@ -9098,100 +9077,120 @@ static void K_drawNameTags(void) if (encoremode) pos.x = (320<eflags & MFE_VERTICALFLIP && !(players[i].pflags & PF_FLIPCAM)) + st = cv_smallnametags.value ? V_SmallStringWidth(player_names[i], V_ALLOWLOWERCASE) : V_ThinStringWidth(player_names[i], V_ALLOWLOWERCASE); + + if (cv_smallnametags.value == 2 || !nametaggfx) { - if (cv_smallnametags.value || !nametaggfx) - V_DrawSmallStringAtFixedCM(pos.x+(5<eflags & MFE_VERTICALFLIP && !(players[i].pflags & PF_FLIPCAM)) + posy = pos.y+(13<eflags & MFE_VERTICALFLIP && !(players[i].pflags & PF_FLIPCAM)) + { + posy = pos.y+smol; + pos2y = pos.y+(8<eflags & MFE_VERTICALFLIP && !(players[i].pflags & PF_FLIPCAM)) + { + + posy = pos.y-(3<mo->eflags & MFE_VERTICALFLIP && !(stplyr->pflags & PF_FLIPCAM)) - V_DrawFixedPatch(pos.x+((st+8)<eflags & MFE_VERTICALFLIP && !(players[i].pflags & PF_FLIPCAM)) + { + posx = pos.x+((st+8)<mo->x, stplyr->mo->y, stplyr->mo->z + stplyr->mo->height); - - pos.y -= stplyr->mo->height/2; - - if (encoremode) - pos.x = (320< starttime/2) - trans = V_60TRANS; - else if (leveltime > starttime/2.95) - trans = V_40TRANS; - else if (leveltime > starttime/1.8) - trans = V_20TRANS; - - UINT8 *cm = R_GetTranslationColormap(stplyr->skin, stplyr->mo->color, GTC_CACHE); - - st = V_ThinStringWidth(player_names[p], V_ALLOWLOWERCASE); - - if (cv_smallnametags.value || !nametaggfx) - V_DrawSmallStringAtFixedCM(pos.x+(5<mo->color]); + if (cv_smallnametags.value == 1 || cv_smallnametags.value == 2) + { + if ((cv_nametagrestat.value == 1 && (players[i].kartspeed != skins[players[i].skin].kartspeed || players[i].kartweight != skins[players[i].skin].kartweight)) || cv_nametagrestat.value == 2) + { + if (cv_smallnametags.value == 1) + { + posx = pos.x+(2<mo->color]); - } - - if ((!cv_smallnametags.value) && nametaggfx) - { - if (!cv_nametagfacerank.value) + { + + if ((cv_nametagrestat.value == 1 && (players[i].kartspeed != skins[players[i].skin].kartspeed || players[i].kartweight != skins[players[i].skin].kartweight)) || cv_nametagrestat.value == 2) { - V_DrawStretchyFixedPatch(pos.x+(6<skin], cm); + V_DrawStringAtFixedCM(pos.x+(13< 0 && interpTimerHackAllow) + coolalphatimer--; + } + } } static void M_DrawGenericBackgroundMenu(void) diff --git a/src/v_video.c b/src/v_video.c index 0d184df86..460f4622f 100644 --- a/src/v_video.c +++ b/src/v_video.c @@ -2226,6 +2226,97 @@ void V_DrawStringAtFixed(fixed_t x, fixed_t y, INT32 option, const char *string) } } +// Draws a string at a fixed_t location. +void V_DrawStringAtFixedCM(fixed_t x, fixed_t y, INT32 option, const char *string, UINT8* colormap) +{ + fixed_t cx = x, cy = y; + INT32 w, c, dupx, dupy, scrwidth, center = 0, left = 0; + const char *ch = string; + INT32 spacewidth = 4, charwidth = 0; + + INT32 lowercase = (option & V_ALLOWLOWERCASE); + option &= ~V_FLIP; // which is also shared with V_ALLOWLOWERCASE... + + if (option & V_NOSCALESTART) + { + dupx = vid.dupx; + dupy = vid.dupy; + scrwidth = vid.width; + } + else + { + dupx = dupy = 1; + scrwidth = vid.width/vid.dupx; + left = (scrwidth - BASEVIDWIDTH)/2; + scrwidth -= left; + } + + switch (option & V_SPACINGMASK) + { + case V_MONOSPACE: + spacewidth = 8; + /* FALLTHRU */ + case V_OLDSPACING: + charwidth = 8; + break; + case V_6WIDTHSPACE: + spacewidth = 6; + default: + break; + } + + for (;;ch++) + { + if (!*ch) + break; + if (*ch & 0x80) //color ignoring + continue; + if (*ch == '\n') + { + cx = x; + + if (option & V_RETURN8) + cy += (8*dupy)<= HU_FONTSIZE || !hu_font[c]) + { + cx += (spacewidth * dupx)<width)*(dupx/2); + } + else + w = SHORT(hu_font[c]->width) * dupx; + + if ((cx>>FRACBITS) > scrwidth) + break; + if ((cx>>FRACBITS)+left + w < 0) //left boundary check + { + cx += w< Date: Mon, 19 Feb 2024 00:44:07 +0100 Subject: [PATCH 11/79] Nametags Rewrites 2 contains netunsafe stuff but easy to remove --- src/d_main.c | 3 +- src/d_netcmd.c | 11 +- src/d_netcmd.h | 3 + src/k_kart.c | 453 ++++++++++++++++++++++++++++--------------------- src/m_menu.c | 13 +- 5 files changed, 285 insertions(+), 198 deletions(-) diff --git a/src/d_main.c b/src/d_main.c index 9e0ace719..e2b094ce6 100644 --- a/src/d_main.c +++ b/src/d_main.c @@ -1476,7 +1476,8 @@ void D_SRB2Main(void) statdp = true; // Nametag stuffs - if (W_CheckMultipleLumps("NTLINE", "NTLINEV","NTSP","NTWH", NULL)) + // Remove HP if you plan to use for vanilla-compat client + if (W_CheckMultipleLumps("NTLINE","NTLINEV","NTHP","NTSP","NTWH", NULL)) nametaggfx = true; } diff --git a/src/d_netcmd.c b/src/d_netcmd.c index 98e51da4b..84773b331 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -532,8 +532,11 @@ consvar_t cv_nametagdist = {"nametagdist", "300", CV_SAVE, nametagdistance_cons_ consvar_t cv_nametagmaxplayers = {"nametagmaxplayers", "8", CV_SAVE, CV_Unsigned, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_nametagmaxlenght = {"nametagmaxlenght", "12", CV_SAVE, CV_Unsigned, NULL, 0, NULL, NULL, 0, 0, NULL}; //consvar_t cv_nametagscaling = {"nametagscaling", "160", CV_SAVE, nametagscaling_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; -consvar_t cv_showownnametag = {"showownnametag", "Off", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; -consvar_t cv_smallnametags = {"smallnametags", "Off", CV_SAVE, nametagsize_cons_t, Nametag_menu_Onchange, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_showownnametag = {"nametagshowown", "Off", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_smallnametags = {"nametagsmall", "Off", CV_SAVE, nametagsize_cons_t, Nametag_menu_Onchange, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_nametaghop = {"nametaghop", "On", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_nametagscore = {"nametagscore", "Off", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_nametaghealth = {"nametaghealth", "Off", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; static CV_PossibleValue_t skinselectspin_cons_t[] = { {0, "Off"}, {1, "Slow"}, {2, "2"}, {3, "3"}, {4, "4"}, {5, "5"}, {6, "6"}, {7, "7"}, {8, "8"}, {9, "9"}, {10, "Fast"}, {SKINSELECTSPIN_PAIN, "Pain"}, {0, NULL}}; @@ -1136,6 +1139,10 @@ void D_RegisterClientCommands(void) CV_RegisterVar(&cv_showownnametag); CV_RegisterVar(&cv_smallnametags); CV_RegisterVar(&cv_nametagrestat); + CV_RegisterVar(&cv_nametaghop); + CV_RegisterVar(&cv_nametagscore); + // If you take this for a vanilla-compat client remove hpmod stuff. + CV_RegisterVar(&cv_nametaghealth); CV_RegisterVar(&cv_perfstats); diff --git a/src/d_netcmd.h b/src/d_netcmd.h index 64573e95d..d617d62d7 100644 --- a/src/d_netcmd.h +++ b/src/d_netcmd.h @@ -183,6 +183,9 @@ extern consvar_t cv_nametagdist; extern consvar_t cv_showownnametag; extern consvar_t cv_smallnametags; extern consvar_t cv_nametagrestat; +extern consvar_t cv_nametaghop; +extern consvar_t cv_nametagscore; +extern consvar_t cv_nametaghealth; #define SKINSELECTSPIN_PAIN 25 extern consvar_t cv_skinselectspin; diff --git a/src/k_kart.c b/src/k_kart.c index a578b11e3..9e58dc2ab 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -36,6 +36,12 @@ #include "lua_hook.h" // For MobjDamage and ShouldDamage #include "d_main.h" // found_extra_kart +#include "i_video.h" + +#ifdef HWRENDER +#include "hardware/hw_main.h" +#endif + // Hud offset cvars #define IMPL_HUD_OFFSET_X(name)\ consvar_t cv_##name##_xoffset = {"hud_" #name "_xoffset", "0", CV_SAVE, NULL, NULL, 0, NULL, NULL, 0, 0, NULL}; @@ -7026,6 +7032,8 @@ static patch_t *nametagpic; static patch_t *nametagline; static patch_t *nametagspeed; static patch_t *nametagweight; +// Remove Health if you plan to use for vanilla-compat client +static patch_t *nametaghealth; static patch_t *kp_yougotem; @@ -7115,11 +7123,14 @@ void K_LoadKartHUDGraphics(void) } // Nametags + // Remove Health if you plan to use for vanilla-compat client if (nametaggfx){ - nametagpic = W_CachePatchName("NTLINE", PU_HUDGFX); + + nametagpic = W_CachePatchName("NTLINE", PU_HUDGFX); nametagline = W_CachePatchName("NTLINEV", PU_HUDGFX); nametagspeed = W_CachePatchName("NTSP", PU_HUDGFX); nametagweight = W_CachePatchName("NTWH", PU_HUDGFX); + nametaghealth = W_CachePatchName("NTHP", PU_HUDGFX); } @@ -8887,123 +8898,153 @@ static void K_drawKartBumpersOrKarma(void) } } -static UINT8 *nametagtxtcm[MAXSKINCOLORS]; - -static void K_GenerateNametagTextColormap(void) +// converts mobj coordinates into screen coordinates +// NOTE: use with V_NOSCALESTART! +// Code updated in Lua by GenericHeroGuy for libSG +// Badly ported to C by NepDisk and acutally made to work and fixed by Indev!(Thanks so much!) +// original code by Lat' +static void K_GetScreenCoords(vector2_t *vec, player_t *player, camera_t *came, fixed_t mx, fixed_t my, fixed_t mz) { - INT32 i; - - for (i = 0; i < MAXSKINCOLORS && !nametagtxtcm[i]; i++) - { - nametagtxtcm[i] = Z_Malloc(121, PU_STATIC, NULL); - nametagtxtcm[i][31] = 31; - nametagtxtcm[i][120] = colortranslations[i][8]; - - // too dark - if (nametagtxtcm[i][120] > 20 && nametagtxtcm[i][120] <= 31) - nametagtxtcm[i][120] = 20; - else if (nametagtxtcm[i][120] > 107 && nametagtxtcm[i][120] <= 111) - nametagtxtcm[i][120] = 107; - else if (nametagtxtcm[i][120] > 235 && nametagtxtcm[i][120] <= 246) - nametagtxtcm[i][120] = 235; - } -} - -// \/ ported from the nametag addon with permission - -//Shoutout to Lat for the ScreenCoords -//With alot of edit because of god damn no-green-screen, fov, and render bullshit -static void K_GetNameTagPos(vector2_t *vec, player_t player, camera_t came, float mx, float my, float mz) -{ - fixed_t camx, camy, camz, camangle, camaiming; - fixed_t finalset; + fixed_t camx, camy, camz; + angle_t camangle, camaiming; fixed_t distfact; - fixed_t res; - fixed_t resfov; - fixed_t fovplz; - fixed_t adjustres; - fixed_t y; - angle_t x; + fixed_t dist; + fixed_t xres; + fixed_t yres; + fixed_t fov; + fixed_t fovratio; + fixed_t offset; + boolean srcflip; + long y; + long x; - if (player.awayviewtics) { - camx = player.awayviewmobj->x; - camy = player.awayviewmobj->y; - camz = player.awayviewmobj->z; - camangle = player.awayviewmobj->angle; - camaiming = player.awayviewaiming; + // In case of early return we can check if those are negative + vec->x = -1; + vec->y = -1; + + if (player->awayviewtics) { + camx = player->awayviewmobj->x; + camy = player->awayviewmobj->y; + camz = player->awayviewmobj->z; + camangle = player->awayviewmobj->angle; + camaiming = player->awayviewaiming; } - else if (came.chase) { - camx = came.x; - camy = came.y; - camz = came.z; - camangle = came.angle; - camaiming = came.aiming; + else if (came->chase) { + camx = came->x; + camy = came->y; + camz = came->z + (player->mo->eflags & MFE_VERTICALFLIP && came->height); + camangle = came->angle; + camaiming = came->aiming; } else { - camx = player.mo->x; - camy = player.mo->y; - camz = player.viewz-20*FRACUNIT; - camangle = player.mo->angle; - camaiming = player.aiming; + camx = player->mo->x; + camy = player->mo->y; + camz = player->viewz; + camangle = player->mo->angle; + camaiming = player->aiming; } - x = camangle-R_PointToAngle2(camx, camy, mx, my); + xres = vid.width<<(FRACBITS-1); + yres = vid.height<<(FRACBITS-1); + fov = FixedDiv(xres, FINETANGENT(((FixedAngle(cv_fov.value/2)+ANGLE_90)>>ANGLETOFINESHIFT) & 4095)); - res = (vid.width*100)/(vid.height); // we do a simple math - fovplz = (cv_fov.value/FRACUNIT)*res/90; //adding fov support, not everybody use 90 - resfov = (res*2)-fovplz; //more maths - adjustres = 0; //because square resolutions are motherfuckers - - if (res == fovplz) { - if (res < 160) //Square resolution - adjustres = 160-res; - else if (res > 160) //Wide Resolution - adjustres = res-160; - } - - finalset = (resfov)+(adjustres); //+(players[i].djust.value) - //tadaa, and we add the adjust command incase some resolution doesn't work + // X coordinate + // get difference between camangle and angle towards target + x = (INT32)camangle - (INT32)R_PointToAngle2(camx, camy, mx, my); distfact = FINECOSINE((x>>ANGLETOFINESHIFT) & FINEMASK); - if (!distfact) - distfact = 1; + if (!distfact) distfact = 1; - x = FixedMul(FINETANGENT(((x+ANGLE_90)>>ANGLETOFINESHIFT) & 4095), finalset< (fixed_t)ANGLE_90) + return; - y = camz-mz; - y = FixedDiv(y, FixedMul(distfact, R_PointToDist2(camx, camy, mx, my))); - y = (y*finalset)+(100<>ANGLETOFINESHIFT) & 4095)*finalset; + // flipping + srcflip = player->pflags & PF_FLIPCAM && player->mo->eflags & MFE_VERTICALFLIP; + + // Y coordinate + // getting the angle difference here is a bit more involved... + // start by getting the height difference between the camera and target + y = camz - mz; + + // then get the distance between camera and target + dist = R_PointToDist2(camx, camy, mx, my); + +#ifdef HWRENDER + // NOW we can get the angle differnce + if (rendermode == render_opengl && cv_grshearing.value == 0) + { + angle_t yang = R_PointToAngle2(0, 0, dist, y); // not perspective + x = FixedMul(x, FINECOSINE((yang>>ANGLETOFINESHIFT) & FINEMASK)); // perspective + y = -camaiming - FixedDiv(yang, distfact); + + //if ((fixed_t)y < ANGLE_270 || (fixed_t)y > ANGLE_90) // clip points behind the camera + // return; + if (splitscreen == 1) // multiply by 1.25 for 2P splitscreen + y = y + (y/4) ; + if (srcflip) // flipcam + y = -y; + + y = FixedMul(FINETANGENT((((angle_t)(-y)+ANGLE_90)>>ANGLETOFINESHIFT) & 4095), fov) + yres; // project the angle to get our final Y coordinate + } + else +#endif + { + fovratio = FixedDiv(90*FRACUNIT, 180*FRACUNIT - FixedMul(cv_fov.value, 4*FRACUNIT/3)-FRACUNIT*-30); + + y = FixedDiv(y, FixedMul(dist, distfact)); + if (srcflip) + y = -y; // flipcam + if (y != INT32_MIN) // I_Error(): FixedDiv: divide by zero + y = FixedMul(FixedDiv(y, fovratio), xres) + yres; + //else print("NOPE!") + + offset = FixedMul(FINETANGENT(((camaiming+ANGLE_90)>>ANGLETOFINESHIFT) & 4095), xres); + // this isn't fovtan... what am i even doing anymore + if (splitscreen == 1) + offset = 17*offset/10; + // OpenGL with software perspective is miscentered on non-16:10 resolutions +#ifdef HWRENDER + if (rendermode == render_opengl) + offset = FixedMul(offset, FixedDiv(104857, FixedDiv(xres, yres))); +#endif + // thanks fickle + offset = FixedDiv(offset, fovratio); + y = y + offset; + } + + // project the angle to get our final X coordinate + x = FixedMul(FINETANGENT(((x+ANGLE_90)>>ANGLETOFINESHIFT) & 4095), fov); + x = x + xres; vec->y = y; vec->x = x; } //Slighty fixed by Alug and further rewritten by NepDisk +//Decided to port and highly modify sunflower version for the main nametag drawing with additions by NepDisk. My previous one was broken anyway due to the changed screencoords and noscalestart static void K_drawNameTags(void) { - UINT8 i; + UINT8 i,j; INT32 trans = 0; - vector2_t pos; - fixed_t st; - int smol = 0; - fixed_t posx,posy,pos2x,pos2y; + vector2_t pos = {0}; + fixed_t tagwidth; + fixed_t tagwidthsmall; + fixed_t namex,namey; + int dup = 0; + int tagcolor = 0; + int vflags = 0; + int flipped = 0; + char *tag; + patch_t *icon; if (!stplyr->mo || stplyr->spectator || splitscreen) return; - if (!nametagtxtcm[MAXSKINCOLORS-1]) - K_GenerateNametagTextColormap(); - - if (cv_smallnametags.value) - smol = (20<mo)) continue; - cm = R_GetTranslationColormap(players[i].skin, players[i].mo->color, GTC_CACHE); - textcm = nametagtxtcm[players[i].mo->color]; - switch (cv_nametagtrans.value) { case 0: @@ -9068,129 +9106,158 @@ static void K_drawNameTags(void) break; } - K_GetNameTagPos(&pos, *stplyr, camera[0], players[i].mo->x, players[i].mo->y, players[i].mo->z + players[i].mo->height); - - pos.y -= players[i].mo->height/2; + dup = vid.dupx; + + K_GetScreenCoords(&pos, stplyr, camera, players[i].mo->x, players[i].mo->y, players[i].mo->z + players[i].mo->height); + + //Flipcam off if (players[i].mo->eflags & MFE_VERTICALFLIP && !(players[i].pflags & PF_FLIPCAM)) pos.y += players[i].mo->height; - - if (encoremode) - pos.x = (320<eflags & MFE_VERTICALFLIP && (players[i].pflags & PF_FLIPCAM)) + pos.y -= ((30*dup)<eflags & MFE_VERTICALFLIP && !(players[i].pflags & PF_FLIPCAM)) + flipped = players[i].mo->eflags & MFE_VERTICALFLIP && !(players[i].pflags & PF_FLIPCAM); + + //Saltyhop hehe + if (cv_saltyhop.value && cv_nametaghop.value) + pos.y -= flipped ? -players[i].mo->spriteyoffset : players[i].mo->spriteyoffset; + + namex = pos.x>>FRACBITS; + namey = pos.y>>FRACBITS; + + tag = va("%s%s ", HU_SkinColorToConsoleColor(players[i].mo->color),player_names[i]); + icon = R_GetSkinFaceMini(players[i].mo->player); + + cm = R_GetTranslationColormap(players[i].skin, players[i].mo->color, GTC_CACHE); + tagcolor = colortranslations[players[i].mo->color][7]; + vflags = trans | V_NOSCALESTART; + tagwidth = cv_smallnametags.value ? dup*V_SmallStringWidth(player_names[i], V_ALLOWLOWERCASE) : dup*V_ThinStringWidth(player_names[i], V_ALLOWLOWERCASE); + tagwidthsmall = cv_smallnametags.value ? V_SmallStringWidth(player_names[i], V_ALLOWLOWERCASE) : V_ThinStringWidth(player_names[i], V_ALLOWLOWERCASE); + + if (cv_smallnametags.value == 2 || cv_smallnametags.value == 1 || !nametaggfx) { - if (players[i].mo->eflags & MFE_VERTICALFLIP && !(players[i].pflags & PF_FLIPCAM)) - posy = pos.y+(13<width - dup; - posx = pos.x+(5<eflags & MFE_VERTICALFLIP && !(players[i].pflags & PF_FLIPCAM)) - { - posy = pos.y+smol; - pos2y = pos.y+(8<height/2)<width/2); // add offset to other stuff } - posx = pos.x; - pos2x = pos.x+(2<eflags & MFE_VERTICALFLIP && !(players[i].pflags & PF_FLIPCAM)) + if (cv_nametagfacerank.value) + tagwidth += dup*(icon->width+1); + + if (flipped) { - - posy = pos.y-(3<eflags & MFE_VERTICALFLIP && !(players[i].pflags & PF_FLIPCAM)) + for (j = 0; j < 4; j++) { - posx = pos.x+((st+8)<height+1), vflags, icon, cm); + namex += dup*(icon->height+1); // add offset to other stuff + } + + V_DrawThinString(namex, namey - dup*10, V_ALLOWLOWERCASE | vflags, tag); + + // If you take this for a vanilla-compat client remove hpmod stuff. + if (cv_nametaghealth.value && players[i].kartstuff[k_hphealth]) { - V_DrawStringAtFixedCM(pos.x+(13< Date: Mon, 19 Feb 2024 01:02:39 +0100 Subject: [PATCH 12/79] remove hpmod stuffs since its not netsafe --- src/d_main.c | 3 +-- src/d_netcmd.c | 4 ---- src/d_netcmd.h | 1 - src/k_kart.c | 63 ++++++++++++++++++-------------------------------- src/m_menu.c | 7 ++---- 5 files changed, 26 insertions(+), 52 deletions(-) diff --git a/src/d_main.c b/src/d_main.c index e2b094ce6..05116ca27 100644 --- a/src/d_main.c +++ b/src/d_main.c @@ -1476,8 +1476,7 @@ void D_SRB2Main(void) statdp = true; // Nametag stuffs - // Remove HP if you plan to use for vanilla-compat client - if (W_CheckMultipleLumps("NTLINE","NTLINEV","NTHP","NTSP","NTWH", NULL)) + if (W_CheckMultipleLumps("NTLINE", "NTLINEV", "NTSP", "NTWH", NULL)) nametaggfx = true; } diff --git a/src/d_netcmd.c b/src/d_netcmd.c index 84773b331..98101777c 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -536,7 +536,6 @@ consvar_t cv_showownnametag = {"nametagshowown", "Off", CV_SAVE, CV_OnOff, NULL, consvar_t cv_smallnametags = {"nametagsmall", "Off", CV_SAVE, nametagsize_cons_t, Nametag_menu_Onchange, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_nametaghop = {"nametaghop", "On", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_nametagscore = {"nametagscore", "Off", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; -consvar_t cv_nametaghealth = {"nametaghealth", "Off", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; static CV_PossibleValue_t skinselectspin_cons_t[] = { {0, "Off"}, {1, "Slow"}, {2, "2"}, {3, "3"}, {4, "4"}, {5, "5"}, {6, "6"}, {7, "7"}, {8, "8"}, {9, "9"}, {10, "Fast"}, {SKINSELECTSPIN_PAIN, "Pain"}, {0, NULL}}; @@ -1141,9 +1140,6 @@ void D_RegisterClientCommands(void) CV_RegisterVar(&cv_nametagrestat); CV_RegisterVar(&cv_nametaghop); CV_RegisterVar(&cv_nametagscore); - // If you take this for a vanilla-compat client remove hpmod stuff. - CV_RegisterVar(&cv_nametaghealth); - CV_RegisterVar(&cv_perfstats); CV_RegisterVar(&cv_ps_thinkframe_page); diff --git a/src/d_netcmd.h b/src/d_netcmd.h index d617d62d7..1e0a7a847 100644 --- a/src/d_netcmd.h +++ b/src/d_netcmd.h @@ -185,7 +185,6 @@ extern consvar_t cv_smallnametags; extern consvar_t cv_nametagrestat; extern consvar_t cv_nametaghop; extern consvar_t cv_nametagscore; -extern consvar_t cv_nametaghealth; #define SKINSELECTSPIN_PAIN 25 extern consvar_t cv_skinselectspin; diff --git a/src/k_kart.c b/src/k_kart.c index 9e58dc2ab..ebb046192 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -9051,7 +9051,7 @@ static void K_drawNameTags(void) if ((i - MAXPLAYERS) > cv_nametagmaxplayers.value) return; - + if (i > PLAYERSMASK) continue; if (!players[i].mo || P_MobjWasRemoved(players[i].mo) || players[i].spectator || !playeringame[i]) @@ -9107,45 +9107,44 @@ static void K_drawNameTags(void) } dup = vid.dupx; - + K_GetScreenCoords(&pos, stplyr, camera, players[i].mo->x, players[i].mo->y, players[i].mo->z + players[i].mo->height); - + //Flipcam off if (players[i].mo->eflags & MFE_VERTICALFLIP && !(players[i].pflags & PF_FLIPCAM)) pos.y += players[i].mo->height; - + //Flipcam on if (players[i].mo->eflags & MFE_VERTICALFLIP && (players[i].pflags & PF_FLIPCAM)) pos.y -= ((30*dup)<eflags & MFE_VERTICALFLIP && !(players[i].pflags & PF_FLIPCAM)) flipped = players[i].mo->eflags & MFE_VERTICALFLIP && !(players[i].pflags & PF_FLIPCAM); - + //Saltyhop hehe if (cv_saltyhop.value && cv_nametaghop.value) pos.y -= flipped ? -players[i].mo->spriteyoffset : players[i].mo->spriteyoffset; - + namex = pos.x>>FRACBITS; namey = pos.y>>FRACBITS; - + tag = va("%s%s ", HU_SkinColorToConsoleColor(players[i].mo->color),player_names[i]); icon = R_GetSkinFaceMini(players[i].mo->player); - + cm = R_GetTranslationColormap(players[i].skin, players[i].mo->color, GTC_CACHE); tagcolor = colortranslations[players[i].mo->color][7]; vflags = trans | V_NOSCALESTART; tagwidth = cv_smallnametags.value ? dup*V_SmallStringWidth(player_names[i], V_ALLOWLOWERCASE) : dup*V_ThinStringWidth(player_names[i], V_ALLOWLOWERCASE); tagwidthsmall = cv_smallnametags.value ? V_SmallStringWidth(player_names[i], V_ALLOWLOWERCASE) : V_ThinStringWidth(player_names[i], V_ALLOWLOWERCASE); - + if (cv_smallnametags.value == 2 || cv_smallnametags.value == 1 || !nametaggfx) { - if (flipped) namey += dup*5; else // small offset namey -= dup*3; - + if (nametaggfx && cv_smallnametags.value == 1) { if (cv_nametagfacerank.value) @@ -9160,42 +9159,35 @@ static void K_drawNameTags(void) namex += dup*2; namey -= dup*4; } - + if (cv_nametagfacerank.value) { V_DrawFixedPatch(namex<height/2)<width/2); // add offset to other stuff } - + //Name V_DrawSmallString(namex, namey, V_ALLOWLOWERCASE | vflags, tag); - - // If you take this for a vanilla-compat client remove hpmod stuff. - if (cv_nametaghealth.value && players[i].kartstuff[k_hphealth]) - V_DrawSmallString(namex, namey - dup*5, vflags, va("\x8D%d ", players[i].kartstuff[k_hphealth])); - - //If you take this for a vanilla-compat client remove the hp check. - if (((cv_nametagrestat.value == 1 && (players[i].kartspeed != skins[players[i].skin].kartspeed || players[i].kartweight != skins[players[i].skin].kartweight)) || cv_nametagrestat.value == 2) && !(cv_nametaghealth.value && players[i].kartstuff[k_hphealth])) + + if ((cv_nametagrestat.value == 1 && (players[i].kartspeed != skins[players[i].skin].kartspeed || players[i].kartweight != skins[players[i].skin].kartweight)) || cv_nametagrestat.value == 2) { V_DrawSmallString(namex, namey - dup*5, vflags, va("\x84S%d ", players[i].kartspeed)); V_DrawSmallString(namex + dup+40, namey - dup*5, vflags, va("\x87W%d ", players[i].kartweight)); } - //If you take this for a vanilla-compat client remove the hp check. if (cv_nametagscore.value) { - if ((cv_nametagrestat.value == 1 && (players[i].kartspeed != skins[players[i].skin].kartspeed || players[i].kartweight != skins[players[i].skin].kartweight)) || cv_nametagrestat.value == 2 || (cv_nametaghealth.value && players[i].kartstuff[k_hphealth])) + if ((cv_nametagrestat.value == 1 && (players[i].kartspeed != skins[players[i].skin].kartspeed || players[i].kartweight != skins[players[i].skin].kartweight)) || cv_nametagrestat.value == 2) V_DrawSmallString(namex, namey - dup*10, V_ALLOWLOWERCASE | vflags, va("\x8A%d ", players[i].score)); else V_DrawSmallString(namex, namey - dup*5, V_ALLOWLOWERCASE | vflags, va("\x8A%d ", players[i].score)); } - } else { if (cv_nametagfacerank.value) tagwidth += dup*(icon->width+1); - + if (flipped) { for (j = 0; j < 4; j++) @@ -9224,35 +9216,26 @@ static void K_drawNameTags(void) V_DrawFill(namex+dup, namey, tagwidth - dup*2, dup*3, 31 | vflags); V_DrawFill(namex+dup, namey+dup, tagwidth - dup*3, dup, tagcolor | vflags); } - + if (cv_nametagfacerank.value) { V_DrawMappedPatch(namex, namey - dup*(icon->height+1), vflags, icon, cm); namex += dup*(icon->height+1); // add offset to other stuff } - + V_DrawThinString(namex, namey - dup*10, V_ALLOWLOWERCASE | vflags, tag); - - // If you take this for a vanilla-compat client remove hpmod stuff. - if (cv_nametaghealth.value && players[i].kartstuff[k_hphealth]) - { - V_DrawScaledPatch(namex, namey - dup*20, vflags, nametaghealth); - V_DrawString(namex + dup*10, namey - dup*19, vflags, va("\x8D%d ", players[i].kartstuff[k_hphealth])); - } - - //If you take this for a vanilla-compat client remove the hp check. - if (((cv_nametagrestat.value == 1 && (players[i].kartspeed != skins[players[i].skin].kartspeed || players[i].kartweight != skins[players[i].skin].kartweight)) || cv_nametagrestat.value == 2) && !(cv_nametaghealth.value && players[i].kartstuff[k_hphealth])) + + if ((cv_nametagrestat.value == 1 && (players[i].kartspeed != skins[players[i].skin].kartspeed || players[i].kartweight != skins[players[i].skin].kartweight)) || cv_nametagrestat.value == 2) { V_DrawScaledPatch(namex, namey - dup*20, vflags, nametagspeed); V_DrawScaledPatch(namex + dup*18, namey - dup*20, vflags, nametagweight); V_DrawString(namex + dup*9, namey - dup*19, V_ALLOWLOWERCASE | vflags, va("\x84%d ", players[i].kartspeed)); V_DrawString(namex + dup*27, namey - dup*19, V_ALLOWLOWERCASE | vflags, va("\x87%d ", players[i].kartweight)); } - - //If you take this for a vanilla-compat client remove the hp check. + if (cv_nametagscore.value) { - if ((cv_nametagrestat.value == 1 && (players[i].kartspeed != skins[players[i].skin].kartspeed || players[i].kartweight != skins[players[i].skin].kartweight)) || cv_nametagrestat.value == 2 || (cv_nametaghealth.value && players[i].kartstuff[k_hphealth])) + if ((cv_nametagrestat.value == 1 && (players[i].kartspeed != skins[players[i].skin].kartspeed || players[i].kartweight != skins[players[i].skin].kartweight)) || cv_nametagrestat.value == 2) V_DrawSmallString(namex, namey - dup*25, V_ALLOWLOWERCASE | vflags, va("\x8A%d ", players[i].score)); else V_DrawSmallString(namex, namey - dup*15, V_ALLOWLOWERCASE | vflags, va("\x8A%d ", players[i].score)); diff --git a/src/m_menu.c b/src/m_menu.c index 878f701c2..5a7018d44 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -2313,9 +2313,8 @@ static menuitem_t OP_NametagMenu[] = {IT_STRING | IT_CVAR, NULL, "Nametag Transparency", &cv_nametagtrans, 60}, {IT_STRING | IT_CVAR, NULL, "Nametag Score", &cv_nametagscore, 70}, {IT_STRING | IT_CVAR, NULL, "Nametag Restat", &cv_nametagrestat, 80}, - {IT_STRING | IT_CVAR, NULL, "Nametag Health", &cv_nametaghealth, 90}, - {IT_STRING | IT_CVAR, NULL, "Nametag Hop", &cv_nametaghop, 100}, - {IT_STRING | IT_CVAR, NULL, "Small Nametags", &cv_smallnametags, 110}, + {IT_STRING | IT_CVAR, NULL, "Nametag Hop", &cv_nametaghop, 90}, + {IT_STRING | IT_CVAR, NULL, "Small Nametags", &cv_smallnametags, 100}, //{IT_STRING | IT_CVAR, NULL, "Nametag Scaling", &cv_nametagscaling, 70} }; @@ -2330,7 +2329,6 @@ static const char* OP_NametagTooltips[] = "Transparency of nametags.", "Show player score in nametag.", "Show stats in nametags.", - "Show health in nametags if used by script.", "Enable Saltyhop support for nametags.", "Alternative smaller nametags.", }; @@ -2346,7 +2344,6 @@ enum nt_nttrans, nt_ntpscore, nt_ntrestat, - nt_nthealth, nt_nthop, nt_smol, }; -- 2.54.0 From 9332f8473de1c3503b332cf7640981e63434d906 Mon Sep 17 00:00:00 2001 From: Alug Date: Mon, 19 Feb 2024 01:57:04 +0100 Subject: [PATCH 13/79] forgor --- src/k_kart.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index ebb046192..09646c545 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -7032,8 +7032,6 @@ static patch_t *nametagpic; static patch_t *nametagline; static patch_t *nametagspeed; static patch_t *nametagweight; -// Remove Health if you plan to use for vanilla-compat client -static patch_t *nametaghealth; static patch_t *kp_yougotem; @@ -7123,15 +7121,13 @@ void K_LoadKartHUDGraphics(void) } // Nametags - // Remove Health if you plan to use for vanilla-compat client - if (nametaggfx){ + if (nametaggfx) + { nametagpic = W_CachePatchName("NTLINE", PU_HUDGFX); nametagline = W_CachePatchName("NTLINEV", PU_HUDGFX); nametagspeed = W_CachePatchName("NTSP", PU_HUDGFX); nametagweight = W_CachePatchName("NTWH", PU_HUDGFX); - nametaghealth = W_CachePatchName("NTHP", PU_HUDGFX); - } // Starting countdown -- 2.54.0 From 0d80de55ad12a32cca5246227b7e6be88172d518 Mon Sep 17 00:00:00 2001 From: Alug Date: Mon, 19 Feb 2024 11:12:26 +0100 Subject: [PATCH 14/79] Fix nametag limit --- src/k_kart.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index 09646c545..66da6569f 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -9032,6 +9032,7 @@ static void K_drawNameTags(void) int tagcolor = 0; int vflags = 0; int flipped = 0; + int tagsdisplayed = 0; char *tag; patch_t *icon; @@ -9044,10 +9045,7 @@ static void K_drawNameTags(void) fixed_t distance = 0; fixed_t maxdistance = (10*cv_nametagdist.value)* mapobjectscale; angle_t an; - - if ((i - MAXPLAYERS) > cv_nametagmaxplayers.value) - return; - + if (i > PLAYERSMASK) continue; if (!players[i].mo || P_MobjWasRemoved(players[i].mo) || players[i].spectator || !playeringame[i]) @@ -9066,6 +9064,11 @@ static void K_drawNameTags(void) continue; // behind back if (!P_CheckSight(players[i].mo, stplyr->mo)) continue; + + tagsdisplayed += 1; + + if (tagsdisplayed > cv_nametagmaxplayers.value) + break; switch (cv_nametagtrans.value) { -- 2.54.0 From 957a49248e8e80b309e1b8033eea840e82a1d94e Mon Sep 17 00:00:00 2001 From: NepDisk Date: Mon, 19 Feb 2024 00:04:58 -0500 Subject: [PATCH 15/79] Fix nametag weight offset for small and minimal --- src/k_kart.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/k_kart.c b/src/k_kart.c index 66da6569f..b1462952e 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -9171,7 +9171,7 @@ static void K_drawNameTags(void) if ((cv_nametagrestat.value == 1 && (players[i].kartspeed != skins[players[i].skin].kartspeed || players[i].kartweight != skins[players[i].skin].kartweight)) || cv_nametagrestat.value == 2) { V_DrawSmallString(namex, namey - dup*5, vflags, va("\x84S%d ", players[i].kartspeed)); - V_DrawSmallString(namex + dup+40, namey - dup*5, vflags, va("\x87W%d ", players[i].kartweight)); + V_DrawSmallString(namex + dup*10, namey - dup*5, vflags, va("\x87W%d ", players[i].kartweight)); } if (cv_nametagscore.value) -- 2.54.0 From 8e2b20891285abc65ec5a7998900403b8e54b2e0 Mon Sep 17 00:00:00 2001 From: NepDisk Date: Mon, 19 Feb 2024 00:09:47 -0500 Subject: [PATCH 16/79] Remove unused functions that were originally added for nametags --- src/v_video.c | 265 -------------------------------------------------- src/v_video.h | 3 - 2 files changed, 268 deletions(-) diff --git a/src/v_video.c b/src/v_video.c index 460f4622f..c2c05b976 100644 --- a/src/v_video.c +++ b/src/v_video.c @@ -2226,97 +2226,6 @@ void V_DrawStringAtFixed(fixed_t x, fixed_t y, INT32 option, const char *string) } } -// Draws a string at a fixed_t location. -void V_DrawStringAtFixedCM(fixed_t x, fixed_t y, INT32 option, const char *string, UINT8* colormap) -{ - fixed_t cx = x, cy = y; - INT32 w, c, dupx, dupy, scrwidth, center = 0, left = 0; - const char *ch = string; - INT32 spacewidth = 4, charwidth = 0; - - INT32 lowercase = (option & V_ALLOWLOWERCASE); - option &= ~V_FLIP; // which is also shared with V_ALLOWLOWERCASE... - - if (option & V_NOSCALESTART) - { - dupx = vid.dupx; - dupy = vid.dupy; - scrwidth = vid.width; - } - else - { - dupx = dupy = 1; - scrwidth = vid.width/vid.dupx; - left = (scrwidth - BASEVIDWIDTH)/2; - scrwidth -= left; - } - - switch (option & V_SPACINGMASK) - { - case V_MONOSPACE: - spacewidth = 8; - /* FALLTHRU */ - case V_OLDSPACING: - charwidth = 8; - break; - case V_6WIDTHSPACE: - spacewidth = 6; - default: - break; - } - - for (;;ch++) - { - if (!*ch) - break; - if (*ch & 0x80) //color ignoring - continue; - if (*ch == '\n') - { - cx = x; - - if (option & V_RETURN8) - cy += (8*dupy)<= HU_FONTSIZE || !hu_font[c]) - { - cx += (spacewidth * dupx)<width)*(dupx/2); - } - else - w = SHORT(hu_font[c]->width) * dupx; - - if ((cx>>FRACBITS) > scrwidth) - break; - if ((cx>>FRACBITS)+left + w < 0) //left boundary check - { - cx += w<= HU_FONTSIZE || !hu_font[c]) - { - cx += (spacewidth * dupx)<width*(dupx/4); - } - else - w = hu_font[c]->width * dupx / 2; - if ((cx>>FRACBITS) > scrwidth) - break; - if ((cx>>FRACBITS)+left + w < 0) //left boundary check - { - cx += w<= HU_FONTSIZE || !tny_font[c]) - { - cx += (spacewidth * dupx)<width)*(dupx/2); - } - else - w = SHORT(tny_font[c]->width) * dupx; - - if ((cx>>FRACBITS) > scrwidth) - break; - if ((cx>>FRACBITS)+left + w < 0) //left boundary check - { - cx += w< Date: Mon, 19 Feb 2024 19:02:54 +0100 Subject: [PATCH 17/79] add max cap to nametagmaxplayers --- src/d_netcmd.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/d_netcmd.c b/src/d_netcmd.c index 98101777c..e51e0378a 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -519,6 +519,8 @@ static CV_PossibleValue_t nametagtrans_cons_t[] = { {0, "MIN"}, {320, "MAX"}, {0, NULL}};*/ static CV_PossibleValue_t nametagdistance_cons_t[] = { {0, "MIN"}, {640, "MAX"}, {0, NULL}}; +static CV_PossibleValue_t nametagmaxplayer_cons_t[] = { + {1, "MIN"}, {MAXPLAYERS, "MAX"}, {0, NULL}}; static CV_PossibleValue_t nametagsize_cons_t[] = { {0, "Off"}, {1, "Small"}, {2, "Minimal"}, {0, NULL}}; static CV_PossibleValue_t nametagrestat_cons_t[] = { @@ -529,7 +531,7 @@ consvar_t cv_nametagtrans = {"nametagtransparency", "Dynamic", CV_SAVE, nametagt consvar_t cv_nametagfacerank = {"nametagfacerank", "Off", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_nametagrestat = {"nametagrestat", "Restat", CV_SAVE, nametagrestat_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_nametagdist = {"nametagdist", "300", CV_SAVE, nametagdistance_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; -consvar_t cv_nametagmaxplayers = {"nametagmaxplayers", "8", CV_SAVE, CV_Unsigned, NULL, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_nametagmaxplayers = {"nametagmaxplayers", "3", CV_SAVE, nametagmaxplayer_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_nametagmaxlenght = {"nametagmaxlenght", "12", CV_SAVE, CV_Unsigned, NULL, 0, NULL, NULL, 0, 0, NULL}; //consvar_t cv_nametagscaling = {"nametagscaling", "160", CV_SAVE, nametagscaling_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_showownnametag = {"nametagshowown", "Off", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; -- 2.54.0 From 23ad0746f1fe70e882f64ec95425947cc17db556 Mon Sep 17 00:00:00 2001 From: NepDisk Date: Sat, 17 Feb 2024 04:07:46 -0500 Subject: [PATCH 18/79] Nametag sightofline fix --- src/k_kart.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/k_kart.c b/src/k_kart.c index b1462952e..a992b6899 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -9062,7 +9062,7 @@ static void K_drawNameTags(void) an = R_PointToAngle2(camera[0].x, camera[0].y, players[i].mo->x, players[i].mo->y) - camera[0].angle; if (an > ANGLE_90 && an < ANGLE_270) continue; // behind back - if (!P_CheckSight(players[i].mo, stplyr->mo)) + if (!P_CheckSight(stplyr->mo, players[i].mo)) continue; tagsdisplayed += 1; -- 2.54.0 From 5b850f1b493dc0e81cd74e8fe9045a0b52fd511e Mon Sep 17 00:00:00 2001 From: Alug Date: Sat, 24 Feb 2024 15:33:50 +0100 Subject: [PATCH 19/79] fix nametag rendering bug --- src/k_kart.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index a992b6899..1b083652c 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -9059,9 +9059,6 @@ static void K_drawNameTags(void) distance = R_PointToDist(players[i].mo->x, players[i].mo->y); if (distance > maxdistance) continue; - an = R_PointToAngle2(camera[0].x, camera[0].y, players[i].mo->x, players[i].mo->y) - camera[0].angle; - if (an > ANGLE_90 && an < ANGLE_270) - continue; // behind back if (!P_CheckSight(stplyr->mo, players[i].mo)) continue; @@ -9108,7 +9105,11 @@ static void K_drawNameTags(void) dup = vid.dupx; K_GetScreenCoords(&pos, stplyr, camera, players[i].mo->x, players[i].mo->y, players[i].mo->z + players[i].mo->height); - + + //Check for negative screencoords + if (pos.x == -1 || pos.y == -1) + continue; + //Flipcam off if (players[i].mo->eflags & MFE_VERTICALFLIP && !(players[i].pflags & PF_FLIPCAM)) pos.y += players[i].mo->height; -- 2.54.0 From d10fb3fb6af4642418e52bdbf09f570051f6dec6 Mon Sep 17 00:00:00 2001 From: Alug Date: Sat, 24 Feb 2024 15:34:11 +0100 Subject: [PATCH 20/79] rename all of those to not conflict with mods --- src/d_netcmd.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/d_netcmd.c b/src/d_netcmd.c index e51e0378a..607aca336 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -527,17 +527,17 @@ static CV_PossibleValue_t nametagrestat_cons_t[] = { {0, "Off"}, {1, "Restat"}, {2, "Always"}, {0, NULL}}; consvar_t cv_nametag = {"kartnametag", "On", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; -consvar_t cv_nametagtrans = {"nametagtransparency", "Dynamic", CV_SAVE, nametagtrans_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; -consvar_t cv_nametagfacerank = {"nametagfacerank", "Off", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; -consvar_t cv_nametagrestat = {"nametagrestat", "Restat", CV_SAVE, nametagrestat_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; -consvar_t cv_nametagdist = {"nametagdist", "300", CV_SAVE, nametagdistance_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; -consvar_t cv_nametagmaxplayers = {"nametagmaxplayers", "3", CV_SAVE, nametagmaxplayer_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; -consvar_t cv_nametagmaxlenght = {"nametagmaxlenght", "12", CV_SAVE, CV_Unsigned, NULL, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_nametagtrans = {"kartnametagtransparency", "Dynamic", CV_SAVE, nametagtrans_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_nametagfacerank = {"kartnametagfacerank", "Off", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_nametagrestat = {"kartnametagrestat", "Restat", CV_SAVE, nametagrestat_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_nametagdist = {"kartnametagdist", "320", CV_SAVE, nametagdistance_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_nametagmaxplayers = {"kartnametagmaxplayers", "3", CV_SAVE, nametagmaxplayer_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_nametagmaxlenght = {"kartnametagmaxlenght", "12", CV_SAVE, CV_Unsigned, NULL, 0, NULL, NULL, 0, 0, NULL}; //consvar_t cv_nametagscaling = {"nametagscaling", "160", CV_SAVE, nametagscaling_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; -consvar_t cv_showownnametag = {"nametagshowown", "Off", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; -consvar_t cv_smallnametags = {"nametagsmall", "Off", CV_SAVE, nametagsize_cons_t, Nametag_menu_Onchange, 0, NULL, NULL, 0, 0, NULL}; -consvar_t cv_nametaghop = {"nametaghop", "On", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; -consvar_t cv_nametagscore = {"nametagscore", "Off", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_showownnametag = {"kartnametagshowown", "Off", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_smallnametags = {"kartnametagsmall", "Off", CV_SAVE, nametagsize_cons_t, Nametag_menu_Onchange, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_nametaghop = {"kartnametaghop", "On", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_nametagscore = {"kartnametagscore", "Off", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; static CV_PossibleValue_t skinselectspin_cons_t[] = { {0, "Off"}, {1, "Slow"}, {2, "2"}, {3, "3"}, {4, "4"}, {5, "5"}, {6, "6"}, {7, "7"}, {8, "8"}, {9, "9"}, {10, "Fast"}, {SKINSELECTSPIN_PAIN, "Pain"}, {0, NULL}}; -- 2.54.0 From c9cafeefe7ffdb565d1d1c38f3f4d44d154158df Mon Sep 17 00:00:00 2001 From: Alug Date: Sat, 24 Feb 2024 15:35:49 +0100 Subject: [PATCH 21/79] fixeur conflicts i was too lazy too fix lol --- src/m_menu.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/m_menu.c b/src/m_menu.c index 8344ba502..350f510d6 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -1968,8 +1968,6 @@ static menuitem_t OP_SaturnMenu[] = {IT_STRING | IT_CVAR, NULL, "Show Localskin Menus", &cv_showlocalskinmenus, 85}, {IT_STRING | IT_SUBMENU, NULL, "Nametags...", &OP_NametagDef, 90}, - {IT_STRING | IT_CVAR, NULL, "Native keyboard layout", &cv_nativekeyboard, 95}, - {IT_STRING | IT_CVAR, NULL, "Less Midnight Channel Flicker", &cv_lessflicker, 105}, {IT_SUBMENU|IT_STRING, NULL, "Sprite Distortion...", &OP_PlayerDistortDef, 115}, @@ -1996,7 +1994,6 @@ static const char* OP_SaturnTooltips[] = "Show the big Cecho Messages.", "Show Localskin Menus.", "Nametag Options.", - "Use your native Keyboard Layout.", "Disables the flicker effect on Midnight Channel.", "Options for sprite distortion effects.", "Move position of HUD elements.", @@ -2021,7 +2018,6 @@ enum sm_cechotogle, sm_showlocalskin, sm_nametagmen, - sm_nativkey, sm_pisschannel, sm_distortionmenu, sm_hudoffsets, @@ -5032,7 +5028,7 @@ static void M_DrawGenericMenu(void) { if (!(OP_NametagTooltips[itemOn] == NULL)) { - M_DrawSplitText(BASEVIDWIDTH / 2, BASEVIDHEIGHT-50, V_ALLOWLOWERCASE|V_SNAPTOBOTTOM, OP_NametagTooltips[itemOn], coolalphatimer); + M_DrawSplitText(BASEVIDWIDTH / 2, BASEVIDHEIGHT-50, V_ALLOWLOWERCASE|V_SNAPTOBOTTOM, OP_NametagTooltips[itemOn], 30, coolalphatimer); if (coolalphatimer > 0 && interpTimerHackAllow) coolalphatimer--; } -- 2.54.0 From 7bebb554e9dd5106fd45f304240a645355c3803e Mon Sep 17 00:00:00 2001 From: Alug Date: Sat, 24 Feb 2024 15:38:32 +0100 Subject: [PATCH 22/79] fix K_GetScreenCoords y clipping --- 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 1b083652c..f2036796d 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -8975,8 +8975,8 @@ static void K_GetScreenCoords(vector2_t *vec, player_t *player, camera_t *came, x = FixedMul(x, FINECOSINE((yang>>ANGLETOFINESHIFT) & FINEMASK)); // perspective y = -camaiming - FixedDiv(yang, distfact); - //if ((fixed_t)y < ANGLE_270 || (fixed_t)y > ANGLE_90) // clip points behind the camera - // return; + if (y < (fixed_t)ANGLE_270 || y > (fixed_t)ANGLE_90) // clip points behind the camera + return; if (splitscreen == 1) // multiply by 1.25 for 2P splitscreen y = y + (y/4) ; if (srcflip) // flipcam -- 2.54.0 From ae33b411b0407d51f1182e626f6bd0556824daff Mon Sep 17 00:00:00 2001 From: Alug Date: Sat, 24 Feb 2024 15:43:35 +0100 Subject: [PATCH 23/79] Driftgauge --- src/d_main.c | 4 ++ src/d_main.h | 2 + src/d_netcmd.c | 19 +++++++ src/d_netcmd.h | 5 ++ src/k_kart.c | 135 +++++++++++++++++++++++++++++++++++++++++++++++++ src/m_menu.c | 83 +++++++++++++++++++++++------- 6 files changed, 229 insertions(+), 19 deletions(-) diff --git a/src/d_main.c b/src/d_main.c index 05116ca27..92e1ff4ba 100644 --- a/src/d_main.c +++ b/src/d_main.c @@ -1085,6 +1085,7 @@ boolean big_lap_color; // bigger lap counter but colour boolean kartzspeedo; // kartZ speedo boolean statdp; // stat display for extended player setup boolean nametaggfx; // Nametag stuffs +boolean driftgaugegfx; static void IdentifyVersion(void) { @@ -1478,6 +1479,9 @@ void D_SRB2Main(void) // Nametag stuffs if (W_CheckMultipleLumps("NTLINE", "NTLINEV", "NTSP", "NTWH", NULL)) nametaggfx = true; + + if (W_CheckMultipleLumps("K_DGAU","K_DCAU","K_DGSU","K_DCSU", NULL)) + driftgaugegfx = true; } // diff --git a/src/d_main.h b/src/d_main.h index 909c1b7fb..2709dc389 100644 --- a/src/d_main.h +++ b/src/d_main.h @@ -35,6 +35,8 @@ extern boolean big_lap_color; // bigger lap counter but colour extern boolean kartzspeedo; // kartZ speedo extern boolean statdp; // stat display for extended player setup extern boolean nametaggfx; // Nametag stuffs +extern boolean driftgaugegfx; + extern boolean autoloading; extern boolean autoloaded; diff --git a/src/d_netcmd.c b/src/d_netcmd.c index 607aca336..bd68198d0 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -525,6 +525,9 @@ static CV_PossibleValue_t nametagsize_cons_t[] = { {0, "Off"}, {1, "Small"}, {2, "Minimal"}, {0, NULL}}; static CV_PossibleValue_t nametagrestat_cons_t[] = { {0, "Off"}, {1, "Restat"}, {2, "Always"}, {0, NULL}}; +static CV_PossibleValue_t nametagmaxplayer_cons_t[] = { + {1, "MIN"}, {MAXPLAYERS, "MAX"}, {0, NULL}}; + consvar_t cv_nametag = {"kartnametag", "On", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_nametagtrans = {"kartnametagtransparency", "Dynamic", CV_SAVE, nametagtrans_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; @@ -539,6 +542,17 @@ consvar_t cv_smallnametags = {"kartnametagsmall", "Off", CV_SAVE, nametagsize_co consvar_t cv_nametaghop = {"kartnametaghop", "On", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_nametagscore = {"kartnametagscore", "Off", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; +static CV_PossibleValue_t driftgaugeoffset_cons_t[] = { + {-FRACUNIT*128, "MIN"}, {FRACUNIT*128, "MAX"}, {0, NULL}}; + +static CV_PossibleValue_t driftgaugestyle_cons_t[] = { + {1, "Default"}, {2, "Small"}, {3, "Big Numbers"}, {4, "Numbers Only"}, {0, NULL}}; + +consvar_t cv_driftgauge = {"driftgauge", "On", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_driftgaugeofs = {"driftgaugeoffset", "-20", CV_FLOAT|CV_SAVE, driftgaugeoffset_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_driftgaugetrans = {"driftgaugetransparency", "On", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_driftgaugestyle = {"driftgaugestyle", "1", CV_SAVE, driftgaugestyle_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; + static CV_PossibleValue_t skinselectspin_cons_t[] = { {0, "Off"}, {1, "Slow"}, {2, "2"}, {3, "3"}, {4, "4"}, {5, "5"}, {6, "6"}, {7, "7"}, {8, "8"}, {9, "9"}, {10, "Fast"}, {SKINSELECTSPIN_PAIN, "Pain"}, {0, NULL}}; consvar_t cv_skinselectspin = {"skinselectspin", "5", CV_SAVE, skinselectspin_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; @@ -1142,6 +1156,11 @@ void D_RegisterClientCommands(void) CV_RegisterVar(&cv_nametagrestat); CV_RegisterVar(&cv_nametaghop); CV_RegisterVar(&cv_nametagscore); + + CV_RegisterVar(&cv_driftgauge); + CV_RegisterVar(&cv_driftgaugeofs); + CV_RegisterVar(&cv_driftgaugetrans); + CV_RegisterVar(&cv_driftgaugestyle); CV_RegisterVar(&cv_perfstats); CV_RegisterVar(&cv_ps_thinkframe_page); diff --git a/src/d_netcmd.h b/src/d_netcmd.h index 1e0a7a847..b1fc6ebdf 100644 --- a/src/d_netcmd.h +++ b/src/d_netcmd.h @@ -189,6 +189,11 @@ extern consvar_t cv_nametagscore; #define SKINSELECTSPIN_PAIN 25 extern consvar_t cv_skinselectspin; +extern consvar_t cv_driftgauge; +extern consvar_t cv_driftgaugeofs; +extern consvar_t cv_driftgaugetrans; +extern consvar_t cv_driftgaugestyle; + extern consvar_t cv_perfstats; extern consvar_t cv_ps_thinkframe_page; extern consvar_t cv_ps_samplesize; diff --git a/src/k_kart.c b/src/k_kart.c index f2036796d..b963c1dbe 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -7033,6 +7033,11 @@ static patch_t *nametagline; static patch_t *nametagspeed; static patch_t *nametagweight; +static patch_t *driftgauge; +static patch_t *driftgaugecolor; +static patch_t *driftgaugesmall; +static patch_t *driftgaugesmallcolor; + static patch_t *kp_yougotem; static patch_t *skp_smallsticker; @@ -7129,6 +7134,13 @@ void K_LoadKartHUDGraphics(void) nametagspeed = W_CachePatchName("NTSP", PU_HUDGFX); nametagweight = W_CachePatchName("NTWH", PU_HUDGFX); } + + if (driftgaugegfx){ + driftgauge = W_CachePatchName("K_DGAU", PU_HUDGFX); + driftgaugecolor = W_CachePatchName("K_DCAU", PU_HUDGFX); + driftgaugesmall = W_CachePatchName("K_DGSU", PU_HUDGFX); + driftgaugesmallcolor = W_CachePatchName("K_DCSU", PU_HUDGFX); + } // Starting countdown kp_startcountdown[0] = W_CachePatchName("K_CNT3A", PU_HUDGFX); @@ -9244,6 +9256,125 @@ static void K_drawNameTags(void) } } +// Based on Driftgauge refactor by GenericHeroGuy ported from lua and expanded by NepDisk +static void K_drawDriftGauge(void) +{ + INT32 driftval = K_GetKartDriftSparkValue(stplyr); + INT32 driftcharge = min(driftval*4, stplyr->kartstuff[k_driftcharge]); + vector2_t pos = {0}; + fixed_t basex,basey; + INT32 drifttrans = 0; + int dup = 0; + int i; + + UINT8 driftcolors[3][4] = { + {0, 0, 10, 16}, // no drift + {215, 215, 204, 253}, // blue + {125, 125, 151, 159} // red + }; + + UINT8 driftskins[3] = { + SKINCOLOR_NONE, + SKINCOLOR_TEAL, + SKINCOLOR_SALMON, + }; + + UINT8 driftrainbow[18] = { + 0, 31, 47, 63, 79, 95, 111, 119, 127, 143, 159, 175, 183, 191, 199, 207, 223, 247 + }; + + if (!stplyr->kartstuff[k_drift]) + return; + + + K_GetScreenCoords(&pos, stplyr, camera, stplyr->mo->x, stplyr->mo->y, stplyr->mo->z+FixedMul(cv_driftgaugeofs.value, cv_driftgaugeofs.value > 0 ? stplyr->mo->scale : mapobjectscale)); + + basex = pos.x>>FRACBITS; + basey = pos.y>>FRACBITS; + dup = vid.dupx; + + fixed_t barx; + fixed_t bary; + INT32 BAR_WIDTH; + + if (cv_driftgaugetrans.value) + drifttrans = V_HUDTRANS; + else + drifttrans = 0; + + switch(cv_driftgaugestyle.value) + { + case 1: + case 2: + case 3: + if (driftgaugegfx) + { + if (cv_driftgaugestyle.value == 1 || cv_driftgaugestyle.value == 3) + { + barx = basex - dup*23; + + BAR_WIDTH = dup*47; + } + else + { + barx = basex - dup*12; + BAR_WIDTH = dup*23; + } + + bary = basey - dup*2; + + INT32 limit = driftval * (driftcharge >= driftval*2 ? 2 : 1); + INT32 width = ((driftcharge - (driftcharge >= driftval ? limit : 0)) * BAR_WIDTH) / limit; + INT32 level = min(driftcharge / driftval, 2); + UINT8 *cmap; + + if (!K_UseColorHud()) + V_DrawMappedPatch(cv_driftgaugestyle.value == 2 ? basex + dup*11 : basex, basey, V_NOSCALESTART|V_OFFSET|drifttrans, cv_driftgaugestyle.value == 2 ? driftgaugesmall : driftgauge, NULL); + else //Colourized hud + { + UINT8 *colormap = R_GetTranslationColormap(TC_DEFAULT, K_GetHudColor(), GTC_CACHE); + V_DrawMappedPatch(cv_driftgaugestyle.value == 2 ? basex + dup*11 : basex, basey, V_NOSCALESTART|V_OFFSET|drifttrans, cv_driftgaugestyle.value == 2 ? driftgaugesmallcolor : driftgaugecolor, colormap); + } + + + if (driftcharge >= driftval*4) // rainbow sparks + { + cmap = R_GetTranslationColormap(TC_RAINBOW, 1 + leveltime % (MAXSKINCOLORS-1),GTC_CACHE); + for (i = 0; i < 4; i++) + { + V_DrawFill(barx, bary+dup*i, BAR_WIDTH, dup, (driftrainbow[(leveltime % 18) + 1] + i*2) | V_NOSCALESTART|drifttrans); + } + } + else // none/blue/red + { + cmap = R_GetTranslationColormap(TC_RAINBOW, driftskins[level],GTC_CACHE); + for (i = 0; i < 4; i++) + { + if (driftcharge >= driftval) + V_DrawFill(barx, bary+dup*i, BAR_WIDTH, dup, driftcolors[level-1][i] | V_NOSCALESTART|drifttrans); + + V_DrawFill(barx, bary+dup*i, width, dup, driftcolors[level][i] | V_NOSCALESTART|drifttrans); + } + } + + // right, also draw a cool number + //SG_DrawPaddedNum(v, basex + (dup*32), basey, driftcharge*100 / driftval, 3, "PINGN", V_NOSCALESTART|V_OFFSET|drifttrans, cmap) + if (cv_driftgaugestyle.value == 3) + V_DrawPaddedTallNum(basex + (dup*32), basey, V_NOSCALESTART|V_OFFSET|drifttrans, driftcharge*100 / driftval, 3); + else + V_DrawPingNum(cv_driftgaugestyle.value == 2 ? basex + (dup*22) : basex + (dup*32), basey, V_NOSCALESTART|V_OFFSET|drifttrans, driftcharge*100 / driftval, cmap); + } + + break; + + case 4: + V_DrawPaddedTallNum(basex + (dup*16), basey, V_NOSCALESTART|V_OFFSET|drifttrans, driftcharge*100 / driftval, 3); + break; + + + } +} + static fixed_t K_FindCheckX(fixed_t px, fixed_t py, angle_t ang, fixed_t mx, fixed_t my) { fixed_t dist, x; @@ -10329,6 +10460,10 @@ void K_drawKartHUD(void) #endif K_drawKartItem(); + + if (cv_driftgauge.value) + K_drawDriftGauge(); + if (cv_nametag.value) K_drawNameTags(); diff --git a/src/m_menu.c b/src/m_menu.c index 350f510d6..293e618ab 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -369,6 +369,9 @@ menu_t OP_AdvancedBirdDef; menu_t OP_NametagDef; //menu_t OP_OGLShadowsDef; +//Driftgauge +menu_t OP_DriftGaugeDef; + #define numaddonsshown 4 // Replay hut @@ -1953,27 +1956,29 @@ static menuitem_t OP_SaturnMenu[] = {IT_STRING | IT_CVAR, NULL, "Serverqueue waittime", &cv_connectawaittime, 10}, - {IT_STRING | IT_CVAR, NULL, "Skin Select Spinning Speed", &cv_skinselectspin, 20}, - {IT_STRING | IT_CVAR, NULL, "Input Display outside of RA", &cv_showinput, 25}, - {IT_STRING | IT_CVAR, NULL, "Speedometer Style", &cv_newspeedometer, 30}, - {IT_STRING | IT_CVAR, NULL, "Stat Display", &cv_showstats, 35}, - {IT_STRING | IT_CVAR, NULL, "Higher Resolution Portraits", &cv_highresportrait, 40}, - {IT_STRING | IT_CVAR, NULL, "Colourized HUD", &cv_colorizedhud, 45}, - {IT_STRING | IT_CVAR, NULL, "Colourized Itembox", &cv_colorizeditembox, 50}, - {IT_STRING | IT_CVAR, NULL, "Colourized HUD Color", &cv_colorizedhudcolor, 55}, - {IT_STRING | IT_CVAR, NULL, "Show Lap Emblem", &cv_showlapemblem, 60}, - {IT_STRING | IT_CVAR, NULL, "Show Minimap Names", &cv_showminimapnames, 65}, - {IT_STRING | IT_CVAR, NULL, "Small Minimap Players", &cv_minihead, 70}, - {IT_STRING | IT_CVAR, NULL, "Show Cecho Messages", &cv_cechotoggle, 80}, - {IT_STRING | IT_CVAR, NULL, "Show Localskin Menus", &cv_showlocalskinmenus, 85}, - {IT_STRING | IT_SUBMENU, NULL, "Nametags...", &OP_NametagDef, 90}, + {IT_STRING | IT_CVAR, NULL, "Skin Select Spinning Speed", &cv_skinselectspin, 30}, + {IT_STRING | IT_CVAR, NULL, "Input Display outside of RA", &cv_showinput, 35}, + {IT_STRING | IT_CVAR, NULL, "Speedometer Style", &cv_newspeedometer, 40}, + {IT_STRING | IT_CVAR, NULL, "Stat Display", &cv_showstats, 45}, + {IT_STRING | IT_CVAR, NULL, "Higher Resolution Portraits", &cv_highresportrait, 50}, + {IT_STRING | IT_CVAR, NULL, "Colourized HUD", &cv_colorizedhud, 55}, + {IT_STRING | IT_CVAR, NULL, "Colourized Itembox", &cv_colorizeditembox, 60}, + {IT_STRING | IT_CVAR, NULL, "Colourized HUD Color", &cv_colorizedhudcolor, 65}, + {IT_STRING | IT_CVAR, NULL, "Show Lap Emblem", &cv_showlapemblem, 70}, + {IT_STRING | IT_CVAR, NULL, "Show Minimap Names", &cv_showminimapnames, 75}, + {IT_STRING | IT_CVAR, NULL, "Small Minimap Players", &cv_minihead, 80}, + + {IT_STRING | IT_CVAR, NULL, "Show Cecho Messages", &cv_cechotoggle, 90}, + {IT_STRING | IT_CVAR, NULL, "Show Localskin Menus", &cv_showlocalskinmenus, 95}, + {IT_STRING | IT_SUBMENU, NULL, "Nametags...", &OP_NametagDef, 100}, + {IT_STRING | IT_SUBMENU, NULL, "Driftgauge...", &OP_DriftGaugeDef, 105}, - {IT_STRING | IT_CVAR, NULL, "Less Midnight Channel Flicker", &cv_lessflicker, 105}, + {IT_STRING | IT_CVAR, NULL, "Less Midnight Channel Flicker", &cv_lessflicker, 125}, - {IT_SUBMENU|IT_STRING, NULL, "Sprite Distortion...", &OP_PlayerDistortDef, 115}, - {IT_SUBMENU|IT_STRING, NULL, "Hud Offsets...", &OP_HudOffsetDef, 120}, + {IT_SUBMENU|IT_STRING, NULL, "Sprite Distortion...", &OP_PlayerDistortDef, 135}, + {IT_SUBMENU|IT_STRING, NULL, "Hud Offsets...", &OP_HudOffsetDef, 140}, - {IT_SUBMENU|IT_STRING, NULL, "Saturn Credits", &OP_SaturnCreditsDef, 130}, // uwu + {IT_SUBMENU|IT_STRING, NULL, "Saturn Credits", &OP_SaturnCreditsDef, 150}, // uwu }; static const char* OP_SaturnTooltips[] = @@ -2230,6 +2235,7 @@ static menuitem_t OP_NametagMenu[] = //{IT_STRING | IT_CVAR, NULL, "Nametag Scaling", &cv_nametagscaling, 70} }; + static const char* OP_NametagTooltips[] = { NULL, @@ -2261,6 +2267,33 @@ enum }; +static menuitem_t OP_DriftGaugeMenu[] = +{ + {IT_HEADER, NULL, "Driftgauge", NULL, 0}, + {IT_STRING | IT_CVAR, NULL, "Driftgauge", &cv_driftgauge, 10}, + {IT_STRING | IT_CVAR, NULL, "Driftgauge Transparency", &cv_driftgaugetrans, 20}, + {IT_STRING | IT_CVAR, NULL, "Driftgauge Offset", &cv_driftgaugeofs, 30}, + {IT_STRING | IT_CVAR, NULL, "Driftgauge Style", &cv_driftgaugestyle, 40}, +}; + +static const char* OP_DriftGaugeTooltips[] = +{ + NULL, + "Enable driftgauge in game.", + "Have driftgauge use hud transparency.", + "Vertical driftgauge offset.", + "Driftgauge style.", +}; + +enum +{ + dg_header, + dg_dg, + dg_dgtrans, + dg_dgoffset, + dg_dgstyle, +}; + static menuitem_t OP_TiltMenu[] = { @@ -2816,6 +2849,8 @@ menu_t OP_SaturnCreditsDef = DEFAULTMENUSTYLE(NULL, OP_SaturnCreditsMenu, &OP_Sa menu_t OP_BirdDef = DEFAULTMENUSTYLE(NULL, OP_BirdMenu, &OP_MainDef, 30, 30); menu_t OP_NametagDef = DEFAULTMENUSTYLE(NULL, OP_NametagMenu, &OP_SaturnDef, 30, 60); +menu_t OP_DriftGaugeDef = DEFAULTMENUSTYLE(NULL, OP_DriftGaugeMenu, &OP_SaturnDef, 30, 60); + menu_t OP_TiltDef = DEFAULTMENUSTYLE(NULL, OP_TiltMenu, &OP_BirdDef, 30, 60); menu_t OP_AdvancedBirdDef = DEFAULTMENUSTYLE(NULL, OP_AdvancedBirdMenu, &OP_BirdDef, 30, 60); @@ -3159,7 +3194,7 @@ void Saturn_menu_Onchange(void) void Nametag_menu_Onchange(void) { - if (cv_smallnametags.value || (!nametaggfx)) + if (!nametaggfx) OP_NametagMenu[nt_ntchar].status = IT_GRAYEDOUT; } @@ -5033,6 +5068,16 @@ static void M_DrawGenericMenu(void) coolalphatimer--; } } + + if (currentMenu == &OP_DriftGaugeDef) + { + if (!(OP_DriftGaugeTooltips[itemOn] == NULL)) + { + M_DrawSplitText(BASEVIDWIDTH / 2, BASEVIDHEIGHT-50, V_ALLOWLOWERCASE|V_SNAPTOBOTTOM, OP_DriftGaugeTooltips[itemOn], coolalphatimer); + if (coolalphatimer > 0 && interpTimerHackAllow) + coolalphatimer--; + } + } } static void M_DrawGenericBackgroundMenu(void) -- 2.54.0 From 341a38b2e1a157fb2bd92c68f5d58634899df8e4 Mon Sep 17 00:00:00 2001 From: Alug Date: Sat, 24 Feb 2024 15:44:35 +0100 Subject: [PATCH 24/79] Forgot this lol --- src/m_menu.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/m_menu.c b/src/m_menu.c index 293e618ab..2588157aa 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -1999,6 +1999,7 @@ static const char* OP_SaturnTooltips[] = "Show the big Cecho Messages.", "Show Localskin Menus.", "Nametag Options.", + "Driftgauge Options.", "Disables the flicker effect on Midnight Channel.", "Options for sprite distortion effects.", "Move position of HUD elements.", @@ -2023,6 +2024,7 @@ enum sm_cechotogle, sm_showlocalskin, sm_nametagmen, + sm_driftgaugemen, sm_pisschannel, sm_distortionmenu, sm_hudoffsets, -- 2.54.0 From 5b29cf8e137b499ece352c10b22ddc815880142b Mon Sep 17 00:00:00 2001 From: NepDisk Date: Tue, 20 Feb 2024 02:10:54 -0500 Subject: [PATCH 25/79] Driftgauge flipcam --- src/k_kart.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index b963c1dbe..74c730839 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -9264,7 +9264,7 @@ static void K_drawDriftGauge(void) vector2_t pos = {0}; fixed_t basex,basey; INT32 drifttrans = 0; - int dup = 0; + int dup = vid.dupx; int i; UINT8 driftcolors[3][4] = { @@ -9289,9 +9289,12 @@ static void K_drawDriftGauge(void) K_GetScreenCoords(&pos, stplyr, camera, stplyr->mo->x, stplyr->mo->y, stplyr->mo->z+FixedMul(cv_driftgaugeofs.value, cv_driftgaugeofs.value > 0 ? stplyr->mo->scale : mapobjectscale)); + //Flipcam on + if (stplyr->mo->eflags & MFE_VERTICALFLIP && (stplyr->pflags & PF_FLIPCAM)) + pos.y += ((25*dup)<>FRACBITS; basey = pos.y>>FRACBITS; - dup = vid.dupx; fixed_t barx; fixed_t bary; -- 2.54.0 From 13a2dc1ba347d73df633602117cb382634f52068 Mon Sep 17 00:00:00 2001 From: Alug Date: Tue, 20 Feb 2024 17:37:29 +0100 Subject: [PATCH 26/79] e --- src/d_netcmd.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/d_netcmd.c b/src/d_netcmd.c index bd68198d0..b7ce9451e 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -525,8 +525,6 @@ static CV_PossibleValue_t nametagsize_cons_t[] = { {0, "Off"}, {1, "Small"}, {2, "Minimal"}, {0, NULL}}; static CV_PossibleValue_t nametagrestat_cons_t[] = { {0, "Off"}, {1, "Restat"}, {2, "Always"}, {0, NULL}}; -static CV_PossibleValue_t nametagmaxplayer_cons_t[] = { - {1, "MIN"}, {MAXPLAYERS, "MAX"}, {0, NULL}}; consvar_t cv_nametag = {"kartnametag", "On", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; -- 2.54.0 From e491eac9563a68abcc9255174040336149c7591f Mon Sep 17 00:00:00 2001 From: Alug Date: Tue, 20 Feb 2024 18:12:17 +0100 Subject: [PATCH 27/79] rename driftgauge cvar and fix nametag rendering bug --- src/d_netcmd.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/d_netcmd.c b/src/d_netcmd.c index b7ce9451e..72971a065 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -546,7 +546,7 @@ static CV_PossibleValue_t driftgaugeoffset_cons_t[] = { static CV_PossibleValue_t driftgaugestyle_cons_t[] = { {1, "Default"}, {2, "Small"}, {3, "Big Numbers"}, {4, "Numbers Only"}, {0, NULL}}; -consvar_t cv_driftgauge = {"driftgauge", "On", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_driftgauge = {"kartdriftgauge", "On", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_driftgaugeofs = {"driftgaugeoffset", "-20", CV_FLOAT|CV_SAVE, driftgaugeoffset_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_driftgaugetrans = {"driftgaugetransparency", "On", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_driftgaugestyle = {"driftgaugestyle", "1", CV_SAVE, driftgaugestyle_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; -- 2.54.0 From 5c6bafd655a771611adffa54fbfc0f172679b53c Mon Sep 17 00:00:00 2001 From: Alug Date: Tue, 20 Feb 2024 18:17:25 +0100 Subject: [PATCH 28/79] fix warning --- src/k_kart.c | 37 ++++++++++++++++--------------------- 1 file changed, 16 insertions(+), 21 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index 74c730839..ce7a62a5c 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -9056,8 +9056,7 @@ static void K_drawNameTags(void) UINT8 *cm; fixed_t distance = 0; fixed_t maxdistance = (10*cv_nametagdist.value)* mapobjectscale; - angle_t an; - + if (i > PLAYERSMASK) continue; if (!players[i].mo || P_MobjWasRemoved(players[i].mo) || players[i].spectator || !playeringame[i]) @@ -9073,9 +9072,9 @@ static void K_drawNameTags(void) continue; if (!P_CheckSight(stplyr->mo, players[i].mo)) continue; - + tagsdisplayed += 1; - + if (tagsdisplayed > cv_nametagmaxplayers.value) break; @@ -9117,11 +9116,11 @@ static void K_drawNameTags(void) dup = vid.dupx; K_GetScreenCoords(&pos, stplyr, camera, players[i].mo->x, players[i].mo->y, players[i].mo->z + players[i].mo->height); - + //Check for negative screencoords if (pos.x == -1 || pos.y == -1) continue; - + //Flipcam off if (players[i].mo->eflags & MFE_VERTICALFLIP && !(players[i].pflags & PF_FLIPCAM)) pos.y += players[i].mo->height; @@ -9161,13 +9160,13 @@ static void K_drawNameTags(void) { if (cv_nametagfacerank.value) tagwidthsmall += icon->width - dup; - + // Have to draw the nametag using patches here since drawfill can't draw at this scale... if (!flipped) V_DrawFixedPatch(namex<kartstuff[k_drift]) return; - - + K_GetScreenCoords(&pos, stplyr, camera, stplyr->mo->x, stplyr->mo->y, stplyr->mo->z+FixedMul(cv_driftgaugeofs.value, cv_driftgaugeofs.value > 0 ? stplyr->mo->scale : mapobjectscale)); - + //Flipcam on if (stplyr->mo->eflags & MFE_VERTICALFLIP && (stplyr->pflags & PF_FLIPCAM)) pos.y += ((25*dup)<>FRACBITS; basey = pos.y>>FRACBITS; fixed_t barx; fixed_t bary; INT32 BAR_WIDTH; - + if (cv_driftgaugetrans.value) drifttrans = V_HUDTRANS; else drifttrans = 0; - - switch(cv_driftgaugestyle.value) + + switch (cv_driftgaugestyle.value) { case 1: case 2: @@ -9315,7 +9313,6 @@ static void K_drawDriftGauge(void) if (cv_driftgaugestyle.value == 1 || cv_driftgaugestyle.value == 3) { barx = basex - dup*23; - BAR_WIDTH = dup*47; } else @@ -9339,7 +9336,6 @@ static void K_drawDriftGauge(void) V_DrawMappedPatch(cv_driftgaugestyle.value == 2 ? basex + dup*11 : basex, basey, V_NOSCALESTART|V_OFFSET|drifttrans, cv_driftgaugestyle.value == 2 ? driftgaugesmallcolor : driftgaugecolor, colormap); } - if (driftcharge >= driftval*4) // rainbow sparks { cmap = R_GetTranslationColormap(TC_RAINBOW, 1 + leveltime % (MAXSKINCOLORS-1),GTC_CACHE); @@ -9369,12 +9365,11 @@ static void K_drawDriftGauge(void) } break; - case 4: V_DrawPaddedTallNum(basex + (dup*16), basey, V_NOSCALESTART|V_OFFSET|drifttrans, driftcharge*100 / driftval, 3); break; - - + default: + break; } } -- 2.54.0 From c7059b3007810c3fe3711d9c361496f922ccc332 Mon Sep 17 00:00:00 2001 From: Alug Date: Tue, 20 Feb 2024 18:40:01 +0100 Subject: [PATCH 29/79] lol --- src/m_menu.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/m_menu.c b/src/m_menu.c index 2588157aa..b18630034 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -1956,17 +1956,17 @@ static menuitem_t OP_SaturnMenu[] = {IT_STRING | IT_CVAR, NULL, "Serverqueue waittime", &cv_connectawaittime, 10}, - {IT_STRING | IT_CVAR, NULL, "Skin Select Spinning Speed", &cv_skinselectspin, 30}, - {IT_STRING | IT_CVAR, NULL, "Input Display outside of RA", &cv_showinput, 35}, - {IT_STRING | IT_CVAR, NULL, "Speedometer Style", &cv_newspeedometer, 40}, - {IT_STRING | IT_CVAR, NULL, "Stat Display", &cv_showstats, 45}, - {IT_STRING | IT_CVAR, NULL, "Higher Resolution Portraits", &cv_highresportrait, 50}, - {IT_STRING | IT_CVAR, NULL, "Colourized HUD", &cv_colorizedhud, 55}, - {IT_STRING | IT_CVAR, NULL, "Colourized Itembox", &cv_colorizeditembox, 60}, - {IT_STRING | IT_CVAR, NULL, "Colourized HUD Color", &cv_colorizedhudcolor, 65}, - {IT_STRING | IT_CVAR, NULL, "Show Lap Emblem", &cv_showlapemblem, 70}, - {IT_STRING | IT_CVAR, NULL, "Show Minimap Names", &cv_showminimapnames, 75}, - {IT_STRING | IT_CVAR, NULL, "Small Minimap Players", &cv_minihead, 80}, + {IT_STRING | IT_CVAR, NULL, "Skin Select Spinning Speed", &cv_skinselectspin, 20}, + {IT_STRING | IT_CVAR, NULL, "Input Display outside of RA", &cv_showinput, 25}, + {IT_STRING | IT_CVAR, NULL, "Speedometer Style", &cv_newspeedometer, 30}, + {IT_STRING | IT_CVAR, NULL, "Stat Display", &cv_showstats, 35}, + {IT_STRING | IT_CVAR, NULL, "Higher Resolution Portraits", &cv_highresportrait, 40}, + {IT_STRING | IT_CVAR, NULL, "Colourized HUD", &cv_colorizedhud, 45}, + {IT_STRING | IT_CVAR, NULL, "Colourized Itembox", &cv_colorizeditembox, 50}, + {IT_STRING | IT_CVAR, NULL, "Colourized HUD Color", &cv_colorizedhudcolor, 55}, + {IT_STRING | IT_CVAR, NULL, "Show Lap Emblem", &cv_showlapemblem, 60}, + {IT_STRING | IT_CVAR, NULL, "Show Minimap Names", &cv_showminimapnames, 65}, + {IT_STRING | IT_CVAR, NULL, "Small Minimap Players", &cv_minihead, 70}, {IT_STRING | IT_CVAR, NULL, "Show Cecho Messages", &cv_cechotoggle, 90}, {IT_STRING | IT_CVAR, NULL, "Show Localskin Menus", &cv_showlocalskinmenus, 95}, -- 2.54.0 From 9f795701e16a688e6ea3aac08f0aed7552ee5345 Mon Sep 17 00:00:00 2001 From: Alug Date: Sat, 24 Feb 2024 15:46:21 +0100 Subject: [PATCH 30/79] I HATE MENUS I HATE MENUS --- src/m_menu.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/m_menu.c b/src/m_menu.c index b18630034..3c7bd922f 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -1968,17 +1968,17 @@ static menuitem_t OP_SaturnMenu[] = {IT_STRING | IT_CVAR, NULL, "Show Minimap Names", &cv_showminimapnames, 65}, {IT_STRING | IT_CVAR, NULL, "Small Minimap Players", &cv_minihead, 70}, - {IT_STRING | IT_CVAR, NULL, "Show Cecho Messages", &cv_cechotoggle, 90}, - {IT_STRING | IT_CVAR, NULL, "Show Localskin Menus", &cv_showlocalskinmenus, 95}, - {IT_STRING | IT_SUBMENU, NULL, "Nametags...", &OP_NametagDef, 100}, - {IT_STRING | IT_SUBMENU, NULL, "Driftgauge...", &OP_DriftGaugeDef, 105}, + {IT_STRING | IT_CVAR, NULL, "Show Cecho Messages", &cv_cechotoggle, 80}, + {IT_STRING | IT_CVAR, NULL, "Show Localskin Menus", &cv_showlocalskinmenus, 85}, + {IT_STRING | IT_SUBMENU, NULL, "Nametags...", &OP_NametagDef, 90}, + {IT_STRING | IT_SUBMENU, NULL, "Driftgauge...", &OP_DriftGaugeDef, 95}, - {IT_STRING | IT_CVAR, NULL, "Less Midnight Channel Flicker", &cv_lessflicker, 125}, + {IT_STRING | IT_CVAR, NULL, "Less Midnight Channel Flicker", &cv_lessflicker, 115}, - {IT_SUBMENU|IT_STRING, NULL, "Sprite Distortion...", &OP_PlayerDistortDef, 135}, - {IT_SUBMENU|IT_STRING, NULL, "Hud Offsets...", &OP_HudOffsetDef, 140}, + {IT_SUBMENU|IT_STRING, NULL, "Sprite Distortion...", &OP_PlayerDistortDef, 125}, + {IT_SUBMENU|IT_STRING, NULL, "Hud Offsets...", &OP_HudOffsetDef, 130}, - {IT_SUBMENU|IT_STRING, NULL, "Saturn Credits", &OP_SaturnCreditsDef, 150}, // uwu + {IT_SUBMENU|IT_STRING, NULL, "Saturn Credits", &OP_SaturnCreditsDef, 140}, // uwu }; static const char* OP_SaturnTooltips[] = -- 2.54.0 From 927599432cc08bee92a35d0bb18db225f2bbc7bc Mon Sep 17 00:00:00 2001 From: Alug Date: Sat, 24 Feb 2024 14:46:13 +0100 Subject: [PATCH 31/79] rename all of those to not conflict with mods --- src/d_netcmd.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/d_netcmd.c b/src/d_netcmd.c index 72971a065..1bb67fa2d 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -547,9 +547,9 @@ static CV_PossibleValue_t driftgaugestyle_cons_t[] = { {1, "Default"}, {2, "Small"}, {3, "Big Numbers"}, {4, "Numbers Only"}, {0, NULL}}; consvar_t cv_driftgauge = {"kartdriftgauge", "On", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; -consvar_t cv_driftgaugeofs = {"driftgaugeoffset", "-20", CV_FLOAT|CV_SAVE, driftgaugeoffset_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; -consvar_t cv_driftgaugetrans = {"driftgaugetransparency", "On", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; -consvar_t cv_driftgaugestyle = {"driftgaugestyle", "1", CV_SAVE, driftgaugestyle_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_driftgaugeofs = {"kartdriftgaugeoffset", "-20", CV_FLOAT|CV_SAVE, driftgaugeoffset_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_driftgaugetrans = {"kartdriftgaugetransparency", "On", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_driftgaugestyle = {"kartdriftgaugestyle", "1", CV_SAVE, driftgaugestyle_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; static CV_PossibleValue_t skinselectspin_cons_t[] = { {0, "Off"}, {1, "Slow"}, {2, "2"}, {3, "3"}, {4, "4"}, {5, "5"}, {6, "6"}, {7, "7"}, {8, "8"}, {9, "9"}, {10, "Fast"}, {SKINSELECTSPIN_PAIN, "Pain"}, {0, NULL}}; -- 2.54.0 From 0f1accb378f49fbe130be0022911c996ecb3316f Mon Sep 17 00:00:00 2001 From: Alug Date: Sat, 24 Feb 2024 15:50:18 +0100 Subject: [PATCH 32/79] fix compile --- src/m_menu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/m_menu.c b/src/m_menu.c index 3c7bd922f..e1a5a991d 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -5075,7 +5075,7 @@ static void M_DrawGenericMenu(void) { if (!(OP_DriftGaugeTooltips[itemOn] == NULL)) { - M_DrawSplitText(BASEVIDWIDTH / 2, BASEVIDHEIGHT-50, V_ALLOWLOWERCASE|V_SNAPTOBOTTOM, OP_DriftGaugeTooltips[itemOn], coolalphatimer); + M_DrawSplitText(BASEVIDWIDTH / 2, BASEVIDHEIGHT-50, V_ALLOWLOWERCASE|V_SNAPTOBOTTOM, OP_DriftGaugeTooltips[itemOn], 30, coolalphatimer); if (coolalphatimer > 0 && interpTimerHackAllow) coolalphatimer--; } -- 2.54.0 From 9173bc8ebe91b24e09fa42316e4a8edae6bafefa Mon Sep 17 00:00:00 2001 From: Alug Date: Sat, 24 Feb 2024 15:58:47 +0100 Subject: [PATCH 33/79] disable driftgauge in record attack it actually gives you an advantage over using other clients record attack should be fair and even --- src/k_kart.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/k_kart.c b/src/k_kart.c index ce7a62a5c..9b07d8d79 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -10459,7 +10459,7 @@ void K_drawKartHUD(void) K_drawKartItem(); - if (cv_driftgauge.value) + if (cv_driftgauge.value && !modeattacking) K_drawDriftGauge(); if (cv_nametag.value) -- 2.54.0 From 1d177b6a3574a2fd543713c3e37ac8b4eaaa6675 Mon Sep 17 00:00:00 2001 From: Alug Date: Sat, 24 Feb 2024 19:16:33 +0100 Subject: [PATCH 34/79] add -1 check for driftgauge too --- src/k_kart.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/k_kart.c b/src/k_kart.c index 9b07d8d79..e395e074f 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -9286,6 +9286,10 @@ static void K_drawDriftGauge(void) return; K_GetScreenCoords(&pos, stplyr, camera, stplyr->mo->x, stplyr->mo->y, stplyr->mo->z+FixedMul(cv_driftgaugeofs.value, cv_driftgaugeofs.value > 0 ? stplyr->mo->scale : mapobjectscale)); + + //Check for negative screencoords + if (pos.x == -1 || pos.y == -1) + return; //Flipcam on if (stplyr->mo->eflags & MFE_VERTICALFLIP && (stplyr->pflags & PF_FLIPCAM)) -- 2.54.0 From 2cefb00b5dc8e1328f6e1c8a41feb0cf0e3dc010 Mon Sep 17 00:00:00 2001 From: Indev Date: Sat, 24 Feb 2024 21:19:57 +0300 Subject: [PATCH 35/79] Don't need for long there, fixed_t is big enough --- 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 9b07d8d79..6ebe691a9 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -8923,8 +8923,8 @@ static void K_GetScreenCoords(vector2_t *vec, player_t *player, camera_t *came, fixed_t fovratio; fixed_t offset; boolean srcflip; - long y; - long x; + fixed_t y; + fixed_t x; // In case of early return we can check if those are negative vec->x = -1; -- 2.54.0 From 5eebdec84dc14d95e80f06ddfc9340fa081d95ed Mon Sep 17 00:00:00 2001 From: Indev Date: Sat, 24 Feb 2024 21:19:57 +0300 Subject: [PATCH 36/79] Don't need for long there, fixed_t is big enough --- 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 f2036796d..fd6aecedf 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -8911,8 +8911,8 @@ static void K_GetScreenCoords(vector2_t *vec, player_t *player, camera_t *came, fixed_t fovratio; fixed_t offset; boolean srcflip; - long y; - long x; + fixed_t y; + fixed_t x; // In case of early return we can check if those are negative vec->x = -1; -- 2.54.0 From 48f7f411ad63441923bcf1a9dc7667d7df868ef3 Mon Sep 17 00:00:00 2001 From: Alug Date: Sat, 24 Feb 2024 20:14:52 +0100 Subject: [PATCH 37/79] dont draw driftgauge when not using chasecam --- src/k_kart.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/k_kart.c b/src/k_kart.c index 71c6add71..8f57fc160 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -9285,6 +9285,10 @@ static void K_drawDriftGauge(void) if (!stplyr->kartstuff[k_drift]) return; + //dont draw if we dont use chasecam + if (!camera->chase) + return; + K_GetScreenCoords(&pos, stplyr, camera, stplyr->mo->x, stplyr->mo->y, stplyr->mo->z+FixedMul(cv_driftgaugeofs.value, cv_driftgaugeofs.value > 0 ? stplyr->mo->scale : mapobjectscale)); //Check for negative screencoords -- 2.54.0 From 046197c9a0b092e54bf17f45234bc55d45a97dce Mon Sep 17 00:00:00 2001 From: Alug Date: Sat, 24 Feb 2024 20:32:15 +0100 Subject: [PATCH 38/79] actually disable it for splitscreen for now its botched and needs fixing --- src/k_kart.c | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index 8f57fc160..f30cfb492 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -9123,11 +9123,11 @@ static void K_drawNameTags(void) //Flipcam off if (players[i].mo->eflags & MFE_VERTICALFLIP && !(players[i].pflags & PF_FLIPCAM)) - pos.y += players[i].mo->height; + pos.y += players[i].mo->height; //Flipcam on if (players[i].mo->eflags & MFE_VERTICALFLIP && (players[i].pflags & PF_FLIPCAM)) - pos.y -= ((30*dup)<eflags & MFE_VERTICALFLIP && !(players[i].pflags & PF_FLIPCAM)) @@ -9282,11 +9282,7 @@ static void K_drawDriftGauge(void) 0, 31, 47, 63, 79, 95, 111, 119, 127, 143, 159, 175, 183, 191, 199, 207, 223, 247 }; - if (!stplyr->kartstuff[k_drift]) - return; - - //dont draw if we dont use chasecam - if (!camera->chase) + if (!stplyr->mo || !stplyr->kartstuff[k_drift] || !camera->chase || splitscreen) return; K_GetScreenCoords(&pos, stplyr, camera, stplyr->mo->x, stplyr->mo->y, stplyr->mo->z+FixedMul(cv_driftgaugeofs.value, cv_driftgaugeofs.value > 0 ? stplyr->mo->scale : mapobjectscale)); @@ -9371,7 +9367,6 @@ static void K_drawDriftGauge(void) else V_DrawPingNum(cv_driftgaugestyle.value == 2 ? basex + (dup*22) : basex + (dup*32), basey, V_NOSCALESTART|V_OFFSET|drifttrans, driftcharge*100 / driftval, cmap); } - break; case 4: V_DrawPaddedTallNum(basex + (dup*16), basey, V_NOSCALESTART|V_OFFSET|drifttrans, driftcharge*100 / driftval, 3); -- 2.54.0 From ba4c82d38164734cdbe6435de35ad7737fedff53 Mon Sep 17 00:00:00 2001 From: Alug Date: Sun, 25 Feb 2024 12:10:23 +0100 Subject: [PATCH 39/79] add splitscreen to screencoords and fix splitscreen for driftgauge --- src/d_netcmd.c | 2 +- src/k_kart.c | 45 ++++++++++++++++++++++++++++++++++++++------- src/m_menu.c | 6 ------ src/m_menu.h | 3 --- 4 files changed, 39 insertions(+), 17 deletions(-) diff --git a/src/d_netcmd.c b/src/d_netcmd.c index 1bb67fa2d..9c0f24a23 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -536,7 +536,7 @@ consvar_t cv_nametagmaxplayers = {"kartnametagmaxplayers", "3", CV_SAVE, nametag consvar_t cv_nametagmaxlenght = {"kartnametagmaxlenght", "12", CV_SAVE, CV_Unsigned, NULL, 0, NULL, NULL, 0, 0, NULL}; //consvar_t cv_nametagscaling = {"nametagscaling", "160", CV_SAVE, nametagscaling_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_showownnametag = {"kartnametagshowown", "Off", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; -consvar_t cv_smallnametags = {"kartnametagsmall", "Off", CV_SAVE, nametagsize_cons_t, Nametag_menu_Onchange, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_smallnametags = {"kartnametagsmall", "Off", CV_SAVE, nametagsize_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_nametaghop = {"kartnametaghop", "On", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_nametagscore = {"kartnametagscore", "Off", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; diff --git a/src/k_kart.c b/src/k_kart.c index f30cfb492..5694d987f 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -9024,7 +9024,30 @@ static void K_GetScreenCoords(vector2_t *vec, player_t *player, camera_t *came, // project the angle to get our final X coordinate x = FixedMul(FINETANGENT(((x+ANGLE_90)>>ANGLETOFINESHIFT) & 4095), fov); + if (splitscreen == 1) // divide by 320/200 (1.6) on 2P splitscreen + x = (x/2) + (x/8); x = x + xres; + + + // get splitscreen index + int splitindex = stplyrnum; + + // adjust coords for splitscreen + if (splitscreen == 1){ // 2P + y = y>>1; + if (splitindex) + y = y + yres; + } + if (splitscreen >= 2) { // 3P or 4P + x = x>>1; + y = y>>1; + if (splitindex & 1) + x = x + xres; + if (splitindex >= 2) + y = y + yres; + } + + vec->y = y; vec->x = x; @@ -9034,7 +9057,7 @@ static void K_GetScreenCoords(vector2_t *vec, player_t *player, camera_t *came, //Decided to port and highly modify sunflower version for the main nametag drawing with additions by NepDisk. My previous one was broken anyway due to the changed screencoords and noscalestart static void K_drawNameTags(void) { - UINT8 i,j; + UINT8 i,j,k; INT32 trans = 0; vector2_t pos = {0}; fixed_t tagwidth; @@ -9114,9 +9137,9 @@ static void K_drawNameTags(void) } dup = vid.dupx; - + K_GetScreenCoords(&pos, stplyr, camera, players[i].mo->x, players[i].mo->y, players[i].mo->z + players[i].mo->height); - + //Check for negative screencoords if (pos.x == -1 || pos.y == -1) continue; @@ -9264,7 +9287,7 @@ static void K_drawDriftGauge(void) fixed_t basex,basey; INT32 drifttrans = 0; int dup = vid.dupx; - int i; + int i,j; UINT8 driftcolors[3][4] = { {0, 0, 10, 16}, // no drift @@ -9282,10 +9305,18 @@ static void K_drawDriftGauge(void) 0, 31, 47, 63, 79, 95, 111, 119, 127, 143, 159, 175, 183, 191, 199, 207, 223, 247 }; - if (!stplyr->mo || !stplyr->kartstuff[k_drift] || !camera->chase || splitscreen) + if (!stplyr->mo || !stplyr->kartstuff[k_drift] || !camera->chase) return; - - K_GetScreenCoords(&pos, stplyr, camera, stplyr->mo->x, stplyr->mo->y, stplyr->mo->z+FixedMul(cv_driftgaugeofs.value, cv_driftgaugeofs.value > 0 ? stplyr->mo->scale : mapobjectscale)); + + + if (!splitscreen) + K_GetScreenCoords(&pos, stplyr, camera, stplyr->mo->x, stplyr->mo->y, stplyr->mo->z+FixedMul(cv_driftgaugeofs.value, cv_driftgaugeofs.value > 0 ? stplyr->mo->scale : mapobjectscale)); + else + { + //Loop through each player camera for splitscreen. + for (j = 0; j <= stplyrnum; j++) + K_GetScreenCoords(&pos, stplyr, &camera[j], stplyr->mo->x, stplyr->mo->y, stplyr->mo->z+FixedMul(cv_driftgaugeofs.value, cv_driftgaugeofs.value > 0 ? stplyr->mo->scale : mapobjectscale)); + } //Check for negative screencoords if (pos.x == -1 || pos.y == -1) diff --git a/src/m_menu.c b/src/m_menu.c index e1a5a991d..1e23074c6 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -3194,12 +3194,6 @@ void Saturn_menu_Onchange(void) OP_SaturnMenu[sm_colorhud_customcolor].status = status; } -void Nametag_menu_Onchange(void) -{ - if (!nametaggfx) - OP_NametagMenu[nt_ntchar].status = IT_GRAYEDOUT; -} - // ========================================================================== // END ORGANIZATION STUFF. // ========================================================================== diff --git a/src/m_menu.h b/src/m_menu.h index 3b0bb3049..8d1ebb723 100644 --- a/src/m_menu.h +++ b/src/m_menu.h @@ -276,9 +276,6 @@ void Bird_menu_Onchange(void); // Saturn menu updating void Saturn_menu_Onchange(void); -// Nametags Menu updating -void Nametag_menu_Onchange(void); - void M_ReplayHut(INT32 choice); void M_SetPlaybackMenuPointer(void); -- 2.54.0 From 0dabf65a403ae79a70a0dff0db9fc2fc4c995736 Mon Sep 17 00:00:00 2001 From: Alug Date: Sun, 25 Feb 2024 12:12:18 +0100 Subject: [PATCH 40/79] k... --- src/k_kart.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index 5694d987f..4e7b4a8e5 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -9057,7 +9057,7 @@ static void K_GetScreenCoords(vector2_t *vec, player_t *player, camera_t *came, //Decided to port and highly modify sunflower version for the main nametag drawing with additions by NepDisk. My previous one was broken anyway due to the changed screencoords and noscalestart static void K_drawNameTags(void) { - UINT8 i,j,k; + UINT8 i,j; INT32 trans = 0; vector2_t pos = {0}; fixed_t tagwidth; @@ -9137,9 +9137,9 @@ static void K_drawNameTags(void) } dup = vid.dupx; - + K_GetScreenCoords(&pos, stplyr, camera, players[i].mo->x, players[i].mo->y, players[i].mo->z + players[i].mo->height); - + //Check for negative screencoords if (pos.x == -1 || pos.y == -1) continue; @@ -9307,8 +9307,7 @@ static void K_drawDriftGauge(void) if (!stplyr->mo || !stplyr->kartstuff[k_drift] || !camera->chase) return; - - + if (!splitscreen) K_GetScreenCoords(&pos, stplyr, camera, stplyr->mo->x, stplyr->mo->y, stplyr->mo->z+FixedMul(cv_driftgaugeofs.value, cv_driftgaugeofs.value > 0 ? stplyr->mo->scale : mapobjectscale)); else @@ -9317,7 +9316,7 @@ static void K_drawDriftGauge(void) for (j = 0; j <= stplyrnum; j++) K_GetScreenCoords(&pos, stplyr, &camera[j], stplyr->mo->x, stplyr->mo->y, stplyr->mo->z+FixedMul(cv_driftgaugeofs.value, cv_driftgaugeofs.value > 0 ? stplyr->mo->scale : mapobjectscale)); } - + //Check for negative screencoords if (pos.x == -1 || pos.y == -1) return; @@ -9328,7 +9327,7 @@ static void K_drawDriftGauge(void) basex = pos.x>>FRACBITS; basey = pos.y>>FRACBITS; - + fixed_t barx; fixed_t bary; INT32 BAR_WIDTH; -- 2.54.0 From e28722334c7f7445a96cc828aad6b5ab6bed7121 Mon Sep 17 00:00:00 2001 From: Alug Date: Sun, 25 Feb 2024 12:21:57 +0100 Subject: [PATCH 41/79] fix first person splitscreen driftgauge stuff a --- src/k_kart.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/k_kart.c b/src/k_kart.c index 4e7b4a8e5..a75a5f6f8 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -9305,7 +9305,7 @@ static void K_drawDriftGauge(void) 0, 31, 47, 63, 79, 95, 111, 119, 127, 143, 159, 175, 183, 191, 199, 207, 223, 247 }; - if (!stplyr->mo || !stplyr->kartstuff[k_drift] || !camera->chase) + if (!stplyr->mo || !stplyr->kartstuff[k_drift] || (!splitscreen && !camera->chase)) return; if (!splitscreen) -- 2.54.0 From 3016c2ee7bccba35266976b27794a4c4ad6b09a2 Mon Sep 17 00:00:00 2001 From: NepDisk Date: Sun, 25 Feb 2024 09:42:21 -0500 Subject: [PATCH 42/79] Fix fillbar --- src/k_kart.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index a75a5f6f8..3a284306b 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -9375,7 +9375,7 @@ static void K_drawDriftGauge(void) cmap = R_GetTranslationColormap(TC_RAINBOW, 1 + leveltime % (MAXSKINCOLORS-1),GTC_CACHE); for (i = 0; i < 4; i++) { - V_DrawFill(barx, bary+dup*i, BAR_WIDTH, dup, (driftrainbow[(leveltime % 18) + 1] + i*2) | V_NOSCALESTART|drifttrans); + V_DrawFill(barx, bary+dup*1+dup*i, BAR_WIDTH, dup, (driftrainbow[(leveltime % 18) + 1] + i*2) | V_NOSCALESTART|drifttrans); } } else // none/blue/red @@ -9384,9 +9384,9 @@ static void K_drawDriftGauge(void) for (i = 0; i < 4; i++) { if (driftcharge >= driftval) - V_DrawFill(barx, bary+dup*i, BAR_WIDTH, dup, driftcolors[level-1][i] | V_NOSCALESTART|drifttrans); + V_DrawFill(barx, bary+dup*1+dup*i, BAR_WIDTH, dup, driftcolors[level-1][i] | V_NOSCALESTART|drifttrans); - V_DrawFill(barx, bary+dup*i, width, dup, driftcolors[level][i] | V_NOSCALESTART|drifttrans); + V_DrawFill(barx, bary+dup*1+dup*i, width, dup, driftcolors[level][i] | V_NOSCALESTART|drifttrans); } } -- 2.54.0 From f7e99d6f330f5c407eccff40059a8c4b0647eb9b Mon Sep 17 00:00:00 2001 From: NepDisk Date: Sun, 25 Feb 2024 10:26:40 -0500 Subject: [PATCH 43/79] Add coloring to large numbers --- src/k_kart.c | 11 +++++++++-- src/v_video.c | 21 +++++++++++++++++++++ src/v_video.h | 1 + 3 files changed, 31 insertions(+), 2 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index 3a284306b..951e12234 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -9393,13 +9393,20 @@ static void K_drawDriftGauge(void) // right, also draw a cool number //SG_DrawPaddedNum(v, basex + (dup*32), basey, driftcharge*100 / driftval, 3, "PINGN", V_NOSCALESTART|V_OFFSET|drifttrans, cmap) if (cv_driftgaugestyle.value == 3) - V_DrawPaddedTallNum(basex + (dup*32), basey, V_NOSCALESTART|V_OFFSET|drifttrans, driftcharge*100 / driftval, 3); + V_DrawPaddedTallColorNum(basex + (dup*32), basey, V_NOSCALESTART|V_OFFSET|drifttrans, driftcharge*100 / driftval, 3, cmap); else V_DrawPingNum(cv_driftgaugestyle.value == 2 ? basex + (dup*22) : basex + (dup*32), basey, V_NOSCALESTART|V_OFFSET|drifttrans, driftcharge*100 / driftval, cmap); } break; case 4: - V_DrawPaddedTallNum(basex + (dup*16), basey, V_NOSCALESTART|V_OFFSET|drifttrans, driftcharge*100 / driftval, 3); + UINT8 *cmap; + INT32 level = min(driftcharge / driftval, 2); + if (driftcharge >= driftval*4) + cmap = R_GetTranslationColormap(TC_RAINBOW, 1 + leveltime % (MAXSKINCOLORS-1),GTC_CACHE); + else + cmap = R_GetTranslationColormap(TC_RAINBOW, driftskins[level],GTC_CACHE); + + V_DrawPaddedTallColorNum(basex + (dup*16), basey, V_NOSCALESTART|V_OFFSET|drifttrans, driftcharge*100 / driftval, 3, cmap); break; default: break; diff --git a/src/v_video.c b/src/v_video.c index c2c05b976..2d25a2c64 100644 --- a/src/v_video.c +++ b/src/v_video.c @@ -2471,6 +2471,27 @@ void V_DrawPaddedTallNum(INT32 x, INT32 y, INT32 flags, INT32 num, INT32 digits) } while (--digits); } +// Draws a number with a set number of digits. +// Does not handle negative numbers in a special way, don't try to feed it any. +void V_DrawPaddedTallColorNum(INT32 x, INT32 y, INT32 flags, INT32 num, INT32 digits, const UINT8 *colormap) +{ + INT32 w = SHORT(tallnum[0]->width); + + if (flags & V_NOSCALESTART) + w *= vid.dupx; + + if (num < 0) + num = -num; + + // draw the number + do + { + x -= w; + V_DrawFixedPatch(x< Date: Sun, 25 Feb 2024 18:20:19 +0100 Subject: [PATCH 44/79] lua hud disable option for nametags --- src/k_kart.c | 5 +++++ src/lua_hud.h | 1 + src/lua_hudlib.c | 1 + 3 files changed, 7 insertions(+) diff --git a/src/k_kart.c b/src/k_kart.c index fd6aecedf..bf56b8518 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -10330,7 +10330,12 @@ void K_drawKartHUD(void) K_drawKartItem(); if (cv_nametag.value) + { +#ifdef HAVE_BLUA + if (LUA_HudEnabled(hud_nametags)) +#endif K_drawNameTags(); + } // If not splitscreen, draw... if (!splitscreen && !demo.title) diff --git a/src/lua_hud.h b/src/lua_hud.h index db759bbfa..19edfab77 100644 --- a/src/lua_hud.h +++ b/src/lua_hud.h @@ -32,6 +32,7 @@ enum hud { hud_wanted, hud_speedometer, hud_statdisplay, + hud_nametags, hud_freeplay, hud_rankings, // Tab rankings diff --git a/src/lua_hudlib.c b/src/lua_hudlib.c index c7b1ec38e..16363a2d3 100644 --- a/src/lua_hudlib.c +++ b/src/lua_hudlib.c @@ -56,6 +56,7 @@ static const char *const hud_disable_options[] = { "wanted", "speedometer", "statdisplay", + "nametags", "freeplay", "rankings", NULL}; -- 2.54.0 From 78fc67a3eb3c59e0af1d12795d7ab6d75602d111 Mon Sep 17 00:00:00 2001 From: Alug Date: Sun, 25 Feb 2024 18:20:32 +0100 Subject: [PATCH 45/79] lua hud disable option for driftgauge --- src/k_kart.c | 12 ++++++++---- src/lua_hud.h | 1 + src/lua_hudlib.c | 1 + 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index 999998583..e6a723c5b 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -10496,12 +10496,16 @@ void K_drawKartHUD(void) #ifdef HAVE_BLUA if (LUA_HudEnabled(hud_item) && !freecam) #endif - K_drawKartItem(); - - + K_drawKartItem(); + if (cv_driftgauge.value && !modeattacking) + { +#ifdef HAVE_BLUA + if (LUA_HudEnabled(hud_driftgauge)) +#endif K_drawDriftGauge(); - + } + if (cv_nametag.value) { #ifdef HAVE_BLUA diff --git a/src/lua_hud.h b/src/lua_hud.h index 19edfab77..d0fec7f1e 100644 --- a/src/lua_hud.h +++ b/src/lua_hud.h @@ -33,6 +33,7 @@ enum hud { hud_speedometer, hud_statdisplay, hud_nametags, + hud_driftgauge, hud_freeplay, hud_rankings, // Tab rankings diff --git a/src/lua_hudlib.c b/src/lua_hudlib.c index 16363a2d3..de75aec20 100644 --- a/src/lua_hudlib.c +++ b/src/lua_hudlib.c @@ -57,6 +57,7 @@ static const char *const hud_disable_options[] = { "speedometer", "statdisplay", "nametags", + "driftgauge", "freeplay", "rankings", NULL}; -- 2.54.0 From 4d840c54552d069b0f404a174f08d37cd3f3f7c7 Mon Sep 17 00:00:00 2001 From: Alug Date: Sun, 25 Feb 2024 19:48:52 +0100 Subject: [PATCH 46/79] disable nametag by default --- src/d_netcmd.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/d_netcmd.c b/src/d_netcmd.c index 607aca336..24e8a4cd7 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -526,7 +526,7 @@ static CV_PossibleValue_t nametagsize_cons_t[] = { static CV_PossibleValue_t nametagrestat_cons_t[] = { {0, "Off"}, {1, "Restat"}, {2, "Always"}, {0, NULL}}; -consvar_t cv_nametag = {"kartnametag", "On", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_nametag = {"kartnametag", "Off", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_nametagtrans = {"kartnametagtransparency", "Dynamic", CV_SAVE, nametagtrans_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_nametagfacerank = {"kartnametagfacerank", "Off", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_nametagrestat = {"kartnametagrestat", "Restat", CV_SAVE, nametagrestat_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; -- 2.54.0 From 0c1be58854a77486cdd7e4b9559f463411518f6c Mon Sep 17 00:00:00 2001 From: Alug Date: Sun, 25 Feb 2024 18:34:46 +0100 Subject: [PATCH 47/79] disable nametag by default --- src/d_netcmd.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/d_netcmd.c b/src/d_netcmd.c index 9c0f24a23..da112bfd6 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -527,7 +527,7 @@ static CV_PossibleValue_t nametagrestat_cons_t[] = { {0, "Off"}, {1, "Restat"}, {2, "Always"}, {0, NULL}}; -consvar_t cv_nametag = {"kartnametag", "On", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_nametag = {"kartnametag", "Off", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_nametagtrans = {"kartnametagtransparency", "Dynamic", CV_SAVE, nametagtrans_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_nametagfacerank = {"kartnametagfacerank", "Off", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_nametagrestat = {"kartnametagrestat", "Restat", CV_SAVE, nametagrestat_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; -- 2.54.0 From 8cae47f756b32d21df2b2e3a77bf0c70daa206d1 Mon Sep 17 00:00:00 2001 From: Alug Date: Sun, 25 Feb 2024 18:35:00 +0100 Subject: [PATCH 48/79] disable driftgauge by default --- src/d_netcmd.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/d_netcmd.c b/src/d_netcmd.c index da112bfd6..448968836 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -546,7 +546,7 @@ static CV_PossibleValue_t driftgaugeoffset_cons_t[] = { static CV_PossibleValue_t driftgaugestyle_cons_t[] = { {1, "Default"}, {2, "Small"}, {3, "Big Numbers"}, {4, "Numbers Only"}, {0, NULL}}; -consvar_t cv_driftgauge = {"kartdriftgauge", "On", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_driftgauge = {"kartdriftgauge", "Off", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_driftgaugeofs = {"kartdriftgaugeoffset", "-20", CV_FLOAT|CV_SAVE, driftgaugeoffset_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_driftgaugetrans = {"kartdriftgaugetransparency", "On", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_driftgaugestyle = {"kartdriftgaugestyle", "1", CV_SAVE, driftgaugestyle_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; -- 2.54.0 From 91efc08823e00d338e3573dcd34ada0afa491e9c Mon Sep 17 00:00:00 2001 From: Alug Date: Sun, 25 Feb 2024 21:33:46 +0100 Subject: [PATCH 49/79] fix tagsdisplayed counter --- src/k_kart.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index bf56b8518..1948e35f1 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -9061,11 +9061,6 @@ static void K_drawNameTags(void) continue; if (!P_CheckSight(stplyr->mo, players[i].mo)) continue; - - tagsdisplayed += 1; - - if (tagsdisplayed > cv_nametagmaxplayers.value) - break; switch (cv_nametagtrans.value) { @@ -9110,6 +9105,11 @@ static void K_drawNameTags(void) if (pos.x == -1 || pos.y == -1) continue; + tagsdisplayed += 1; + + if (tagsdisplayed > cv_nametagmaxplayers.value) + break; + //Flipcam off if (players[i].mo->eflags & MFE_VERTICALFLIP && !(players[i].pflags & PF_FLIPCAM)) pos.y += players[i].mo->height; -- 2.54.0 From 7d991d1993c44d36f265a40ecd340f5abc6e41e5 Mon Sep 17 00:00:00 2001 From: Alug Date: Sun, 25 Feb 2024 21:32:25 +0100 Subject: [PATCH 50/79] fix tagsdisplayed counter --- src/k_kart.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index e6a723c5b..a4ed86872 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -9096,11 +9096,6 @@ static void K_drawNameTags(void) if (!P_CheckSight(stplyr->mo, players[i].mo)) continue; - tagsdisplayed += 1; - - if (tagsdisplayed > cv_nametagmaxplayers.value) - break; - switch (cv_nametagtrans.value) { case 0: @@ -9143,6 +9138,11 @@ static void K_drawNameTags(void) //Check for negative screencoords if (pos.x == -1 || pos.y == -1) continue; + + tagsdisplayed += 1; + + if (tagsdisplayed > cv_nametagmaxplayers.value) + break; //Flipcam off if (players[i].mo->eflags & MFE_VERTICALFLIP && !(players[i].pflags & PF_FLIPCAM)) -- 2.54.0 From b802e4fa8a46804946021d237e7c243cc808dc06 Mon Sep 17 00:00:00 2001 From: Alug Date: Mon, 26 Feb 2024 20:58:39 +0100 Subject: [PATCH 51/79] use V_LocalTransFlag for nametags --- src/k_kart.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/k_kart.c b/src/k_kart.c index 1948e35f1..1ac731588 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -9035,6 +9035,7 @@ static void K_drawNameTags(void) int tagsdisplayed = 0; char *tag; patch_t *icon; + INT32 hudtransflag = V_LocalTransFlag(); if (!stplyr->mo || stplyr->spectator || splitscreen) return; @@ -9091,7 +9092,7 @@ static void K_drawNameTags(void) trans = V_40TRANS; break; case 4: - trans = V_HUDTRANS; + trans = hudtransflag; break; default: break; -- 2.54.0 From cda07a1594d0ab42f89b19bb9a88188f0dd9010f Mon Sep 17 00:00:00 2001 From: Alug Date: Mon, 26 Feb 2024 20:58:50 +0100 Subject: [PATCH 52/79] use V_LocalTransFlag for driftgauge --- src/k_kart.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index f73aadd5d..235686aef 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -9287,6 +9287,7 @@ static void K_drawDriftGauge(void) vector2_t pos = {0}; fixed_t basex,basey; INT32 drifttrans = 0; + INT32 hudtransflag = V_LocalTransFlag(); int dup = vid.dupx; int i,j; @@ -9334,7 +9335,7 @@ static void K_drawDriftGauge(void) INT32 BAR_WIDTH; if (cv_driftgaugetrans.value) - drifttrans = V_HUDTRANS; + drifttrans = hudtransflag; else drifttrans = 0; @@ -9406,7 +9407,7 @@ static void K_drawDriftGauge(void) cmap = R_GetTranslationColormap(TC_RAINBOW, 1 + leveltime % (MAXSKINCOLORS-1),GTC_CACHE); else cmap = R_GetTranslationColormap(TC_RAINBOW, driftskins[level],GTC_CACHE); - + V_DrawPaddedTallColorNum(basex + (dup*16), basey, V_NOSCALESTART|V_OFFSET|drifttrans, driftcharge*100 / driftval, 3, cmap); break; default: -- 2.54.0 From 3e6a66b12d277aaba3c18b15169268f3d149191d Mon Sep 17 00:00:00 2001 From: Alug Date: Mon, 26 Feb 2024 21:20:53 +0100 Subject: [PATCH 53/79] add toggle for showing nametags after you finished a race off by default to match sg nametags --- src/d_netcmd.c | 2 ++ src/d_netcmd.h | 1 + src/k_kart.c | 6 +++--- src/m_menu.c | 4 +++- 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/d_netcmd.c b/src/d_netcmd.c index 24e8a4cd7..d12af5767 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -538,6 +538,7 @@ consvar_t cv_showownnametag = {"kartnametagshowown", "Off", CV_SAVE, CV_OnOff, N consvar_t cv_smallnametags = {"kartnametagsmall", "Off", CV_SAVE, nametagsize_cons_t, Nametag_menu_Onchange, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_nametaghop = {"kartnametaghop", "On", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_nametagscore = {"kartnametagscore", "Off", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_shownametagfinish = {"kartshownametagfinished", "No", CV_SAVE, CV_YesNo, NULL, 0, NULL, NULL, 0, 0, NULL}; static CV_PossibleValue_t skinselectspin_cons_t[] = { {0, "Off"}, {1, "Slow"}, {2, "2"}, {3, "3"}, {4, "4"}, {5, "5"}, {6, "6"}, {7, "7"}, {8, "8"}, {9, "9"}, {10, "Fast"}, {SKINSELECTSPIN_PAIN, "Pain"}, {0, NULL}}; @@ -1142,6 +1143,7 @@ void D_RegisterClientCommands(void) CV_RegisterVar(&cv_nametagrestat); CV_RegisterVar(&cv_nametaghop); CV_RegisterVar(&cv_nametagscore); + CV_RegisterVar(&cv_shownametagfinish); CV_RegisterVar(&cv_perfstats); CV_RegisterVar(&cv_ps_thinkframe_page); diff --git a/src/d_netcmd.h b/src/d_netcmd.h index 1e0a7a847..642e496e6 100644 --- a/src/d_netcmd.h +++ b/src/d_netcmd.h @@ -185,6 +185,7 @@ extern consvar_t cv_smallnametags; extern consvar_t cv_nametagrestat; extern consvar_t cv_nametaghop; extern consvar_t cv_nametagscore; +extern consvar_t cv_shownametagfinish; #define SKINSELECTSPIN_PAIN 25 extern consvar_t cv_skinselectspin; diff --git a/src/k_kart.c b/src/k_kart.c index 1ac731588..ec4e2da66 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -9037,7 +9037,7 @@ static void K_drawNameTags(void) patch_t *icon; INT32 hudtransflag = V_LocalTransFlag(); - if (!stplyr->mo || stplyr->spectator || splitscreen) + if (!stplyr->mo || stplyr->spectator || splitscreen || (stplyr->exiting && !cv_shownametagfinish.value)) return; for (i = 0; i < MAXPLAYERS; i++) @@ -9105,7 +9105,7 @@ static void K_drawNameTags(void) //Check for negative screencoords if (pos.x == -1 || pos.y == -1) continue; - + tagsdisplayed += 1; if (tagsdisplayed > cv_nametagmaxplayers.value) @@ -9219,7 +9219,7 @@ static void K_drawNameTags(void) } if (cv_nametagfacerank.value) - { + { V_DrawMappedPatch(namex, namey - dup*(icon->height+1), vflags, icon, cm); namex += dup*(icon->height+1); // add offset to other stuff } diff --git a/src/m_menu.c b/src/m_menu.c index 350f510d6..f8c30ed09 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -367,7 +367,6 @@ menu_t OP_AdvancedBirdDef; // Chaotic menu_t OP_NametagDef; -//menu_t OP_OGLShadowsDef; #define numaddonsshown 4 @@ -2227,6 +2226,7 @@ static menuitem_t OP_NametagMenu[] = {IT_STRING | IT_CVAR, NULL, "Nametag Restat", &cv_nametagrestat, 80}, {IT_STRING | IT_CVAR, NULL, "Nametag Hop", &cv_nametaghop, 90}, {IT_STRING | IT_CVAR, NULL, "Small Nametags", &cv_smallnametags, 100}, + {IT_STRING | IT_CVAR, NULL, "Show Nametags after Race finish", &cv_shownametagfinish, 110}, //{IT_STRING | IT_CVAR, NULL, "Nametag Scaling", &cv_nametagscaling, 70} }; @@ -2243,6 +2243,7 @@ static const char* OP_NametagTooltips[] = "Show stats in nametags.", "Enable Saltyhop support for nametags.", "Alternative smaller nametags.", + "Toggles being able to see Nametags after finishing a race.", }; enum @@ -2258,6 +2259,7 @@ enum nt_ntrestat, nt_nthop, nt_smol, + nt_finish, }; -- 2.54.0 From b1fb1c2293e79aa439fd81db6b2cb855874ad354 Mon Sep 17 00:00:00 2001 From: Alug Date: Mon, 26 Feb 2024 22:00:53 +0100 Subject: [PATCH 54/79] toggle for showing nametags during spectating --- src/d_netcmd.c | 2 ++ src/d_netcmd.h | 1 + src/k_kart.c | 2 +- src/m_menu.c | 5 ++++- 4 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/d_netcmd.c b/src/d_netcmd.c index d12af5767..4ee7a7c1d 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -539,6 +539,7 @@ consvar_t cv_smallnametags = {"kartnametagsmall", "Off", CV_SAVE, nametagsize_co consvar_t cv_nametaghop = {"kartnametaghop", "On", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_nametagscore = {"kartnametagscore", "Off", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_shownametagfinish = {"kartshownametagfinished", "No", CV_SAVE, CV_YesNo, NULL, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_shownametagspectator = {"kartshownametagspectator", "No", CV_SAVE, CV_YesNo, NULL, 0, NULL, NULL, 0, 0, NULL}; static CV_PossibleValue_t skinselectspin_cons_t[] = { {0, "Off"}, {1, "Slow"}, {2, "2"}, {3, "3"}, {4, "4"}, {5, "5"}, {6, "6"}, {7, "7"}, {8, "8"}, {9, "9"}, {10, "Fast"}, {SKINSELECTSPIN_PAIN, "Pain"}, {0, NULL}}; @@ -1144,6 +1145,7 @@ void D_RegisterClientCommands(void) CV_RegisterVar(&cv_nametaghop); CV_RegisterVar(&cv_nametagscore); CV_RegisterVar(&cv_shownametagfinish); + CV_RegisterVar(&cv_shownametagspectator); CV_RegisterVar(&cv_perfstats); CV_RegisterVar(&cv_ps_thinkframe_page); diff --git a/src/d_netcmd.h b/src/d_netcmd.h index 642e496e6..465ad749f 100644 --- a/src/d_netcmd.h +++ b/src/d_netcmd.h @@ -186,6 +186,7 @@ extern consvar_t cv_nametagrestat; extern consvar_t cv_nametaghop; extern consvar_t cv_nametagscore; extern consvar_t cv_shownametagfinish; +extern consvar_t cv_shownametagspectator; #define SKINSELECTSPIN_PAIN 25 extern consvar_t cv_skinselectspin; diff --git a/src/k_kart.c b/src/k_kart.c index ec4e2da66..80c9efe6a 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -9037,7 +9037,7 @@ static void K_drawNameTags(void) patch_t *icon; INT32 hudtransflag = V_LocalTransFlag(); - if (!stplyr->mo || stplyr->spectator || splitscreen || (stplyr->exiting && !cv_shownametagfinish.value)) + if (!stplyr->mo || (stplyr->spectator && !cv_shownametagspectator.value) || splitscreen || (stplyr->exiting && !cv_shownametagfinish.value)) return; for (i = 0; i < MAXPLAYERS; i++) diff --git a/src/m_menu.c b/src/m_menu.c index f8c30ed09..69073a199 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -2227,6 +2227,7 @@ static menuitem_t OP_NametagMenu[] = {IT_STRING | IT_CVAR, NULL, "Nametag Hop", &cv_nametaghop, 90}, {IT_STRING | IT_CVAR, NULL, "Small Nametags", &cv_smallnametags, 100}, {IT_STRING | IT_CVAR, NULL, "Show Nametags after Race finish", &cv_shownametagfinish, 110}, + {IT_STRING | IT_CVAR, NULL, "Show Nametags in Spectator Mode", &cv_shownametagspectator, 130}, //{IT_STRING | IT_CVAR, NULL, "Nametag Scaling", &cv_nametagscaling, 70} }; @@ -2243,7 +2244,8 @@ static const char* OP_NametagTooltips[] = "Show stats in nametags.", "Enable Saltyhop support for nametags.", "Alternative smaller nametags.", - "Toggles being able to see Nametags after finishing a race.", + "Show Nametags after Race finish.", + "Show Nametags when you are spectating.", }; enum @@ -2260,6 +2262,7 @@ enum nt_nthop, nt_smol, nt_finish, + nt_spec, }; -- 2.54.0 From e7133e948081fbba79491bf68c8ee8671bcd2435 Mon Sep 17 00:00:00 2001 From: Alug Date: Mon, 26 Feb 2024 22:01:39 +0100 Subject: [PATCH 55/79] toggle for showing nametags during spectating --- src/d_netcmd.c | 2 ++ src/d_netcmd.h | 1 + src/k_kart.c | 2 +- src/m_menu.c | 5 ++++- 4 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/d_netcmd.c b/src/d_netcmd.c index 138c35b3a..dd5873de5 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -539,6 +539,7 @@ consvar_t cv_smallnametags = {"kartnametagsmall", "Off", CV_SAVE, nametagsize_co consvar_t cv_nametaghop = {"kartnametaghop", "On", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_nametagscore = {"kartnametagscore", "Off", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_shownametagfinish = {"kartshownametagfinished", "No", CV_SAVE, CV_YesNo, NULL, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_shownametagspectator = {"kartshownametagspectator", "No", CV_SAVE, CV_YesNo, NULL, 0, NULL, NULL, 0, 0, NULL}; static CV_PossibleValue_t driftgaugeoffset_cons_t[] = { {-FRACUNIT*128, "MIN"}, {FRACUNIT*128, "MAX"}, {0, NULL}}; @@ -1155,6 +1156,7 @@ void D_RegisterClientCommands(void) CV_RegisterVar(&cv_nametaghop); CV_RegisterVar(&cv_nametagscore); CV_RegisterVar(&cv_shownametagfinish); + CV_RegisterVar(&cv_shownametagspectator); CV_RegisterVar(&cv_driftgauge); CV_RegisterVar(&cv_driftgaugeofs); diff --git a/src/d_netcmd.h b/src/d_netcmd.h index d22a3fe8a..293bbbc75 100644 --- a/src/d_netcmd.h +++ b/src/d_netcmd.h @@ -186,6 +186,7 @@ extern consvar_t cv_nametagrestat; extern consvar_t cv_nametaghop; extern consvar_t cv_nametagscore; extern consvar_t cv_shownametagfinish; +extern consvar_t cv_shownametagspectator; #define SKINSELECTSPIN_PAIN 25 extern consvar_t cv_skinselectspin; diff --git a/src/k_kart.c b/src/k_kart.c index b90e9a4fd..a967ef6b6 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -9072,7 +9072,7 @@ static void K_drawNameTags(void) patch_t *icon; INT32 hudtransflag = V_LocalTransFlag(); - if (!stplyr->mo || stplyr->spectator || splitscreen || (stplyr->exiting && !cv_shownametagfinish.value)) + if (!stplyr->mo || (stplyr->spectator && !cv_shownametagspectator.value) || splitscreen || (stplyr->exiting && !cv_shownametagfinish.value)) return; for (i = 0; i < MAXPLAYERS; i++) diff --git a/src/m_menu.c b/src/m_menu.c index 75565d046..961f597ab 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -2234,6 +2234,7 @@ static menuitem_t OP_NametagMenu[] = {IT_STRING | IT_CVAR, NULL, "Nametag Hop", &cv_nametaghop, 90}, {IT_STRING | IT_CVAR, NULL, "Small Nametags", &cv_smallnametags, 100}, {IT_STRING | IT_CVAR, NULL, "Show Nametags after Race finish", &cv_shownametagfinish, 110}, + {IT_STRING | IT_CVAR, NULL, "Show Nametags in Spectator Mode", &cv_shownametagspectator, 130}, //{IT_STRING | IT_CVAR, NULL, "Nametag Scaling", &cv_nametagscaling, 70} }; @@ -2251,7 +2252,8 @@ static const char* OP_NametagTooltips[] = "Show stats in nametags.", "Enable Saltyhop support for nametags.", "Alternative smaller nametags.", - "Toggles being able to see Nametags after finishing a race.", + "Show Nametags after Race finish.", + "Show Nametags when you are spectating.", }; enum @@ -2268,6 +2270,7 @@ enum nt_nthop, nt_smol, nt_finish, + nt_spec, }; -- 2.54.0 From 5e836d4bc16b6fdbd7465a4ba5fe4df3896f1afe Mon Sep 17 00:00:00 2001 From: Alug Date: Mon, 26 Feb 2024 22:01:11 +0100 Subject: [PATCH 56/79] make the menus a little prettier --- src/m_menu.c | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/m_menu.c b/src/m_menu.c index 961f597ab..f22ba807e 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -2223,17 +2223,17 @@ static menuitem_t OP_ForkedBirdMenu[] = static menuitem_t OP_NametagMenu[] = { {IT_HEADER, NULL, "Nametag", NULL, 0}, - {IT_STRING | IT_CVAR, NULL, "Nametag", &cv_nametag, 10}, - {IT_STRING | IT_CVAR, NULL, "Show Char image in Nametag", &cv_nametagfacerank, 20}, - {IT_STRING | IT_CVAR, NULL, "Show Own Nametag", &cv_showownnametag, 30}, - {IT_STRING | IT_CVAR, NULL, "Nametag Max distance", &cv_nametagdist, 40}, - {IT_STRING | IT_CVAR, NULL, "Nametag Max Display Players", &cv_nametagmaxplayers, 50}, - {IT_STRING | IT_CVAR, NULL, "Nametag Transparency", &cv_nametagtrans, 60}, - {IT_STRING | IT_CVAR, NULL, "Nametag Score", &cv_nametagscore, 70}, - {IT_STRING | IT_CVAR, NULL, "Nametag Restat", &cv_nametagrestat, 80}, - {IT_STRING | IT_CVAR, NULL, "Nametag Hop", &cv_nametaghop, 90}, - {IT_STRING | IT_CVAR, NULL, "Small Nametags", &cv_smallnametags, 100}, - {IT_STRING | IT_CVAR, NULL, "Show Nametags after Race finish", &cv_shownametagfinish, 110}, + {IT_STRING | IT_CVAR, NULL, "Nametag", &cv_nametag, 20}, + {IT_STRING | IT_CVAR, NULL, "Show Char image in Nametag", &cv_nametagfacerank, 30}, + {IT_STRING | IT_CVAR, NULL, "Show Own Nametag", &cv_showownnametag, 40}, + {IT_STRING | IT_CVAR, NULL, "Nametag Max distance", &cv_nametagdist, 50}, + {IT_STRING | IT_CVAR, NULL, "Nametag Max Display Players", &cv_nametagmaxplayers, 60}, + {IT_STRING | IT_CVAR, NULL, "Nametag Transparency", &cv_nametagtrans, 70}, + {IT_STRING | IT_CVAR, NULL, "Nametag Score", &cv_nametagscore, 80}, + {IT_STRING | IT_CVAR, NULL, "Nametag Restat", &cv_nametagrestat, 90}, + {IT_STRING | IT_CVAR, NULL, "Nametag Hop", &cv_nametaghop, 100}, + {IT_STRING | IT_CVAR, NULL, "Small Nametags", &cv_smallnametags, 110}, + {IT_STRING | IT_CVAR, NULL, "Show Nametags after Race finish", &cv_shownametagfinish, 120}, {IT_STRING | IT_CVAR, NULL, "Show Nametags in Spectator Mode", &cv_shownametagspectator, 130}, //{IT_STRING | IT_CVAR, NULL, "Nametag Scaling", &cv_nametagscaling, 70} }; @@ -2277,10 +2277,10 @@ enum static menuitem_t OP_DriftGaugeMenu[] = { {IT_HEADER, NULL, "Driftgauge", NULL, 0}, - {IT_STRING | IT_CVAR, NULL, "Driftgauge", &cv_driftgauge, 10}, - {IT_STRING | IT_CVAR, NULL, "Driftgauge Transparency", &cv_driftgaugetrans, 20}, - {IT_STRING | IT_CVAR, NULL, "Driftgauge Offset", &cv_driftgaugeofs, 30}, - {IT_STRING | IT_CVAR, NULL, "Driftgauge Style", &cv_driftgaugestyle, 40}, + {IT_STRING | IT_CVAR, NULL, "Driftgauge", &cv_driftgauge, 20}, + {IT_STRING | IT_CVAR, NULL, "Driftgauge Transparency", &cv_driftgaugetrans, 30}, + {IT_STRING | IT_CVAR, NULL, "Driftgauge Offset", &cv_driftgaugeofs, 40}, + {IT_STRING | IT_CVAR, NULL, "Driftgauge Style", &cv_driftgaugestyle, 50}, }; static const char* OP_DriftGaugeTooltips[] = @@ -2854,7 +2854,7 @@ menu_t OP_HudOffsetDef = DEFAULTSCROLLSTYLE(NULL, OP_HudOffsetMenu, &OP_SaturnDe menu_t OP_SaturnCreditsDef = DEFAULTMENUSTYLE(NULL, OP_SaturnCreditsMenu, &OP_SaturnDef, 30, 10); menu_t OP_BirdDef = DEFAULTMENUSTYLE(NULL, OP_BirdMenu, &OP_MainDef, 30, 30); -menu_t OP_NametagDef = DEFAULTMENUSTYLE(NULL, OP_NametagMenu, &OP_SaturnDef, 30, 60); +menu_t OP_NametagDef = DEFAULTMENUSTYLE(NULL, OP_NametagMenu, &OP_SaturnDef, 30, 40); menu_t OP_DriftGaugeDef = DEFAULTMENUSTYLE(NULL, OP_DriftGaugeMenu, &OP_SaturnDef, 30, 60); -- 2.54.0 From e4c59824f42387e2f1dad0bc1412166153a7221a Mon Sep 17 00:00:00 2001 From: Alug Date: Mon, 26 Feb 2024 23:48:47 +0100 Subject: [PATCH 57/79] fix compile for qt --- src/k_kart.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index a967ef6b6..243016f81 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -9400,15 +9400,17 @@ static void K_drawDriftGauge(void) V_DrawPingNum(cv_driftgaugestyle.value == 2 ? basex + (dup*22) : basex + (dup*32), basey, V_NOSCALESTART|V_OFFSET|drifttrans, driftcharge*100 / driftval, cmap); } break; - case 4: - UINT8 *cmap; - INT32 level = min(driftcharge / driftval, 2); - if (driftcharge >= driftval*4) - cmap = R_GetTranslationColormap(TC_RAINBOW, 1 + leveltime % (MAXSKINCOLORS-1),GTC_CACHE); - else - cmap = R_GetTranslationColormap(TC_RAINBOW, driftskins[level],GTC_CACHE); + case 4: + { + UINT8 *cmap; + INT32 level = min(driftcharge / driftval, 2); + if (driftcharge >= driftval*4) + cmap = R_GetTranslationColormap(TC_RAINBOW, 1 + leveltime % (MAXSKINCOLORS-1),GTC_CACHE); + else + cmap = R_GetTranslationColormap(TC_RAINBOW, driftskins[level],GTC_CACHE); - V_DrawPaddedTallColorNum(basex + (dup*16), basey, V_NOSCALESTART|V_OFFSET|drifttrans, driftcharge*100 / driftval, 3, cmap); + V_DrawPaddedTallColorNum(basex + (dup*16), basey, V_NOSCALESTART|V_OFFSET|drifttrans, driftcharge*100 / driftval, 3, cmap); + } break; default: break; -- 2.54.0 From 4f0ec1a900b884200f60996dcbc33ce971473f94 Mon Sep 17 00:00:00 2001 From: Alug Date: Wed, 28 Feb 2024 22:10:57 +0100 Subject: [PATCH 58/79] kill have_blua --- src/k_kart.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/k_kart.c b/src/k_kart.c index 31873efd8..acf13afcf 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -10455,6 +10455,7 @@ void K_drawKartHUD(void) } // Draw the item window + K_drawKartItem(); if (LUA_HudEnabled(hud_item) && !freecam) K_drawKartItem(); -- 2.54.0 From 91bda83c9243b8bbc82a2cde9756597e462ea22c Mon Sep 17 00:00:00 2001 From: Alug Date: Wed, 28 Feb 2024 22:11:41 +0100 Subject: [PATCH 59/79] fix conflict --- src/k_kart.c | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index acf13afcf..20c72b35a 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -10455,24 +10455,19 @@ void K_drawKartHUD(void) } // Draw the item window - K_drawKartItem(); if (LUA_HudEnabled(hud_item) && !freecam) K_drawKartItem(); if (cv_driftgauge.value && !modeattacking) { -#ifdef HAVE_BLUA - if (LUA_HudEnabled(hud_driftgauge)) -#endif - K_drawDriftGauge(); + if (LUA_HudEnabled(hud_driftgauge)) + K_drawDriftGauge(); } if (cv_nametag.value) { -#ifdef HAVE_BLUA - if (LUA_HudEnabled(hud_nametags)) -#endif - K_drawNameTags(); + if (LUA_HudEnabled(hud_nametags)) + K_drawNameTags(); } // If not splitscreen, draw... -- 2.54.0 From 015cf95f4eb0531d13aa85f6702583b558eb6487 Mon Sep 17 00:00:00 2001 From: Alug Date: Wed, 28 Feb 2024 22:31:06 +0100 Subject: [PATCH 60/79] stimky ugly --- src/m_menu.c | 67 ++++++++++++++++++++++++++-------------------------- 1 file changed, 33 insertions(+), 34 deletions(-) diff --git a/src/m_menu.c b/src/m_menu.c index 922841404..5cf720be7 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -1516,13 +1516,13 @@ static const char* OP_OpenGLTooltips[] = static menuitem_t OP_SoundOptionsMenu[] = { - {IT_STRING|IT_CVAR|IT_CV_NOPRINT, NULL, "SFX", &cv_gamesounds, 10}, + {IT_STRING|IT_CVAR|IT_CV_NOPRINT, NULL, "SFX", &cv_gamesounds, 10}, {IT_STRING|IT_CVAR|IT_CV_SLIDER, - NULL, "SFX Volume", &cv_soundvolume, 18}, + NULL, "SFX Volume", &cv_soundvolume, 18}, - {IT_STRING|IT_CVAR|IT_CV_NOPRINT, NULL, "Music", &cv_gamedigimusic, 30}, + {IT_STRING|IT_CVAR|IT_CV_NOPRINT, NULL, "Music", &cv_gamedigimusic, 30}, {IT_STRING|IT_CVAR|IT_CV_SLIDER, - NULL, "Music Volume", &cv_digmusicvolume, 38}, + NULL, "Music Volume", &cv_digmusicvolume, 38}, /* -- :nonnathisshit: {IT_STRING|IT_CVAR, NULL, "MIDI", &cv_gamemidimusic, 50}, @@ -1532,19 +1532,19 @@ static menuitem_t OP_SoundOptionsMenu[] = //{IT_STRING|IT_CALL, NULL, "Restart Audio System", M_RestartAudio, 50}, - {IT_STRING|IT_CVAR, NULL, "Reverse L/R Channels", &stereoreverse, 50}, - {IT_STRING|IT_CVAR, NULL, "Surround Sound", &surround, 60}, + {IT_STRING|IT_CVAR, NULL, "Reverse L/R Channels", &stereoreverse, 50}, + {IT_STRING|IT_CVAR, NULL, "Surround Sound", &surround, 60}, - {IT_STRING|IT_CVAR, NULL, "Chat Notifications", &cv_chatnotifications, 75}, - {IT_STRING|IT_CVAR, NULL, "Character voices", &cv_kartvoices, 85}, - {IT_STRING|IT_CVAR, NULL, "Powerup Warning", &cv_kartinvinsfx, 95}, + {IT_STRING|IT_CVAR, NULL, "Chat Notifications", &cv_chatnotifications, 75}, + {IT_STRING|IT_CVAR, NULL, "Character voices", &cv_kartvoices, 85}, + {IT_STRING|IT_CVAR, NULL, "Powerup Warning", &cv_kartinvinsfx, 95}, - {IT_KEYHANDLER|IT_STRING, NULL, "Sound Test", M_HandleSoundTest, 105}, - {IT_STRING|IT_CALL, NULL, "Music Test", M_MusicTest, 115}, + {IT_KEYHANDLER|IT_STRING, NULL, "Sound Test", M_HandleSoundTest, 105}, + {IT_STRING|IT_CALL, NULL, "Music Test", M_MusicTest, 115}, - {IT_STRING|IT_CVAR, NULL, "Play Music While Unfocused", &cv_playmusicifunfocused, 125}, - {IT_STRING|IT_CVAR, NULL, "Play SFX While Unfocused", &cv_playsoundifunfocused, 135}, - {IT_STRING|IT_SUBMENU, NULL, "Advanced Settings...", &OP_SoundAdvancedDef, 155} + {IT_STRING|IT_CVAR, NULL, "Play Music While Unfocused", &cv_playmusicifunfocused, 125}, + {IT_STRING|IT_CVAR, NULL, "Play SFX While Unfocused", &cv_playsoundifunfocused, 135}, + {IT_STRING|IT_SUBMENU, NULL, "Advanced Settings...", &OP_SoundAdvancedDef, 155} }; static const char* OP_SoundTooltips[] = @@ -1571,17 +1571,17 @@ static menuitem_t OP_SoundAdvancedMenu[] = #ifdef HAVE_OPENMPT {IT_HEADER, NULL, "Tracker Module Options", NULL, 10}, - {IT_STRING | IT_CVAR, NULL, "Instrument Filter", &cv_modfilter, 22}, - {IT_STRING | IT_CVAR, NULL, "Amiga Resampler", &cv_amigafilter, 42}, + {IT_STRING | IT_CVAR, NULL, "Instrument Filter", &cv_modfilter, 22}, + {IT_STRING | IT_CVAR, NULL, "Amiga Resampler", &cv_amigafilter, 42}, #if OPENMPT_API_VERSION_MAJOR < 1 && OPENMPT_API_VERSION_MINOR > 4 - {IT_STRING | IT_CVAR, NULL, "Amiga Type", &cv_amigatype, 62}, + {IT_STRING | IT_CVAR, NULL, "Amiga Type", &cv_amigatype, 62}, #endif - {IT_STRING | IT_CVAR, NULL, "Stereo Seperation", &cv_stereosep, 82}, + {IT_STRING | IT_CVAR, NULL, "Stereo Seperation", &cv_stereosep, 82}, #endif - {IT_HEADER, NULL, "Misc", NULL, 105}, + {IT_HEADER, NULL, "Misc", NULL, 105}, - {IT_STRING | IT_CVAR, NULL, "Grow Music", &cv_growmusic, 117}, - {IT_STRING | IT_CVAR, NULL, "Invulnerability Music", &cv_supermusic, 137}, + {IT_STRING | IT_CVAR, NULL, "Grow Music", &cv_growmusic, 117}, + {IT_STRING | IT_CVAR, NULL, "Invulnerability Music", &cv_supermusic, 137}, }; static const char* OP_SoundAdvancedTooltips[] = @@ -1604,11 +1604,10 @@ static const char* OP_SoundAdvancedTooltips[] = static menuitem_t OP_DataOptionsMenu[] = { - {IT_STRING | IT_CALL, NULL, "Screenshot Options...", M_ScreenshotOptions, 10}, {IT_STRING | IT_CALL, NULL, "Addon Options...", M_AddonsOptions, 20}, {IT_STRING | IT_SUBMENU, NULL, "Replay Options...", &MISC_ReplayOptionsDef, 30}, - {IT_STRING | IT_SUBMENU, NULL, "Protocol options...", &OP_ProtocolDef, 40}, + {IT_STRING | IT_SUBMENU, NULL, "Protocol options...", &OP_ProtocolDef, 40}, #ifdef HAVE_DISCORDRPC {IT_STRING | IT_SUBMENU, NULL, "Discord Options...", &OP_DiscordOptionsDef, 50}, @@ -1624,21 +1623,21 @@ static menuitem_t OP_ScreenshotOptionsMenu[] = {IT_STRING|IT_CVAR|IT_CV_STRING, NULL, "Custom Folder", &cv_screenshot_folder, 20}, {IT_HEADER, NULL, "Screenshots (F8)", NULL, 50}, - {IT_STRING|IT_CVAR, NULL, "Memory Level", &cv_zlib_memory, 60}, - {IT_STRING|IT_CVAR, NULL, "Compression Level", &cv_zlib_level, 70}, - {IT_STRING|IT_CVAR, NULL, "Strategy", &cv_zlib_strategy, 80}, - {IT_STRING|IT_CVAR, NULL, "Window Size", &cv_zlib_window_bits, 90}, + {IT_STRING|IT_CVAR, NULL, "Memory Level", &cv_zlib_memory, 60}, + {IT_STRING|IT_CVAR, NULL, "Compression Level", &cv_zlib_level, 70}, + {IT_STRING|IT_CVAR, NULL, "Strategy", &cv_zlib_strategy, 80}, + {IT_STRING|IT_CVAR, NULL, "Window Size", &cv_zlib_window_bits, 90}, {IT_HEADER, NULL, "Movie Mode (F9)", NULL, 105}, - {IT_STRING|IT_CVAR, NULL, "Capture Mode", &cv_moviemode, 115}, + {IT_STRING|IT_CVAR, NULL, "Capture Mode", &cv_moviemode, 115}, - {IT_STRING|IT_CVAR, NULL, "Region Optimizing", &cv_gif_optimize, 125}, - {IT_STRING|IT_CVAR, NULL, "Downscaling", &cv_gif_downscale, 135}, + {IT_STRING|IT_CVAR, NULL, "Region Optimizing", &cv_gif_optimize, 125}, + {IT_STRING|IT_CVAR, NULL, "Downscaling", &cv_gif_downscale, 135}, - {IT_STRING|IT_CVAR, NULL, "Memory Level", &cv_zlib_memorya, 125}, - {IT_STRING|IT_CVAR, NULL, "Compression Level", &cv_zlib_levela, 135}, - {IT_STRING|IT_CVAR, NULL, "Strategy", &cv_zlib_strategya, 145}, - {IT_STRING|IT_CVAR, NULL, "Window Size", &cv_zlib_window_bitsa, 155}, + {IT_STRING|IT_CVAR, NULL, "Memory Level", &cv_zlib_memorya, 125}, + {IT_STRING|IT_CVAR, NULL, "Compression Level", &cv_zlib_levela, 135}, + {IT_STRING|IT_CVAR, NULL, "Strategy", &cv_zlib_strategya, 145}, + {IT_STRING|IT_CVAR, NULL, "Window Size", &cv_zlib_window_bitsa, 155}, }; enum -- 2.54.0 From 3e94cd7c1e00a36bf062b4560811d18fb5877ac9 Mon Sep 17 00:00:00 2001 From: Alug Date: Fri, 1 Mar 2024 01:04:44 +0100 Subject: [PATCH 61/79] fix shearing offset with flipcam in K_GetScreenCoords --- src/k_kart.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/k_kart.c b/src/k_kart.c index 4592bf17d..95b328bc4 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -8973,6 +8973,8 @@ static void K_GetScreenCoords(vector2_t *vec, player_t *player, camera_t *came, #endif // thanks fickle offset = FixedDiv(offset, fovratio); + if (srcflip) + offset = -offset; // flipcam y = y + offset; } @@ -8980,6 +8982,21 @@ static void K_GetScreenCoords(vector2_t *vec, player_t *player, camera_t *came, x = FixedMul(FINETANGENT(((x+ANGLE_90)>>ANGLETOFINESHIFT) & 4095), fov); x = x + xres; + // adjust coords for splitscreen + if (splitscreen == 1){ // 2P + y = y>>1; + if (splitindex) + y = y + yres; + } + if (splitscreen >= 2) { // 3P or 4P + x = x>>1; + y = y>>1; + if (splitindex & 1) + x = x + xres; + if (splitindex >= 2) + y = y + yres; + } + vec->y = y; vec->x = x; } -- 2.54.0 From 60970e71d3b007c1809edf7d529901adf774910b Mon Sep 17 00:00:00 2001 From: Alug Date: Fri, 1 Mar 2024 01:03:03 +0100 Subject: [PATCH 62/79] fix shearing offset with flipcam in K_GetScreenCoords --- 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 20c72b35a..473d8939c 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -8985,6 +8985,8 @@ static void K_GetScreenCoords(vector2_t *vec, player_t *player, camera_t *came, #endif // thanks fickle offset = FixedDiv(offset, fovratio); + if (srcflip) + offset = -offset; // flipcam y = y + offset; } @@ -9012,8 +9014,6 @@ static void K_GetScreenCoords(vector2_t *vec, player_t *player, camera_t *came, if (splitindex >= 2) y = y + yres; } - - vec->y = y; vec->x = x; -- 2.54.0 From 59b9d77c0eb3558f5a80b87e86b92493d3107146 Mon Sep 17 00:00:00 2001 From: Alug Date: Fri, 1 Mar 2024 01:53:17 +0100 Subject: [PATCH 63/79] fix vertical flip driftgauge and make non flipcam behave like the sg lua version --- src/k_kart.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index 473d8939c..cb5db356b 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -9256,6 +9256,7 @@ static void K_drawDriftGauge(void) INT32 hudtransflag = V_LocalTransFlag(); int dup = vid.dupx; int i,j; + fixed_t z; UINT8 driftcolors[3][4] = { {0, 0, 10, 16}, // no drift @@ -9275,24 +9276,26 @@ static void K_drawDriftGauge(void) if (!stplyr->mo || !stplyr->kartstuff[k_drift] || (!splitscreen && !camera->chase)) return; + + z = stplyr->mo->z; + + //vertical flip + if (stplyr->mo->eflags & MFE_VERTICALFLIP) + z += stplyr->mo->height*2; if (!splitscreen) - K_GetScreenCoords(&pos, stplyr, camera, stplyr->mo->x, stplyr->mo->y, stplyr->mo->z+FixedMul(cv_driftgaugeofs.value, cv_driftgaugeofs.value > 0 ? stplyr->mo->scale : mapobjectscale)); + K_GetScreenCoords(&pos, stplyr, camera, stplyr->mo->x, stplyr->mo->y, z+FixedMul(cv_driftgaugeofs.value, cv_driftgaugeofs.value > 0 ? stplyr->mo->scale : mapobjectscale)); else { //Loop through each player camera for splitscreen. for (j = 0; j <= stplyrnum; j++) - K_GetScreenCoords(&pos, stplyr, &camera[j], stplyr->mo->x, stplyr->mo->y, stplyr->mo->z+FixedMul(cv_driftgaugeofs.value, cv_driftgaugeofs.value > 0 ? stplyr->mo->scale : mapobjectscale)); + K_GetScreenCoords(&pos, stplyr, &camera[j], stplyr->mo->x, stplyr->mo->y, z+FixedMul(cv_driftgaugeofs.value, cv_driftgaugeofs.value > 0 ? stplyr->mo->scale : mapobjectscale)); } //Check for negative screencoords if (pos.x == -1 || pos.y == -1) return; - //Flipcam on - if (stplyr->mo->eflags & MFE_VERTICALFLIP && (stplyr->pflags & PF_FLIPCAM)) - pos.y += ((25*dup)<>FRACBITS; basey = pos.y>>FRACBITS; -- 2.54.0 From 6872a533d458ace0685cd727c59eaae28851746f Mon Sep 17 00:00:00 2001 From: Indev Date: Fri, 1 Mar 2024 11:03:55 +0300 Subject: [PATCH 64/79] Fix nametag offsets with reverse gravity and flipcam --- src/k_kart.c | 42 ++++++++++++++++++++++++------------------ 1 file changed, 24 insertions(+), 18 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index 4592bf17d..86237796a 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -9002,16 +9002,22 @@ static void K_drawNameTags(void) char *tag; patch_t *icon; INT32 hudtransflag = V_LocalTransFlag(); + boolean flipcam; if (!stplyr->mo || (stplyr->spectator && !cv_shownametagspectator.value) || splitscreen || (stplyr->exiting && !cv_shownametagfinish.value)) return; + // True if currently viewed player is flipped and has flipcam on + flipcam = (stplyr->pflags & PF_FLIPCAM) && (stplyr->mo->eflags & MFE_VERTICALFLIP); + for (i = 0; i < MAXPLAYERS; i++) { UINT8 *cm; fixed_t distance = 0; fixed_t maxdistance = (10*cv_nametagdist.value)* mapobjectscale; angle_t an; + flipped = 0; + fixed_t z; if (i > PLAYERSMASK) continue; @@ -9066,8 +9072,24 @@ static void K_drawNameTags(void) dup = vid.dupx; - K_GetScreenCoords(&pos, stplyr, camera, players[i].mo->x, players[i].mo->y, players[i].mo->z + players[i].mo->height); - + // If flipcam is on, other player is flipped relative to us when we have different + // verticalflip flag value. Otherwise, they are simply flipped when verticalflip flag says + // so + if (flipcam) + flipped = (players[i].mo->eflags & MFE_VERTICALFLIP) != (stplyr->mo->eflags & MFE_VERTICALFLIP); + else + flipped = players[i].mo->eflags & MFE_VERTICALFLIP; + + z = players[i].mo->z; + + z += (players[i].mo->eflags & MFE_VERTICALFLIP) ? -players[i].mo->height/2 : players[i].mo->height; + + //Saltyhop hehe + if (cv_saltyhop.value && cv_nametaghop.value) + z += (players[i].mo->eflags & MFE_VERTICALFLIP) ? -players[i].mo->spriteyoffset : players[i].mo->spriteyoffset; + + K_GetScreenCoords(&pos, stplyr, camera, players[i].mo->x, players[i].mo->y, z); + //Check for negative screencoords if (pos.x == -1 || pos.y == -1) continue; @@ -9077,22 +9099,6 @@ static void K_drawNameTags(void) if (tagsdisplayed > cv_nametagmaxplayers.value) break; - //Flipcam off - if (players[i].mo->eflags & MFE_VERTICALFLIP && !(players[i].pflags & PF_FLIPCAM)) - pos.y += players[i].mo->height; - - //Flipcam on - if (players[i].mo->eflags & MFE_VERTICALFLIP && (players[i].pflags & PF_FLIPCAM)) - pos.y -= ((30*dup)<eflags & MFE_VERTICALFLIP && !(players[i].pflags & PF_FLIPCAM)) - flipped = players[i].mo->eflags & MFE_VERTICALFLIP && !(players[i].pflags & PF_FLIPCAM); - - //Saltyhop hehe - if (cv_saltyhop.value && cv_nametaghop.value) - pos.y -= flipped ? -players[i].mo->spriteyoffset : players[i].mo->spriteyoffset; - namex = pos.x>>FRACBITS; namey = pos.y>>FRACBITS; -- 2.54.0 From 95dd8b079a9fa3ccf16d80bc5d44d776c13af8bb Mon Sep 17 00:00:00 2001 From: Alug Date: Fri, 1 Mar 2024 15:23:09 +0100 Subject: [PATCH 65/79] remove unused thing --- src/k_kart.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/k_kart.c b/src/k_kart.c index e7539a50d..13a9cbb7f 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -9032,7 +9032,6 @@ static void K_drawNameTags(void) UINT8 *cm; fixed_t distance = 0; fixed_t maxdistance = (10*cv_nametagdist.value)* mapobjectscale; - angle_t an; flipped = 0; fixed_t z; -- 2.54.0 From 8223ab07e40469753b7f3664c81fefcb6471e93e Mon Sep 17 00:00:00 2001 From: Alug Date: Sat, 2 Mar 2024 01:50:35 +0100 Subject: [PATCH 66/79] shader stuffs --- src/hardware/r_opengl/r_opengl.c | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/hardware/r_opengl/r_opengl.c b/src/hardware/r_opengl/r_opengl.c index 8f91d5ed9..55689d976 100644 --- a/src/hardware/r_opengl/r_opengl.c +++ b/src/hardware/r_opengl/r_opengl.c @@ -822,6 +822,11 @@ EXPORT void HWRAPI(SetShaderInfo) (hwdshaderinfo_t info, INT32 value) EXPORT void HWRAPI(SetShader) (int slot) { + if (slot == SHADER_NONE) + { + UnSetShader(); + return; + } if (gl_allowshaders) { gl_shader_t *next_shader = &gl_shaders[slot]; // the gl_shader_t we are going to switch to @@ -842,21 +847,26 @@ EXPORT void HWRAPI(SetShader) (int slot) return; } + gl_shadersenabled = false; } EXPORT void HWRAPI(UnSetShader) (void) { - gl_shaderstate.current = NULL; - gl_shaderstate.type = 0; - gl_shaderstate.program = 0; + if (gl_shadersenabled) // don't repeatedly call glUseProgram if not needed + { + gl_shaderstate.current = NULL; + gl_shaderstate.type = 0; + gl_shaderstate.program = 0; - if (pglUseProgram) - pglUseProgram(0); + if (pglUseProgram) + pglUseProgram(0); + } gl_shadersenabled = false; } + // -----------------+ // SetNoTexture : Disable texture // -----------------+ -- 2.54.0 From 4a1eab5ccd2fb6c689154f455f4d9c9ee66b142a Mon Sep 17 00:00:00 2001 From: Alug Date: Sat, 2 Mar 2024 01:53:11 +0100 Subject: [PATCH 67/79] more shader stuff --- src/hardware/hw_shaders.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/hardware/hw_shaders.c b/src/hardware/hw_shaders.c index f9c755b0d..427bd1540 100644 --- a/src/hardware/hw_shaders.c +++ b/src/hardware/hw_shaders.c @@ -439,7 +439,7 @@ void HWR_LoadAllCustomShaders(void) // read every custom shader for (i = 0; i < numwadfiles; i++) - HWR_LoadCustomShadersFromFile(i, (wadfiles[i]->type == RET_PK3)); + HWR_LoadCustomShadersFromFile(i, W_FileHasFolders(wadfiles[i])); } void HWR_LoadCustomShadersFromFile(UINT16 wadnum, boolean PK3) @@ -454,7 +454,7 @@ void HWR_LoadCustomShadersFromFile(UINT16 wadnum, boolean PK3) int i; boolean modified_shaders[NUMSHADERTARGETS] = {0}; - if (!HWR_UseShader()) + if (!gr_shadersavailable) return; lump = HWR_FindShaderDefs(wadnum); -- 2.54.0 From a0ae10018657222441b1ca57a6d2ec9eb69e89a0 Mon Sep 17 00:00:00 2001 From: Alug Date: Sat, 2 Mar 2024 02:02:03 +0100 Subject: [PATCH 68/79] more stuffs --- src/hardware/r_opengl/r_opengl.c | 72 +++++++++++--------------------- 1 file changed, 25 insertions(+), 47 deletions(-) diff --git a/src/hardware/r_opengl/r_opengl.c b/src/hardware/r_opengl/r_opengl.c index 55689d976..3a07860ed 100644 --- a/src/hardware/r_opengl/r_opengl.c +++ b/src/hardware/r_opengl/r_opengl.c @@ -8,7 +8,7 @@ // terms of the GNU General Public License, version 2. // See the 'LICENSE' file for more details. //----------------------------------------------------------------------------- -/// \file +/// \file r_opengl.c /// \brief OpenGL API for Sonic Robo Blast 2 #if defined (_WIN32) @@ -26,7 +26,7 @@ #include "../../r_local.h" // For rendertimefrac, used for the leveltime shader uniform #include "r_opengl.h" #include "r_vbo.h" - +#include "../hw_shaders.h" #include "../hw_main.h" // Eeeeh not sure is this right way, but it works < sry :c < sry again it had to go :c @@ -674,29 +674,6 @@ static void Shader_SetUniforms(FSurfaceInfo *Surface, GLRGBAFloat *poly, GLRGBAF static GLRGBAFloat shader_defaultcolor = {1.0f, 1.0f, 1.0f, 1.0f}; // -// Generic vertex shader -// - -#define GLSL_FALLBACK_VERTEX_SHADER \ - "void main()\n" \ - "{\n" \ - "gl_Position = gl_ProjectionMatrix * gl_ModelViewMatrix * gl_Vertex;\n" \ - "gl_FrontColor = gl_Color;\n" \ - "gl_TexCoord[0].xy = gl_MultiTexCoord0.xy;\n" \ - "gl_ClipVertex = gl_ModelViewMatrix * gl_Vertex;\n" \ - "}\0" - -// -// Generic fragment shader -// - -#define GLSL_FALLBACK_FRAGMENT_SHADER \ - "uniform sampler2D tex;\n" \ - "uniform vec4 poly_color;\n" \ - "void main(void) {\n" \ - "gl_FragColor = texture2D(tex, gl_TexCoord[0].st) * poly_color;\n" \ - "}\0" - void SetupGLFunc4(void) { @@ -894,7 +871,7 @@ static void GLPerspective(GLfloat fovy, GLfloat aspect) const GLfloat zNear = NEAR_CLIPPING_PLANE; const GLfloat zFar = FAR_CLIPPING_PLANE; const GLfloat radians = (GLfloat)(fovy / 2.0f * M_PIl / 180.0f); - const GLfloat sine = sin(radians); + const GLfloat sine = (GLfloat)sin(radians); const GLfloat deltaZ = zFar - zNear; GLfloat cotangent; @@ -1666,9 +1643,9 @@ static void Shader_SetUniforms(FSurfaceInfo *Surface, GLRGBAFloat *poly, GLRGBAF if (Surface != NULL) { - UNIFORM_1(shader->uniforms[gluniform_lighting], Surface->LightInfo.light_level, pglUniform1f); - UNIFORM_1(shader->uniforms[gluniform_fade_start], Surface->LightInfo.fade_start, pglUniform1f); - UNIFORM_1(shader->uniforms[gluniform_fade_end], Surface->LightInfo.fade_end, pglUniform1f); + UNIFORM_1(shader->uniforms[gluniform_lighting], (GLfloat)Surface->LightInfo.light_level, pglUniform1f); + UNIFORM_1(shader->uniforms[gluniform_fade_start], (GLfloat)Surface->LightInfo.fade_start, pglUniform1f); + UNIFORM_1(shader->uniforms[gluniform_fade_end], (GLfloat)Surface->LightInfo.fade_end, pglUniform1f); } UNIFORM_1(shader->uniforms[gluniform_leveltime], ((float)shader_leveltime) / TICRATE, pglUniform1f); @@ -1824,31 +1801,32 @@ static void PreparePolygon(FSurfaceInfo *pSurf, FOutVector *pOutVerts, FBITFIELD SetBlend(PolyFlags); //TODO: inline (#pragma..) - // PolyColor if (pSurf) { - // If Modulated, mix the surface colour to the texture + // If modulated, mix the surface colour to the texture if (CurrentPolyFlags & PF_Modulated) - { - // Poly color - poly.red = byte2float[pSurf->PolyColor.s.red]; - poly.green = byte2float[pSurf->PolyColor.s.green]; - poly.blue = byte2float[pSurf->PolyColor.s.blue]; - poly.alpha = byte2float[pSurf->PolyColor.s.alpha]; - pglColor4ubv((GLubyte*)&pSurf->PolyColor.s); + + // If the surface is either modulated or colormapped, or both + if (CurrentPolyFlags & (PF_Modulated | PF_ColorMapped)) + { + poly.red = byte2float[pSurf->PolyColor.s.red]; + poly.green = byte2float[pSurf->PolyColor.s.green]; + poly.blue = byte2float[pSurf->PolyColor.s.blue]; + poly.alpha = byte2float[pSurf->PolyColor.s.alpha]; } - // Tint color - tint.red = byte2float[pSurf->TintColor.s.red]; - tint.green = byte2float[pSurf->TintColor.s.green]; - tint.blue = byte2float[pSurf->TintColor.s.blue]; - tint.alpha = byte2float[pSurf->TintColor.s.alpha]; + // Only if the surface is colormapped + if (CurrentPolyFlags & PF_ColorMapped) + { + tint.red = byte2float[pSurf->TintColor.s.red]; + tint.green = byte2float[pSurf->TintColor.s.green]; + tint.blue = byte2float[pSurf->TintColor.s.blue]; + tint.alpha = byte2float[pSurf->TintColor.s.alpha]; - // Fade color - fade.red = byte2float[pSurf->FadeColor.s.red]; - fade.green = byte2float[pSurf->FadeColor.s.green]; - fade.blue = byte2float[pSurf->FadeColor.s.blue]; + fade.red = byte2float[pSurf->FadeColor.s.red]; + fade.green = byte2float[pSurf->FadeColor.s.green]; + fade.blue = byte2float[pSurf->FadeColor.s.blue]; fade.alpha = byte2float[pSurf->FadeColor.s.alpha]; if (pSurf->LightTableId && pSurf->LightTableId != lt_downloaded) -- 2.54.0 From f6f5b5caec8022a3ad6b9bd37e7a6ef2d6e04160 Mon Sep 17 00:00:00 2001 From: Alug Date: Sat, 2 Mar 2024 02:03:22 +0100 Subject: [PATCH 69/79] a --- src/hardware/r_opengl/r_opengl.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/hardware/r_opengl/r_opengl.c b/src/hardware/r_opengl/r_opengl.c index 3a07860ed..77a17cb80 100644 --- a/src/hardware/r_opengl/r_opengl.c +++ b/src/hardware/r_opengl/r_opengl.c @@ -673,7 +673,6 @@ static void Shader_SetUniforms(FSurfaceInfo *Surface, GLRGBAFloat *poly, GLRGBAF static GLRGBAFloat shader_defaultcolor = {1.0f, 1.0f, 1.0f, 1.0f}; -// void SetupGLFunc4(void) { @@ -1827,14 +1826,15 @@ static void PreparePolygon(FSurfaceInfo *pSurf, FOutVector *pOutVerts, FBITFIELD fade.red = byte2float[pSurf->FadeColor.s.red]; fade.green = byte2float[pSurf->FadeColor.s.green]; fade.blue = byte2float[pSurf->FadeColor.s.blue]; - fade.alpha = byte2float[pSurf->FadeColor.s.alpha]; - - if (pSurf->LightTableId && pSurf->LightTableId != lt_downloaded) - { - pglActiveTexture(GL_TEXTURE2); - pglBindTexture(GL_TEXTURE_2D, pSurf->LightTableId); - pglActiveTexture(GL_TEXTURE0); - lt_downloaded = pSurf->LightTableId; + fade.alpha = byte2float[pSurf->FadeColor.s.alpha]; + + if (pSurf->LightTableId && pSurf->LightTableId != lt_downloaded) + { + pglActiveTexture(GL_TEXTURE2); + pglBindTexture(GL_TEXTURE_2D, pSurf->LightTableId); + pglActiveTexture(GL_TEXTURE0); + lt_downloaded = pSurf->LightTableId; + } } } -- 2.54.0 From 8cc71fb13ab66d659cdf5bb7beb8aa9f7b6aca71 Mon Sep 17 00:00:00 2001 From: Alug Date: Sat, 2 Mar 2024 02:07:54 +0100 Subject: [PATCH 70/79] e --- src/hardware/r_opengl/r_opengl.c | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/src/hardware/r_opengl/r_opengl.c b/src/hardware/r_opengl/r_opengl.c index 77a17cb80..1cb3153a4 100644 --- a/src/hardware/r_opengl/r_opengl.c +++ b/src/hardware/r_opengl/r_opengl.c @@ -829,15 +829,12 @@ EXPORT void HWRAPI(SetShader) (int slot) EXPORT void HWRAPI(UnSetShader) (void) { - if (gl_shadersenabled) // don't repeatedly call glUseProgram if not needed - { - gl_shaderstate.current = NULL; - gl_shaderstate.type = 0; - gl_shaderstate.program = 0; + gl_shaderstate.current = NULL; + gl_shaderstate.type = 0; + gl_shaderstate.program = 0; - if (pglUseProgram) - pglUseProgram(0); - } + if (pglUseProgram) + pglUseProgram(0); gl_shadersenabled = false; } -- 2.54.0 From ef076b457691c012aae07818ea2e692fbc0bb622 Mon Sep 17 00:00:00 2001 From: Alug Date: Sat, 2 Mar 2024 02:15:28 +0100 Subject: [PATCH 71/79] unhack palrendering screentex stuff --- src/hardware/r_opengl/r_opengl.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/hardware/r_opengl/r_opengl.c b/src/hardware/r_opengl/r_opengl.c index 1cb3153a4..d1e04f331 100644 --- a/src/hardware/r_opengl/r_opengl.c +++ b/src/hardware/r_opengl/r_opengl.c @@ -829,12 +829,15 @@ EXPORT void HWRAPI(SetShader) (int slot) EXPORT void HWRAPI(UnSetShader) (void) { - gl_shaderstate.current = NULL; - gl_shaderstate.type = 0; - gl_shaderstate.program = 0; + if (gl_shadersenabled) // don't repeatedly call glUseProgram if not needed + { + gl_shaderstate.current = NULL; + gl_shaderstate.type = 0; + gl_shaderstate.program = 0; - if (pglUseProgram) - pglUseProgram(0); + if (pglUseProgram) + pglUseProgram(0); + } gl_shadersenabled = false; } @@ -3253,7 +3256,7 @@ EXPORT void HWRAPI(DrawScreenFinalTexture)(int tex, int width, int height) pglDrawArrays(GL_TRIANGLE_FAN, 0, 4); if (HWR_ShouldUsePaletteRendering()) - UnSetShader(); + pglUseProgram(0); tex_downloaded = screenTextures[tex]; } -- 2.54.0 From bfddbcde6dd20973f2246e343153f6f2cd5ae30f Mon Sep 17 00:00:00 2001 From: Alug Date: Sat, 2 Mar 2024 02:43:53 +0100 Subject: [PATCH 72/79] fix compiler complains those were for coronas code which we dont even have --- src/hardware/r_opengl/r_opengl.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/hardware/r_opengl/r_opengl.c b/src/hardware/r_opengl/r_opengl.c index d1e04f331..bb5c1fe3d 100644 --- a/src/hardware/r_opengl/r_opengl.c +++ b/src/hardware/r_opengl/r_opengl.c @@ -1792,7 +1792,7 @@ static boolean Shader_CompileProgram(gl_shader_t *shader, GLint i) // code that is common between DrawPolygon and DrawIndexedTriangles // DrawScreenTexture also can use this function for fancier screen texture drawing // the corona thing is there too, i have no idea if that stuff works with DrawIndexedTriangles and batching -static void PreparePolygon(FSurfaceInfo *pSurf, FOutVector *pOutVerts, FBITFIELD PolyFlags) +static void PreparePolygon(FSurfaceInfo *pSurf, FBITFIELD PolyFlags) { static GLRGBAFloat poly = {0,0,0,0}; static GLRGBAFloat tint = {0,0,0,0}; @@ -1846,7 +1846,7 @@ static void PreparePolygon(FSurfaceInfo *pSurf, FOutVector *pOutVerts, FBITFIELD // -----------------+ EXPORT void HWRAPI(DrawPolygon) (FSurfaceInfo *pSurf, FOutVector *pOutVerts, FUINT iNumPts, FBITFIELD PolyFlags) { - PreparePolygon(pSurf, pOutVerts, PolyFlags); + PreparePolygon(pSurf, PolyFlags); pglVertexPointer(3, GL_FLOAT, sizeof(FOutVector), &pOutVerts[0].x); pglTexCoordPointer(2, GL_FLOAT, sizeof(FOutVector), &pOutVerts[0].s); @@ -1864,7 +1864,7 @@ EXPORT void HWRAPI(DrawPolygon) (FSurfaceInfo *pSurf, FOutVector *pOutVerts, FUI EXPORT void HWRAPI(DrawIndexedTriangles) (FSurfaceInfo *pSurf, FOutVector *pOutVerts, FUINT iNumPts, FBITFIELD PolyFlags, unsigned int *IndexArray) { - PreparePolygon(pSurf, pOutVerts, PolyFlags); + PreparePolygon(pSurf, PolyFlags); pglVertexPointer(3, GL_FLOAT, sizeof(FOutVector), &pOutVerts[0].x); pglTexCoordPointer(2, GL_FLOAT, sizeof(FOutVector), &pOutVerts[0].s); @@ -2946,7 +2946,7 @@ EXPORT void HWRAPI(DrawScreenTexture)(int tex, FSurfaceInfo *surf, FBITFIELD pol pglBindTexture(GL_TEXTURE_2D, screenTextures[tex]); - PreparePolygon(surf, NULL, surf ? polyflags : (PF_NoDepthTest)); + PreparePolygon(surf, surf ? polyflags : (PF_NoDepthTest)); if (!surf) pglColor4ubv(white); -- 2.54.0 From 85e49ef2abb93493937ec10567d9ee59b90a49aa Mon Sep 17 00:00:00 2001 From: Alug Date: Sat, 2 Mar 2024 17:36:59 +0100 Subject: [PATCH 73/79] GetScreenCoord lua parity --- src/k_kart.c | 37 +++++++++++++++++-------------------- 1 file changed, 17 insertions(+), 20 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index a93e9bacd..1de31a0eb 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -8877,7 +8877,7 @@ static void K_drawKartBumpersOrKarma(void) // Code updated in Lua by GenericHeroGuy for libSG // Badly ported to C by NepDisk and acutally made to work and fixed by Indev!(Thanks so much!) // original code by Lat' -static void K_GetScreenCoords(vector2_t *vec, player_t *player, camera_t *came, fixed_t mx, fixed_t my, fixed_t mz) +static void K_GetScreenCoords(vector2_t *vec, player_t *player, camera_t *came, mobj_t *target, fixed_t hofs) { fixed_t camx, camy, camz; angle_t camangle, camaiming; @@ -8889,6 +8889,7 @@ static void K_GetScreenCoords(vector2_t *vec, player_t *player, camera_t *came, fixed_t fovratio; fixed_t offset; boolean srcflip; + boolean targflip; fixed_t y; fixed_t x; @@ -8896,6 +8897,9 @@ static void K_GetScreenCoords(vector2_t *vec, player_t *player, camera_t *came, vec->x = -1; vec->y = -1; + if (!target) + return; + if (player->awayviewtics) { camx = player->awayviewmobj->x; camy = player->awayviewmobj->y; @@ -8924,7 +8928,7 @@ static void K_GetScreenCoords(vector2_t *vec, player_t *player, camera_t *came, // X coordinate // get difference between camangle and angle towards target - x = (INT32)camangle - (INT32)R_PointToAngle2(camx, camy, mx, my); + x = (INT32)camangle - (INT32)R_PointToAngle2(camx, camy, target->x, target->y); distfact = FINECOSINE((x>>ANGLETOFINESHIFT) & FINEMASK); if (!distfact) distfact = 1; @@ -8935,15 +8939,18 @@ static void K_GetScreenCoords(vector2_t *vec, player_t *player, camera_t *came, return; // flipping + targflip = target->eflags & MFE_VERTICALFLIP; srcflip = player->pflags & PF_FLIPCAM && player->mo->eflags & MFE_VERTICALFLIP; // Y coordinate // getting the angle difference here is a bit more involved... // start by getting the height difference between the camera and target - y = camz - mz; + y = camz - target->z - (targflip ? target->height/1.5 : 0); // for some reason needs to be divided by 1.5 idk + if (hofs) + y = y - (targflip ? -hofs : hofs); // then get the distance between camera and target - dist = R_PointToDist2(camx, camy, mx, my); + dist = R_PointToDist2(camx, camy, target->x, target->y); #ifdef HWRENDER // NOW we can get the angle differnce @@ -8995,8 +9002,7 @@ static void K_GetScreenCoords(vector2_t *vec, player_t *player, camera_t *came, if (splitscreen == 1) // divide by 320/200 (1.6) on 2P splitscreen x = (x/2) + (x/8); x = x + xres; - - + // get splitscreen index int splitindex = stplyrnum; @@ -9114,15 +9120,13 @@ static void K_drawNameTags(void) else flipped = players[i].mo->eflags & MFE_VERTICALFLIP; - z = players[i].mo->z; - - z += (players[i].mo->eflags & MFE_VERTICALFLIP) ? -players[i].mo->height/2 : players[i].mo->height; + z = players[i].mo->height; //Saltyhop hehe if (cv_saltyhop.value && cv_nametaghop.value) - z += (players[i].mo->eflags & MFE_VERTICALFLIP) ? -players[i].mo->spriteyoffset : players[i].mo->spriteyoffset; + z += players[i].mo->spriteyoffset; - K_GetScreenCoords(&pos, stplyr, camera, players[i].mo->x, players[i].mo->y, z); + K_GetScreenCoords(&pos, stplyr, camera, players[i].mo, z); //Check for negative screencoords if (pos.x == -1 || pos.y == -1) @@ -9262,7 +9266,6 @@ static void K_drawDriftGauge(void) INT32 hudtransflag = V_LocalTransFlag(); int dup = vid.dupx; int i,j; - fixed_t z; UINT8 driftcolors[3][4] = { {0, 0, 10, 16}, // no drift @@ -9282,20 +9285,14 @@ static void K_drawDriftGauge(void) if (!stplyr->mo || !stplyr->kartstuff[k_drift] || (!splitscreen && !camera->chase)) return; - - z = stplyr->mo->z; - - //vertical flip - if (stplyr->mo->eflags & MFE_VERTICALFLIP) - z += stplyr->mo->height*2; if (!splitscreen) - K_GetScreenCoords(&pos, stplyr, camera, stplyr->mo->x, stplyr->mo->y, z+FixedMul(cv_driftgaugeofs.value, cv_driftgaugeofs.value > 0 ? stplyr->mo->scale : mapobjectscale)); + K_GetScreenCoords(&pos, stplyr, camera, stplyr->mo, FixedMul(cv_driftgaugeofs.value, cv_driftgaugeofs.value > 0 ? stplyr->mo->scale : mapobjectscale)); else { //Loop through each player camera for splitscreen. for (j = 0; j <= stplyrnum; j++) - K_GetScreenCoords(&pos, stplyr, &camera[j], stplyr->mo->x, stplyr->mo->y, z+FixedMul(cv_driftgaugeofs.value, cv_driftgaugeofs.value > 0 ? stplyr->mo->scale : mapobjectscale)); + K_GetScreenCoords(&pos, stplyr, &camera[j], stplyr->mo, FixedMul(cv_driftgaugeofs.value, cv_driftgaugeofs.value > 0 ? stplyr->mo->scale : mapobjectscale)); } //Check for negative screencoords -- 2.54.0 From 6c9ecf4582364c15cf49fff38837c58dbdeb7a0b Mon Sep 17 00:00:00 2001 From: Alug Date: Sat, 2 Mar 2024 18:25:13 +0100 Subject: [PATCH 74/79] forgor screenspace clipping --- src/k_kart.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index 1de31a0eb..4b888b879 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -8877,7 +8877,7 @@ static void K_drawKartBumpersOrKarma(void) // Code updated in Lua by GenericHeroGuy for libSG // Badly ported to C by NepDisk and acutally made to work and fixed by Indev!(Thanks so much!) // original code by Lat' -static void K_GetScreenCoords(vector2_t *vec, player_t *player, camera_t *came, mobj_t *target, fixed_t hofs) +static void K_GetScreenCoords(vector2_t *vec, player_t *player, camera_t *came, mobj_t *target, fixed_t hofs, boolean dontclip) { fixed_t camx, camy, camz; angle_t camangle, camaiming; @@ -9002,6 +9002,10 @@ static void K_GetScreenCoords(vector2_t *vec, player_t *player, camera_t *came, if (splitscreen == 1) // divide by 320/200 (1.6) on 2P splitscreen x = (x/2) + (x/8); x = x + xres; + + // now clip in screen-space + if (!dontclip && (x < 0 || x > xres*2 || y < 0 || y > yres*2)) + return; // get splitscreen index int splitindex = stplyrnum; @@ -9126,7 +9130,7 @@ static void K_drawNameTags(void) if (cv_saltyhop.value && cv_nametaghop.value) z += players[i].mo->spriteyoffset; - K_GetScreenCoords(&pos, stplyr, camera, players[i].mo, z); + K_GetScreenCoords(&pos, stplyr, camera, players[i].mo, z, false); //Check for negative screencoords if (pos.x == -1 || pos.y == -1) @@ -9287,12 +9291,12 @@ static void K_drawDriftGauge(void) return; if (!splitscreen) - K_GetScreenCoords(&pos, stplyr, camera, stplyr->mo, FixedMul(cv_driftgaugeofs.value, cv_driftgaugeofs.value > 0 ? stplyr->mo->scale : mapobjectscale)); + K_GetScreenCoords(&pos, stplyr, camera, stplyr->mo, FixedMul(cv_driftgaugeofs.value, cv_driftgaugeofs.value > 0 ? stplyr->mo->scale : mapobjectscale), false); else { //Loop through each player camera for splitscreen. for (j = 0; j <= stplyrnum; j++) - K_GetScreenCoords(&pos, stplyr, &camera[j], stplyr->mo, FixedMul(cv_driftgaugeofs.value, cv_driftgaugeofs.value > 0 ? stplyr->mo->scale : mapobjectscale)); + K_GetScreenCoords(&pos, stplyr, &camera[j], stplyr->mo, FixedMul(cv_driftgaugeofs.value, cv_driftgaugeofs.value > 0 ? stplyr->mo->scale : mapobjectscale), false); } //Check for negative screencoords -- 2.54.0 From 158d84d6389884fdd1ac1d26443accc6ee399777 Mon Sep 17 00:00:00 2001 From: Alug Date: Sat, 2 Mar 2024 18:36:34 +0100 Subject: [PATCH 75/79] check for those i guess --- src/k_kart.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/k_kart.c b/src/k_kart.c index 4b888b879..a0b0403b4 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -8897,7 +8897,8 @@ static void K_GetScreenCoords(vector2_t *vec, player_t *player, camera_t *came, vec->x = -1; vec->y = -1; - if (!target) + // this should never happen but its also kart so ¯\_(ツ)_/¯ + if (!player || !target || !came) return; if (player->awayviewtics) { -- 2.54.0 From a4f52ebd101d4e4e44e84b3062687ec995680a01 Mon Sep 17 00:00:00 2001 From: Alug Date: Sat, 2 Mar 2024 21:56:39 +0100 Subject: [PATCH 76/79] move sprite mobj checks first --- 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 4d379fe85..1fe0c8990 100644 --- a/src/hardware/hw_main.c +++ b/src/hardware/hw_main.c @@ -4198,12 +4198,6 @@ static void HWR_DrawSprite(gr_vissprite_t *spr) FSurfaceInfo Surf; INT32 shader = SHADER_NONE; - - const boolean hires = (spr->mobj && spr->mobj->skin && ((skin_t *)( (spr->mobj->localskin) ? spr->mobj->localskin : spr->mobj->skin ))->flags & SF_HIRES); - if (spr->mobj) - this_scale = FIXED_TO_FLOAT(spr->mobj->scale); - if (hires) - this_scale = this_scale * FIXED_TO_FLOAT(((skin_t *)( (spr->mobj->localskin) ? spr->mobj->localskin : spr->mobj->skin ))->highresscale); if (!spr->mobj) return; @@ -4217,6 +4211,12 @@ static void HWR_DrawSprite(gr_vissprite_t *spr) return; } + const boolean hires = (spr->mobj && spr->mobj->skin && ((skin_t *)( (spr->mobj->localskin) ? spr->mobj->localskin : spr->mobj->skin ))->flags & SF_HIRES); + if (spr->mobj) + this_scale = FIXED_TO_FLOAT(spr->mobj->scale); + if (hires) + this_scale = this_scale * FIXED_TO_FLOAT(((skin_t *)( (spr->mobj->localskin) ? spr->mobj->localskin : spr->mobj->skin ))->highresscale); + // cache sprite graphics //12/12/99: Hurdler: // OK, I don't change anything for MD2 support because I want to be @@ -4342,7 +4342,7 @@ static void HWR_DrawSprite(gr_vissprite_t *spr) shader = SHADER_SPRITE; // sprite shader blend |= PF_ColorMapped; } - + HWR_ProcessPolygon(&Surf, wallVerts, 4, blend|PF_Modulated, shader, false); } } -- 2.54.0 From 46da9bf98bba9a459a40e9bad1e5dc38dc8af5b7 Mon Sep 17 00:00:00 2001 From: Alug Date: Sat, 2 Mar 2024 22:30:25 +0100 Subject: [PATCH 77/79] we have functions for that dont check for slopes everywhere the functions already do it for us anyways --- src/hardware/hw_main.c | 49 ++++++++++-------------------------------- 1 file changed, 11 insertions(+), 38 deletions(-) diff --git a/src/hardware/hw_main.c b/src/hardware/hw_main.c index 1fe0c8990..fdf0bb729 100644 --- a/src/hardware/hw_main.c +++ b/src/hardware/hw_main.c @@ -236,7 +236,6 @@ static float gr_windowcentery; static float gr_pspritexscale, gr_pspriteyscale; - static seg_t *gr_curline; static side_t *gr_sidedef; static line_t *gr_linedef; @@ -684,10 +683,6 @@ void HWR_RenderPlane(subsector_t *subsector, extrasubsector_t *xsub, boolean isc slope = gr_frontsector->c_slope; } - // Set fixedheight to the slope's height from our viewpoint, if we have a slope - if (slope) - fixedheight = P_GetZAt(slope, viewx, viewy); - height = FIXED_TO_FLOAT(fixedheight); // Allocate plane-vertex buffer if we need to @@ -767,7 +762,6 @@ void HWR_RenderPlane(subsector_t *subsector, extrasubsector_t *xsub, boolean isc } } - if (angle) // Only needs to be done if there's an altered angle { angle = InvAngle(angle)>>ANGLETOFINESHIFT; @@ -1151,23 +1145,13 @@ static void HWR_SplitWall(sector_t *sector, FOutVector *wallVerts, INT32 texnum, else solid = false; - if (list[i].slope) - { - height = FixedToFloat(P_GetZAt(list[i].slope, v1x, v1y)); - endheight = FixedToFloat(P_GetZAt(list[i].slope, v2x, v2y)); - } - else - height = endheight = FIXED_TO_FLOAT(list[i].height); - + height = FixedToFloat(P_GetLightZAt(&list[i], v1x, v1y)); + endheight = FixedToFloat(P_GetLightZAt(&list[i], v2x, v2y)); + if (solid) { - if (*list[i].caster->b_slope) - { - bheight = FixedToFloat(P_GetZAt(*list[i].caster->b_slope, v1x, v1y)); - endbheight = FixedToFloat(P_GetZAt(*list[i].caster->b_slope, v2x, v2y)); - } - else - bheight = endbheight = FIXED_TO_FLOAT(*list[i].caster->bottomheight); + height = FixedToFloat(P_GetFFloorBottomZAt(list[i].caster, v1x, v1y)); + endbheight = FixedToFloat(P_GetFFloorBottomZAt(list[i].caster, v2x, v2y)); } if (endheight >= endtop && height >= top) @@ -1181,13 +1165,8 @@ static void HWR_SplitWall(sector_t *sector, FOutVector *wallVerts, INT32 texnum, if (i + 1 < sector->numlights) { - if (list[i+1].slope) - { - bheight = FixedToFloat(P_GetZAt(list[i+1].slope, v1x, v1y)); - endbheight = FixedToFloat(P_GetZAt(list[i+1].slope, v2x, v2y)); - } - else - bheight = endbheight = FIXED_TO_FLOAT(list[i+1].height); + bheight = FixedToFloat(P_GetLightZAt(&list[i+1], v1x, v1y)); + endbheight = FixedToFloat(P_GetLightZAt(&list[i+1], v2x, v2y)); } else { @@ -4077,15 +4056,10 @@ static void HWR_SplitSprite(gr_vissprite_t *spr) if (i + 1 < sector->numlights) { - if (list[i+1].slope) - { - temp = P_GetZAt(list[i+1].slope, v1x, v1y); - bheight = FIXED_TO_FLOAT(temp); - temp = P_GetZAt(list[i+1].slope, v2x, v2y); - endbheight = FIXED_TO_FLOAT(temp); - } - else - bheight = endbheight = FIXED_TO_FLOAT(list[i+1].height); + temp = P_GetLightZAt(&list[i+1], v1x, v1y); + bheight = FIXED_TO_FLOAT(temp); + temp = P_GetLightZAt(&list[i+1], v2x, v2y); + endbheight = FIXED_TO_FLOAT(temp); } else { @@ -4238,7 +4212,6 @@ static void HWR_DrawSprite(gr_vissprite_t *spr) wallVerts[2].y = wallVerts[3].y = spr->gzt; wallVerts[0].y = wallVerts[1].y = spr->gz; - // make a wall polygon (with 2 triangles), using the floor/ceiling heights, // and the 2d map coords of start/end vertices wallVerts[0].z = wallVerts[3].z = spr->z1; -- 2.54.0 From e211afa9dd89fa13d6e288f0c91a570426660de7 Mon Sep 17 00:00:00 2001 From: Alug Date: Sat, 2 Mar 2024 22:56:26 +0100 Subject: [PATCH 78/79] dont need to check if we dont use it --- src/hardware/hw_main.c | 14 ++++++++++---- src/r_things.c | 14 ++++++++++++-- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/src/hardware/hw_main.c b/src/hardware/hw_main.c index fdf0bb729..f3872c488 100644 --- a/src/hardware/hw_main.c +++ b/src/hardware/hw_main.c @@ -3819,8 +3819,10 @@ static void HWR_RotateSpritePolyToAim(gr_vissprite_t *spr, FOutVector *wallVerts // uncapped/interpolation interpmobjstate_t interp = {0}; float basey, lowy; + INT32 dist = -1; - INT32 dist = R_QuickCamDist(spr->mobj->x, spr->mobj->y); + if (cv_grmaxinterpdist.value) + dist = R_QuickCamDist(spr->mobj->x, spr->mobj->y); // do interpolation if (R_UsingFrameInterpolation() && !paused && (!cv_grmaxinterpdist.value || dist < cv_grmaxinterpdist.value)) @@ -4944,10 +4946,11 @@ void HWR_ProjectSprite(mobj_t *thing) UINT8 flip; boolean mirrored = thing->mirrored; boolean hflip = (!(thing->frame & FF_HORIZONTALFLIP) != !mirrored); - + angle_t ang, camang; const boolean papersprite = (thing->frame & FF_PAPERSPRITE); INT32 heightsec, phs; + INT32 dist = -1; fixed_t spr_width, spr_height; fixed_t spr_offset, spr_topoffset; @@ -4964,7 +4967,8 @@ void HWR_ProjectSprite(mobj_t *thing) if (!thing) return; - INT32 dist = R_QuickCamDist(thing->x, thing->y); + if (cv_grmaxinterpdist.value) + dist = R_QuickCamDist(thing->x, thing->y); if (R_UsingFrameInterpolation() && !paused && (!cv_grmaxinterpdist.value || dist < cv_grmaxinterpdist.value)) { @@ -5303,11 +5307,13 @@ void HWR_ProjectPrecipitationSprite(precipmobj_t *thing) size_t lumpoff; unsigned rot = 0; UINT8 flip; + INT32 dist = -1; if (!thing) return; - INT32 dist = R_QuickCamDist(thing->x, thing->y); + if (cv_grmaxinterpdist.value) + dist = R_QuickCamDist(thing->x, thing->y); // uncapped/interpolation interpmobjstate_t interp = {0}; diff --git a/src/r_things.c b/src/r_things.c index 2d9b880e0..98d2dc53a 100644 --- a/src/r_things.c +++ b/src/r_things.c @@ -1183,12 +1183,17 @@ static void R_ProjectSprite(mobj_t *thing) #endif fixed_t ang_scale = FRACUNIT; + + INT32 dist = -1; + + if (cv_grmaxinterpdist.value) + dist = R_QuickCamDist(thing->x, thing->y); // uncapped/interpolation interpmobjstate_t interp = {0}; // do interpolation - if (R_UsingFrameInterpolation() && !paused && (!cv_grmaxinterpdist.value || R_QuickCamDist(thing->x, thing->y) < cv_grmaxinterpdist.value)) + if (R_UsingFrameInterpolation() && !paused && (!cv_grmaxinterpdist.value || dist < cv_grmaxinterpdist.value)) { R_InterpolateMobjState(oldthing, rendertimefrac, &interp); } @@ -1708,11 +1713,16 @@ static void R_ProjectPrecipitationSprite(precipmobj_t *thing) //SoM: 3/17/2000 fixed_t gz ,gzt; + INT32 dist = 1; + + if (cv_grmaxinterpdist.value) + dist = R_QuickCamDist(thing->x, thing->y); + // uncapped/interpolation interpmobjstate_t interp = {0}; // do interpolation - if (R_UsingFrameInterpolation() && !paused && (!cv_grmaxinterpdist.value || R_QuickCamDist(thing->x, thing->y) < cv_grmaxinterpdist.value)) + if (R_UsingFrameInterpolation() && !paused && (!cv_grmaxinterpdist.value || dist < cv_grmaxinterpdist.value)) { R_InterpolatePrecipMobjState(thing, rendertimefrac, &interp); } -- 2.54.0 From 9f2624021163715b5cff16082c365b0bcd6f6bb2 Mon Sep 17 00:00:00 2001 From: Alug Date: Sat, 2 Mar 2024 23:36:48 +0100 Subject: [PATCH 79/79] fix this --- src/hardware/hw_main.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/hardware/hw_main.c b/src/hardware/hw_main.c index f3872c488..45ad96d12 100644 --- a/src/hardware/hw_main.c +++ b/src/hardware/hw_main.c @@ -3317,8 +3317,8 @@ void HWR_Subsector(size_t num) centerHeight = P_GetFFloorBottomZAt(rover, gr_frontsector->soundorg.x, gr_frontsector->soundorg.y); if (centerHeight <= locCeilingHeight && centerHeight >= locFloorHeight && - ((viewz < bottomCullHeight && !(rover->flags & FF_INVERTPLANES)) || - (viewz > bottomCullHeight && (rover->flags & FF_BOTHPLANES || rover->flags & FF_INVERTPLANES)))) + ((viewz < bottomCullHeight && (rover->flags & FF_BOTHPLANES || !(rover->flags & FF_INVERTPLANES))) || + (viewz > bottomCullHeight && (rover->flags & FF_BOTHPLANES || rover->flags & FF_INVERTPLANES)))) { if (rover->flags & FF_FOG) { @@ -3361,8 +3361,8 @@ void HWR_Subsector(size_t num) if (centerHeight >= locFloorHeight && centerHeight <= locCeilingHeight && - ((viewz > topCullHeight && !(rover->flags & FF_INVERTPLANES)) || - (viewz < topCullHeight && (rover->flags & FF_BOTHPLANES || rover->flags & FF_INVERTPLANES)))) + ((viewz > topCullHeight && (rover->flags & FF_BOTHPLANES || !(rover->flags & FF_INVERTPLANES))) || + (viewz < topCullHeight && (rover->flags & FF_BOTHPLANES || rover->flags & FF_INVERTPLANES)))) { if (rover->flags & FF_FOG) { -- 2.54.0