Delete translations in G_InitialState

This commit is contained in:
Lactozilla 2024-07-06 00:49:39 -03:00
parent 3bb3223dbd
commit 1aab7ffa2d
4 changed files with 65 additions and 1 deletions

View file

@ -1800,6 +1800,9 @@ void D_ReloadFiles(void)
Patch_FreeTag(PU_PATCH_ROTATED);
Patch_FreeTag(PU_SPRITE);
// Reinit the palette remaps
PaletteRemap_Init();
// Load SOC and Lua.
for (INT32 i = 0; i < numwadfiles; i++)
{

View file

@ -27,6 +27,7 @@
#include "p_local.h"
#include "r_draw.h"
#include "r_main.h"
#include "r_translation.h"
#include "s_sound.h"
#include "g_game.h"
#include "g_demo.h"
@ -4392,6 +4393,10 @@ void G_InitialState(void)
// Delete all skins.
R_DelSkins();
// Delete all translations
R_DeleteCustomTranslations();
PaletteRemap_DeleteAll();
// Clear all added sound effects.
for (INT32 i = sfx_freeslot0; i <= sfx_lastskinsoundslot; i++)
{

View file

@ -139,6 +139,48 @@ unsigned PaletteRemap_Add(remaptable_t *tr)
return numpaletteremaps - 1;
}
static void DeleteSkincolorRemaps(colorcache_t **remaps)
{
for (unsigned i = 0; i < MAXSKINCOLORS - 1; i++)
{
if (remaps[i])
Z_Free(remaps[i]);
}
}
static void PaletteRemap_Delete(remaptable_t *tr)
{
if (tr->skincolor_remaps)
{
for (unsigned i = 0; i < TT_CACHE_SIZE; i++)
{
colorcache_t **remaps = tr->skincolor_remaps[i];
if (remaps)
{
DeleteSkincolorRemaps(remaps);
Z_Free(remaps);
}
}
Z_Free(tr->skincolor_remaps);
}
Z_Free(tr->sources);
Z_Free(tr);
}
void PaletteRemap_DeleteAll(void)
{
for (unsigned i = 0; i < numpaletteremaps; i++)
PaletteRemap_Delete(paletteremaps[i]);
Z_Free(paletteremaps);
paletteremaps = NULL;
numpaletteremaps = 0;
}
static void MakeGrayscaleRemap(void)
{
remaptable_t *grayscale = PaletteRemap_New();
@ -1129,7 +1171,7 @@ UINT8 *R_GetTranslationRemap(int id, skincolornum_t skincolor, INT32 skinnum)
INT32 index = R_SkinTranslationToCacheIndex(skinnum);
if (!tr->skincolor_remaps[index])
tr->skincolor_remaps[index] = Z_Calloc(NUM_PALETTE_ENTRIES * (MAXSKINCOLORS - 1), PU_LEVEL, NULL);
tr->skincolor_remaps[index] = Z_Calloc(sizeof(colorcache_t *) * (MAXSKINCOLORS - 1), PU_LEVEL, NULL);
colorcache_t *cache = tr->skincolor_remaps[index][skincolor - 1];
if (!cache)
@ -1179,3 +1221,15 @@ remaptable_t *R_GetBuiltInTranslation(SINT8 tc)
}
return NULL;
}
void R_DeleteCustomTranslations(void)
{
for (unsigned i = 0; i < numcustomtranslations; i++)
{
Z_Free(customtranslations[i].name);
}
Z_Free(customtranslations);
customtranslations = NULL;
numcustomtranslations = 0;
}

View file

@ -79,6 +79,7 @@ boolean PaletteRemap_Equal(remaptable_t *a, remaptable_t *b);
void PaletteRemap_SetIdentity(remaptable_t *tr);
boolean PaletteRemap_IsIdentity(remaptable_t *tr);
unsigned PaletteRemap_Add(remaptable_t *tr);
void PaletteRemap_DeleteAll(void);
int R_FindCustomTranslation(const char *name);
int R_FindCustomTranslation_CaseInsensitive(const char *name);
@ -89,6 +90,7 @@ remaptable_t *R_GetTranslationByID(int id);
UINT8 *R_GetTranslationRemap(int id, skincolornum_t skincolor, INT32 skinnum);
void R_UpdateTranslationRemaps(skincolornum_t skincolor, INT32 skinnum);
boolean R_TranslationIsValid(int id);
void R_DeleteCustomTranslations(void);
void R_ParseTrnslate(INT32 wadNum, UINT16 lumpnum);
void R_LoadParsedTranslations(void);