home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Fun CD 26
/
OTACD26.ISO
/
archive
/
game
/
vm-x2
/
vm-x2.lzh
/
vm-x2.cpp
< prev
next >
Wrap
C/C++ Source or Header
|
1998-03-04
|
4KB
|
157 lines
// vm X2 master
//
// 56500H-58291H マスター&敵キャラ混成 レベル別能力値データ
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <io.h>
#include <fcntl.h>
#include <conio.h>
#include <dos.h>
int vm_fh, exit_code, item_min=0;
int master_type;
char *id="Vantage Master - X2 MASTER (C)WESTSIDE",
*vm_file="VM.EXE";
unsigned long get_para(long address)
{
unsigned dummy;
unsigned long dt;
if ( lseek(vm_fh, address, SEEK_SET) != address ){
puts("シーク失敗です");
exit(-1);
}
if ( _dos_read(vm_fh, (unsigned long far *)&dt, 4, &dummy) != 0 ){
puts("読み込み失敗です");
exit(-1);
}
return(dt);
}
void put_para(long address, unsigned long dt)
{
unsigned dummy;
if ( lseek(vm_fh, address, SEEK_SET) != address ){
puts("シーク失敗です");
exit(-1);
}
if ( _dos_write(vm_fh, (unsigned long far *)&dt, 4, &dummy) != 0 ){
puts("書き込み失敗です");
exit(-1);
}
}
void x2para(void)
{
int c,c1,c2, math;
long curr_add, base_add=0x000056500;
unsigned long para;
for(c=0; c<18; c++){
curr_add=base_add+c*4*7*40;
math=get_para(curr_add);
//printf("%d\n", math);
if(math%60 != 0 &&
math/60 == 1 &&
math/60 == 4 ){
puts("書き換え作業の途中で異常な値のパラメーターを発見しました\n"
"VM.EXEのバージョンが違う可能性があります\n"
"ゲームを正常にプレイするためにCD-ROMからインストールし直して下さい");
exit(-1);
}else{
math/=60;
}
for(c1=0; c1<40; c1++){
for(c2=0; c2<7; c2++){
para=get_para(curr_add);
if( c == master_type ){
if(math==1){
if( c2==0 ){
para=para*4;
}else if( c2==5 ){
para=para+2;
}else if( c2==6 ){
para=para*3;
}else{
para=para*2;
}
}
}else if(math!=1){
if( c2==0 ){
para=para/4;
}else if( c2==5 ){
para=para-2;
}else if( c2==6 ){
para=para/3;
}else{
para=para/2;
}
}
put_para(curr_add, para);
curr_add+=4;
}
}
}
}
char check_num(char *s)
{
if (1<=atoi(s) || stricmp(s,"0")==0 )
return(atoi(s));
else
return(-1);
}
int main(int argc, char *argv[])
{
puts(id);
if ( argc == 2 &&
( check_num(argv[1]) == 99 ||
(check_num(argv[1]) >=1 && check_num(argv[1]) <= 18) ) ){
//printf("%s:%d\n", argv[1], master_type+1);
master_type=check_num(argv[1])-1;
}else{
puts("倍増させるマスターのタイプを指定して下さい\n"
"\n"
"ex1. >VM-X2 3 (ナイトだけ倍増する)\n"
"ex2. >VM-X2 13 (ウィッチだけ倍増する)\n"
"ex3. >VM-X2 99 (倍増しないで元に戻す)\n"
"\n"
"変更可能なマスターのタイプ\n"
"1:ファイター 7:レンジャー 13:ウィッチ \n"
"2:デューク 8:サベージ 14:モンク \n"
"3:ソードマン 9:シーフ 15:スピリット \n"
"4:ナイト 10:バード 16:ビースト \n"
"5:パラディン 11:シスター 17:ナイトメア \n"
"6:シャドウ 12:ソーサラー 18:フロイライン \n"
"99:元に戻す ");
return(1);
}
if( (exit_code=_dos_open(vm_file, O_RDWR|O_BINARY, &vm_fh)) != 0 ){
puts("VM.EXEファイルを開けません");
return(exit_code);
}
if( filelength(vm_fh) != 442368 ){
puts("VM.EXEのバージョンが違います");
return(-1);
}
x2para();
if( (exit_code=_dos_close(vm_fh)) != 0 ){
puts("VM.EXEファイルを閉じられません");
return(exit_code);
}
puts("VM.EXEファイルを書き換えました");
return(0);
}