+ struct screen *scr;
+ char *env;
+
+ if(load_config("demo.cfg") == -1) {
+ return -1;
+ }
+ if((env = getenv("START_SCR"))) {
+ opt.start_scr = env;
+ }
+ if(parse_args(argc, argv) == -1) {
+ return -1;
+ }
+
+ con_init();
+ initFpsFonts();
+
+ if(g3d_init() == -1) {
+ return -1;
+ }
+ g3d_framebuffer(fb_width, fb_height, fb_pixels);
+
+ if(opt.music) {
+ if(music_open("data/test.mod") == -1) {
+ return -1;
+ }
+ }
+
+ if(scr_init() == -1) {
+ return -1;
+ }
+ if(opt.start_scr) {
+ scr = scr_lookup(opt.start_scr);
+ } else {
+ scr = scr_screen(0);
+ }
+
+ if(!scr || scr_change(scr, 4000) == -1) {
+ fprintf(stderr, "screen %s not found\n", opt.start_scr ? opt.start_scr : "0");
+ return -1;
+ }
+
+ /* clear the framebuffer at least once */
+ memset(fb_pixels, 0, fb_width * fb_height * fb_bpp / CHAR_BIT);
+
+ if(opt.music) {
+ music_play();
+ }