Subversion Repositories Games.Rick Dangerous

Rev

Rev 1 | Rev 10 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. /*
  2.  * src/sysarg.c
  3.  *
  4.  * Copyright (C) 1998-2002 BigOrno (bigorno@bigorno.net). All rights reserved.
  5.  *
  6.  * The use and distribution terms for this software are contained in the file
  7.  * named README, which can be found in the root of this distribution. By
  8.  * using this software in any fashion, you are agreeing to be bound by the
  9.  * terms of this license.
  10.  *
  11.  * You must not remove this notice, or any other, from this software.
  12.  */
  13.  
  14. /*
  15.  * 20021010 added test to prevent buffer overrun in -keys parsing.
  16.  */
  17.  
  18. #include <stdlib.h> // atoi
  19. #include <string.h> // strcmp
  20.  
  21. #include <SDL.h>
  22.  
  23. #include "system.h"
  24. #include "game.h"
  25.  
  26. #include "maps.h"
  27. #include "syssnd.h"
  28.  
  29. int sysarg_args_period = 0;
  30. int sysarg_args_map = 0;
  31. int sysarg_args_submap = 0;
  32. int sysarg_args_score = 0;
  33. int sysarg_args_nosound = 0;
  34. int sysarg_args_vol = 0;
  35.  
  36.  
  37. extern U8 want_infinitelives;
  38. extern U8 want_fullscreen;
  39. extern U8 want_filter;
  40.  
  41.  
  42. /*
  43.  * Fail
  44.  */
  45. void sysarg_fail (char *msg)
  46. {
  47.    sys_printf ("Rick Dangerous: %s\n"
  48.                "usage: Rick Dangerous [<options>]\n"
  49.                "options:\n"
  50.                " -h, --help : Display this information.\n"
  51.                " -f, --fullscreen : Start fullscreen.\n"
  52.                " -episode <1-4> : Start directly at the first map of the specified episode.\n"
  53.                " -map <1-47> : Start directly at the specified map.\n"
  54.                " -score <N> : Start directly with score N.\n"
  55.                " -s <0-99>, --speed <0-99> : Set the game speed to a given value.\n"
  56.                " -vol <0-10> : Set the sound volume to a given value.\n"
  57.                " -n, --nosound : Disable sound completely.\n"
  58.                " -x, --togglefilter : Start with xBRZ filter disabled (F7 to enable).\n"
  59.                " -i, --infinitelives : Enable infinite lives.\n",
  60.                msg);
  61.    exit (1);
  62. }
  63.  
  64.  
  65. /*
  66.  * Read and process arguments
  67.  */
  68. void sysarg_init (int argc, char **argv)
  69. {
  70.    int i;
  71.  
  72.    for (i = 1; i < argc; i++)
  73.    {
  74.       if (!strcmp (argv[i], "-h") || !strcmp (argv[i], "--help"))
  75.          sysarg_fail ("help");
  76.  
  77.       else if (!strcmp(argv[i], "-f") || !strcmp(argv[i], "--fullscreen"))
  78.          want_fullscreen = TRUE;
  79.  
  80.       else if (!strcmp(argv[i], "-episode"))
  81.       {
  82.          if (++i == argc)
  83.             sysarg_fail ("missing episode number");
  84.          sysarg_args_map = atoi(argv[i]) - 1;
  85.          if (sysarg_args_map < 0 || sysarg_args_map >= MAP_NBR_MAPS-1)
  86.             sysarg_fail ("invalid episode number");
  87.       }
  88.  
  89.       else if (!strcmp(argv[i], "-map"))
  90.       {
  91.          if (++i == argc)
  92.             sysarg_fail ("missing submap number");
  93.          sysarg_args_submap = atoi(argv[i]) - 1;
  94.          if (sysarg_args_submap < 0 || sysarg_args_submap >= MAP_NBR_SUBMAPS)
  95.             sysarg_fail ("invalid submap number");
  96.       }
  97.  
  98.       // Pierre-Marie Baty -- addition: start score
  99.       else if (!strcmp(argv[i], "-score"))
  100.       {
  101.          if (++i == argc)
  102.             sysarg_fail ("missing start score number");
  103.          sysarg_args_score = atoi(argv[i]) - 1;
  104.       }
  105.  
  106.       else if (!strcmp(argv[i], "-s") || !strcmp(argv[i], "--speed"))
  107.       {
  108.          if (++i == argc)
  109.             sysarg_fail ("missing speed value");
  110.          sysarg_args_period = atoi(argv[i]) - 1;
  111.          if (sysarg_args_period < 0 || sysarg_args_period > 99)
  112.             sysarg_fail ("invalid speed value");
  113.       }
  114.  
  115.       else if (!strcmp(argv[i], "-vol"))
  116.       {
  117.          if (++i == argc)
  118.             sysarg_fail ("missing volume");
  119.          sysarg_args_vol = atoi(argv[i]) - 1;
  120.          if (sysarg_args_vol < 0 || sysarg_args_vol >= SYSSND_MAXVOL)
  121.             sysarg_fail ("invalid volume");
  122.       }
  123.  
  124.       else if (!strcmp(argv[i], "-n") || !strcmp(argv[i], "--nosound"))
  125.          sysarg_args_nosound = 1;
  126.  
  127.       else if (!strcmp(argv[i], "-x") || !strcmp(argv[i], "--togglefilter"))
  128.          want_filter = FALSE;
  129.  
  130.       else if (!strcmp(argv[i], "-i") || !strcmp(argv[i], "--infinitelives"))
  131.          want_infinitelives = TRUE;
  132.  
  133.       else
  134.          sysarg_fail ("invalid argument(s)");
  135.    }
  136.  
  137.    // this is dirty (sort of)
  138.    if (sysarg_args_submap >= 0 && sysarg_args_submap < 9)
  139.       sysarg_args_map = 0;
  140.    if (sysarg_args_submap >= 9 && sysarg_args_submap < 20)
  141.       sysarg_args_map = 1;
  142.    if (sysarg_args_submap >= 20 && sysarg_args_submap < 38)
  143.       sysarg_args_map = 2;
  144.    if (sysarg_args_submap >= 38)
  145.       sysarg_args_map = 3;
  146.  
  147.    if (sysarg_args_submap == 9 || sysarg_args_submap == 20 || sysarg_args_submap == 38)
  148.       sysarg_args_submap = 0;
  149.    //if (sysarg_args_submap == 18)
  150.    //   sysarg_args_submap = 19;
  151. }
  152.