📄 horse.cpp
字号:
s->yl = 0;
s->size = 0;
s->img = NULL;
continue;
}
fread( &(s->xl), sizeof( short ), 1, fp);
fread( &(s->yl), sizeof( short ), 1, fp);
fread( &(s->ox), sizeof( short ), 1, fp);
fread( &(s->oy), sizeof( short ), 1, fp);
fread( &(s->size), sizeof( unsigned int ), 1, fp);
if( nOff + s->size >= sprfilelength )
{
JustMsg( "%s File Error !!",tempFileName);
ExitApplication(EA_LOAD_HORSE_SADDEL_SPR_DATA_SUB);
}
fread( HorseSaddlePicBuffer[SpriteKind] + nOff, s->size, 1, fp);
s->img = HorseSaddlePicBuffer[SpriteKind] + nOff;
convert565to555_LoadSprite( s );
nOff += size;
}
}
fclose(fp);
return TRUE;
}
int cHorseRider::LoadHorseGradeSprite(int HorseKind,int GradeKind)
{
FILE *fp;
short no;
DWORD sprfilelength, size;
DWORD nOff = 0;
int i,j;
Spr* s;
int length;
char tempFileName[MAX_PATH];
if( HorseGradePicBuffer[HorseKind][GradeKind]!= NULL )
{
return FALSE;
}
sprintf(tempFileName,"./char/HGR%02d%03d.spr",HorseKind,GradeKind);
fp=Fopen(tempFileName,"rb" );
if (fp==NULL)
{
return FALSE;
}
fread( &no, 2,1, fp);
fseek( fp, no * 4, SEEK_CUR );
length = sprfilelength = _filelength( _fileno( fp) ) - no * 4 * 2 - 2;
MemAlloc( HorseGradePicBuffer[HorseKind][GradeKind], sprfilelength );
for (i=0;i<8;i++)
{
for (j=0;j<75;j++)
{
s = &HorseGradePic[HorseKind][GradeKind][i][j];
fread( &size, 4,1, fp);
if( size== 0 )
{
s->xl = 0;
s->yl = 0;
s->size = 0;
s->img = NULL;
continue;
}
fread( &(s->xl), sizeof( short ), 1, fp);
fread( &(s->yl), sizeof( short ), 1, fp);
fread( &(s->ox), sizeof( short ), 1, fp);
fread( &(s->oy), sizeof( short ), 1, fp);
fread( &(s->size), sizeof( unsigned int ), 1, fp);
if( nOff + s->size >= sprfilelength )
{
JustMsg( "%s File Error !!",tempFileName);
ExitApplication(EA_LOAD_HORSE_GRADE_SPR_DATA_SUB);
}
fread(HorseGradePicBuffer[HorseKind][GradeKind] + nOff, s->size, 1, fp);
s->img = HorseGradePicBuffer[HorseKind][GradeKind] + nOff;
convert565to555_LoadSprite( s );
nOff += size;
}
}
fclose(fp);
return TRUE;
}
void cHorseRider::LoadHorseData(LPCHARACTER ch)
{
if (ch->HorseNo>0)
{
int Sex=CheckSex(ch);
int RiderKind=CheckRiderKind(ch);
int RiderGrade=CheckRiderGrade(ch);
int HorseKind=CheckHorseKind(ch);
int HorseGrade=CheckHorseGrade(ch);
int WeaponKind=CheckWeaponKind(ch);
int GuardKind=CheckGuardKind(ch);
if (RiderKind>=0)
{
LoadRiderSprite(Sex,RiderKind);
LoadRiderBandSprite(Sex,RiderKind);
}
if (RiderGrade>=0) LoadRiderGradeSprite(Sex,RiderKind,RiderGrade);
if (HorseKind>=0)
{
LoadHorseSprite(HorseKind);
LoadHorseSaddleSprite(HorseKind);
}
if (HorseGrade>=0) LoadHorseGradeSprite(HorseKind,HorseGrade);
if (WeaponKind>=0) LoadWeaponSprite(Sex,WeaponKind);
if (GuardKind>=0) LoadGuardSprite(Sex,GuardKind);
// if (ch->mantle) LoadRiderMantleSprite(Sex);
}
}
int cHorseRider::CheckWeaponSpriteData(int SexType,int SpriteKind)
{
if (SpriteKind==13)
{
if (SexType==HTYPE_MAN)
{
if( WeaponPicBuffer[SexType][SpriteKind] != NULL )
{
return FALSE;
}
}
else
{
if( WeaponPicBuffer[SexType][SpriteKind] != NULL )
{
return FALSE;
}
}
}
else
{
if( WeaponPicBuffer[SexType][SpriteKind] != NULL )
{
return FALSE;
}
}
return TRUE;
}
void cHorseRider::GetWeaponFileName(int SexType,int SpriteKind,char* FileName)
{
if (SpriteKind==13)
{
if (SexType==HTYPE_WOMAN)
{
SpriteKind++;
}
sprintf(FileName,"./char/W001%03d.spr",SpriteKind);
}
else
{
sprintf(FileName,"./char/W001%03d.spr",SpriteKind);
}
}
int cHorseRider::LoadWeaponSprite(int SexType,int SpriteKind) // SpriteKind must be Converted..
{
FILE *fp;
short no;
DWORD sprfilelength, size;
DWORD nOff = 0;
int i,j;
Spr* s;
int length;
char tempFileName[MAX_PATH];
if(WeaponPicBuffer[SexType][SpriteKind]!=NULL)
{
return FALSE;
}
sprintf(tempFileName,"./char/W%03d%03d.spr",SexType,SpriteKind);
fp=Fopen(tempFileName,"rb" );
if (fp==NULL)
{
return FALSE;
}
fread( &no, 2,1, fp);
fseek( fp, no * 4, SEEK_CUR );
length = sprfilelength = _filelength( _fileno( fp) ) - no * 4 * 2 - 2;
MemAlloc( WeaponPicBuffer[SexType][SpriteKind], sprfilelength );
for (i=0;i<8;i++)
{
for (j=0;j<75;j++)
{
s = &WeaponPic[SexType][SpriteKind][i][j];
fread( &size, 4,1, fp);
if( size== 0 )
{
s->xl = 0;
s->yl = 0;
s->size = 0;
s->img = NULL;
continue;
}
fread( &(s->xl), sizeof( short ), 1, fp);
fread( &(s->yl), sizeof( short ), 1, fp);
fread( &(s->ox), sizeof( short ), 1, fp);
fread( &(s->oy), sizeof( short ), 1, fp);
fread( &(s->size), sizeof( unsigned int ), 1, fp);
if( nOff + s->size >= sprfilelength )
{
JustMsg( "%s File Error !!",tempFileName);
ExitApplication(EA_LOAD_WEAPON_SPR_DATA);
}
fread(WeaponPicBuffer[SexType][SpriteKind] + nOff, s->size, 1, fp);
s->img = WeaponPicBuffer[SexType][SpriteKind] + nOff;
convert565to555_LoadSprite( s );
nOff += size;
}
}
fclose(fp);
return TRUE;
}
int cHorseRider::LoadGuardSprite(int SexType,int SpriteKind)
{
FILE *fp;
short no;
DWORD sprfilelength, size;
DWORD nOff = 0;
int i,j;
Spr* s;
int length;
char tempFileName[MAX_PATH];
if( GuardPicBuffer[SexType]!= NULL )
{
return FALSE;
}
sprintf(tempFileName,"./char/w%03d017.spr",SexType);
fp=Fopen(tempFileName,"rb" );
if (fp==NULL)
{
return FALSE;
}
fread( &no, 2,1, fp);
fseek( fp, no * 4, SEEK_CUR );
length = sprfilelength = _filelength( _fileno( fp) ) - no * 4 * 2 - 2;
MemAlloc( GuardPicBuffer[SexType], sprfilelength );
for (i=0;i<8;i++)
{
for (j=0;j<75;j++)
{
s = &GuardPic[SexType][i][j];
fread( &size, 4,1, fp);
if( size== 0 )
{
s->xl = 0;
s->yl = 0;
s->size = 0;
s->img = NULL;
continue;
}
fread( &(s->xl), sizeof( short ), 1, fp);
fread( &(s->yl), sizeof( short ), 1, fp);
fread( &(s->ox), sizeof( short ), 1, fp);
fread( &(s->oy), sizeof( short ), 1, fp);
fread( &(s->size), sizeof( unsigned int ), 1, fp);
if( nOff + s->size >= sprfilelength )
{
JustMsg( "%s File Error !!",tempFileName);
ExitApplication(EA_LOAD_GUARD_SPR_DATA);
}
fread(GuardPicBuffer[SexType] + nOff, s->size, 1, fp);
s->img = GuardPicBuffer[SexType] + nOff;
convert565to555_LoadSprite( s );
nOff += size;
}
}
fclose(fp);
return TRUE;
}
void cHorseRider::LoadHorseRiderAniMationTable(int Sex,int HorseNo,char* FileName)
{
FILE *fp;
int i, no, count;
char temp[ FILENAME_MAX];
int x, y, attackframe, wave, height, effect;
static int tempsprno;
char gabage[20];
char filename[MAX_PATH];
if( GetSysInfo( SI_GAME_MAKE_MODE ) ) fp = Fopen( FileName, "rt" );
else fp = NULL;
if( fp )
{
for( i = 0 ; i < 50 ; i ++)
{
count =0;
AGAIN_:
if( fgets( temp, FILENAME_MAX, fp ) == NULL ) break;
if( temp[0] == '#' || temp[0] == ' ' || temp[0] == 10 || temp[0] == '\n' )
{
if( temp[0] == '#' )
{
char *p;
if( (p = strchr( temp, 10 )) ) *p = 0;
#ifdef _DEBUG
strncpy( AnimationName[i], temp + 1, 100 );
#endif
}
goto AGAIN_;
}
else goto PROCESS__;
while( fgets( temp, FILENAME_MAX, fp ) != NULL )
{
PROCESS__:
if( temp[ 0] == ' ' || temp[0] == '\n' || temp[0] == '\r' )
{
HorseRiderAniTable[Sex][HorseNo][i].nCount = count;
break;
}
sscanf( temp, "%d %d %d %d %d %d %d ", &no, &x, &y, &attackframe, &wave, &height, &effect );
// no = atoi( temp ) -1;
HorseRiderAniTable[Sex][HorseNo][i].cFrame[ count] = no-1;
HorseRiderAniTable[Sex][HorseNo][i].dx[ count] = x;
HorseRiderAniTable[Sex][HorseNo][i].dy[ count] = y;
HorseRiderAniTable[Sex][HorseNo][i].attackf[ count] = attackframe;
HorseRiderAniTable[Sex][HorseNo][i].wave[ count] = wave;
HorseRiderAniTable[Sex][HorseNo][i].height[ count] = height;
HorseRiderAniTable[Sex][HorseNo][i].effect[ count] = effect;
count++;
HorseRiderAniTable[Sex][HorseNo][i].nCount = count;
}
}
fclose(fp);
int dist = 0;
sprintf( filename, "./CHAR/HRAniTable%02d%02d.bin",HorseNo,Sex);
fp = Fopen( filename, "wb" );
if( fp )
{
fwrite( gabage, 20,1, fp );
char *tt = (char *)HorseRiderAniTable[Sex][HorseNo];
char crc = 0;
for( i = 0 ; i < sizeof( PCANIMATIONTABLE ) * MAX_ANIMATION ; i ++)
{
crc += *tt;
tt ++;
}
fwrite( &crc, 1,1, fp );
fwrite( HorseRiderAniTable[Sex][HorseNo], sizeof( PCANIMATIONTABLE ), MAX_ANIMATION, fp);
fclose(fp);
}
}
else
{
sprintf( filename, "./CHAR/HRAniTable%02d%02d.bin",HorseNo,Sex);
fp = Fopen( filename, "rb" );
char *tt = (char *)HorseRiderAniTable[Sex][HorseNo];
char crc = 0, crc1;
if( fp )
{
fseek( fp, 20, SEEK_SET );
fread( &crc1, 1,1, fp );
fread( HorseRiderAniTable[Sex][HorseNo], sizeof( PCANIMATIONTABLE ), MAX_ANIMATION, fp);
for( i = 0 ; i < sizeof( PCANIMATIONTABLE ) * MAX_ANIMATION ; i ++)
{
crc += *tt;
tt ++;
}
fclose(fp);
if( abs(crc1 - crc) )
{
//if( SysInfo.gamemakemode ) JustMsg( "CHECKSUM_ERROR_ANIMATIONDATA : ch->sprno = %d ", ch->sprno );
CheckSumError = CHECKSUM_ERROR_ANIMATIONDATA;
}
}
else
{
if( GetSysInfo( SI_GAME_MAKE_MODE ) ) JustMsg( "CheckNumError : HorseTable"); // 010612 KHS
CheckSumError = CHECKSUM_ERROR_ANIMATIONDATA;
}
}
}
void cHorseRider::CheckAnimation(LPCHARACTER ch)
{
int HorseNo=CheckHorseKind(ch);
if (ch->nCurrentFrame>=HorseRiderAniTable[CheckSex(ch)][HorseNo][ ch->nCurrentAction].nCount )
{
ch->nCurrentFrame = 0;
}
}
void cHorseRider::CheckDeathAnimation(LPCHARACTER ch)
{
int HorseNo=CheckHorseKind(ch);
if (ch->nCurrentFrame>=HorseRiderAniTable[CheckSex(ch)][HorseNo][ ch->nCurrentAction].nCount )
{
ch->nCurrentFrame = HorseRiderAniTable[CheckSex(ch)][HorseNo][ ch->nCurrentAction].nCount-1;
if (ch->nCurrentAction==ACTION_DIE)
{
#ifdef _DEBUG
if( SysInfo.notconectserver )
{
if( ch->dieani == 0 ) // 磷菌栏搁..
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -