home *** CD-ROM | disk | FTP | other *** search
/ Fun CD 26 / OTACD26.ISO / archive / game / vm-x2 / vm-x2.lzh / vm-x2.cpp < prev    next >
C/C++ Source or Header  |  1998-03-04  |  4KB  |  157 lines

  1. // vm X2 master
  2. //
  3. // 56500H-58291H マスター&敵キャラ混成 レベル別能力値データ
  4.  
  5. #include <stdlib.h>
  6. #include <stdio.h>
  7. #include <string.h>
  8. #include <io.h>
  9. #include <fcntl.h>
  10. #include <conio.h>
  11. #include <dos.h>
  12.  
  13. int      vm_fh, exit_code, item_min=0;
  14. int      master_type;
  15. char *id="Vantage Master - X2 MASTER (C)WESTSIDE",
  16.      *vm_file="VM.EXE";
  17.  
  18.  
  19. unsigned long get_para(long address)
  20. {
  21.   unsigned dummy;
  22.   unsigned long dt;
  23.  
  24.   if ( lseek(vm_fh, address, SEEK_SET) != address ){
  25.     puts("シーク失敗です");
  26.     exit(-1);
  27.   }
  28.   if ( _dos_read(vm_fh, (unsigned long far *)&dt, 4, &dummy) != 0 ){
  29.     puts("読み込み失敗です");
  30.     exit(-1);
  31.   }
  32.   return(dt);
  33. }
  34.  
  35. void put_para(long address, unsigned long dt)
  36. {
  37.   unsigned dummy;
  38.  
  39.   if ( lseek(vm_fh, address, SEEK_SET) != address ){
  40.     puts("シーク失敗です");
  41.     exit(-1);
  42.   }
  43.   if ( _dos_write(vm_fh, (unsigned long far *)&dt, 4, &dummy) != 0 ){
  44.     puts("書き込み失敗です");
  45.     exit(-1);
  46.   }
  47. }
  48.  
  49. void x2para(void)
  50. {
  51.   int  c,c1,c2, math;
  52.   long curr_add, base_add=0x000056500;
  53.   unsigned long para;
  54.  
  55.   for(c=0; c<18; c++){
  56.     curr_add=base_add+c*4*7*40;
  57.     math=get_para(curr_add);
  58. //printf("%d\n", math);
  59.     if(math%60 != 0 &&
  60.        math/60 == 1 && 
  61.        math/60 == 4   ){
  62.       puts("書き換え作業の途中で異常な値のパラメーターを発見しました\n"
  63.            "VM.EXEのバージョンが違う可能性があります\n"
  64.            "ゲームを正常にプレイするためにCD-ROMからインストールし直して下さい");
  65.       exit(-1);
  66.     }else{
  67.        math/=60;
  68.     }
  69.     for(c1=0; c1<40; c1++){
  70.       for(c2=0; c2<7; c2++){
  71.         para=get_para(curr_add);
  72.         if( c == master_type ){
  73.           if(math==1){
  74.             if( c2==0 ){
  75.               para=para*4;
  76.             }else if( c2==5 ){
  77.               para=para+2;
  78.             }else if( c2==6 ){
  79.               para=para*3;
  80.             }else{
  81.               para=para*2;
  82.             }
  83.           }
  84.         }else if(math!=1){
  85.           if( c2==0 ){
  86.             para=para/4;
  87.           }else if( c2==5 ){
  88.             para=para-2;
  89.           }else if( c2==6 ){
  90.             para=para/3;
  91.           }else{
  92.             para=para/2;
  93.           }
  94.         }
  95.         put_para(curr_add, para);
  96.         curr_add+=4;
  97.       }
  98.     }
  99.   }
  100. }
  101.  
  102. char check_num(char *s)
  103. {
  104.   if (1<=atoi(s) || stricmp(s,"0")==0 )
  105.     return(atoi(s));
  106.   else
  107.     return(-1);
  108. }
  109.  
  110. int main(int argc, char *argv[])
  111. {
  112.   puts(id);
  113.  
  114.   if ( argc                                          == 2     &&
  115.       ( check_num(argv[1])                           == 99 ||
  116.        (check_num(argv[1]) >=1 && check_num(argv[1]) <= 18)  )  ){
  117. //printf("%s:%d\n", argv[1], master_type+1);
  118.     master_type=check_num(argv[1])-1;
  119.   }else{
  120.     puts("倍増させるマスターのタイプを指定して下さい\n"
  121.          "\n"
  122.          "ex1. >VM-X2 3   (ナイトだけ倍増する)\n"
  123.          "ex2. >VM-X2 13  (ウィッチだけ倍増する)\n"
  124.          "ex3. >VM-X2 99  (倍増しないで元に戻す)\n"
  125.          "\n"
  126.          "変更可能なマスターのタイプ\n"
  127.          "1:ファイター    7:レンジャー    13:ウィッチ    \n"
  128.          "2:デューク    8:サベージ    14:モンク    \n"
  129.          "3:ソードマン    9:シーフ    15:スピリット    \n"
  130.          "4:ナイト    10:バード    16:ビースト    \n"
  131.          "5:パラディン    11:シスター    17:ナイトメア    \n"
  132.          "6:シャドウ    12:ソーサラー    18:フロイライン    \n"
  133.          "99:元に戻す    ");
  134.     return(1);
  135.   }
  136.  
  137.   if( (exit_code=_dos_open(vm_file, O_RDWR|O_BINARY, &vm_fh)) != 0 ){
  138.     puts("VM.EXEファイルを開けません");
  139.     return(exit_code);
  140.   }
  141.   if( filelength(vm_fh) != 442368 ){
  142.     puts("VM.EXEのバージョンが違います");
  143.     return(-1);
  144.   }
  145.  
  146.   x2para();
  147.  
  148.   if( (exit_code=_dos_close(vm_fh)) != 0 ){
  149.     puts("VM.EXEファイルを閉じられません");
  150.     return(exit_code);
  151.   }
  152.  
  153.   puts("VM.EXEファイルを書き換えました");
  154.  
  155.   return(0);
  156. }
  157.