Subversion Repositories Games.Rick Dangerous

Rev

Rev 10 | 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 <SDL2/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. extern U8 enable_endkey;
  41.  
  42.  
  43. /*
  44.  * Fail
  45.  */
  46. void sysarg_fail (char *msg)
  47. {
  48.    sys_printf ("Rick Dangerous: %s\n"
  49.                "usage: Rick Dangerous [<options>]\n"
  50.                "options:\n"
  51.                " -h, --help : Display this information.\n"
  52.                " -f, --fullscreen : Start fullscreen.\n"
  53.                " -episode <1-4> : Start directly at the first map of the specified episode.\n"
  54.                " -map <1-47> : Start directly at the specified map.\n"
  55.                " -score <N> : Start directly with score N.\n"
  56.                " -s <0-99>, --speed <0-99> : Set the game speed to a given value.\n"
  57.                " -vol <0-10> : Set the sound volume to a given value.\n"
  58.                " -n, --nosound : Disable sound completely.\n"
  59.                " -x, --togglefilter : Start with xBRZ filter disabled (F7 to enable).\n"
  60.                " -i, --infinitelives : Enable infinite lives.\n"
  61.                " -e, --noendkey : Disable END key.\n",
  62.                msg);
  63.    exit (1);
  64. }
  65.  
  66.  
  67. /*
  68.  * Read and process arguments
  69.  */
  70. void sysarg_init (int argc, char **argv)
  71. {
  72.    int i;
  73.  
  74.    for (i = 1; i < argc; i++)
  75.    {
  76.       if (!strcmp (argv[i], "-h") || !strcmp (argv[i], "--help"))
  77.          sysarg_fail ("help");
  78.  
  79.       else if (!strcmp(argv[i], "-f") || !strcmp(argv[i], "--fullscreen"))
  80.          want_fullscreen = TRUE;
  81.  
  82.       else if (!strcmp(argv[i], "-episode"))
  83.       {
  84.          if (++i == argc)
  85.             sysarg_fail ("missing episode number");
  86.          sysarg_args_map = atoi(argv[i]) - 1;
  87.          if (sysarg_args_map < 0 || sysarg_args_map >= MAP_NBR_MAPS-1)
  88.             sysarg_fail ("invalid episode number");
  89.       }
  90.  
  91.       else if (!strcmp(argv[i], "-map"))
  92.       {
  93.          if (++i == argc)
  94.             sysarg_fail ("missing submap number");
  95.          sysarg_args_submap = atoi(argv[i]) - 1;
  96.          if (sysarg_args_submap < 0 || sysarg_args_submap >= MAP_NBR_SUBMAPS)
  97.             sysarg_fail ("invalid submap number");
  98.       }
  99.  
  100.       // Pierre-Marie Baty -- addition: start score
  101.       else if (!strcmp(argv[i], "-score"))
  102.       {
  103.          if (++i == argc)
  104.             sysarg_fail ("missing start score number");
  105.          sysarg_args_score = atoi(argv[i]) - 1;
  106.       }
  107.  
  108.       else if (!strcmp(argv[i], "-s") || !strcmp(argv[i], "--speed"))
  109.       {
  110.          if (++i == argc)
  111.             sysarg_fail ("missing speed value");
  112.          sysarg_args_period = atoi(argv[i]) - 1;
  113.          if (sysarg_args_period < 0 || sysarg_args_period > 99)
  114.             sysarg_fail ("invalid speed value");
  115.       }
  116.  
  117.       else if (!strcmp(argv[i], "-vol"))
  118.       {
  119.          if (++i == argc)
  120.             sysarg_fail ("missing volume");
  121.          sysarg_args_vol = atoi(argv[i]) - 1;
  122.          if (sysarg_args_vol < 0 || sysarg_args_vol >= SYSSND_MAXVOL)
  123.             sysarg_fail ("invalid volume");
  124.       }
  125.  
  126.       else if (!strcmp(argv[i], "-n") || !strcmp(argv[i], "--nosound"))
  127.          sysarg_args_nosound = 1;
  128.  
  129.       else if (!strcmp(argv[i], "-x") || !strcmp(argv[i], "--togglefilter"))
  130.          want_filter = FALSE;
  131.  
  132.       else if (!strcmp(argv[i], "-i") || !strcmp(argv[i], "--infinitelives"))
  133.          want_infinitelives = TRUE;
  134.  
  135.       else if (!strcmp(argv[i], "-e") || !strcmp(argv[i], "--disableendkey"))
  136.          enable_endkey = FALSE;
  137.  
  138.       else
  139.          sysarg_fail ("invalid argument(s)");
  140.    }
  141.  
  142.    // this is dirty (sort of)
  143.    if (sysarg_args_submap >= 0 && sysarg_args_submap < 9)
  144.       sysarg_args_map = 0;
  145.    if (sysarg_args_submap >= 9 && sysarg_args_submap < 20)
  146.       sysarg_args_map = 1;
  147.    if (sysarg_args_submap >= 20 && sysarg_args_submap < 38)
  148.       sysarg_args_map = 2;
  149.    if (sysarg_args_submap >= 38)
  150.       sysarg_args_map = 3;
  151.  
  152.    if (sysarg_args_submap == 9 || sysarg_args_submap == 20 || sysarg_args_submap == 38)
  153.       sysarg_args_submap = 0;
  154.    //if (sysarg_args_submap == 18)
  155.    //   sysarg_args_submap = 19;
  156. }
  157.