Index: source/creator/creator.c =================================================================== --- source/creator/creator.c (revision 12588) +++ source/creator/creator.c (working copy) @@ -189,6 +189,7 @@ printf (" \tHDR TIFF EXR MPEG AVICODEC QUICKTIME CINEON DPX\n"); printf (" -x \tSet option to add the file extension to the end of the file.\n"); printf (" -t \tUse amount of for rendering\n"); + printf (" -j \tSet frame step to (use with -a)\n"); printf ("\nAnimation options:\n"); printf (" -a \tPlayback \n"); printf (" -p \tOpen with lower left corner at , \n"); @@ -571,7 +572,7 @@ if (a < argc) { int frame= MIN2(MAXFRAME, MAX2(1, atoi(argv[a]))); Render *re= RE_NewRender(G.scene->id.name); - RE_BlenderAnim(re, G.scene, frame, frame); + RE_BlenderAnim(re, G.scene, frame, frame, G.scene->frame_step); } } else { printf("\nError: no blend loaded. cannot use '-f'.\n"); @@ -580,7 +581,7 @@ case 'a': if (G.scene) { Render *re= RE_NewRender(G.scene->id.name); - RE_BlenderAnim(re, G.scene, G.scene->r.sfra, G.scene->r.efra); + RE_BlenderAnim(re, G.scene, G.scene->r.sfra, G.scene->r.efra, G.scene->frame_step); } else { printf("\nError: no blend loaded. cannot use '-a'.\n"); } @@ -608,6 +609,15 @@ printf("\nError: no blend loaded. cannot use '-e'.\n"); } break; + case 'j': + a++; + if(G.scene) { + int fstep= MIN2(MAXFRAME, MAX2(1, atoi(argv[a]))); + if (a < argc) (G.scene->frame_step) = fstep; + } else { + printf("\nError: no blend loaded. cannot use '-j'.\n"); + } + break; case 'P': a++; if (a < argc) BPY_run_python_script (argv[a]); Index: source/blender/render/intern/source/pipeline.c =================================================================== --- source/blender/render/intern/source/pipeline.c (revision 12588) +++ source/blender/render/intern/source/pipeline.c (working copy) @@ -2300,7 +2300,7 @@ } /* saves images to disk */ -void RE_BlenderAnim(Render *re, Scene *scene, int sfra, int efra) +void RE_BlenderAnim(Render *re, Scene *scene, int sfra, int efra, int tfra) { bMovieHandle *mh= BKE_get_movie_handle(scene->r.imtype); int cfrao= scene->r.cfra; @@ -2333,7 +2333,7 @@ } } else { for(scene->r.cfra= sfra; - scene->r.cfra<=efra; scene->r.cfra++) { + scene->r.cfra<=efra; scene->r.cfra+= tfra) { re->r.cfra= scene->r.cfra; /* weak.... */ do_render_all_options(re); Index: source/blender/render/extern/include/RE_pipeline.h =================================================================== --- source/blender/render/extern/include/RE_pipeline.h (revision 12588) +++ source/blender/render/extern/include/RE_pipeline.h (working copy) @@ -178,7 +178,7 @@ /* only RE_NewRender() needed, main Blender render calls */ void RE_BlenderFrame(struct Render *re, struct Scene *scene, int frame); -void RE_BlenderAnim(struct Render *re, struct Scene *scene, int sfra, int efra); +void RE_BlenderAnim(struct Render *re, struct Scene *scene, int sfra, int efra, int tfra); void RE_ReadRenderResult(struct Scene *scene, struct Scene *scenode); void RE_WriteRenderResult(RenderResult *rr, char *filename, int compress); Index: source/blender/python/api2_2x/sceneRender.c =================================================================== --- source/blender/python/api2_2x/sceneRender.c (revision 12588) +++ source/blender/python/api2_2x/sceneRender.c (working copy) @@ -480,7 +480,7 @@ G.scene->r.efra = G.scene->r.sfra; - RE_BlenderAnim(re, G.scene, G.scene->r.sfra, G.scene->r.efra); + RE_BlenderAnim(re, G.scene, G.scene->r.sfra, G.scene->r.efra, G.scene->frame_step); G.scene->r.efra = (short)end_frame; } @@ -547,7 +547,7 @@ return EXPP_ReturnPyObjError (PyExc_RuntimeError, "start frame must be less or equal to end frame"); - RE_BlenderAnim(re, G.scene, G.scene->r.sfra, G.scene->r.efra); + RE_BlenderAnim(re, G.scene, G.scene->r.sfra, G.scene->r.efra, G.scene->frame_step); } Py_RETURN_NONE; } Index: source/blender/blenkernel/BKE_blender.h =================================================================== --- source/blender/blenkernel/BKE_blender.h (revision 12588) +++ source/blender/blenkernel/BKE_blender.h (working copy) @@ -44,7 +44,7 @@ struct MemFile; #define BLENDER_VERSION 245 -#define BLENDER_SUBVERSION 7 +#define BLENDER_SUBVERSION 8 #define BLENDER_MINVERSION 240 #define BLENDER_MINSUBVERSION 0 Index: source/blender/makesdna/DNA_scene_types.h =================================================================== --- source/blender/makesdna/DNA_scene_types.h (revision 12588) +++ source/blender/makesdna/DNA_scene_types.h (working copy) @@ -461,6 +461,10 @@ /* Sculptmode data */ struct SculptData sculptdata; + + /* frame step. */ + int frame_step; + int pad; } Scene; Index: source/blender/src/renderwin.c =================================================================== --- source/blender/src/renderwin.c (revision 12588) +++ source/blender/src/renderwin.c (working copy) @@ -1092,7 +1092,7 @@ } if(anim) - RE_BlenderAnim(re, G.scene, G.scene->r.sfra, G.scene->r.efra); + RE_BlenderAnim(re, G.scene, G.scene->r.sfra, G.scene->r.efra, G.scene->frame_step); else RE_BlenderFrame(re, G.scene, G.scene->r.cfra); Index: source/blender/src/buttons_scene.c =================================================================== --- source/blender/src/buttons_scene.c (revision 12588) +++ source/blender/src/buttons_scene.c (working copy) @@ -1359,12 +1359,13 @@ uiBlockEndAlign(block); uiBlockSetCol(block, TH_AUTO); - uiDefBut(block, BUT,B_PLAYANIM, "PLAY",692,40,94,33, 0, 0, 0, 0, 0, "Play animation of rendered images/avi (searches Pics: field)"); - uiDefButS(block, NUM, B_RTCHANGED, "rt:",789,40,95,33, &G.rt, -1000.0, 1000.0, 0, 0, "General testing/debug button"); + uiDefBut(block, BUT,B_PLAYANIM, "PLAY",692,50,94,33, 0, 0, 0, 0, 0, "Play animation of rendered images/avi (searches Pics: field)"); + uiDefButS(block, NUM, B_RTCHANGED, "rt:",789,50,95,33, &G.rt, -1000.0, 1000.0, 0, 0, "General testing/debug button"); uiBlockBeginAlign(block); - uiDefButI(block, NUM,REDRAWSEQ,"Sta:",692,10,94,24, &G.scene->r.sfra,1.0,MAXFRAMEF, 0, 0, "The start frame of the animation"); - uiDefButI(block, NUM,REDRAWSEQ,"End:",789,10,95,24, &G.scene->r.efra,SFRA,MAXFRAMEF, 0, 0, "The end frame of the animation"); + uiDefButI(block, NUM,REDRAWSEQ,"Sta:",692,20,94,24, &G.scene->r.sfra,1.0,MAXFRAMEF, 0, 0, "The start frame of the animation"); + uiDefButI(block, NUM,REDRAWSEQ,"End:",789,20,95,24, &G.scene->r.efra,SFRA,MAXFRAMEF, 0, 0, "The end frame of the animation"); + uiDefButI(block, NUM,REDRAWSEQ,"Step:",692,0,192,18, &G.scene->frame_step,1.0, MAXFRAMEF, 0, 0, "Frame Step"); uiBlockEndAlign(block); } Index: source/blender/blenloader/intern/readfile.c =================================================================== --- source/blender/blenloader/intern/readfile.c (revision 12588) +++ source/blender/blenloader/intern/readfile.c (working copy) @@ -6893,7 +6893,15 @@ } } - + + if ((main->versionfile < 245) || (main->versionfile == 245 && main->subversionfile < 8)) { + Scene *sce; + /* fix frame_step */ + for(sce= main->scene.first; sce; sce= sce->id.next) { + sce->frame_step= 1; + } + } + /* WATCH IT!!!: pointers from libdata have not been converted yet here! */ /* WATCH IT 2!: Userdef struct init has to be in src/usiblender.c! */