mirror of
https://github.com/ZDoom/raze-gles.git
synced 2024-12-25 19:20:46 +00:00
More array work: support for reading and writing the new array types from disk. Not tested.
git-svn-id: https://svn.eduke32.com/eduke32@6357 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
parent
01d92aeed2
commit
3141084a65
4 changed files with 28 additions and 46 deletions
|
@ -4636,22 +4636,17 @@ finish_qsprintf:
|
||||||
if (kFile < 0)
|
if (kFile < 0)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
int numElements = kfilelength(kFile) / Gv_GetArrayElementSize(arrayNum);
|
int const numElements = Gv_GetArrayElementSize(arrayNum) ? kfilelength(kFile) / Gv_GetArrayElementSize(arrayNum) : 1;
|
||||||
|
|
||||||
if (numElements == 0)
|
if (numElements > 0)
|
||||||
{
|
{
|
||||||
Baligned_free(aGameArrays[arrayNum].pValues);
|
int numBytes = numElements * Gv_GetArrayElementSize(arrayNum);
|
||||||
aGameArrays[arrayNum].pValues = NULL;
|
|
||||||
aGameArrays[arrayNum].size = numElements;
|
|
||||||
}
|
|
||||||
else if (numElements > 0)
|
|
||||||
{
|
|
||||||
int const numBytes = numElements * Gv_GetArrayElementSize(arrayNum);
|
|
||||||
|
|
||||||
Baligned_free(aGameArrays[arrayNum].pValues);
|
Baligned_free(aGameArrays[arrayNum].pValues);
|
||||||
|
|
||||||
aGameArrays[arrayNum].pValues = (intptr_t *)Xaligned_alloc(ACTOR_VAR_ALIGNMENT, numElements * Gv_GetArrayElementSize(arrayNum));
|
aGameArrays[arrayNum].size = numBytes ? numElements : kfilelength(kFile);
|
||||||
aGameArrays[arrayNum].size = numElements;
|
aGameArrays[arrayNum].pValues = (intptr_t *)Xaligned_alloc(ACTOR_VAR_ALIGNMENT, Gv_GetArrayAllocSize(arrayNum));
|
||||||
|
numBytes = Gv_GetArrayAllocSize(arrayNum);
|
||||||
|
|
||||||
switch (aGameArrays[arrayNum].flags & GAMEARRAY_TYPE_MASK)
|
switch (aGameArrays[arrayNum].flags & GAMEARRAY_TYPE_MASK)
|
||||||
{
|
{
|
||||||
|
@ -4672,10 +4667,8 @@ finish_qsprintf:
|
||||||
case GAMEARRAY_INT32:
|
case GAMEARRAY_INT32:
|
||||||
case GAMEARRAY_INT16:
|
case GAMEARRAY_INT16:
|
||||||
case GAMEARRAY_UINT8:
|
case GAMEARRAY_UINT8:
|
||||||
kread(kFile, aGameArrays[arrayNum].pValues, numBytes);
|
|
||||||
break;
|
|
||||||
case GAMEARRAY_BITMAP:
|
case GAMEARRAY_BITMAP:
|
||||||
kread(kFile, aGameArrays[arrayNum].pValues, (numElements + 7) >> 3);
|
kread(kFile, aGameArrays[arrayNum].pValues, numBytes);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4713,7 +4706,7 @@ finish_qsprintf:
|
||||||
}
|
}
|
||||||
|
|
||||||
int const numElements = aGameArrays[arrayNum].size;
|
int const numElements = aGameArrays[arrayNum].size;
|
||||||
int const numBytes = numElements * Gv_GetArrayElementSize(arrayNum);
|
int const numBytes = Gv_GetArrayAllocSize(arrayNum);
|
||||||
|
|
||||||
switch (aGameArrays[arrayNum].flags & GAMEARRAY_TYPE_MASK)
|
switch (aGameArrays[arrayNum].flags & GAMEARRAY_TYPE_MASK)
|
||||||
{
|
{
|
||||||
|
@ -4733,10 +4726,9 @@ finish_qsprintf:
|
||||||
case GAMEARRAY_INT32:
|
case GAMEARRAY_INT32:
|
||||||
case GAMEARRAY_INT16:
|
case GAMEARRAY_INT16:
|
||||||
case GAMEARRAY_UINT8:
|
case GAMEARRAY_UINT8:
|
||||||
|
case GAMEARRAY_BITMAP:
|
||||||
Bfwrite(aGameArrays[arrayNum].pValues, 1, numBytes, fil);
|
Bfwrite(aGameArrays[arrayNum].pValues, 1, numBytes, fil);
|
||||||
break;
|
break;
|
||||||
case GAMEARRAY_BITMAP:
|
|
||||||
Bfwrite(aGameArrays[arrayNum].pValues, 1, (numElements + 7) >> 3, fil);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Bfclose(fil);
|
Bfclose(fil);
|
||||||
|
@ -6066,20 +6058,10 @@ void G_SaveMapState(void)
|
||||||
if ((aGameArrays[i].flags & GAMEARRAY_RESTORE) == 0)
|
if ((aGameArrays[i].flags & GAMEARRAY_RESTORE) == 0)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
int size;
|
|
||||||
|
|
||||||
switch (aGameArrays[i].flags & (GAMEARRAY_UINT8 | GAMEARRAY_INT16 | GAMEARRAY_INT32))
|
|
||||||
{
|
|
||||||
case GAMEARRAY_UINT8: size = sizeof(uint8_t); break;
|
|
||||||
case GAMEARRAY_INT16: size = sizeof(uint16_t); break;
|
|
||||||
case GAMEARRAY_INT32: size = sizeof(uint32_t); break;
|
|
||||||
default: size = sizeof(uintptr_t); break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!save->arrays[i])
|
if (!save->arrays[i])
|
||||||
save->arrays[i] = (intptr_t *)Xaligned_alloc(16, aGameArrays[i].size * size);
|
save->arrays[i] = (intptr_t *)Xaligned_alloc(16, Gv_GetArrayAllocSize(i));
|
||||||
|
|
||||||
Bmemcpy(&save->arrays[i][0], &aGameArrays[i].pValues[0], aGameArrays[i].size * size);
|
Bmemcpy(&save->arrays[i][0], &aGameArrays[i].pValues[0], Gv_GetArrayAllocSize(i));
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
int32_t slen;
|
int32_t slen;
|
||||||
|
@ -6207,17 +6189,7 @@ void G_RestoreMapState(void)
|
||||||
if ((aGameArrays[i].flags & GAMEARRAY_RESTORE) == 0 || !pSavedState->arrays[i])
|
if ((aGameArrays[i].flags & GAMEARRAY_RESTORE) == 0 || !pSavedState->arrays[i])
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
int size;
|
Bmemcpy(&aGameArrays[i].pValues[0], &pSavedState->arrays[i][0], Gv_GetArrayAllocSize(i));
|
||||||
|
|
||||||
switch (aGameArrays[i].flags & (GAMEARRAY_UINT8 | GAMEARRAY_INT16 | GAMEARRAY_INT32))
|
|
||||||
{
|
|
||||||
case GAMEARRAY_UINT8: size = sizeof(uint8_t); break;
|
|
||||||
case GAMEARRAY_INT16: size = sizeof(uint16_t); break;
|
|
||||||
case GAMEARRAY_INT32: size = sizeof(uint32_t); break;
|
|
||||||
default: size = sizeof(uintptr_t); break;
|
|
||||||
}
|
|
||||||
|
|
||||||
Bmemcpy(&aGameArrays[i].pValues[0], &pSavedState->arrays[i][0], aGameArrays[i].size * size);
|
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
if (pSavedState->savecode)
|
if (pSavedState->savecode)
|
||||||
|
|
|
@ -100,12 +100,12 @@ static FORCE_INLINE int32_t VM_OnEvent(int nEventID, int spriteNum, int playerNu
|
||||||
}
|
}
|
||||||
|
|
||||||
#define CON_ERRPRINTF(Text, ...) do { \
|
#define CON_ERRPRINTF(Text, ...) do { \
|
||||||
OSD_Printf("Line %d, %s: %s", Text, g_errorLineNum, keyw[g_tw], ## __VA_ARGS__); \
|
OSD_Printf("Line %d, %s: " Text, g_errorLineNum, keyw[g_tw], ## __VA_ARGS__); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define CON_CRITICALERRPRINTF(Text, ...) do { \
|
#define CON_CRITICALERRPRINTF(Text, ...) do { \
|
||||||
OSD_Printf("Line %d, %s: %s", Text, g_errorLineNum, keyw[g_tw], ## __VA_ARGS__); \
|
OSD_Printf("Line %d, %s: " Text, g_errorLineNum, keyw[g_tw], ## __VA_ARGS__); \
|
||||||
wm_msgbox(APPNAME, "Line %d, %s: %s", Text, g_errorLineNum, keyw[g_tw], ## __VA_ARGS__); \
|
wm_msgbox(APPNAME, "Line %d, %s: " Text, g_errorLineNum, keyw[g_tw], ## __VA_ARGS__); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
void G_GetTimeDate(int32_t * const pValues);
|
void G_GetTimeDate(int32_t * const pValues);
|
||||||
|
|
|
@ -177,10 +177,11 @@ int Gv_ReadSave(int32_t kFile)
|
||||||
hash_add(&h_arrays, aGameArrays[i].szLabel, i, 1);
|
hash_add(&h_arrays, aGameArrays[i].szLabel, i, 1);
|
||||||
|
|
||||||
intptr_t const asize = aGameArrays[i].size;
|
intptr_t const asize = aGameArrays[i].size;
|
||||||
|
|
||||||
if (asize != 0)
|
if (asize != 0)
|
||||||
{
|
{
|
||||||
aGameArrays[i].pValues = (intptr_t *)Xaligned_alloc(ACTOR_VAR_ALIGNMENT, asize * Gv_GetArrayElementSize(i));
|
aGameArrays[i].pValues = (intptr_t *)Xaligned_alloc(ACTOR_VAR_ALIGNMENT, Gv_GetArrayAllocSize(i));
|
||||||
if (kdfread(aGameArrays[i].pValues, Gv_GetArrayElementSize(i) * aGameArrays[i].size, 1, kFile) < 1) goto corrupt;
|
if (kdfread(aGameArrays[i].pValues, Gv_GetArrayAllocSize(i), 1, kFile) < 1) goto corrupt;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
aGameArrays[i].pValues = NULL;
|
aGameArrays[i].pValues = NULL;
|
||||||
|
@ -287,7 +288,7 @@ void Gv_WriteSave(FILE *fil)
|
||||||
dfwrite(&aGameArrays[i],sizeof(gamearray_t),1,fil);
|
dfwrite(&aGameArrays[i],sizeof(gamearray_t),1,fil);
|
||||||
|
|
||||||
dfwrite(aGameArrays[i].szLabel,sizeof(uint8_t) * MAXARRAYLABEL, 1, fil);
|
dfwrite(aGameArrays[i].szLabel,sizeof(uint8_t) * MAXARRAYLABEL, 1, fil);
|
||||||
dfwrite(aGameArrays[i].pValues, Gv_GetArrayElementSize(i) * aGameArrays[i].size, 1, fil);
|
dfwrite(aGameArrays[i].pValues, Gv_GetArrayAllocSize(i), 1, fil);
|
||||||
}
|
}
|
||||||
|
|
||||||
dfwrite(apScriptEvents,sizeof(apScriptEvents),1,fil);
|
dfwrite(apScriptEvents,sizeof(apScriptEvents),1,fil);
|
||||||
|
@ -584,6 +585,14 @@ int __fastcall Gv_GetArrayElementSize(int const arrayIdx)
|
||||||
return typeSize;
|
return typeSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int __fastcall Gv_GetArrayAllocSize(int const arrayIdx)
|
||||||
|
{
|
||||||
|
if (aGameArrays[arrayIdx].flags & GAMEARRAY_BITMAP)
|
||||||
|
return (aGameArrays[arrayIdx].size + 7) >> 3;
|
||||||
|
|
||||||
|
return aGameArrays[arrayIdx].size * Gv_GetArrayElementSize(arrayIdx);
|
||||||
|
}
|
||||||
|
|
||||||
int __fastcall Gv_GetArrayValue(int const id, int index)
|
int __fastcall Gv_GetArrayValue(int const id, int index)
|
||||||
{
|
{
|
||||||
if (aGameArrays[id].flags & GAMEARRAY_STRIDE2)
|
if (aGameArrays[id].flags & GAMEARRAY_STRIDE2)
|
||||||
|
|
|
@ -103,6 +103,7 @@ extern int32_t g_gameVarCount;
|
||||||
extern int32_t g_gameArrayCount;
|
extern int32_t g_gameArrayCount;
|
||||||
|
|
||||||
int __fastcall Gv_GetArrayElementSize(int const arrayIdx);
|
int __fastcall Gv_GetArrayElementSize(int const arrayIdx);
|
||||||
|
int __fastcall Gv_GetArrayAllocSize(int const arrayIdx);
|
||||||
int __fastcall Gv_GetArrayValue(int const id, int index);
|
int __fastcall Gv_GetArrayValue(int const id, int index);
|
||||||
int __fastcall Gv_GetVar(int id, int spriteNum, int playerNum);
|
int __fastcall Gv_GetVar(int id, int spriteNum, int playerNum);
|
||||||
void __fastcall Gv_SetVar(int const id, int const lValue, int const spriteNum, int const playerNum);
|
void __fastcall Gv_SetVar(int const id, int const lValue, int const spriteNum, int const playerNum);
|
||||||
|
|
Loading…
Reference in a new issue