home *** CD-ROM | disk | FTP | other *** search
/ Game Killer / Game_Killer.bin / 293.REVIVE.C < prev    next >
C/C++ Source or Header  |  1991-08-30  |  4KB  |  125 lines

  1. /***************************************************************************
  2.  * revive.c            Fred Brunet            8/27/91                                            *
  3.  * Purpose: Reactivate dead, captured, or retired pilots or crews from     *
  4.  *          the game Secret Weapons of the Luftwaffe.(by Lucafilm Games)   *
  5.  * Method:  Read in binary file, test status byte, and if byte has           *
  6.  *        certain values, set to zero and write altered file.                    *
  7.  * NOTE:    The pilot status byte was determined by "reverse engineering". *
  8.  *        I do not work for Lucasfilm Games nor am I associated with          *
  9.  *          the company in any way.  Using this program or a variation        *
  10.  *          of it to alter the pilot files in any way may have subtle or   *
  11.  *            unknown effects.  You may alter this file as you wish for your*
  12.  *          own use but I am not responsible for any damage caused to      *
  13.  *          any files.    If you copy or reproduce any code in this file I   *
  14.  *          ask that you distribute it without charge.                           *
  15.  ***************************************************************************/
  16.  
  17.  
  18. #include <stdio.h>
  19. #include <dir.h>
  20. #include <stdlib.h>
  21. #include <string.h>
  22.  
  23. int main(int argc, char **argv)
  24. {
  25.     int i,done,foundcount;
  26.     char fname[20];
  27.  
  28.     struct ffblk find; /* dos file control block structure */
  29.  
  30.     if (argc==1)  { /* there were no parameters typed */
  31.         printf("\nREVIVE v1.1: reactivate dead, captured or retired pilots.");
  32.         printf("-- Fred Brunet 8/27/91\n\n");
  33.  
  34.         printf("usage: revive fname.usa or fname.ger, dos wildcards accepted.\n");
  35.         exit(0);
  36.     }
  37.     strncpy(fname,argv[1],12);
  38.     for(i=0; fname[i] && i<12; i++)
  39.         fname[i]=toupper(fname[i]);
  40.  
  41.     if (strstr(fname,".USA") || strstr(fname,".GER")) /* for safety,only alter pilot files */
  42.     {
  43.         i = 0;                 /* number of files processed */
  44.         foundcount=0;            /* number of files altered   */
  45.         done = findfirst(fname,&find,0);
  46.         if (done==0) {
  47.             if (strstr(fname,"*.") || strstr(fname,"?")) { /* handle wildcards */
  48.                 do {
  49.                     i++;
  50.                     printf("%s:",&find.ff_name);
  51.                     if(undead(&find.ff_name))      /* call function to revive */
  52.                         foundcount++;
  53.                     done=findnext(&find);
  54.                 } while (done == 0);
  55.                 printf("\n%d Files processed, %d updated.\n",i,foundcount);
  56.             }
  57.             else {             /* no wildcards, process one name only */
  58.                 printf("\n%s:",&find.ff_name);
  59.                 undead(&find.ff_name);
  60.             }
  61.         }
  62.         else printf("\n\nFile not found in current directory.\n");
  63.     }
  64.     else
  65.       printf("\Can only revive .USA or .GER files-please type entire filename.\n");
  66. }
  67.  
  68. int undead(char *fname)
  69. /* clears active status bit in SWOTL file */
  70. /* Return value- 0: no file written    1: file written  */
  71. {
  72.     #define ITEMSIZE 1
  73.     #define ACTIVE_STATUS 2 /* file offset of status byte */
  74.     #define FSIZE 540  /* size of pilot file */
  75.     FILE *in,*out;
  76.     char *buff;
  77.     int status=-1;
  78.     int retstatus=0;
  79.  
  80.     buff=malloc(FSIZE*sizeof(char));  /* holds entire file */
  81.  
  82.     if ((in = fopen(fname,"rb"))==NULL) /* open binary file for update */
  83.     {
  84.         printf("Cannot open input file.\n");
  85.         retstatus=0;
  86.         return retstatus;
  87.     }
  88.     fread(buff,ITEMSIZE,FSIZE,in);   /* read file into buff */
  89.     fclose(in);
  90.  
  91.     switch(status=buff[ACTIVE_STATUS]) {
  92.         case 0:
  93.             printf("Pilot already active!\n");
  94.             break;
  95.         case 1:
  96.             printf("Pilot is retired. \n");
  97.             break;
  98.         case 2:
  99.             printf("Pilot was captured. \n");
  100.             break;
  101.         case 3:
  102.             printf("Pilot was killed\n");
  103.             break;
  104.         default:
  105.             printf("Unknown value in pilot status byte\n");
  106.     } /* end of switch */
  107.  
  108.  
  109.     if(status>0 && status <4)/* only writes if valid or necessary  */
  110.     {
  111.         if ((out = fopen(fname,"wb"))==NULL) /* open binary file for write */
  112.         {
  113.             printf("Cannot open output file.\n");
  114.             retstatus=0;
  115.             return retstatus;
  116.         }
  117.         buff[ACTIVE_STATUS]=0x00;  /* reset status to 0==active */
  118.         fwrite(buff,ITEMSIZE,FSIZE,out);
  119.         fclose(out);
  120.         retstatus=1;
  121.         printf("Pilot status updated.\n");
  122.     }
  123.     return retstatus;
  124. }
  125.