From ebb86169a9ff942a135955cc5cef6e9351c4e21b Mon Sep 17 00:00:00 2001 From: Alug Date: Tue, 29 Apr 2025 19:24:03 +0200 Subject: [PATCH 1/4] fix rare double free when getting hit at the same tic as a resynch occurs --- src/g_demo.c | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/g_demo.c b/src/g_demo.c index 5de6527fb..ffc746131 100644 --- a/src/g_demo.c +++ b/src/g_demo.c @@ -613,7 +613,7 @@ void G_WriteDemoTiccmd(ticcmd_t *cmd, INT32 playernum) oldcmd[playernum].forwardmove = cmd->forwardmove; ziptic |= ZT_FWD; } - + if (cmd->sidemove != oldcmd[playernum].sidemove) { WRITESINT8(demobuf.p,cmd->sidemove); @@ -627,7 +627,7 @@ void G_WriteDemoTiccmd(ticcmd_t *cmd, INT32 playernum) oldcmd[playernum].turning = cmd->turning; ziptic |= ZT_TURNING; } - + if (cmd->angle != oldcmd[playernum].angle) { WRITEINT16(demobuf.p,cmd->angle); @@ -757,7 +757,7 @@ void G_GhostAddHit(INT32 playernum, mobj_t *victim) return; ghostext[playernum].flags |= EZT_HIT; ghostext[playernum].hits++; - ghostext[playernum].hitlist = Z_Realloc(ghostext[playernum].hitlist, ghostext[playernum].hits * sizeof(mobj_t *), PU_LEVEL, NULL); + ghostext[playernum].hitlist = Z_Realloc(ghostext[playernum].hitlist, ghostext[playernum].hits * sizeof(mobj_t *), PU_LEVEL, &ghostext[playernum].hitlist); P_SetTarget(ghostext[playernum].hitlist + (ghostext[playernum].hits-1), victim); } @@ -939,9 +939,7 @@ void G_WriteGhostTic(mobj_t *ghost, INT32 playernum) WRITEANGLE(demobuf.p,mo->angle); P_SetTarget(ghostext[playernum].hitlist+i, NULL); } - Z_Free(ghostext[playernum].hitlist); ghostext[playernum].hits = 0; - ghostext[playernum].hitlist = NULL; } if (ghostext[playernum].flags & EZT_SPRITE) WRITEUINT16(demobuf.p,oldghost[playernum].sprite); @@ -2193,7 +2191,7 @@ void G_BeginRecording(void) WRITEUINT8(demobuf.p, grandprixinfo.masterbots == true); WRITEUINT8(demobuf.p, grandprixinfo.eventmode); } - + // Save "mapmusrng" used for altmusic selection WRITEUINT8(demobuf.p, mapmusrng); @@ -3165,7 +3163,7 @@ void G_DoPlayDemo(char *defdemoname) grandprixinfo.masterbots = READUINT8(demobuf.p) != 0; grandprixinfo.eventmode = READUINT8(demobuf.p); } - + // Load "mapmusrng" used for altmusic selection mapmusrng = READUINT8(demobuf.p); From c5d7fc4a363c4568c10923218da165fd29eaebd3 Mon Sep 17 00:00:00 2001 From: NepDisk Date: Tue, 29 Apr 2025 19:36:00 -0400 Subject: [PATCH 2/4] Fix off by one in discord rpc --- src/discord.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/discord.c b/src/discord.c index 1ec2fedad..c52a8ba54 100644 --- a/src/discord.c +++ b/src/discord.c @@ -556,7 +556,7 @@ void DRPC_UpdatePresence(void) { snprintf(detailstr, 48, "%s%s%s", gametype_cons_t[gametype].strvalue, - va(" | %s", kartspeed_cons_t[gamespeed].strvalue), + va(" | %s", kartspeed_cons_t[gamespeed+1].strvalue), (encoremode == true) ? " | Encore" : "" ); discordPresence.details = detailstr; From 0d3b0e2e0e261b7638fd2f590acd11d805ba3c50 Mon Sep 17 00:00:00 2001 From: NepDisk Date: Tue, 29 Apr 2025 19:47:26 -0400 Subject: [PATCH 3/4] Show TA mode in discord RPC --- src/discord.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/discord.c b/src/discord.c index c52a8ba54..17ae05e1f 100644 --- a/src/discord.c +++ b/src/discord.c @@ -551,7 +551,19 @@ void DRPC_UpdatePresence(void) if ((gamestate == GS_LEVEL || gamestate == GS_INTERMISSION || gamestate == GS_VOTING) && Playing()) { if (modeattacking) - discordPresence.details = "Time Attack"; + { + SINT8 recordpreset = G_RecordPresetIndex(); + char *currenttamode = "SRB2Kart"; + + if (recordpreset == RP_TECH) + currenttamode = "Tech"; + else if (recordpreset == RP_BLAN) + currenttamode = "BlanKart"; + else if (recordpreset == RP_CUST) + currenttamode = "Custom"; + + discordPresence.details = va("Time Attack: %s Mode", currenttamode); + } else { snprintf(detailstr, 48, "%s%s%s", From f85473a405df61e2d3e61c0b2150214c9d5560d2 Mon Sep 17 00:00:00 2001 From: NepDisk Date: Wed, 30 Apr 2025 16:56:08 -0400 Subject: [PATCH 4/4] Add support for showing maps on discord RPC --- src/discord.c | 126 ++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 122 insertions(+), 4 deletions(-) diff --git a/src/discord.c b/src/discord.c index 17ae05e1f..46fc4e83c 100644 --- a/src/discord.c +++ b/src/discord.c @@ -465,8 +465,9 @@ void DRPC_UpdatePresence(void) char detailstr[48+1]; char mapname[5+21+21+2+1]; + char mapimg[MAXMAPLUMPNAME+5]; - char charimg[4+SKINNAMESIZE+1]; + char charimg[4+SKINNAMESIZE+2]; char charname[11+SKINNAMESIZE+1]; boolean joinSecretSet = false; @@ -585,8 +586,125 @@ void DRPC_UpdatePresence(void) } else { - // This is probably a custom map! - discordPresence.largeImageKey = "mapcustom"; + // Supported map names + // I hate that this is easiest but oh well. + static const char *supportedMaps[] = { + // base game + "MAP01", + "MAP02", + "MAP03", + "MAP04", + "MAP05", + "MAP06", + "MAP07", + "MAP08", + "MAP09", + "MAP10", + "MAP11", + "MAP12", + "MAP13", + "MAP14", + "MAP15", + "MAP16", + "MAP17", + "MAP18", + "MAP19", + "MAP20", + "MAP21", + "MAP22", + "MAP23", + "MAP24", + "MAP25", + "MAP26", + "MAP27", + "MAP28", + "MAP29", + "MAP30", + "MAP31", + "MAP32", + "MAP33", + "MAP34", + "MAP35", + "MAP36", + "MAP37", + "MAP38", + "MAP39", + "MAP40", + "MAP41", + "MAP42", + "MAP43", + "MAP44", + "MAP45", + "MAP46", + "MAP47", + "MAP48", + "MAP49", + "MAP50", + "MAP51", + "MAP52", + "MAP53", + "MAP54", + "MAP55", + "MAP56", + "MAP57", + "MAP58", + "MAP59", + "MAP60", + "MAPB0", + "MAPB1", + "MAPB2", + "MAPB3", + "MAPB4", + "MAPB5", + "MAPB6", + "MAPB7", + "MAPB8", + "MAPB9", + "MAPBA", + "MAPBB", + "MAPBC", + "MAPBD", + "MAPBE", + "MAPBF", + "MAPBG", + "MAPBH", + "MAPBI", + "MAPBJ", + "MAPBK", + "MAPBL", + "MAPBM", + "MAPBN", + "MAPBO", + "MAPBP", + "MAPBQ", + "MAPBR", + "MAPBS", + NULL + }; + + boolean customMap = true; + UINT16 checkMap = 0; + + // Map image + while (supportedMaps[checkMap] != NULL) + { + if (!strcmp(mapheaderinfo[gamemap-1]->lumpname, supportedMaps[checkMap])) + { + snprintf(mapimg, MAXMAPLUMPNAME+4, "map_%s", mapheaderinfo[gamemap-1]->lumpname); + strlwr(mapimg); + discordPresence.largeImageKey = mapimg; // Map image + customMap = false; + break; + } + + checkMap++; + } + + if (customMap == true) + { + // This is probably a custom map! + discordPresence.largeImageKey = "mapcustom"; + } } if (mapheaderinfo[gamemap-1]->menuflags & LF2_HIDEINMENU) @@ -681,7 +799,7 @@ void DRPC_UpdatePresence(void) { if (!strcmp(skins[players[consoleplayer].skin].name, supportedSkins[checkSkin])) { - snprintf(charimg, 21, "char%s", supportedSkins[checkSkin]); + snprintf(charimg, 22, "char_%s", supportedSkins[checkSkin]); discordPresence.smallImageKey = charimg; customChar = false; break;