From 59ee8177d7faa9b6d269d96b8fcd553083c411d9 Mon Sep 17 00:00:00 2001 From: Sally Coolatta Date: Tue, 13 Dec 2022 00:00:37 -0500 Subject: [PATCH] Try some things for roulette sync - PU_STATIC instead of PU_LEVEL, since player_t is always kept around anyway. - Don't alloc itemList when cap is 0 - Read/write 0 when itemList is NULL --- src/k_roulette.c | 4 ++-- src/p_saveg.c | 52 ++++++++++++++++++++++++++++++------------------ 2 files changed, 35 insertions(+), 21 deletions(-) diff --git a/src/k_roulette.c b/src/k_roulette.c index dc0ae76c7..d07246a66 100644 --- a/src/k_roulette.c +++ b/src/k_roulette.c @@ -729,7 +729,7 @@ static void K_InitRoulette(itemroulette_t *const roulette) roulette->itemListCap = 8; roulette->itemList = Z_Calloc( sizeof(SINT8) * roulette->itemListCap, - PU_LEVEL, + PU_STATIC, &roulette->itemList ); } @@ -755,7 +755,7 @@ static void K_PushToRouletteItemList(itemroulette_t *const roulette, kartitems_t roulette->itemList = Z_Realloc( roulette->itemList, sizeof(SINT8) * roulette->itemListCap, - PU_LEVEL, + PU_STATIC, &roulette->itemList ); } diff --git a/src/p_saveg.c b/src/p_saveg.c index cb4aa7577..b69c63a5b 100644 --- a/src/p_saveg.c +++ b/src/p_saveg.c @@ -412,9 +412,16 @@ static void P_NetArchivePlayers(void) WRITEUINT8(save_p, players[i].itemRoulette.active); WRITEUINT32(save_p, players[i].itemRoulette.itemListCap); WRITEUINT32(save_p, players[i].itemRoulette.itemListLen); - for (j = 0; (unsigned)j < players[i].itemRoulette.itemListLen; j++) + for (j = 0; j < (signed)players[i].itemRoulette.itemListLen; j++) { - WRITESINT8(save_p, players[i].itemRoulette.itemList[j]); + if (players[i].itemRoulette.itemList == NULL) + { + WRITESINT8(save_p, KITEM_NONE); + } + else + { + WRITESINT8(save_p, players[i].itemRoulette.itemList[j]); + } } WRITEUINT8(save_p, players[i].itemRoulette.useOdds); WRITEUINT32(save_p, players[i].itemRoulette.index); @@ -728,27 +735,34 @@ static void P_NetUnArchivePlayers(void) players[i].itemRoulette.itemListCap = (size_t)READUINT32(save_p); players[i].itemRoulette.itemListLen = (size_t)READUINT32(save_p); - if (players[i].itemRoulette.itemList == NULL) + if (players[i].itemRoulette.itemListCap > 0) { - players[i].itemRoulette.itemList = Z_Calloc( - sizeof(SINT8) * players[i].itemRoulette.itemListCap, - PU_LEVEL, - &players[i].itemRoulette.itemList - ); - } - else - { - players[i].itemRoulette.itemList = Z_Realloc( - players[i].itemRoulette.itemList, - sizeof(SINT8) * players[i].itemRoulette.itemListCap, - PU_LEVEL, - &players[i].itemRoulette.itemList - ); + if (players[i].itemRoulette.itemList == NULL) + { + players[i].itemRoulette.itemList = Z_Calloc( + sizeof(SINT8) * players[i].itemRoulette.itemListCap, + PU_STATIC, + &players[i].itemRoulette.itemList + ); + } + else + { + players[i].itemRoulette.itemList = Z_Realloc( + players[i].itemRoulette.itemList, + sizeof(SINT8) * players[i].itemRoulette.itemListCap, + PU_STATIC, + &players[i].itemRoulette.itemList + ); + } } - for (j = 0; (unsigned)j < players[i].itemRoulette.itemListLen; j++) + for (j = 0; j < (signed)players[i].itemRoulette.itemListLen; j++) { - players[i].itemRoulette.itemList[j] = READSINT8(save_p); + SINT8 item = READSINT8(save_p); + if (players[i].itemRoulette.itemList != NULL) + { + players[i].itemRoulette.itemList[j] = item; + } } players[i].itemRoulette.useOdds = READUINT8(save_p);