summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSimon <simon@hardwired.org.uk>2011-04-12 11:19:21 (GMT)
committer Simon <simon@hardwired.org.uk>2011-04-12 11:19:21 (GMT)
commit67531c24349c479cd9e765a02050aa8b15dbb439 (patch)
tree1d440eeba68ce1ac3ab38abed8784ca11f3b3087 /src
parentd3553536772c11158ff69f2d442c1504568fea0d (diff)
downloadpowder-67531c24349c479cd9e765a02050aa8b15dbb439.zip
powder-67531c24349c479cd9e765a02050aa8b15dbb439.tar.gz
Game save renderer
Diffstat (limited to 'src')
-rw-r--r--src/main.c81
1 files changed, 79 insertions, 2 deletions
diff --git a/src/main.c b/src/main.c
index 921471e..2ff9af5 100644
--- a/src/main.c
+++ b/src/main.c
@@ -153,7 +153,8 @@ static const char *it_msg =
"'P' will take a screenshot and save it into the current directory.\n"
"\n"
"\bgCopyright (c) 2008-11 Stanislaw K Skowronek (\brhttp://powder.unaligned.org\bg, \bbirc.unaligned.org #wtf\bg)\n"
- "\bgCopyright (c) 2010-11 Simon Robertshaw, Skresanov Savely, cracker64, Bryan Hoyle, Nathan Cousins, jacksonmj, Lieuwe Mosch\n"
+ "\bgCopyright (c) 2010-11 Simon Robertshaw, Skresanov Savely, cracker64, Bryan Hoyle, Nathan Cousins, jacksonmj,\n"
+ " Lieuwe Mosch\n"
"\n"
"\bgTo use online features such as saving, you need to register at: \brhttp://powdertoy.co.uk/Register.html"
;
@@ -178,6 +179,7 @@ int death = 0, framerender = 0;
int amd = 1;
int FPSB = 0;
int MSIGN =-1;
+int frameidx = 0;
//int CGOL = 0;
//int GSPEED = 1;//causes my .exe to crash..
int sound_enable = 0;
@@ -2551,6 +2553,72 @@ int process_command_old(pixel *vid_buf,char *console,char *console_error) {
return 1;
}
+#ifdef RENDERER
+int main(int argc, char *argv[])
+{
+ pixel *vid_buf=calloc((XRES+BARSIZE)*(YRES+MENUSIZE), PIXELSIZE);
+ int load_size, i=0, j=0;
+ void *load_data = file_load(argv[1], &load_size);
+ unsigned char c[3];
+ FILE *f;
+
+ cmode = CM_FIRE;
+ sys_pause = 1;
+ parts = calloc(sizeof(particle), NPART);
+ for (i=0; i<NPART-1; i++)
+ parts[i].life = i+1;
+ parts[NPART-1].life = -1;
+ pfree = 0;
+ fire_bg=calloc(XRES*YRES, PIXELSIZE);
+ memset(fire_r, 0, sizeof(fire_r));
+ memset(fire_g, 0, sizeof(fire_g));
+ memset(fire_b, 0, sizeof(fire_b));
+ memset(fire_bg, 0, XRES*YRES*PIXELSIZE);
+
+
+ prepare_alpha();
+
+ if(load_data && load_size){
+ int parsestate = 0;
+ //parsestate = parse_save(load_data, load_size, 1, 0, 0);
+ parsestate = parse_save(load_data, load_size, 1, 0, 0, bmap, fvx, fvy, signs, parts, pmap);
+
+ for(i=0; i<30; i++){
+
+ update_particles(vid_buf);
+ draw_parts(vid_buf);
+ render_fire(vid_buf);
+ memset(vid_buf, 0, (XRES+BARSIZE)*YRES*PIXELSIZE);
+ }
+
+ render_signs(vid_buf);
+
+ if(parsestate>0){
+ //return 0;
+ info_box(vid_buf, "Save file invalid or from newer version");
+ }
+
+ f=fopen(argv[2],"wb");
+ fprintf(f,"P6\n%d %d\n255\n",XRES,YRES);
+ for (j=0; j<YRES; j++)
+ {
+ for (i=0; i<XRES; i++)
+ {
+ c[0] = PIXR(vid_buf[i]);
+ c[1] = PIXG(vid_buf[i]);
+ c[2] = PIXB(vid_buf[i]);
+ fwrite(c,3,1,f);
+ }
+ vid_buf+=XRES+BARSIZE;
+ }
+ fclose(f);
+
+ return 1;
+ }
+
+ return 0;
+}
+#else
int main(int argc, char *argv[])
{
int hud_enable = 1;
@@ -2776,6 +2844,8 @@ int main(int argc, char *argv[])
while (!sdl_poll()) //the main loop
{
+ frameidx++;
+ frameidx %= 30;
if (!sys_pause||framerender) //only update air if not paused
{
update_air();
@@ -2808,6 +2878,12 @@ int main(int argc, char *argv[])
if (bsy<0)
bsy = 0;
+ memcpy(mmapx_o, mmapx, sizeof(mmapx));
+ memcpy(mmapy_o, mmapy, sizeof(mmapy));
+
+ memset(mmapx, 0, sizeof(mmapx));
+ memset(mmapy, 0, sizeof(mmapy));
+
update_particles(vid_buf); //update everything
draw_parts(vid_buf); //draw particles
@@ -4356,4 +4432,5 @@ int main(int argc, char *argv[])
Py_Finalize();//cleanup any python stuff.
#endif
return 0;
-} \ No newline at end of file
+}
+#endif \ No newline at end of file