int arg_install;
int arg_silence;
+int em_game_status;
+boolean skip_menu = TRUE;
+
extern void tab_generate();
extern void ulaw_generate();
-int em_main_OLD(int argc, char **argv)
-{
- int result;
- int option;
- extern char *optarg;
-
- /* pre-calculate some data */
- tab_generate();
- ulaw_generate();
-
- progname = strrchr(argv[0], '/'); progname = progname ? progname + 1 : argv[0];
-
- while((option = getopt(argc, argv, "b:d:g:in")) != -1) {
- switch(option) {
- case 'b': arg_basedir = optarg; break;
- case 'd': arg_display = optarg; break;
- case 'g': arg_geometry = optarg; break;
- case 'i': arg_install = 1; break;
- case 'n': arg_silence = 1; break;
- default:
- printf("Emerald Mine for X11 © 2000,2001 David Tritscher\n\n");
- printf("usage: %s [options]\n", progname);
- printf("\t-b set base directory\n");
- printf("\t-d server to contact\n");
- printf("\t-g geometry\n");
- printf("\t-i install colourmap\n");
- printf("\t-n no sounds\n");
- exit(option == 'h' ? 0 : 1);
- }
- }
- if(arg_basedir == 0) arg_basedir = getenv("EMERALD_BASE");
-
- result = open_all(); if(result) goto fail;
- result = game_start(); if(result) goto fail;
- result = 0;
-fail:
- close_all();
- return(result);
-}
+extern void game_menu_init();
-int em_main()
+void em_open_all()
{
- int result;
+ /* pre-calculate some data */
+ tab_generate();
+ ulaw_generate();
- /* pre-calculate some data */
- tab_generate();
- ulaw_generate();
+ progname = "emerald mine";
+
+ if (open_all() != 0)
+ Error(ERR_EXIT, "em_open_all(): open_all() failed");
+
+ game_init_vars();
+}
- progname = "emerald mine";
+void em_close_all()
+{
+ close_all();
+}
- result = open_all();
- if(result)
- goto fail;
+int em_main_init_game(int level_nr, char *filename)
+{
+ if (skip_menu)
+ {
+ em_game_status = EM_GAME_STATUS_PLAY;
+ if (game_play_init(level_nr, filename) != 0)
+ return 1;
+ }
+ else
+ {
+ em_game_status = EM_GAME_STATUS_MENU;
+ game_menu_init();
+ }
- result = game_start();
- if(result)
- goto fail;
+ return 0;
+}
- result = 0;
-fail:
- close_all();
- return(result);
+int em_main_handle_game(byte action)
+{
+ return game_loop(action);
}
/* massive kludge for buffer overflows
*/
void snprintf_overflow(char *description)
{
- fprintf(stderr, "%s: %s\n", progname, "buffer overflow; check EMERALD_BASE environment variable");
- fprintf(stderr, "%s %s\n", "Fault occured while attempting to", description);
- abort();
+ fprintf(stderr, "%s: %s\n", progname,
+ "buffer overflow; check EMERALD_BASE environment variable");
+ fprintf(stderr, "%s %s\n", "Fault occured while attempting to", description);
+
+ abort();
}
#else