home *** CD-ROM | disk | FTP | other *** search
/ Fun CD 26 / OTACD26.ISO / archive / game / eb-exb / EB-EXP.LZH / EB-EXP.CPP next >
C/C++ Source or Header  |  1998-09-11  |  3KB  |  150 lines

  1. // ElderBlaze EXP. up
  2. //
  3.  
  4. #include <stdlib.h>
  5. #include <stdio.h>
  6. #include <string.h>
  7. #include <io.h>
  8. #include <fcntl.h>
  9. #include <conio.h>
  10. #include <dos.h>
  11.  
  12. int      eb_fh, exit_code, more=0;
  13. char *id="ElderBlaze EXP. up (C)WESTSIDE",
  14.      *eb_file="E_Blaze1.exe";
  15.  
  16.  
  17. unsigned get_para(long address)
  18. {
  19.   unsigned dummy;
  20.   unsigned dt;
  21.  
  22.   if ( lseek(eb_fh, address, SEEK_SET) != address ){
  23.     puts("シーク失敗です");
  24.     exit(-1);
  25.   }
  26.   if ( _dos_read(eb_fh, (unsigned far *)&dt, 2, &dummy) != 0 ){
  27.     puts("読み込み失敗です");
  28.     exit(-1);
  29.   }
  30.   return(dt);
  31. }
  32.  
  33. void put_para(long address, unsigned dt)
  34. {
  35.   unsigned dummy;
  36.  
  37.   if ( lseek(eb_fh, address, SEEK_SET) != address ){
  38.     puts("シーク失敗です");
  39.     exit(-1);
  40.   }
  41.   if ( _dos_write(eb_fh, (unsigned far *)&dt, 2, &dummy) != 0 ){
  42.     puts("書き込み失敗です");
  43.     exit(-1);
  44.   }
  45. }
  46.  
  47. void para_ed(long base_add)
  48. {
  49.   int  c;
  50.   long curr_add;
  51. //  unsigned para;
  52.  
  53.   for(c=0; c<44; c++){
  54.     curr_add=base_add+c*68;
  55. //    para=get_para(curr_add);
  56.     if(more==0){
  57.       put_para(curr_add+0x003e, 0x7a7a);
  58.     }else{
  59.       put_para(curr_add+0x0034, 0x0001);
  60.       put_para(curr_add+0x0036, 0x0001);
  61.       put_para(curr_add+0x0038, 0x0001);
  62.     }
  63.   }
  64. }
  65.  
  66. unsigned check_para(long base_add)
  67. {
  68.   int      c;
  69.   unsigned sum=0;
  70.  
  71.   for(c=0; c<68*44; c++){
  72.     sum^=get_para(base_add+c);
  73.   }
  74.  
  75.   return(sum);
  76. }
  77.  
  78. char check_num(char *s)
  79. {
  80.   if (1<=atoi(s) || stricmp(s,"0")==0 )
  81.     return(atoi(s));
  82.   else
  83.     return(-1);
  84. }
  85.  
  86. int main(int argc, char *argv[])
  87. {
  88.   int cnt;
  89.   unsigned res1, file_attrib;
  90.  
  91.   puts(id);
  92.  
  93.   if (1<argc){
  94.     for (cnt=1; cnt<argc; cnt++){
  95.       if       (stricmp(argv[cnt],"/MORE")==0){
  96.         more=-1;
  97.       }else /*if (strncmp(argv[cnt],"/",1)==0 ||
  98.                 strncmp(argv[cnt],"-",1)==0   )*/{
  99.         puts(">EB-EXP [/MORE]\n"
  100.              "  /MORE\t:モンスターを弱くする\n");
  101.         return(1);
  102.       }
  103.     }
  104.   }
  105.  
  106.   _dos_setfileattr(eb_file, 0);
  107.   if( (exit_code=_dos_open(eb_file, O_RDWR|O_BINARY, &eb_fh)) != 0 ){
  108.     puts("E_Blaze1.exeを開けません");
  109.     return(exit_code);
  110.   }
  111.   if( filelength(eb_fh) != 551424){
  112.     puts("E_Blaze1.exeのバージョンが違います");
  113.     return(-1);
  114.   }
  115.   res1=check_para(0x00078aa0);
  116. //  printf("%0x",res1);
  117.  
  118.   if( (res1==0x4b89 || res1==0x11d3) && (more==0) ){
  119.      puts("E_Blaze1.exeは既に経験値アップ改造がされてます。");
  120.      return(-1);
  121.   }else if( (res1==0xdd1f || res1==0x11d3) && (more!=0) ){
  122.     puts("E_Blaze1.exeは既にモンスター弱化がされています。");
  123.     return(-1);
  124.   }else if(res1==0x4b89 || res1==0xdd1f || res1==0x8745){
  125.     puts("E_Blaze1.exeをチェックしました。書き換え可能です。");
  126.   }else{
  127.     puts("E_Blaze1.exeに認識できないデータが含まれています。以下の理由が考えられます。");
  128.     puts("1.E_Blaze1.exeの内部バージョンが違う");
  129.     puts("2.当ツール以外の方法で書き換えられている");
  130.     puts("3.書き換えの途中でOSのクラッシュ等で中断された");
  131.     puts("*(2)(3)の場合は再インストールで書き換えできるようになります。");
  132.     return(-1);
  133.   }
  134.  
  135.   para_ed(0x00078aa0);
  136.  
  137.   if( (exit_code=_dos_close(eb_fh)) != 0 ){
  138.     puts("E_Blaze1.exeで、書き換えを終了出来ませんでした");
  139.     return(exit_code);
  140.   }
  141.  
  142.   if(more==0){
  143.     puts("経験値アップ改造しました");
  144.   }else{
  145.     puts("モンスター弱化改造しました");
  146.   }
  147.  
  148.   return(0);
  149. }
  150.