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>
This commit is contained in:
2025-11-29 16:24:34 +09:00
commit e067522598
5135 changed files with 1745744 additions and 0 deletions

View File

@@ -0,0 +1,613 @@
#include "./d3dbufferpools.h"
#include "SceneManager.h"
#include "GMMemory.h"
using namespace Caldron::Scene;
void CD3DBufferObj::CreateBuffer(int iType,unsigned int uiSize,DWORD dwDecl,LPDIRECT3DRESOURCE8 lpBuffer)
{
m_iBufferObjType = iType;
m_uiBufferSize = uiSize;
m_dwValue = dwDecl;
m_pBuffers = lpBuffer;
}
void CD3DBufferObj::NullBuffer()
{
SafeRelease(m_pBuffers);
m_pBuffers = NULL;
m_iBufferObjType = 0;
m_uiBufferSize = 0;
m_dwValue = 0;
}
CD3DBufferPools::CD3DBufferPools(void)
{
for(int i = 0; i < D3DBUFFER_SIZENUM - 1; i++ )
{
m_DVertexBufferNums[i] = 0;
m_DIndexBufferNums[i] = 0;
}
m_DCustomVertexBufferPools.clear();
m_DCustomIndexBufferPools.clear();
m_DIndexBufferNums[D3DBUFFER_SIZENUM - 1] = 0;
m_DVertexBufferNums[D3DBUFFER_SIZENUM - 1] = 0;
for(int i = 0; i < D3DBUFFER_SIZENUM - 1; i++ )
{
m_SVertexBufferNums[i] = 0;
m_SIndexBufferNums[i] = 0;
}
m_SCustomVertexBufferPools.clear();
m_SCustomIndexBufferPools.clear();
m_SIndexBufferNums[D3DBUFFER_SIZENUM - 1] = 0;
m_SVertexBufferNums[D3DBUFFER_SIZENUM - 1] = 0;
}
CD3DBufferPools::~CD3DBufferPools(void)
{
// Dynamic Buffer Clear
for(int i = 0; i < D3DBUFFER_SIZENUM - 1; i++ )
{
while(!m_DVertexBufferPools[i].empty())
{
CD3DBufferObj *pObj = m_DVertexBufferPools[i].front();
m_DVertexBufferPools[i].pop();
if(pObj)
{
pObj->NullBuffer();
SafeDelete(pObj);
}
}
while(!m_DIndexBufferPools[i].empty())
{
CD3DBufferObj *pObj = m_DIndexBufferPools[i].front();
m_DIndexBufferPools[i].pop();
if(pObj)
{
pObj->NullBuffer();
SafeDelete(pObj);
}
}
m_DVertexBufferNums[i] = 0;
m_DIndexBufferNums[i] = 0;
}
for(int i = 0; i < (int)m_DVertexBufferNums[D3DBUFFER_SIZENUM - 1]; i++ )
{
if(m_DCustomVertexBufferPools[i])
{
m_DCustomVertexBufferPools[i]->NullBuffer();
SafeDelete(m_DCustomVertexBufferPools[i]);
m_DCustomVertexBufferPools[i] = NULL;
}
}
m_DCustomVertexBufferPools.clear();
for(int i = 0; i < (int)m_DIndexBufferNums[D3DBUFFER_SIZENUM - 1]; i++ )
{
if(m_DCustomIndexBufferPools[i])
{
m_DCustomIndexBufferPools[i]->NullBuffer();
SafeDelete(m_DCustomIndexBufferPools[i]);
m_DCustomIndexBufferPools[i] = NULL;
}
}
m_DCustomIndexBufferPools.clear();
// Static Buffer Clear
for(int i = 0; i < D3DBUFFER_SIZENUM - 1; i++ )
{
while(!m_SVertexBufferPools[i].empty())
{
CD3DBufferObj *pObj = m_SVertexBufferPools[i].front();
m_SVertexBufferPools[i].pop();
if(pObj)
{
pObj->NullBuffer();
SafeDelete(pObj);
}
}
while(!m_SIndexBufferPools[i].empty())
{
CD3DBufferObj *pObj = m_SIndexBufferPools[i].front();
m_SIndexBufferPools[i].pop();
if(pObj)
{
pObj->NullBuffer();
SafeDelete(pObj);
}
}
m_SVertexBufferNums[i] = 0;
m_SIndexBufferNums[i] = 0;
}
for(int i = 0; i < (int)m_SVertexBufferNums[D3DBUFFER_SIZENUM - 1]; i++ )
{
if(m_SCustomVertexBufferPools[i])
{
m_SCustomVertexBufferPools[i]->NullBuffer();
SafeDelete(m_SCustomVertexBufferPools[i]);
m_SCustomVertexBufferPools[i] = NULL;
}
}
m_SCustomVertexBufferPools.clear();
for(int i = 0; i < (int)m_SIndexBufferNums[D3DBUFFER_SIZENUM - 1]; i++ )
{
if(m_SCustomIndexBufferPools[i])
{
m_SCustomIndexBufferPools[i]->NullBuffer();
SafeDelete(m_SCustomIndexBufferPools[i]);
m_SCustomIndexBufferPools[i] = NULL;
}
}
m_SCustomIndexBufferPools.clear();
}
LPDIRECT3DVERTEXBUFFER8 CD3DBufferPools::GetVertexBuffer(unsigned int uiSize,DWORD dwDecl,bool bDynamic)
{
LPDIRECT3DVERTEXBUFFER8 pReturn = NULL;
int i,j;
if(bDynamic)
{
for(i = 0;i < D3DBUFFER_SIZENUM - 1; i++)
{
if(uiSize <= ArrBufferSize[i])
{
if(m_DVertexBufferNums[i])
{
CD3DBufferObj *pObj = m_DVertexBufferPools[i].front();
m_DVertexBufferPools[i].pop();
m_DVertexBufferNums[i]--;
if(pObj)
{
pReturn = (LPDIRECT3DVERTEXBUFFER8) pObj->m_pBuffers;
SafeDelete(pObj);
return pReturn;
}
return NULL;
}
return (pReturn = (LPDIRECT3DVERTEXBUFFER8)CreateBuffer(bDynamic,Scene::D3DBUFFEROBJ_VERTEX,i,dwDecl));
}
}
// Custom Size
if(m_DVertexBufferNums[D3DBUFFER_SIZENUM - 1])
{
for(j = 0; j < (int)m_DVertexBufferNums[D3DBUFFER_SIZENUM - 1]; j++ )
{
if((m_DCustomVertexBufferPools[j]->m_uiBufferSize) >= uiSize)
{
pReturn = ((LPDIRECT3DVERTEXBUFFER8)m_DCustomVertexBufferPools[j]->m_pBuffers);
SafeDelete(m_DCustomVertexBufferPools[j]);
m_DCustomVertexBufferPools.erase(m_DCustomVertexBufferPools.begin() + j);
m_DVertexBufferNums[D3DBUFFER_SIZENUM - 1]--;
return pReturn;
}
}
}
}
else //static
{
for(i = 0;i < D3DBUFFER_SIZENUM - 1; i++)
{
if(uiSize <= ArrBufferSize[i])
{
if(m_SVertexBufferNums[i])
{
CD3DBufferObj *pObj = m_SVertexBufferPools[i].front();
m_SVertexBufferPools[i].pop();
m_SVertexBufferNums[i]--;
if(pObj)
{
pReturn = (LPDIRECT3DVERTEXBUFFER8) pObj->m_pBuffers;
SafeDelete(pObj);
return pReturn;
}
return NULL;
}
return (pReturn = (LPDIRECT3DVERTEXBUFFER8)CreateBuffer(bDynamic,Scene::D3DBUFFEROBJ_VERTEX,i,dwDecl));
}
}
// Custom Size
if(m_SVertexBufferNums[D3DBUFFER_SIZENUM - 1])
{
for(j = 0; j < (int)m_SVertexBufferNums[D3DBUFFER_SIZENUM - 1]; j++ )
{
if((m_SCustomVertexBufferPools[j]->m_uiBufferSize) >= uiSize)
{
pReturn = ((LPDIRECT3DVERTEXBUFFER8)m_SCustomVertexBufferPools[j]->m_pBuffers);
SafeDelete(m_SCustomVertexBufferPools[j]);
m_SCustomVertexBufferPools.erase(m_SCustomVertexBufferPools.begin() + j);
m_SVertexBufferNums[D3DBUFFER_SIZENUM - 1]--;
return pReturn;
}
}
}
}
return (pReturn = (LPDIRECT3DVERTEXBUFFER8)CreateBuffer(bDynamic,Scene::D3DBUFFEROBJ_VERTEX,-1,dwDecl,uiSize));
}
LPDIRECT3DINDEXBUFFER8 CD3DBufferPools::GetIndexBuffer(unsigned int uiSize,DWORD dwFormat,bool bDynamic)
{
LPDIRECT3DINDEXBUFFER8 pReturn = NULL;
int i,j;
if(bDynamic)
{
for(i = 0;i < D3DBUFFER_SIZENUM - 1; i++)
{
if(uiSize <= ArrBufferSize[i])
{
if(m_DIndexBufferNums[i])
{
CD3DBufferObj *pObj = m_DIndexBufferPools[i].front();
m_DIndexBufferPools[i].pop();
m_DIndexBufferNums[i]--;
if(pObj)
{
pReturn = (LPDIRECT3DINDEXBUFFER8) pObj->m_pBuffers;
SafeDelete(pObj);
return pReturn;
}
return NULL;
}
return (pReturn = (LPDIRECT3DINDEXBUFFER8)CreateBuffer(bDynamic,Scene::D3DBUFFEROBJ_INDEX,i,dwFormat));
}
}
// Custom Size
if(m_DIndexBufferNums[D3DBUFFER_SIZENUM - 1])
{
for(j = 0; j < (int)m_DIndexBufferNums[D3DBUFFER_SIZENUM - 1]; j++ )
{
if((m_DCustomIndexBufferPools[j]->m_uiBufferSize) >= uiSize)
{
pReturn = ((LPDIRECT3DINDEXBUFFER8)m_DCustomIndexBufferPools[j]->m_pBuffers);
SafeDelete(m_DCustomIndexBufferPools[j]);
m_DCustomIndexBufferPools.erase(m_DCustomIndexBufferPools.begin() + j);
m_DIndexBufferNums[D3DBUFFER_SIZENUM - 1]--;
return pReturn;
}
}
}
}
else //Static Buffer
{
for(i = 0;i < D3DBUFFER_SIZENUM - 1; i++)
{
if(uiSize <= ArrBufferSize[i])
{
if(m_SIndexBufferNums[i])
{
CD3DBufferObj *pObj = m_SIndexBufferPools[i].front();
m_SIndexBufferPools[i].pop();
m_SIndexBufferNums[i]--;
if(pObj)
{
pReturn = (LPDIRECT3DINDEXBUFFER8) pObj->m_pBuffers;
SafeDelete(pObj);
return pReturn;
}
return NULL;
}
return (pReturn = (LPDIRECT3DINDEXBUFFER8)CreateBuffer(bDynamic,Scene::D3DBUFFEROBJ_INDEX,i,dwFormat));
}
}
// Custom Size
if(m_SIndexBufferNums[D3DBUFFER_SIZENUM - 1])
{
for(j = 0; j < (int)m_SIndexBufferNums[D3DBUFFER_SIZENUM - 1]; j++ )
{
if((m_SCustomIndexBufferPools[j]->m_uiBufferSize) >= uiSize)
{
pReturn = ((LPDIRECT3DINDEXBUFFER8)m_SCustomIndexBufferPools[j]->m_pBuffers);
SafeDelete(m_SCustomIndexBufferPools[j]);
m_SCustomIndexBufferPools.erase(m_SCustomIndexBufferPools.begin() + j);
m_SIndexBufferNums[D3DBUFFER_SIZENUM - 1]--;
return pReturn;
}
}
}
}
return (pReturn = (LPDIRECT3DINDEXBUFFER8)CreateBuffer(bDynamic,Scene::D3DBUFFEROBJ_INDEX,-1,dwFormat,uiSize));
}
void CD3DBufferPools::UnRef(unsigned int iType,LPDIRECT3DRESOURCE8 lpBuffer)
{
// ppuchuu 2004/11/15
if( NULL == lpBuffer )
{
return;
}
// edith 2008.12.12 <20><><EFBFBD><EFBFBD>Ǯ<EFBFBD><C7AE> <20>ִ밳<D6B4><EBB0B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
unsigned int iMaxPoolCount = 100;
bool bDynamic = false;
if(iType == Scene::D3DBUFFEROBJ_VERTEX)
{
D3DVERTEXBUFFER_DESC VertexBufferDesc;
((LPDIRECT3DVERTEXBUFFER8)lpBuffer)->GetDesc(&VertexBufferDesc);
if(VertexBufferDesc.Usage & D3DUSAGE_DYNAMIC)
bDynamic = true;
if(bDynamic)
{
// <20>ִ밳<D6B4><EBB0B3> <20><><EFBFBD><EFBFBD>.
for(int i = 0;i < D3DBUFFER_SIZENUM - 1; i++)
{
if(VertexBufferDesc.Size <= ArrBufferSize[i])
{
if(m_DVertexBufferNums[i] >= iMaxPoolCount)
{
SafeRelease(lpBuffer);
return;
}
break;
}
}
}
else
{
// <20>ִ밳<D6B4><EBB0B3> <20><><EFBFBD><EFBFBD>
for(int i = 0;i < D3DBUFFER_SIZENUM - 1; i++)
{
if(VertexBufferDesc.Size <= ArrBufferSize[i])
{
if(m_SVertexBufferNums[i] >= iMaxPoolCount)
{
SafeRelease(lpBuffer);
return;
}
break;
}
}
}
CD3DBufferObj *pObj = new CD3DBufferObj;
pObj->CreateBuffer(iType,VertexBufferDesc.Size,VertexBufferDesc.FVF,lpBuffer);
if(bDynamic)
{
for(int i = 0;i < D3DBUFFER_SIZENUM - 1; i++)
{
if(pObj->m_uiBufferSize <= ArrBufferSize[i])
{
m_DVertexBufferPools[i].push(pObj);
m_DVertexBufferNums[i]++;
return;
}
}
m_DCustomVertexBufferPools.push_back(pObj);
m_DVertexBufferNums[D3DBUFFER_SIZENUM - 1]++;
}
else // Static Buffer
{
for(int i = 0;i < D3DBUFFER_SIZENUM - 1; i++)
{
if(pObj->m_uiBufferSize <= ArrBufferSize[i])
{
m_SVertexBufferPools[i].push(pObj);
m_SVertexBufferNums[i]++;
return;
}
}
m_SCustomVertexBufferPools.push_back(pObj);
m_SVertexBufferNums[D3DBUFFER_SIZENUM - 1]++;
}
}
else if(iType == Scene::D3DBUFFEROBJ_INDEX)
{
D3DINDEXBUFFER_DESC IndexBufferDesc;
((LPDIRECT3DINDEXBUFFER8)lpBuffer)->GetDesc(&IndexBufferDesc);
if(IndexBufferDesc.Usage & D3DUSAGE_DYNAMIC)
bDynamic = true;
if(bDynamic)
{
// <20>ִ밳<D6B4><EBB0B3> <20><><EFBFBD><EFBFBD>.
for(int i = 0;i < D3DBUFFER_SIZENUM - 1; i++)
{
if(IndexBufferDesc.Size <= ArrBufferSize[i])
{
if(m_DIndexBufferNums[i] >= iMaxPoolCount)
{
SafeRelease(lpBuffer);
return;
}
break;
}
}
}
else
{
// <20>ִ밳<D6B4><EBB0B3> <20><><EFBFBD><EFBFBD>
for(int i = 0;i < D3DBUFFER_SIZENUM - 1; i++)
{
if(IndexBufferDesc.Size <= ArrBufferSize[i])
{
if(m_SIndexBufferNums[i] >= iMaxPoolCount)
{
SafeRelease(lpBuffer);
return;
}
break;
}
}
}
CD3DBufferObj *pObj = new CD3DBufferObj;
pObj->CreateBuffer(iType,IndexBufferDesc.Size,IndexBufferDesc.Format,lpBuffer);
if(bDynamic)
{
for(int i = 0;i < D3DBUFFER_SIZENUM - 1; i++)
{
if(pObj->m_uiBufferSize <= ArrBufferSize[i])
{
m_DIndexBufferPools[i].push(pObj);
m_DIndexBufferNums[i]++;
return;
}
}
m_DCustomIndexBufferPools.push_back(pObj);
m_DIndexBufferNums[D3DBUFFER_SIZENUM - 1]++;
}
else // Static
{
for(int i = 0;i < D3DBUFFER_SIZENUM - 1; i++)
{
if(pObj->m_uiBufferSize <= ArrBufferSize[i])
{
m_SIndexBufferPools[i].push(pObj);
m_SIndexBufferNums[i]++;
return;
}
}
m_SCustomIndexBufferPools.push_back(pObj);
m_SIndexBufferNums[D3DBUFFER_SIZENUM - 1]++;
}
}
}
LPDIRECT3DRESOURCE8 CD3DBufferPools::CreateBuffer(bool bDynamic,unsigned int iType,int iSizeType,DWORD dwValue,unsigned int uiCustomSize)
{
unsigned int uiSize = 0;
if(iSizeType >= 0)
uiSize = ArrBufferSize[iSizeType];
else
uiSize = uiCustomSize;
if(iType == Scene::D3DBUFFEROBJ_VERTEX)
{
LPDIRECT3DVERTEXBUFFER8 lpVertex;
if(!bDynamic)
{
// if(Caldron::Failed(CSceneManager::GetDevice()->CreateVertexBuffer(uiSize,D3DUSAGE_WRITEONLY,dwValue,D3DPOOL_DEFAULT,&lpVertex)))
if(Caldron::Failed(CSceneManager::GetDevice()->CreateVertexBuffer(uiSize,D3DUSAGE_WRITEONLY,0,D3DPOOL_MANAGED,&lpVertex)))
{
MessageBox(NULL,"Buffer Create Faile(1)","Error",MB_OK);
}
}
else
{
if(Caldron::Failed(CSceneManager::GetDevice()->CreateVertexBuffer(uiSize,D3DUSAGE_WRITEONLY | D3DUSAGE_DYNAMIC,0,D3DPOOL_DEFAULT,&lpVertex)))
{
MessageBox(NULL,"Buffer Create Faile(2)","Error",MB_OK);
}
}
return lpVertex;
}
else if(iType == Scene::D3DBUFFEROBJ_INDEX)
{
LPDIRECT3DINDEXBUFFER8 lpIndex;
if(!bDynamic)
{
if(Caldron::Failed(CSceneManager::GetDevice()->CreateIndexBuffer(uiSize,D3DUSAGE_WRITEONLY,(D3DFORMAT)dwValue,D3DPOOL_MANAGED,&lpIndex)))
// if(Caldron::Failed(CSceneManager::GetDevice()->CreateIndexBuffer(uiSize,D3DUSAGE_WRITEONLY,(D3DFORMAT)dwValue,D3DPOOL_DEFAULT,&lpIndex)))
{
MessageBox(NULL,"Buffer Create Faile(3)","Error",MB_OK);
}
}
else
{
if(Caldron::Failed(CSceneManager::GetDevice()->CreateIndexBuffer(uiSize,D3DUSAGE_WRITEONLY | D3DUSAGE_DYNAMIC,(D3DFORMAT)dwValue,D3DPOOL_DEFAULT ,&lpIndex)))
{
MessageBox(NULL,"Buffer Create Faile(4)","Error",MB_OK);
}
}
return lpIndex;
}
return NULL;
}
void CD3DBufferPools::InitBuffer()
{
int i,j;
for( i = 0; i < 8; i++ )
{
LPDIRECT3DVERTEXBUFFER8 lpVertexBuffer[80];
LPDIRECT3DINDEXBUFFER8 lpIndexBuffer[80];
for( j = 0;j < 80; j++ )
{
if(j < 15)
{
lpVertexBuffer[j] = GetVertexBuffer(ArrBufferSize[i] - 10,0,false);
lpIndexBuffer[j] = GetIndexBuffer(ArrBufferSize[i] - 10,D3DFMT_INDEX16,false);
}
else
{
lpVertexBuffer[j] = GetVertexBuffer(ArrBufferSize[i] - 10,0,true);
lpIndexBuffer[j] = GetIndexBuffer(ArrBufferSize[i] - 10,D3DFMT_INDEX16,true);
}
}
for(j = 0;j < 80; j++ )
{
UnRef(D3DBUFFEROBJ_VERTEX,lpVertexBuffer[j]);
UnRef(D3DBUFFEROBJ_INDEX,lpIndexBuffer[j]);
lpVertexBuffer[j] = NULL;
lpIndexBuffer[j] = NULL;
}
}
for(i = 0; i < 5; i++ )
{
LPDIRECT3DVERTEXBUFFER8 lpCustomBuffer[5];
lpCustomBuffer[0] = GetVertexBuffer(150000,0,true);
lpCustomBuffer[1] = GetVertexBuffer(100000,0,true);
lpCustomBuffer[2] = GetVertexBuffer(50000,0,true);
lpCustomBuffer[3] = GetVertexBuffer(50000,0,true);
lpCustomBuffer[4] = GetVertexBuffer(150000,0,true);
for(j = 0; j < 5; j++ )
{
UnRef(D3DBUFFEROBJ_VERTEX,lpCustomBuffer[j]);
lpCustomBuffer[j] = NULL;
}
}
}