summaryrefslogtreecommitdiff
path: root/src/simulation/SaveLoader.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/simulation/SaveLoader.cpp')
-rw-r--r--src/simulation/SaveLoader.cpp51
1 files changed, 41 insertions, 10 deletions
diff --git a/src/simulation/SaveLoader.cpp b/src/simulation/SaveLoader.cpp
index 97ab45e..2683a6f 100644
--- a/src/simulation/SaveLoader.cpp
+++ b/src/simulation/SaveLoader.cpp
@@ -10,7 +10,7 @@
//!TODO: enum for LoadSave return
-int SaveLoader::LoadSave(unsigned char * data, int dataLength, Simulation * sim, bool replace, int x, int y)
+int SaveLoader::Info(unsigned char * data, int dataLength, int & width, int & height)
{
unsigned char * saveData = data;
if (dataLength<16)
@@ -19,34 +19,65 @@ int SaveLoader::LoadSave(unsigned char * data, int dataLength, Simulation * sim,
}
if(saveData[0] == 'O' && saveData[1] == 'P' && saveData[2] == 'S')
{
- return OPSLoadSave(data, dataLength, sim);
+ return OPSInfo(data, dataLength, width, height);
}
else if((saveData[0]==0x66 && saveData[1]==0x75 && saveData[2]==0x43) || (saveData[0]==0x50 && saveData[1]==0x53 && saveData[2]==0x76))
{
- return PSVLoadSave(data, dataLength, sim, replace, x, y);
+ return PSVInfo(data, dataLength, width, height);
}
return 1;
}
-unsigned char * SaveLoader::BuildSave(int & dataLength, Simulation * sim, int orig_x0, int orig_y0, int orig_w, int orig_h)
+int SaveLoader::Load(unsigned char * data, int dataLength, Simulation * sim, bool replace, int x, int y)
{
- unsigned char * temp = OPSBuildSave(dataLength, sim, orig_x0, orig_y0, orig_w, orig_h);
+ unsigned char * saveData = data;
+ if (dataLength<16)
+ {
+ return 1;
+ }
+ if(saveData[0] == 'O' && saveData[1] == 'P' && saveData[2] == 'S')
+ {
+ return OPSLoad(data, dataLength, sim);
+ }
+ else if((saveData[0]==0x66 && saveData[1]==0x75 && saveData[2]==0x43) || (saveData[0]==0x50 && saveData[1]==0x53 && saveData[2]==0x76))
+ {
+ return PSVLoad(data, dataLength, sim, replace, x, y);
+ }
+ return 1;
+}
+
+unsigned char * SaveLoader::Build(int & dataLength, Simulation * sim, int orig_x0, int orig_y0, int orig_w, int orig_h)
+{
+ unsigned char * temp = OPSBuild(dataLength, sim, orig_x0, orig_y0, orig_w, orig_h);
if(!temp)
- temp = PSVBuildSave(dataLength, sim, orig_x0, orig_y0, orig_w, orig_h);
+ temp = PSVBuild(dataLength, sim, orig_x0, orig_y0, orig_w, orig_h);
return temp;
}
-int SaveLoader::OPSLoadSave(unsigned char * data, int dataLength, Simulation * sim)
+int SaveLoader::OPSInfo(unsigned char * data, int dataLength, int & width, int & height)
+{
+ return 2;
+}
+
+
+int SaveLoader::OPSLoad(unsigned char * data, int dataLength, Simulation * sim)
+{
+ return 2;
+}
+
+unsigned char * SaveLoader::OPSBuild(int & dataLength, Simulation * sim, int orig_x0, int orig_y0, int orig_w, int orig_h)
{
return 0;
}
-unsigned char * SaveLoader::OPSBuildSave(int & dataLength, Simulation * sim, int orig_x0, int orig_y0, int orig_w, int orig_h)
+int SaveLoader::PSVInfo(unsigned char * data, int dataLength, int & width, int & height)
{
+ width = data[6];
+ height = data[7];
return 0;
}
-int SaveLoader::PSVLoadSave(unsigned char * data, int dataLength, Simulation * sim, bool replace, int x0, int y0)
+int SaveLoader::PSVLoad(unsigned char * data, int dataLength, Simulation * sim, bool replace, int x0, int y0)
{
unsigned char * d = NULL, * c = data;
int q,i,j,k,x,y,p=0,*m=NULL, ver, pty, ty, legacy_beta=0, tempGrav = 0;
@@ -640,7 +671,7 @@ corrupt:
return 1;
}
-unsigned char * SaveLoader::PSVBuildSave(int & dataLength, Simulation * sim, int orig_x0, int orig_y0, int orig_w, int orig_h)
+unsigned char * SaveLoader::PSVBuild(int & dataLength, Simulation * sim, int orig_x0, int orig_y0, int orig_w, int orig_h)
{
unsigned char *d = (unsigned char*)calloc(1,3*(XRES/CELL)*(YRES/CELL)+(XRES*YRES)*15+MAXSIGNS*262), *c;
int i,j,x,y,p=0,*m=(int*)calloc(XRES*YRES, sizeof(int));