Re: [Super-tux-devel] Patch to allow running levels from command line
Brought to you by:
wkendrick
From: Tobias <tob...@gm...> - 2004-03-19 18:28:48
|
Good idea grumbel! I'll polish it and commit it then. Greetz... Tobias Gläßer Am Fr, den 19.03.2004 schrieb Ingo Ruhnke um 09:08: > Here a little patch to allow to run levels from command line, ala: > > ./supertux ../data/levels/default/level4.dat > > The patch does some ugly stuff with gameloop(), so I havn't commited > it yet to CVS. > > Index: src/gameloop.cpp > =================================================================== > RCS file: /cvsroot/super-tux/supertux/src/gameloop.cpp,v > retrieving revision 1.1 > diff -u -r1.1 gameloop.cpp > --- src/gameloop.cpp 17 Mar 2004 19:19:10 -0000 1.1 > +++ src/gameloop.cpp 19 Mar 2004 13:49:59 -0000 > @@ -357,8 +357,18 @@ > player_level_begin(&tux); > set_defaults(); > level_free(¤t_level); > - if(level_load(¤t_level,level_subset,level) != 0) > - return 0; > + > + if (level_startup_file) > + { > + if(level_load(¤t_level, level_startup_file) != 0) > + return 0; > + } > + else > + { > + if(level_load(¤t_level,level_subset,level) != 0) > + return 0; > + } > + > arrays_free(); > arrays_init(); > activate_bad_guys(); > @@ -568,7 +578,7 @@ > > /* --- GAME LOOP! --- */ > > -int gameloop(char * subset, int levelnb, int mode) > +int gameloop(const char* levelname, const char * subset, int levelnb, int mode) > { > int fps_cnt, jump, done; > timer_type fps_timer, frame_timer; > @@ -579,14 +589,23 @@ > > st_gl_mode = mode; > level = levelnb; > - strcpy(level_subset,subset); > > /* Init the game: */ > arrays_init(); > set_defaults(); > > - if(level_load(¤t_level,level_subset,level) != 0) > - exit(1); > + if (levelname) > + { > + if (level_load(¤t_level, levelname)) > + exit(1); > + } > + else > + { > + strcpy(level_subset,subset); > + if(level_load(¤t_level, level_subset, level) != 0) > + exit(1); > + } > + > level_load_gfx(¤t_level); > activate_bad_guys(); > level_load_song(¤t_level); > Index: src/gameloop.h > =================================================================== > RCS file: /cvsroot/super-tux/supertux/src/gameloop.h,v > retrieving revision 1.15 > diff -u -r1.15 gameloop.h > --- src/gameloop.h 15 Mar 2004 17:45:29 -0000 1.15 > +++ src/gameloop.h 19 Mar 2004 13:49:59 -0000 > @@ -28,7 +28,7 @@ > > /* Function prototypes: */ > > -int gameloop(char * subset, int levelnb, int mode); > +int gameloop(const char* filename, const char * subset, int levelnb, int mode); > void savegame(int slot); > void loadgame(int slot); > void slotinfo(char **pinfo, int slot); > Index: src/globals.cpp > =================================================================== > RCS file: /cvsroot/super-tux/supertux/src/globals.cpp,v > retrieving revision 1.1 > diff -u -r1.1 globals.cpp > --- src/globals.cpp 17 Mar 2004 19:19:10 -0000 1.1 > +++ src/globals.cpp 19 Mar 2004 13:49:59 -0000 > @@ -17,6 +17,8 @@ > > int use_gl, use_joystick, use_fullscreen, debug_mode, show_fps; > > +const char* level_startup_file = 0; > + > /* SuperTux directory ($HOME/.supertux) and save directory($HOME/.supertux/save) */ > char *st_dir, *st_save_dir; > > Index: src/globals.h > =================================================================== > RCS file: /cvsroot/super-tux/supertux/src/globals.h,v > retrieving revision 1.12 > diff -u -r1.12 globals.h > --- src/globals.h 15 Mar 2004 17:45:29 -0000 1.12 > +++ src/globals.h 19 Mar 2004 13:49:59 -0000 > @@ -23,6 +23,8 @@ > > extern int use_gl, use_joystick, use_fullscreen, debug_mode, show_fps; > > +extern const char* level_startup_file; > + > /* SuperTux directory ($HOME/.supertux) and save directory($HOME/.supertux/save) */ > extern char *st_dir, *st_save_dir; > > Index: src/level.cpp > =================================================================== > RCS file: /cvsroot/super-tux/supertux/src/level.cpp,v > retrieving revision 1.1 > diff -u -r1.1 level.cpp > --- src/level.cpp 17 Mar 2004 19:19:11 -0000 1.1 > +++ src/level.cpp 19 Mar 2004 13:50:00 -0000 > @@ -144,17 +144,23 @@ > /* Returns -1, if the loading of the level failed. */ > int level_load(st_level* plevel, char *subset, int level) > { > - int y,x; > - FILE * fi; > - char str[80]; > char filename[1024]; > - char * line; > > /* Load data file: */ > > snprintf(filename, 1024, "%s/levels/%s/level%d.dat", st_dir, subset, level); > if(!faccessible(filename)) > snprintf(filename, 1024, "%s/levels/%s/level%d.dat", DATA_PREFIX, subset, level); > + > + return level_load(plevel, filename); > +} > + > +int level_load(st_level* plevel, const char* filename) > +{ > + char str[80]; > + int x, y; > + char * line; > + FILE * fi; > fi = fopen(filename, "r"); > if (fi == NULL) > { > @@ -162,7 +168,6 @@ > return -1; > } > > - > /* Load header info: */ > > > Index: src/level.h > =================================================================== > RCS file: /cvsroot/super-tux/supertux/src/level.h,v > retrieving revision 1.8 > diff -u -r1.8 level.h > --- src/level.h 2 Mar 2004 15:42:36 -0000 1.8 > +++ src/level.h 19 Mar 2004 13:50:00 -0000 > @@ -51,6 +51,7 @@ > extern texture_type img_bkgd, img_bkgd_tile[2][4], img_solid[4], img_brick[2]; > > int level_load(st_level* plevel, char * subset, int level); > +int level_load(st_level* plevel, const char* filename); > void level_save(st_level* plevel, char * subset, int level); > void level_free(st_level* plevel); > void level_load_gfx(st_level* plevel); > Index: src/leveleditor.cpp > =================================================================== > RCS file: /cvsroot/super-tux/supertux/src/leveleditor.cpp,v > retrieving revision 1.1 > diff -u -r1.1 leveleditor.cpp > --- src/leveleditor.cpp 17 Mar 2004 19:19:11 -0000 1.1 > +++ src/leveleditor.cpp 19 Mar 2004 13:50:03 -0000 > @@ -1445,7 +1445,7 @@ > void le_testlevel() > { > level_save(le_current_level,"test",le_level); > - gameloop("test",le_level, ST_GL_TEST); > + gameloop(0, "test",le_level, ST_GL_TEST); > menu_set_current(&leveleditor_menu); > arrays_init(); > level_load_gfx(le_current_level); > Index: src/setup.cpp > =================================================================== > RCS file: /cvsroot/super-tux/supertux/src/setup.cpp,v > retrieving revision 1.1 > diff -u -r1.1 setup.cpp > --- src/setup.cpp 17 Mar 2004 19:19:11 -0000 1.1 > +++ src/setup.cpp 19 Mar 2004 13:50:05 -0000 > @@ -394,7 +394,7 @@ > { > if(game_started == NO) > { > - gameloop("default",slot - 1,ST_GL_LOAD_GAME); > + gameloop(0, "default",slot - 1,ST_GL_LOAD_GAME); > show_menu = YES; > menu_set_current(&main_menu); > } > @@ -950,6 +950,10 @@ > > exit(0); > } > + else if (argv[i][0] != '0') > + { > + level_startup_file = argv[i]; > + } > else > { > /* Unknown - complain! */ > Index: src/supertux.cpp > =================================================================== > RCS file: /cvsroot/super-tux/supertux/src/supertux.cpp,v > retrieving revision 1.1 > diff -u -r1.1 supertux.cpp > --- src/supertux.cpp 17 Mar 2004 19:19:12 -0000 1.1 > +++ src/supertux.cpp 19 Mar 2004 13:50:05 -0000 > @@ -32,19 +32,26 @@ > st_joystick_setup(); > st_general_setup(); > st_menu(); > - > - done = intro(); > - > - done = 0; > - > - while (!done) > + > + if (level_startup_file) > { > - done = title(); > + gameloop(level_startup_file, 0, 1, ST_GL_PLAY); > + } > + else > + { > + done = intro(); > + > + done = 0; > + > + while (!done) > + { > + done = title(); > + } > } > > clearscreen(0, 0, 0); > updatescreen(); > - > + > st_shutdown(); > > return(0); > Index: src/title.cpp > =================================================================== > RCS file: /cvsroot/super-tux/supertux/src/title.cpp,v > retrieving revision 1.1 > diff -u -r1.1 title.cpp > --- src/title.cpp 17 Mar 2004 19:19:12 -0000 1.1 > +++ src/title.cpp 19 Mar 2004 13:50:05 -0000 > @@ -220,7 +220,7 @@ > else if(key == SDLK_SPACE || key == SDLK_RETURN) > { > done = YES; > - quit = gameloop(subset.name,1,ST_GL_PLAY); > + quit = gameloop(0, subset.name,1,ST_GL_PLAY); > subset_free(&subset); > } > else if(key == SDLK_ESCAPE) -- |