From 26eff18473782d53d94b571151d28b0636579ffe Mon Sep 17 00:00:00 2001 From: Alug Date: Mon, 19 Feb 2024 01:52:44 +0100 Subject: [PATCH 01/47] 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/47] 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/47] 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/47] 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/47] 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/47] 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/47] 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/47] 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/47] 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/47] 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/47] 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/47] 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/47] 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/47] 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/47] 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/47] 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/47] 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/47] 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/47] 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/47] 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/47] 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/47] 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 5eebdec84dc14d95e80f06ddfc9340fa081d95ed Mon Sep 17 00:00:00 2001 From: Indev Date: Sat, 24 Feb 2024 21:19:57 +0300 Subject: [PATCH 23/47] 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 f4e39912b4836766461b3c08a3d9b48459921e90 Mon Sep 17 00:00:00 2001 From: Alug Date: Sun, 25 Feb 2024 18:20:19 +0100 Subject: [PATCH 24/47] 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 4d840c54552d069b0f404a174f08d37cd3f3f7c7 Mon Sep 17 00:00:00 2001 From: Alug Date: Sun, 25 Feb 2024 19:48:52 +0100 Subject: [PATCH 25/47] 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 91efc08823e00d338e3573dcd34ada0afa491e9c Mon Sep 17 00:00:00 2001 From: Alug Date: Sun, 25 Feb 2024 21:33:46 +0100 Subject: [PATCH 26/47] 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 b802e4fa8a46804946021d237e7c243cc808dc06 Mon Sep 17 00:00:00 2001 From: Alug Date: Mon, 26 Feb 2024 20:58:39 +0100 Subject: [PATCH 27/47] 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 3e6a66b12d277aaba3c18b15169268f3d149191d Mon Sep 17 00:00:00 2001 From: Alug Date: Mon, 26 Feb 2024 21:20:53 +0100 Subject: [PATCH 28/47] 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 29/47] 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 015cf95f4eb0531d13aa85f6702583b558eb6487 Mon Sep 17 00:00:00 2001 From: Alug Date: Wed, 28 Feb 2024 22:31:06 +0100 Subject: [PATCH 30/47] 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 31/47] 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 6872a533d458ace0685cd727c59eaae28851746f Mon Sep 17 00:00:00 2001 From: Indev Date: Fri, 1 Mar 2024 11:03:55 +0300 Subject: [PATCH 32/47] 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 33/47] 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 34/47] 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 35/47] 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 36/47] 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 37/47] 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 38/47] 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 39/47] 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 40/47] 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 9a907b9adc6de9a5bd906d5c33db9bf5bbcba505 Mon Sep 17 00:00:00 2001 From: Alug Date: Sat, 2 Mar 2024 21:50:11 +0100 Subject: [PATCH 41/47] GetScreenCoord lua parity --- src/k_kart.c | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index 13a9cbb7f..6b5393d4c 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -8865,7 +8865,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; @@ -8877,6 +8877,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; @@ -8884,6 +8885,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; @@ -8912,7 +8916,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; @@ -8923,15 +8927,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 @@ -9096,15 +9103,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) -- 2.54.0 From 105fce083058fe2830419e33cdd06d85e9709c35 Mon Sep 17 00:00:00 2001 From: Alug Date: Sat, 2 Mar 2024 22:12:23 +0100 Subject: [PATCH 42/47] forgor screenspace clipping --- src/k_kart.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index 6b5393d4c..17722e4ff 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -8865,7 +8865,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; @@ -8988,6 +8988,10 @@ 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); x = x + xres; + + // now clip in screen-space + if (!dontclip && (x < 0 || x > xres*2 || y < 0 || y > yres*2)) + return; // adjust coords for splitscreen if (splitscreen == 1){ // 2P @@ -9109,7 +9113,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) -- 2.54.0 From 6e6b9b2bcf0ba54bbc8ae4140d34713e2702aec9 Mon Sep 17 00:00:00 2001 From: Alug Date: Sat, 2 Mar 2024 18:36:34 +0100 Subject: [PATCH 43/47] 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 17722e4ff..6f583e689 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -8885,7 +8885,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 44/47] 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 45/47] 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 46/47] 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 47/47] 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