Files
Client/Engine/Zalla3D Scene Class/Z3dtypes.cpp
LGram16 e067522598 Initial commit: ROW Client source code
Game client codebase including:
- CharacterActionControl: Character and creature management
- GlobalScript: Network, items, skills, quests, utilities
- RYLClient: Main client application with GUI and event handlers
- Engine: 3D rendering engine (RYLGL)
- MemoryManager: Custom memory allocation
- Library: Third-party dependencies (DirectX, boost, etc.)
- Tools: Development utilities

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 16:24:34 +09:00

221 lines
4.0 KiB
C++

#include "Z3DTYPES.h"
#include <stdio.h>
#include "GMMemory.h"
bool Z3DLODMesh_::Load( const char* szFilename )
{
FILE* fp;
if((fp = fopen(szFilename, "rb")) == NULL )
{
return false;
}
fread( &wId, sizeof(WORD), 1, fp );
fread( &lVertexCount, sizeof(long), 1, fp );
pVertices = new Z3DBlend2Vertex_[lVertexCount];
if( NULL == pVertices )
{
fclose( fp );
return false;
}
for(int i = 0; i < Z3D_LOD_LEVEL; i++ )
{
fread( &(aIndex[i].lIndexCount), sizeof(long), 1, fp );
if( aIndex[i].lIndexCount )
{
aIndex[i].pIndices = new WORD[aIndex[i].lIndexCount];
if( NULL == aIndex[i].pIndices )
{
fclose( fp );
return false;
}
}
}
fread( pVertices, sizeof(Z3DBlend2Vertex_), lVertexCount, fp );
for(int i = 0; i < Z3D_LOD_LEVEL; i++ )
{
if( aIndex[i].lIndexCount )
{
fread( aIndex[i].pIndices, sizeof(WORD), aIndex[i].lIndexCount, fp );
}
}
fclose( fp );
return true;
}
//bool Z3DLODMesh::Load( const char* szFilename )
bool Z3DLODMesh::Load(Caldron::Base::CCaldronByteDataObj *pDataObj)
{
if( 0 == pDataObj->GetByteSize() )
{
return false;
}
pDataObj->Read( &wId, sizeof(WORD), 1 );
pDataObj->Read( &lVertexCount, sizeof(long), 1 );
pVertices = new Z3DBlend2Vertex[lVertexCount];
if( NULL == pVertices )
{
return false;
}
for(int i = 0; i < Z3D_LOD_LEVEL; i++ )
{
pDataObj->Read( &(aIndex[i].lIndexCount), sizeof(long), 1 );
if( aIndex[i].lIndexCount )
{
aIndex[i].pIndices = new WORD[aIndex[i].lIndexCount];
if( NULL == aIndex[i].pIndices )
{
return false;
}
}
}
pDataObj->Read( pVertices, sizeof(Z3DBlend2Vertex), lVertexCount );
for(int i = 0; i < Z3D_LOD_LEVEL; i++ )
{
if( aIndex[i].lIndexCount )
{
pDataObj->Read( aIndex[i].pIndices, sizeof(WORD), aIndex[i].lIndexCount );
}
}
m_bLoaded = true;
return true;
}
bool Z3DLODMesh::Save( const char* szFilename )
{
FILE* fp;
if((fp = fopen(szFilename, "wb")) == NULL )
{
return false;
}
// writing id
fwrite( &wId, sizeof(WORD), 1, fp );
// writing vertex count
fwrite( &lVertexCount, sizeof(long), 1, fp );
if( NULL == pVertices )
{
fclose( fp );
return false;
}
// writing index count of each LOD level
for(int i = 0; i < Z3D_LOD_LEVEL; i++ )
{
fwrite( &(aIndex[i].lIndexCount), sizeof(long), 1, fp );
if( aIndex[i].lIndexCount )
{
if( NULL == aIndex[i].pIndices )
{
fclose( fp );
return false;
}
}
}
// writing vertex content
fwrite( pVertices, sizeof(Z3DBlend2Vertex), lVertexCount, fp );
// writing index content of each LOD level
for(int i = 0; i < Z3D_LOD_LEVEL; i++ )
{
if( aIndex[i].lIndexCount )
{
fwrite( aIndex[i].pIndices, sizeof(WORD), aIndex[i].lIndexCount, fp );
}
}
fclose( fp );
return true;
}
bool Z3DAMesh::Load( const char* szFileName )
{
FILE* fp;
if((fp = fopen(szFileName, "rb")) == NULL )
{
return false;
}
fread( &m_wVertexCount, sizeof(WORD), 1, fp );
fread( &m_wIndexCount, sizeof(WORD), 1, fp );
m_pVertices = new BumpVertex[m_wVertexCount];
if( NULL == m_pVertices )
{
fclose( fp );
return false;
}
m_pIndices = new WORD[m_wIndexCount];
if( NULL == m_pIndices )
{
fclose( fp );
return false;
}
fread( m_pVertices, sizeof(BumpVertex), m_wVertexCount, fp );
fread( m_pIndices, sizeof(WORD), m_wIndexCount, fp );
fread( &m_wMarker1, sizeof(WORD), 1, fp );
fread( &m_wMarker2, sizeof(WORD), 1, fp );
fclose(fp);
return true;
}
bool Z3DAMesh::Save( const char* szFileName )
{
FILE* fp;
if((fp = fopen(szFileName, "wb")) == NULL )
{
return false;
}
fwrite( &m_wVertexCount, sizeof(WORD), 1, fp );
fwrite( &m_wIndexCount, sizeof(WORD), 1, fp );
if( NULL == m_pVertices )
{
fclose( fp );
return false;
}
if( NULL == m_pIndices )
{
fclose( fp );
return false;
}
fwrite( m_pVertices, sizeof(BumpVertex), m_wVertexCount, fp );
fwrite( m_pIndices, sizeof(WORD), m_wIndexCount, fp );
fwrite( &m_wMarker1, sizeof(WORD), 1, fp );
fwrite( &m_wMarker2, sizeof(WORD), 1, fp );
fclose(fp);
return true;
}