📄 object.cpp
字号:
if( TotalMapObject == 0xffff )
{
newtoi = true;
fread ( &TotalMapObject, 2,1, fp );
}
else
newtoi = false;
// 021117 YGI
if( TotalMapObject > MAX_MAPOBJECT_ )
{
Error( "Too Many MapObject" );
}
fread ( &TotalMapObjectID, 2,1, fp );
fseek( fp, TotalMapObject * sizeof( int ), SEEK_CUR );
for( i = 0 ; i < TotalMapObject ; i ++)
{
if( count == 140 )
{
_asm nop;
}
if( newtoi == true )
{
fread( &mo, sizeof( MAPOBJECT ), 1, fp );
}
else
{
fread( &moold, sizeof( MAPOBJECT_old ), 1, fp );
memcpy( &mo, &moold, sizeof( MAPOBJECT_old ) );
mo.soundno = 0;
mo.soundframe = 0;
mo.sounddelay = 0;
}
// object 甫 辑滚客 楷搬 救窍绊 焊咯林妨搁.....
if( mo.objectoritem == 0 || SysInfo.loaditemfromtoi2 ||
mo.objectoritem == ITEMTYPE_WORKTABLE_MINING || // 累诀措 侩堡肺(71)
mo.objectoritem == ITEMTYPE_WORKTABLE_BATTLE ||
mo.objectoritem == ITEMTYPE_WORKTABLE_SUNBAN ||
mo.objectoritem == ITEMTYPE_WORKTABLE_MORU ||
mo.objectoritem == ITEMTYPE_WORKTABLE_HWADUK ||
mo.objectoritem == ITEMTYPE_WORKTABLE_SIHUMKWAN ||
mo.objectoritem == ITEMTYPE_WORKTABLE_MULAE ||
mo.objectoritem == ITEMTYPE_WORKTABLE_BULDAE ||
mo.objectoritem == ITEMTYPE_SIGNBOARD ||
mo.objectoritem == ITEMTYPE_DIRECTBOARD ||
mo.objectoritem == ITEMTYPE_HP_UP ||
mo.objectoritem == ITEMTYPE_MP_UP ||
mo.objectoritem == ITEMTYPE_SCALE ||// 010614 khs
mo.objectoritem == ITEMTYPE_NATION_STONE ||
mo.objectoritem == ITEMTYPE_GUILD_STONE ||
mo.objectoritem == ITEMTYPE_SENARIO_STONE ||
mo.objectoritem == ITEMTYPE_COLOSSUS_STONE )
{
//if( mo.id == 52428 ) continue;
memcpy( &Mo[count], &mo, sizeof( MAPOBJECT ) );
int frame = LoadMapObjectCSP( Mo[count].id, &MoImage[ Mo[count].id-1] );
if( frame ) MoImage[ Mo[count].id-1].nFrameCount = frame;
if (MoImage[ Mo[count].id-1].nFrameCount != 0)
{
Mo[count].curframe = Random(MoImage[ Mo[count].id-1].nFrameCount);
}
else
{
Mo[count].curframe = 0;
}
count ++;
}
if ( HandleRunning(&connections ) <= 0 )
{
Release( &connections);
return( 0 );
}
}
fclose(fp);
TotalMapObject = count;
return 1;
}
else
{
sprintf( szFilePath, "./object/%s/%s.toi", temptoiname, filename );
fp = Fopen( szFilePath, "rb" );
if( fp == NULL )
{
TotalMapObject = 0;
}
return 0;
}
fread( &TotalMapObjectID, 2,1, fp );
fseek( fp, 4 + 4 + 2, SEEK_CUR );
for( i = 0 ; i < TotalMapObjectID ; i++ )
{
fread( &no, 4,1, fp );
fseek( fp, sizeof( SIZE ) + sizeof( WORD ) + sizeof( POINT ) + sizeof( LPDIRECTDRAWSURFACE) + sizeof( LPOBJECT ) * 2 +sizeof( struct tagOBJECTHEADER* ) * 2 + 2, SEEK_CUR );
TempMoImageID[i] = no;
for( j = 0 ; j < no ; j ++)
{
// fread( &sizeof(t), sizeof( OBJECT ),1, fp);
fread( &id, 2,1, fp );
Mo[count].id = id;
fread( &Mo[count].objectoritem, 2,1, fp );
fread( &Mo[count].dum, 2,1, fp );
fread( &Mo[count].animationType , 1,1, fp );
fread( &Mo[count].attr, 1,1, fp );
fread( &Mo[count].attr1, 1,1, fp );
fread( &Mo[count].attr2, 1,1, fp );
fseek( fp, 2, SEEK_CUR );
fread( &Mo[count].dir, 2,1, fp );
fseek( fp, 2, SEEK_CUR );
fread( &Mo[count].x, 4,1, fp );
fread( &Mo[count].y, 4,1, fp );
fread( &Mo[count].offx, 4,1, fp );
fread( &Mo[count].offy, 4,1, fp );
fread( &ox, 4,1, fp );
fread( &oy, 4,1, fp );
fseek( fp, 8, SEEK_CUR );
Mo[count].x = Mo[count].x * TILE_SIZE;
Mo[count].y = Mo[count].y * TILE_SIZE;
Mo[count].objectoritem = 0; // Mapobject...
if( j == 0 )
{
// MoImage[ Mo[count].id-1].spr[0].ox = ox;
// MoImage[ Mo[count].id-1].spr[0].oy = oy;
MoImage[ Mo[count].id-1].nFrameCount = LoadMapObjectCSP( Mo[count].id, &MoImage[ Mo[count].id-1] );
}
Mo[count].curframe = Random(MoImage[ Mo[count].id-1].nFrameCount );
count ++;
}
}
TotalMapObject = count;
fclose(fp);
return 1;
}
int SaveTOI2( char *filename )
{
FILE *fp, *wfp;
char szFilePath[ FILENAME_MAX];
char temptoiname[ FILENAME_MAX];
WORD i,j,k;
int no = 0;
int count = 0;
int obcount = 0;
int code = 0xffff;
typedef struct tt
{
int id;
int animationType;
int objectitem;
int attr2;
int light;
int nFrameCount;
int dx0[10], dy0[10], dx1[10], dy1[10];
}t_object;
MAPOBJECT **ob;
changemapobjectname( filename, temptoiname );
sprintf( szFilePath, "./object/%s/%s.toi2", temptoiname, filename );
fp = Fopen( szFilePath, "rb" );
if( fp )
{
fclose(fp);
DWORD fileattr = GetFileAttributes( szFilePath );
if( fileattr & FILE_ATTRIBUTE_READONLY )
{
JustMsg( "'%s'篮 '佬扁傈侩'栏肺 登绢 乐嚼聪促. \n 历厘窍瘤 臼疽嚼聪促.", szFilePath );
return 0;
}
}
fp = Fopen( szFilePath, "wb" );
if( fp == NULL ) return 0;
fwrite ( &code, 2,1, fp );
fwrite ( &TotalMapObject, 2,1, fp );
fwrite ( &TotalMapObjectID, 2,1, fp );
fwrite ( TempMoImageID, TotalMapObject, sizeof( int ), fp );
for( i = 0 ; i < TotalMapObject ; i++ )
{
////////////// 0810 lkh 眠啊 //////////////
Mo[i].soundno = Mo[i].soundno%1000; //窍困 3磊府啊 角力 荤款靛 锅龋捞绊 惑困 3磊府绰 荤款靛 墨款飘捞扁 锭巩
fwrite( &Mo[i], sizeof( MAPOBJECT ), 1, fp );
}
fclose(fp);
sprintf( szFilePath, "./object/%s/%s_toi2.txt", temptoiname, filename );
fp = Fopen( szFilePath, "wt" );
if( fp == NULL )
{
fp = Fopen( szFilePath, "rb" );
if( fp )
{
fclose(fp);
DWORD fileattr = GetFileAttributes( szFilePath );
if( fileattr & FILE_ATTRIBUTE_READONLY )
{
JustMsg( "'%s'篮 '佬扁傈侩'栏肺 登绢 乐嚼聪促. \n 历厘窍瘤 臼疽嚼聪促.", szFilePath );
return 0;
}
}
return 0;
}
fprintf( fp, "# 0:NO Animation 1:空汗 2:馆汗 3:巩凯覆 4:巩凯覆惑怕 5:巩摧塞 6:巩摧腮惑怕\n" );
fprintf( fp, "# 笼阑荐乐促 AnimationType Type Dir 嘛绰规过 嘛绰鉴辑 弊覆磊 Light Lightxy DontBox 醚弊覆荐 \n" );
ob = NULL;
MemAlloc( ob, sizeof( MAPOBJECT * ) * TotalMapObject );
for( i = 0 ; i < TotalMapObject ; i ++)
MemAlloc( ob[i], sizeof( MAPOBJECT ) );
obcount =0;
for( j = 0 ; j < TotalMapObject ; j ++)
{
if( Mo[ j].objectoritem ) // item捞搁...
{
for( i = 0 ; i < obcount ; i ++)
{
if( ob[i]->id == Mo[ j].id ) goto CONTINUE_;
}
memcpy( ob[ obcount], &Mo[j], sizeof( MAPOBJECT ) );
fprintf( fp, "%d 0 %d %d 1 %d 0 1 %d 0 -30 -20 0 0 -20 20 0 0 20 %d ",
Mo[ j].id + 13000,
Mo[ j].animationType,
Mo[ j].objectoritem,
Mo[ j].attr2,
Mo[ j].light,
MoImage[ Mo[ j].id -1].nFrameCount );
for( k = 0 ; k < MoImage[ Mo[ j].id-1 ].nFrameCount ; k ++)
fprintf( fp, "%d %d %d %d ", Mo[ j].dx0[k], Mo[ j].dy0[k], Mo[ j].dx1[k], Mo[ j].dy1[k] );
fprintf( fp, "\n" );
obcount++;
}
CONTINUE_:;
}
fclose(fp);
// Binary Data Save.....
sprintf( szFilePath, "./object/%s/%s_toi2.c", temptoiname, filename );
fp = Fopen( szFilePath, "wb" );
if( fp == NULL ) return 0;
// fprintf( fp, "# 0:NO Animation 1:空汗 2:馆汗 3:巩凯覆 4:巩凯覆惑怕 5:巩摧塞 6:巩摧腮惑怕\n" );
// fprintf( fp, "# 笼阑荐乐促 AnimationType Type Dir 嘛绰规过 嘛绰鉴辑 弊覆磊 Light Lightxy DontBox 醚弊覆荐 \n" );
int t;
fwrite( &obcount, sizeof( int ), 1, fp );
for( i = 0 ; i < obcount ; i ++)
{
t = ob[ i]->id + 13000; fwrite( &t, sizeof( int ), 1, fp);
t = 0; fwrite( &t, sizeof( int ), 1, fp);
t = ob[ i]->animationType; fwrite( &t, sizeof( int ), 1, fp);
t = ob[ i]->objectoritem; fwrite( &t, sizeof( int ), 1, fp);
t = 1 ; fwrite( &t, sizeof( int ), 1, fp);
t = ob[i]->attr2; fwrite( &t, sizeof( int ), 1, fp);
t = 0 ; fwrite( &t, sizeof( int ), 1, fp);
t = 1; fwrite( &t, sizeof( int ), 1, fp);
t = ob[i]->light; fwrite( &t, sizeof( int ), 1, fp);
t = 0; fwrite( &t, sizeof( int ), 1, fp);
t = -30; fwrite( &t, sizeof( int ), 1, fp);
t = -20; fwrite( &t, sizeof( int ), 1, fp);
t = 0; fwrite( &t, sizeof( int ), 1, fp);
t = 0; fwrite( &t, sizeof( int ), 1, fp);
t = -20; fwrite( &t, sizeof( int ), 1, fp);
t = 20 ; fwrite( &t, sizeof( int ), 1, fp);
t = 0; fwrite( &t, sizeof( int ), 1, fp);
t = 0; fwrite( &t, sizeof( int ), 1, fp);
t = 20;; fwrite( &t, sizeof( int ), 1, fp);
t = MoImage[ ob[i]->id -1].nFrameCount; fwrite( &t, sizeof( int ), 1, fp); // 20俺 * sizeof( int ) = 80;
fwrite( &ob[i]->dx0, sizeof( short ), ITEM_FRAME_MAX_, fp );
fwrite( &ob[i]->dy0, sizeof( short ), ITEM_FRAME_MAX_, fp );
fwrite( &ob[i]->dx1, sizeof( short ), ITEM_FRAME_MAX_, fp );
fwrite( &ob[i]->dy1, sizeof( short ), ITEM_FRAME_MAX_, fp ); // sizeof( int ) * 40 = 160///
}
fclose(fp );
for( i = 0 ; i < obcount ; i ++)
MemFree( ob[i] );
MemFree( ob );
// 眉农级阑 笼绢持绰促.
sprintf( szFilePath, "./object/%s/%s_toi2.c", temptoiname, filename );
fp = Fopen( szFilePath, "rb" );
sprintf( szFilePath, "./object/%s/%s_toi2.b", temptoiname, filename );
wfp = Fopen( szFilePath, "wb" );
DWORD fl = filelength( fileno( fp ) );
char crc = 0, tcrc;
for( k = 0 ; k < fl ; k ++)
{
fread( &tcrc, 1,1, fp );
crc += tcrc;
fwrite( &tcrc, 1,1, wfp );
}
fwrite( &crc, 1,1, wfp );
fclose( fp );
fclose(wfp );
return 1;
}
//////////////////////////////// 咯扁鳖瘤 ////////////////////////////////
void FreeTOI( void )
{
for( int i = 0 ; i < MAX_MAPOBJECTIMAGE ; i ++)
{
for( int j = 0 ; j < ITEM_FRAME_MAX_ ; j ++)
{
MemFree( MoImage[i].spr[j].img );
}
}
}
///////////////////////// SoundUp lkh 荐沥 /////////////////////////
void InsertMapObject( int moid, int x, int y )
{
int i;
if( TotalMapObject >= MAX_MAPOBJECT_ )
{
JustMsg( "澜,, 国辑 MapObject肮荐啊 5000逞菌绢夸.. 歹捞惑篮 公府俊夸.." );
return;
}
for( i = 0 ; i < TotalMapObject ; i ++)
{
if( Mo[i].id == moid ) break;
}
if( i == TotalMapObject )
{
memset( &Mo[TotalMapObject], 0, sizeof( MAPOBJECT ) );
}
else
{
memcpy( &Mo[ TotalMapObject], &Mo[i], sizeof( MAPOBJECT ));
}
Mo[TotalMapObject].id = moid;
Mo[TotalMapObject].x = x;
Mo[TotalMapObject].y = y;
Mo[TotalMapObject].animationType = OBJECTANI_NO;
LPMAPOBJECT mo = &Mo[TotalMapObject];
int frame = LoadMapObjectCSP( mo->id, &MoImage[ mo->id-1] );
if( frame ) MoImage[ mo->id-1].nFrameCount = frame;
Mo[TotalMapObject].soundno = 0;
Mo[TotalMapObject].soundframe = 0;
Mo[TotalMapObject].sounddelay = 0;
TotalMapObject ++;
}
void DeleteMapObject_sub( int no )
{
MAPOBJECT mo;
memcpy( &mo, &Mo[ no], sizeof( MAPOBJECT ) );
memmove( &Mo[no], &Mo[no+1], sizeof(MAPOBJECT) * (MAX_MAPOBJECT_ - no - 1 ));
TotalMapObject --;
int c = 0;
for(int i = 0 ; i < TotalMapObject ; i ++)
{
if( Mo[i].id == mo.id ) c++;
}
if( c == 0 )
{
for( i = 0 ; i < ITEM_FRAME_MAX_ ; i ++)
MemFree( MoImage[ mo.id-1].spr[i].img );
}
}
void DeleteMapObject( int no )
{
if( no == -1 ) return;
if( YesOrNo( "甘坷宏璃飘甫 绝局妨备 ?", "趣矫唱.." ) == IDYES )
{}
else
{
return;
}
DeleteMapObject_sub( no );
}
void DeleteMapObjectAll( int no )
{
int j;
if( no == -1 ) return;
if( YesOrNo( "甘俊辑 no锅 甘坷宏璃飘甫 葛滴 绝局妨备 ????", "趣矫唱.." ) == IDYES )
{}
else
{
return;
}
for( j = 0 ; j < TotalMapObject ; j ++)
{
if( Mo[ j].id == no )
{
DeleteMapObject_sub( j );
j--;
}
}
}
void LoadTempSprite( int id )
{
static int mapobjectno = -1;
if( id == mapobjectno ) return;
mapobjectno = id;
char filename[ FILENAME_MAX];
FILE *fp;
int lev;
MemFree( TempMoImage.spr[0].img );
lev = id / 1000;
if( lev == 1 ) lev = 0;
sprintf( filename, "./object/%d/%04d.csp", lev, id );
fp = Fopen( filename, "rb" );
if( fp == NULL ) return;
fread( &TempMoImage.spr[0].xl, sizeof( short ), 1, fp);
fread( &TempMoImage.spr[0].yl, sizeof( short ), 1, fp);
fread( &TempMoImage.spr[0].ox, sizeof( short ), 1, fp);
fread( &TempMoImage.spr[0].oy, sizeof( short ), 1, fp);
fread( &TempMoImage.spr[0].size, sizeof( unsigned int ), 1, fp);
TempMoImage.spr[0].img = NULL;
MemAlloc( TempMoImage.spr[0].img, TempMoImage.spr[0].size );
fread( TempMoImage.spr[0].img, TempMoImage.spr[0].size, 1, fp);
convert565to555( &TempMoImage.spr[0] );
fclose(fp);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -