mirror of
https://github.com/ZDoom/raze-gles.git
synced 2025-01-12 03:00:38 +00:00
gamevars.c: implement Gv_Clear() in terms of Gv_Free() + own code.
Also, some commenting. git-svn-id: https://svn.eduke32.com/eduke32@3416 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
parent
142e36d6f4
commit
99fd67211d
1 changed files with 20 additions and 33 deletions
|
@ -41,9 +41,9 @@ extern void G_FreeMapState(int32_t mapnum);
|
||||||
static void Gv_Free(void) /* called from Gv_ReadSave() and Gv_ResetVars() */
|
static void Gv_Free(void) /* called from Gv_ReadSave() and Gv_ResetVars() */
|
||||||
{
|
{
|
||||||
// call this function as many times as needed.
|
// call this function as many times as needed.
|
||||||
int32_t i=(MAXGAMEVARS-1);
|
int32_t i;
|
||||||
// AddLog("Gv_Free");
|
|
||||||
for (; i>=0; i--)
|
for (i=MAXGAMEVARS-1; i>=0; i--)
|
||||||
{
|
{
|
||||||
if ((aGameVars[i].dwFlags & GAMEVAR_USER_MASK) && aGameVars[i].val.plValues)
|
if ((aGameVars[i].dwFlags & GAMEVAR_USER_MASK) && aGameVars[i].val.plValues)
|
||||||
{
|
{
|
||||||
|
@ -64,49 +64,33 @@ static void Gv_Free(void) /* called from Gv_ReadSave() and Gv_ResetVars() */
|
||||||
|
|
||||||
aGameArrays[i].dwFlags |= GAMEARRAY_RESET;
|
aGameArrays[i].dwFlags |= GAMEARRAY_RESET;
|
||||||
}
|
}
|
||||||
g_gameVarCount=g_gameArrayCount=0;
|
|
||||||
|
g_gameVarCount = g_gameArrayCount = 0;
|
||||||
hash_init(&h_gamevars);
|
hash_init(&h_gamevars);
|
||||||
hash_init(&h_arrays);
|
hash_init(&h_arrays);
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void Gv_Clear(void)
|
static void Gv_Clear(void)
|
||||||
{
|
{
|
||||||
// only call this function ONCE...
|
// only call this function ONCE...
|
||||||
int32_t i=(MAXGAMEVARS-1);
|
int32_t i;
|
||||||
|
|
||||||
//AddLog("Gv_Clear");
|
Gv_Free();
|
||||||
|
|
||||||
for (; i>=0; i--)
|
// Now, only do work that Gv_Free() hasn't done.
|
||||||
|
for (i=MAXGAMEVARS-1; i>=0; i--)
|
||||||
{
|
{
|
||||||
if (aGameVars[i].szLabel)
|
Bfree(aGameVars[i].szLabel);
|
||||||
Bfree(aGameVars[i].szLabel);
|
|
||||||
aGameVars[i].szLabel=NULL;
|
aGameVars[i].szLabel=NULL;
|
||||||
|
|
||||||
if ((aGameVars[i].dwFlags & GAMEVAR_USER_MASK) && aGameVars[i].val.plValues)
|
|
||||||
{
|
|
||||||
Bfree(aGameVars[i].val.plValues);
|
|
||||||
aGameVars[i].val.plValues=NULL;
|
|
||||||
}
|
|
||||||
aGameVars[i].val.lValue=0;
|
aGameVars[i].val.lValue=0;
|
||||||
aGameVars[i].dwFlags |= GAMEVAR_RESET;
|
|
||||||
if (i >= MAXGAMEARRAYS)
|
if (i >= MAXGAMEARRAYS)
|
||||||
continue;
|
continue;
|
||||||
if (aGameArrays[i].szLabel)
|
|
||||||
Bfree(aGameArrays[i].szLabel);
|
|
||||||
aGameArrays[i].szLabel=NULL;
|
|
||||||
|
|
||||||
if ((aGameArrays[i].dwFlags & GAMEARRAY_NORMAL) && aGameArrays[i].plValues)
|
Bfree(aGameArrays[i].szLabel);
|
||||||
{
|
aGameArrays[i].szLabel=NULL;
|
||||||
Bfree(aGameArrays[i].plValues);
|
|
||||||
aGameArrays[i].plValues=NULL;
|
|
||||||
}
|
|
||||||
aGameArrays[i].dwFlags |= GAMEARRAY_RESET;
|
|
||||||
}
|
}
|
||||||
g_gameVarCount=g_gameArrayCount=0;
|
|
||||||
hash_init(&h_gamevars);
|
|
||||||
hash_init(&h_arrays);
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -511,20 +495,22 @@ int32_t Gv_NewVar(const char *pszLabel, intptr_t lValue, uint32_t dwFlags)
|
||||||
if (i == -1)
|
if (i == -1)
|
||||||
i = g_gameVarCount;
|
i = g_gameVarCount;
|
||||||
|
|
||||||
// Set values
|
// If it's a user gamevar...
|
||||||
if ((aGameVars[i].dwFlags & GAMEVAR_SYSTEM) == 0)
|
if ((aGameVars[i].dwFlags & GAMEVAR_SYSTEM) == 0)
|
||||||
{
|
{
|
||||||
|
// Allocate and set its label
|
||||||
if (aGameVars[i].szLabel == NULL)
|
if (aGameVars[i].szLabel == NULL)
|
||||||
aGameVars[i].szLabel = (char *)Bcalloc(MAXVARLABEL,sizeof(uint8_t));
|
aGameVars[i].szLabel = (char *)Bcalloc(MAXVARLABEL,sizeof(uint8_t));
|
||||||
if (aGameVars[i].szLabel != pszLabel)
|
if (aGameVars[i].szLabel != pszLabel)
|
||||||
Bstrcpy(aGameVars[i].szLabel,pszLabel);
|
Bstrcpy(aGameVars[i].szLabel,pszLabel);
|
||||||
|
|
||||||
|
// and the flags
|
||||||
aGameVars[i].dwFlags=dwFlags;
|
aGameVars[i].dwFlags=dwFlags;
|
||||||
|
|
||||||
if (aGameVars[i].dwFlags & GAMEVAR_USER_MASK)
|
if (aGameVars[i].dwFlags & GAMEVAR_USER_MASK)
|
||||||
{
|
{
|
||||||
// only free if not system
|
// only free if per-{actor,player}
|
||||||
if (aGameVars[i].val.plValues)
|
Bfree(aGameVars[i].val.plValues);
|
||||||
Bfree(aGameVars[i].val.plValues);
|
|
||||||
aGameVars[i].val.plValues=NULL;
|
aGameVars[i].val.plValues=NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -539,6 +525,7 @@ int32_t Gv_NewVar(const char *pszLabel, intptr_t lValue, uint32_t dwFlags)
|
||||||
hash_add(&h_gamevars, aGameVars[i].szLabel, g_gameVarCount++, 0);
|
hash_add(&h_gamevars, aGameVars[i].szLabel, g_gameVarCount++, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Set initial values. (Or, override values for system gamevars.)
|
||||||
if (aGameVars[i].dwFlags & GAMEVAR_PERPLAYER)
|
if (aGameVars[i].dwFlags & GAMEVAR_PERPLAYER)
|
||||||
{
|
{
|
||||||
if (!aGameVars[i].val.plValues)
|
if (!aGameVars[i].val.plValues)
|
||||||
|
|
Loading…
Reference in a new issue