diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/main.c | 17 |
1 files changed, 16 insertions, 1 deletions
@@ -404,7 +404,7 @@ void *build_save(int *size, int x0, int y0, int w, int h) int parse_save(void *save, int size, int replace, int x0, int y0) { unsigned char *d,*c=save; - int i,j,k,x,y,p=0,*m=calloc(XRES*YRES, sizeof(int)), ver, pty, ty, legacy_beta=0; + int q,i,j,k,x,y,p=0,*m=calloc(XRES*YRES, sizeof(int)), ver, pty, ty, legacy_beta=0; int bx0=x0/CELL, by0=y0/CELL, bw, bh, w, h; int fp[NPART], nf=0, new_format = 0, ttv = 0; @@ -479,6 +479,11 @@ int parse_save(void *save, int size, int replace, int x0, int y0) if (replace) { gravityMode = 1; + memset(photons, 0, sizeof(photons)); + memset(wireless, 0, sizeof(wireless)); + memset(gol2, 0, sizeof(gol2)); + memset(portal, 0, sizeof(portal)); + memset(bmap, 0, sizeof(bmap)); memset(emap, 0, sizeof(emap)); memset(signs, 0, sizeof(signs)); @@ -708,6 +713,11 @@ int parse_save(void *save, int size, int replace, int x0, int y0) ttv = (d[p++])<<8; ttv |= (d[p++]); parts[i-1].tmp = ttv; + if(ptypes[parts[i-1].type].properties&PROP_LIFE && !parts[i-1].tmp) + for(q = 1; q<NGOL ; q++){ + if(parts[i-1].type==goltype[q-1] && grule[q][9]==2) + parts[i-1].tmp = grule[q][9]-1; + } } else { p+=2; } @@ -2026,6 +2036,11 @@ int main(int argc, char *argv[]) memset(bmap, 0, sizeof(bmap)); memset(emap, 0, sizeof(emap)); memset(parts, 0, sizeof(particle)*NPART); + + memset(photons, 0, sizeof(photons)); + memset(wireless, 0, sizeof(wireless)); + memset(gol2, 0, sizeof(gol2)); + memset(portal, 0, sizeof(portal)); for (i=0; i<NPART-1; i++) parts[i].life = i+1; parts[NPART-1].life = -1; |
