- moved all code related to global ACS variables to p_acs.cpp where it belongs.
- fixed: The nextmap and nextsecret CCMDs need to call G_DeferedInitNew instead of G_InitNew. - merged MAPINFO branch back into trunk. SVN r1393 (trunk)
This commit is contained in:
parent
0b95b47f87
commit
4bcd3faef8
51 changed files with 3021 additions and 2197 deletions
139
src/g_game.cpp
139
src/g_game.cpp
|
|
@ -73,6 +73,7 @@
|
|||
#include "cmdlib.h"
|
||||
#include "d_net.h"
|
||||
#include "d_event.h"
|
||||
#include "p_acs.h"
|
||||
|
||||
#include <zlib.h>
|
||||
|
||||
|
|
@ -1129,7 +1130,7 @@ void G_PlayerFinishLevel (int player, EFinishLevelType mode, bool resetinventory
|
|||
}
|
||||
}
|
||||
|
||||
if (mode == FINISH_NoHub && !(level.flags & LEVEL_KEEPFULLINVENTORY))
|
||||
if (mode == FINISH_NoHub && !(level.flags2 & LEVEL2_KEEPFULLINVENTORY))
|
||||
{ // Reduce all owned (visible) inventory to 1 item each
|
||||
for (item = p->mo->Inventory; item != NULL; item = item->Inventory)
|
||||
{
|
||||
|
|
@ -1429,7 +1430,7 @@ static void G_QueueBody (AActor *body)
|
|||
//
|
||||
void G_DoReborn (int playernum, bool freshbot)
|
||||
{
|
||||
if (!multiplayer && !(level.flags & LEVEL_ALLOWRESPAWN))
|
||||
if (!multiplayer && !(level.flags2 & LEVEL2_ALLOWRESPAWN))
|
||||
{
|
||||
if (BackupSaveName.Len() > 0 && FileExists (BackupSaveName.GetChars()))
|
||||
{ // Load game from the last point it was saved
|
||||
|
|
@ -1579,128 +1580,6 @@ bool G_CheckSaveGameWads (PNGHandle *png, bool printwarn)
|
|||
return true;
|
||||
}
|
||||
|
||||
static void WriteVars (FILE *file, SDWORD *vars, size_t count, DWORD id)
|
||||
{
|
||||
size_t i, j;
|
||||
|
||||
for (i = 0; i < count; ++i)
|
||||
{
|
||||
if (vars[i] != 0)
|
||||
break;
|
||||
}
|
||||
if (i < count)
|
||||
{
|
||||
// Find last non-zero var. Anything beyond the last stored variable
|
||||
// will be zeroed at load time.
|
||||
for (j = count-1; j > i; --j)
|
||||
{
|
||||
if (vars[j] != 0)
|
||||
break;
|
||||
}
|
||||
FPNGChunkArchive arc (file, id);
|
||||
for (i = 0; i <= j; ++i)
|
||||
{
|
||||
DWORD var = vars[i];
|
||||
arc << var;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void ReadVars (PNGHandle *png, SDWORD *vars, size_t count, DWORD id)
|
||||
{
|
||||
size_t len = M_FindPNGChunk (png, id);
|
||||
size_t used = 0;
|
||||
|
||||
if (len != 0)
|
||||
{
|
||||
DWORD var;
|
||||
size_t i;
|
||||
FPNGChunkArchive arc (png->File->GetFile(), id, len);
|
||||
used = len / 4;
|
||||
|
||||
for (i = 0; i < used; ++i)
|
||||
{
|
||||
arc << var;
|
||||
vars[i] = var;
|
||||
}
|
||||
png->File->ResetFilePtr();
|
||||
}
|
||||
if (used < count)
|
||||
{
|
||||
memset (&vars[used], 0, (count-used)*4);
|
||||
}
|
||||
}
|
||||
|
||||
static void WriteArrayVars (FILE *file, FWorldGlobalArray *vars, unsigned int count, DWORD id)
|
||||
{
|
||||
unsigned int i, j;
|
||||
|
||||
// Find the first non-empty array.
|
||||
for (i = 0; i < count; ++i)
|
||||
{
|
||||
if (vars[i].CountUsed() != 0)
|
||||
break;
|
||||
}
|
||||
if (i < count)
|
||||
{
|
||||
// Find last non-empty array. Anything beyond the last stored array
|
||||
// will be emptied at load time.
|
||||
for (j = count-1; j > i; --j)
|
||||
{
|
||||
if (vars[j].CountUsed() != 0)
|
||||
break;
|
||||
}
|
||||
FPNGChunkArchive arc (file, id);
|
||||
arc.WriteCount (i);
|
||||
arc.WriteCount (j);
|
||||
for (; i <= j; ++i)
|
||||
{
|
||||
arc.WriteCount (vars[i].CountUsed());
|
||||
|
||||
FWorldGlobalArray::ConstIterator it(vars[i]);
|
||||
const FWorldGlobalArray::Pair *pair;
|
||||
|
||||
while (it.NextPair (pair))
|
||||
{
|
||||
arc.WriteCount (pair->Key);
|
||||
arc.WriteCount (pair->Value);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void ReadArrayVars (PNGHandle *png, FWorldGlobalArray *vars, size_t count, DWORD id)
|
||||
{
|
||||
size_t len = M_FindPNGChunk (png, id);
|
||||
unsigned int i, k;
|
||||
|
||||
for (i = 0; i < count; ++i)
|
||||
{
|
||||
vars[i].Clear ();
|
||||
}
|
||||
|
||||
if (len != 0)
|
||||
{
|
||||
DWORD max, size;
|
||||
FPNGChunkArchive arc (png->File->GetFile(), id, len);
|
||||
|
||||
i = arc.ReadCount ();
|
||||
max = arc.ReadCount ();
|
||||
|
||||
for (; i <= max; ++i)
|
||||
{
|
||||
size = arc.ReadCount ();
|
||||
for (k = 0; k < size; ++k)
|
||||
{
|
||||
SDWORD key, val;
|
||||
key = arc.ReadCount();
|
||||
val = arc.ReadCount();
|
||||
vars[i].Insert (key, val);
|
||||
}
|
||||
}
|
||||
png->File->ResetFilePtr();
|
||||
}
|
||||
}
|
||||
|
||||
void G_DoLoadGame ()
|
||||
{
|
||||
|
|
@ -1820,10 +1699,7 @@ void G_DoLoadGame ()
|
|||
delete[] map;
|
||||
savegamerestore = false;
|
||||
|
||||
ReadVars (png, ACS_WorldVars, NUM_WORLDVARS, MAKE_ID('w','v','A','r'));
|
||||
ReadVars (png, ACS_GlobalVars, NUM_GLOBALVARS, MAKE_ID('g','v','A','r'));
|
||||
ReadArrayVars (png, ACS_WorldArrays, NUM_WORLDVARS, MAKE_ID('w','a','R','r'));
|
||||
ReadArrayVars (png, ACS_GlobalArrays, NUM_GLOBALVARS, MAKE_ID('g','a','R','r'));
|
||||
P_ReadACSVars(png);
|
||||
|
||||
NextSkill = -1;
|
||||
if (M_FindPNGChunk (png, MAKE_ID('s','n','X','t')) == 1)
|
||||
|
|
@ -1985,7 +1861,7 @@ static void PutSaveComment (FILE *file)
|
|||
|
||||
// Get level name
|
||||
//strcpy (comment, level.level_name);
|
||||
mysnprintf(comment, countof(comment), "%s - %s", level.mapname, level.level_name);
|
||||
mysnprintf(comment, countof(comment), "%s - %s", level.mapname, level.LevelName.GetChars());
|
||||
len = (WORD)strlen (comment);
|
||||
comment[len] = '\n';
|
||||
|
||||
|
|
@ -2069,10 +1945,7 @@ void G_DoSaveGame (bool okForQuicksave, FString filename, const char *descriptio
|
|||
FRandom::StaticWriteRNGState (stdfile);
|
||||
P_WriteACSDefereds (stdfile);
|
||||
|
||||
WriteVars (stdfile, ACS_WorldVars, NUM_WORLDVARS, MAKE_ID('w','v','A','r'));
|
||||
WriteVars (stdfile, ACS_GlobalVars, NUM_GLOBALVARS, MAKE_ID('g','v','A','r'));
|
||||
WriteArrayVars (stdfile, ACS_WorldArrays, NUM_WORLDVARS, MAKE_ID('w','a','R','r'));
|
||||
WriteArrayVars (stdfile, ACS_GlobalArrays, NUM_GLOBALVARS, MAKE_ID('g','a','R','r'));
|
||||
P_WriteACSVars(stdfile);
|
||||
|
||||
if (NextSkill != -1)
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue