home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Professional / OS2PRO194.ISO / os2 / games / adv / advent.c < prev    next >
Text File  |  1988-08-30  |  8KB  |  327 lines

  1.  
  2. /*    program ADVENT.C                    *\
  3. \*    WARNING: "advent.c" allocates GLOBAL storage space by    *\
  4. \*        including "advdef.h".                *\
  5. \*        All other modules use "advdec.h"        */
  6.  
  7.  
  8. #include    <stdio.h>
  9. #include    <string.h>
  10. #include    "advent.h"    /* #define preprocessor equates    */
  11. #include    "advword.h"    /* definition of "word" array    */
  12. #include    "advcave.h"    /* definition of "cave" array    */
  13. #include    "advtext.h"    /* definition of "text" arrays    */
  14. #include    "advdef.h"
  15.  
  16. #define     setmem(a,b,c)    memset(a,c,b)
  17.  
  18. main(argc, argv)
  19. int    argc;
  20. char    **argv;
  21. {
  22.     int    rflag;        /* user restore request option    */
  23.  
  24.     rflag = 0;
  25.     dbugflg = 0;
  26.     while (--argc > 0) {
  27.         ++argv;
  28.         if (**argv !=  '-')
  29.             break;
  30.         switch(tolower(argv[0][1])) {
  31.         case 'r':
  32.             ++rflag;
  33.             continue;
  34.         case 'd':
  35.             ++dbugflg;
  36.             continue;
  37.         default:
  38.             printf("unknown flag: %c\n", argv[0][1]);
  39.             continue;
  40.         }                /* switch    */
  41.     }                    /* while    */
  42.     if (dbugflg < 2)
  43.         dbugflg = 0;    /* must request three times    */
  44.     opentxt();
  45.     initplay();
  46.     if (rflag)
  47.         restore();
  48.     else if (yes(65, 1, 0))
  49.         limit = 1000;
  50.     else
  51.         limit = 330;
  52.     saveflg = 0;
  53.     srand(511);                /* seed random    */
  54.     while(!saveflg)
  55.         turn();
  56.     if (saveflg)
  57.         saveadv();
  58.     fclose(fd1);
  59.     fclose(fd2);
  60.     fclose(fd3);
  61.     fclose(fd4);
  62.     exit(0);                /* exit = ok    */
  63. }                        /* main        */
  64.  
  65. /* ************************************************************    */
  66.  
  67. /*
  68.     Initialize integer arrays with sscanf
  69. */
  70. scanint(pi, str)
  71. int    *pi;
  72. char    *str;
  73. {
  74.  
  75.     while (*str) {
  76.         if  ((sscanf(str, "%d,", pi++)) < 1)
  77.             bug(41);    /* failed before EOS    */
  78.         while (*str++ != ',')    /* advance str pointer    */
  79.             ;
  80.     }
  81.     return;
  82. }
  83.  
  84. /*
  85.     Initialization of adventure play variables
  86. */
  87. initplay()
  88. {
  89.     turns = 0;
  90.  
  91.     /* initialize location status array */
  92.     setmem(cond, (sizeof(int))*MAXLOC, 0);
  93.     scanint(&cond[1], "5,1,5,5,1,1,5,17,1,1,");
  94.     scanint(&cond[13], "32,0,0,2,0,0,64,2,");
  95.     scanint(&cond[21], "2,2,0,6,0,2,");
  96.     scanint(&cond[31], "2,2,0,0,0,0,0,4,0,2,");
  97.     scanint(&cond[42], "128,128,128,128,136,136,136,128,128,");
  98.     scanint(&cond[51], "128,128,136,128,136,0,8,0,2,");
  99.     scanint(&cond[79], "2,128,128,136,0,0,8,136,128,0,2,2,");
  100.     scanint(&cond[95], "4,0,0,0,0,1,");
  101.     scanint(&cond[113], "4,0,1,1,");
  102.     scanint(&cond[122], "8,8,8,8,8,8,8,8,8,");
  103.  
  104.     /* initialize object locations */
  105.     setmem(place, (sizeof(int))*MAXOBJ, 0);
  106.     scanint(&place[1], "3,3,8,10,11,0,14,13,94,96,");
  107.     scanint(&place[11], "19,17,101,103,0,106,0,0,3,3,");
  108.     scanint(&place[23], "109,25,23,111,35,0,97,");
  109.     scanint(&place[31], "119,117,117,0,130,0,126,140,0,96,");
  110.     scanint(&place[50], "18,27,28,29,30,");
  111.     scanint(&place[56], "92,95,97,100,101,0,119,127,130,");
  112.  
  113.     /* initialize second (fixed) locations */
  114.     setmem(fixed, (sizeof(int))*MAXOBJ, 0);
  115.     scanint(&fixed[3], "9,0,0,0,15,0,-1,");
  116.     scanint(&fixed[11], "-1,27,-1,0,0,0,-1,");
  117.     scanint(&fixed[23], "-1,-1,67,-1,110,0,-1,-1,");
  118.     scanint(&fixed[31], "121,122,122,0,-1,-1,-1,-1,0,-1,");
  119.     scanint(&fixed[62], "121,-1,");
  120.  
  121.     /* initialize default verb messages */
  122.     scanint(actmsg, "0,24,29,0,33,0,33,38,38,42,14,");
  123.     scanint(&actmsg[11], "43,110,29,110,73,75,29,13,59,59,");
  124.     scanint(&actmsg[21], "174,109,67,13,147,155,195,146,110,13,13,");
  125.  
  126.     /* initialize various flags and other variables */
  127.     setmem(visited, (sizeof(int))*MAXLOC, 0);
  128.     setmem(prop, (sizeof(int))*MAXOBJ, 0);
  129.     setmem(&prop[50], (sizeof(int))*(MAXOBJ-50), 0xff);
  130.     wzdark = closed = closing = holding = detail = 0;
  131.     limit = 100;
  132.     tally = 15;
  133.     tally2 = 0;
  134.     newloc = 3;
  135.     loc = oldloc = oldloc2 = 1;
  136.     knfloc = 0;
  137.     chloc = 114;
  138.     chloc2 = 140;
  139. /*    dloc[DWARFMAX-1] = chloc                */
  140.     scanint(dloc, "0,19,27,33,44,64,114,");
  141.     scanint(odloc, "0,0,0,0,0,0,0,");
  142.     dkill = 0;
  143.     scanint(dseen, "0,0,0,0,0,0,0,");
  144.     clock1 = 30;
  145.     clock2 = 50;
  146.     panic = 0;
  147.     bonus = 0;
  148.     numdie = 0;
  149.     daltloc = 18;
  150.     lmwarn = 0;
  151.     foobar = 0;
  152.     dflag = 0;
  153.     gaveup = 0;
  154.     saveflg = 0;
  155.     return;
  156. }
  157.  
  158. /*
  159.     Open advent?.txt files
  160. */
  161. opentxt()
  162. {
  163.     fd1 = fopen("advent1.txt", "r");
  164.     if (!fd1) {
  165.         printf("Sorry, I can't open advent1.txt...\n");
  166.         exit();
  167.     }
  168.     fd2 = fopen("advent2.txt", "r");
  169.     if (!fd2) {
  170.         printf("Sorry, I can't open advent2.txt...\n");
  171.         exit();
  172.     }
  173.     fd3 = fopen("advent3.txt", "r");
  174.     if (!fd3) {
  175.         printf("Sorry, I can't open advent3.txt...\n");
  176.         exit();
  177.     }
  178.     fd4 = fopen("advent4.txt", "r");
  179.     if (!fd4) {
  180.         printf("Sorry, I can't open advent4.txt...\n");
  181.         exit();
  182.     }
  183. }
  184.  
  185. /*
  186.         save adventure game
  187. */
  188. saveadv()
  189. {
  190.     char    *sptr;
  191.     FILE    *savefd;
  192.     char    username[13];
  193.     int i;
  194.  
  195.     printf("What do you want to name the saved game? ");
  196.     scanf("%s", username);
  197.     if (sptr = strchr(username, '.'))
  198.         *sptr = '\0';        /* kill extension    */
  199.     if (strlen(username) > 8)
  200.         username[8] = '\0';    /* max 8 char filename    */
  201.     strcat(username, ".adv");
  202.     savefd = fopen(username, "wb");
  203.     if (savefd == NULL) {
  204.         printf("Sorry, I can't create the file...%s\n", \
  205.                username);
  206.         exit();
  207.     }
  208.  
  209.     putw(turns,savefd);    /* mh 30-Aug-1988 */
  210.     putw(loc,savefd);
  211.     putw(oldloc,savefd);
  212.     putw(oldloc2,savefd);
  213.     putw(newloc,savefd);
  214.     for(i=0;i<MAXLOC;i++) putw(cond[i],savefd);
  215.     for(i=0;i<MAXOBJ;i++) putw(place[i],savefd);
  216.     for(i=0;i<MAXOBJ;i++) putw(fixed[i],savefd);
  217.     for(i=0;i<MAXLOC;i++) putw(visited[i],savefd);
  218.     for(i=0;i<MAXOBJ;i++) putw(prop[i],savefd);
  219.     putw(tally,savefd);
  220.     putw(tally2,savefd);
  221.     putw(limit,savefd);
  222.     putw(lmwarn,savefd);
  223.     putw(wzdark,savefd);
  224.     putw(closing,savefd);
  225.     putw(closed,savefd);
  226.     putw(holding,savefd);
  227.     putw(detail,savefd);
  228.     putw(knfloc,savefd);
  229.     putw(clock1,savefd);
  230.     putw(clock2,savefd);
  231.     putw(panic,savefd);
  232.     for(i=0;i<DWARFMAX;i++) putw(dloc[i],savefd);
  233.     putw(dflag,savefd);
  234.     for(i=0;i<DWARFMAX;i++) putw(dseen[i],savefd);
  235.     for(i=0;i<DWARFMAX;i++) putw(odloc[i],savefd);
  236.     putw(daltloc,savefd);
  237.     putw(dkill,savefd);
  238.     putw(chloc,savefd);
  239.     putw(chloc2,savefd);
  240.     putw(bonus,savefd);
  241.     putw(numdie,savefd);
  242.     putw(object1,savefd);
  243.     putw(gaveup,savefd);
  244.     putw(foobar,savefd);
  245.     putw(saveflg,savefd);
  246.     putw(dbugflg,savefd);
  247.  
  248.     if (fclose(savefd)  ==  -1) {
  249.         printf("Sorry, I can't close the file...%s\n", \
  250.                username);
  251.         exit();
  252.     }
  253.     printf("OK -- \"C\" you later...\n");
  254. }
  255.  
  256. /*
  257.     restore saved game handler
  258. */
  259. restore()
  260. {
  261.     char    username[13];
  262.     FILE    *restfd;
  263.     int    i;
  264.     char    *sptr;
  265.  
  266.     printf("What is the name of the saved game? ");
  267.     scanf("%s", username);
  268.     if (sptr = strchr(username, '.'))
  269.         *sptr = '\0';        /* kill extension    */
  270.     if (strlen(username) > 8)
  271.         username[8] = '\0';    /* max 8 char filename    */
  272.     strcat(username, ".adv");
  273.     restfd = fopen(username, "rb");
  274.     if (restfd == NULL) {
  275.         printf("Sorry, I can't open the file...%s\n", \
  276.                username);
  277.         exit();
  278.     }
  279.  
  280.     turns=getw(restfd);    /* mh 30-Aug-1988 */
  281.     loc=getw(restfd);
  282.     oldloc=getw(restfd);
  283.     oldloc2=getw(restfd);
  284.     newloc=getw(restfd);
  285.     for(i=0;i<MAXLOC;i++) cond[i]=getw(restfd);
  286.     for(i=0;i<MAXOBJ;i++) place[i]=getw(restfd);
  287.     for(i=0;i<MAXOBJ;i++) fixed[i]=getw(restfd);
  288.     for(i=0;i<MAXLOC;i++) visited[i]=getw(restfd);
  289.     for(i=0;i<MAXOBJ;i++) prop[i]=getw(restfd);
  290.     tally=getw(restfd);
  291.     tally2=getw(restfd);
  292.     limit=getw(restfd);
  293.     lmwarn=getw(restfd);
  294.     wzdark=getw(restfd);
  295.     closing=getw(restfd);
  296.     closed=getw(restfd);
  297.     holding=getw(restfd);
  298.     detail=getw(restfd);
  299.     knfloc=getw(restfd);
  300.     clock1=getw(restfd);
  301.     clock2=getw(restfd);
  302.     panic=getw(restfd);
  303.     for(i=0;i<DWARFMAX;i++) dloc[i]=getw(restfd);
  304.     dflag=getw(restfd);
  305.     for(i=0;i<DWARFMAX;i++) dseen[i]=getw(restfd);
  306.     for(i=0;i<DWARFMAX;i++) odloc[i]=getw(restfd);
  307.     daltloc=getw(restfd);
  308.     dkill=getw(restfd);
  309.     chloc=getw(restfd);
  310.     chloc2=getw(restfd);
  311.     bonus=getw(restfd);
  312.     numdie=getw(restfd);
  313.     object1=getw(restfd);
  314.     gaveup=getw(restfd);
  315.     foobar=getw(restfd);
  316.     saveflg=getw(restfd);
  317.     dbugflg=getw(restfd);
  318.  
  319.         if (fclose(restfd)    ==  -1) {
  320.         printf("Warning -- can't close save file...%s\n", \
  321.                username);
  322.     }
  323. }
  324.  
  325.  
  326. 
  327.