From 1a8958a34fc00444b268b0ca22ee8dd20769e7a7 Mon Sep 17 00:00:00 2001 From: NepDisk Date: Mon, 1 Sep 2025 20:33:43 -0400 Subject: [PATCH] Start the basics mod the mod display system --- src/d_clisrv.c | 2 ++ src/d_clisrv.h | 13 ++++++++++ src/d_netcmd.c | 2 +- src/k_hud.c | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++ src/typedef.h | 1 + 5 files changed, 84 insertions(+), 1 deletion(-) diff --git a/src/d_clisrv.c b/src/d_clisrv.c index 815461f62..54a5443c9 100644 --- a/src/d_clisrv.c +++ b/src/d_clisrv.c @@ -163,6 +163,8 @@ SINT8 joinnode = 0; // used for CL_VIEWSERVER char connectedservername[MAXSERVERNAME]; char connectedservercontact[MAXSERVERCONTACT]; char connectedserverdescription[MAXSERVERDESCRIPTION]; +servermods_t connectedservercustommods[MAXSERVERMODS]; +UINT8 numcustomservermods = 0; /// \brief do we accept new players? /// \todo WORK! diff --git a/src/d_clisrv.h b/src/d_clisrv.h index 4360900f0..2c9d55af2 100644 --- a/src/d_clisrv.h +++ b/src/d_clisrv.h @@ -47,6 +47,17 @@ applications may follow different packet versions. #define MAXSERVERDESCRIPTIONLINE 40 #define DEFAULTDESCSTRING "Welcome to my SRB2Kart server!" +#define MAXSERVERMODS 255 +#define MAXSERVERMODNAME 13 + +struct servermods_t +{ + char modname[MAXSERVERMODNAME]; + consvar_t *cvar; + SINT8 active; // -1 is N/A, 0 is off, 1 is on. + boolean valid; +}; + // Sends over info via packets to client players. void ServerInfoUpdateSend(void); @@ -477,6 +488,8 @@ extern SINT8 servernode; extern char connectedservername[MAXSERVERNAME]; extern char connectedservercontact[MAXSERVERCONTACT]; extern char connectedserverdescription[MAXSERVERDESCRIPTION]; +extern servermods_t connectedservercustommods[MAXSERVERMODS]; +extern UINT8 numcustomservermods; void Command_Ping_f(void); extern tic_t connectiontimeout; diff --git a/src/d_netcmd.c b/src/d_netcmd.c index 9f9d82933..e68d69521 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -3799,7 +3799,7 @@ static void Command_ScoreboardAdd(void) } else { - strncat(connectedserverdescription, finalstring, MAXSERVERDESCRIPTIONLINE); + strncat(connectedserverdescription, va("%s\n", finalstring), MAXSERVERDESCRIPTIONLINE); CONS_Printf(M_GetText("Scoreboard text line has been added.\n")); } diff --git a/src/k_hud.c b/src/k_hud.c index 5690132da..b8b00b201 100644 --- a/src/k_hud.c +++ b/src/k_hud.c @@ -2205,6 +2205,72 @@ INT32 K_DrawNeoTabRankings(INT32 x, INT32 y, playersort_t *tab, INT32 scorelines return x+rightoffset; } +#define BASEMODS 11 +void K_DrawServerMods(INT32 x, INT32 y) +{ + UINT8 i, j; + INT32 xoff = 0, yoff = 10; + UINT8 numdrawn = 0; + + servermods_t basemods[BASEMODS] = + { + {"Rings", NULL, K_RingsActive() > 0, true}, + {"4-Tier Drifts", NULL, K_PurpleDriftActive() > 0, true}, + {"Slipdash", NULL, K_SlipdashActive() > 0, true}, + {"Stacking", NULL, K_StackingActive() > 0, true}, + {"Chaining", NULL, K_ChainingActive() > 0, true}, + {"Chain Offroad", &cv_kartchainingoffroad, -1, true}, + {"Slope Boost", NULL, K_PurpleDriftActive() > 0, true}, + {"Drafting", NULL, K_PurpleDriftActive() > 0, true}, + {"Bump Spark", &cv_kartbumpspark, -1, true}, + {"Bump Spring", &cv_kartbumpspring, -1, true}, + {"Alt. Invin.", NULL, K_GetKartInvinType() == KARTINVIN_ALTERN, true} + }; + + V_DrawThinString(x, y, V_6WIDTHSPACE|V_ALLOWLOWERCASE|V_GRAYMAP, "Gameplay / Balance Changes:"); + + for (j = 0; j < 2; j++) + { + UINT8 modcount = j == 0 ? BASEMODS : numcustomservermods; + servermods_t *modslist = j == 0 ? basemods : connectedservercustommods; + + // Draw the the modlist. + for (i = 0; i < modcount; i++) + { + boolean drawdis = false; + + if (modslist[i].valid) + { + if (modslist[i].cvar && modslist[i].cvar->value) + { + drawdis = true; + } + else if (modslist[i].active == 1) + { + drawdis = true; + } + + if (drawdis && modslist[i].modname[0] != '\0') + { + V_DrawSmallString(x+xoff, y+yoff, V_6WIDTHSPACE|V_ALLOWLOWERCASE, modslist[i].modname); + numdrawn++; + + if ((numdrawn % 2) == 0) + { + xoff -= 50; + yoff += 5; + } + else if ((numdrawn % 1) == 0) + { + xoff += 50; + } + } + } + } + } +} +#undef BASEMODS + void K_DrawServerDescrption(INT32 x, INT32 y) { if (connectedservername[0] != '\0') @@ -2215,6 +2281,7 @@ void K_DrawServerDescrption(INT32 x, INT32 y) if (connectedserverdescription[0] != '\0') V_DrawSmallString(x, y+20, V_6WIDTHSPACE|V_ALLOWLOWERCASE, connectedserverdescription); + K_DrawServerMods(x, y + 50); } static void K_drawKartLaps(void) diff --git a/src/typedef.h b/src/typedef.h index 8548d8aad..81b686f84 100644 --- a/src/typedef.h +++ b/src/typedef.h @@ -72,6 +72,7 @@ TYPEDEF (doomdata_t); TYPEDEF (serverelem_t); TYPEDEF (rewind_t); TYPEDEF (netinfo_pak); +TYPEDEF (servermods_t); // d_event.h TYPEDEF (event_t);