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,401 @@
//------------------------------------------------------------------------------
// File: persist.cpp
//
// Desc: DirectShow sample code
// - State persistence helper functions
//
// Copyright (c) 1994 - 2001, Microsoft Corporation. All rights reserved.
//------------------------------------------------------------------------------
#include <streams.h>
#include <atlbase.h>
#include <atlconv.cpp>
#include <mmreg.h>
#include "project.h"
// Constants
const int CX_DEFAULT = 400; /* Default window width */
const int CY_DEFAULT = 400; /* Default window height */
// Global data
RECENTFILES aRecentFiles[MAX_RECENT_FILES];
int nRecentFiles;
// Global static data
static TCHAR cszWindow[] = TEXT("Window");
static TCHAR cszAppKey[] = TEXT("Software\\Microsoft\\Multimedia Tools\\VMRPlayer");
/*+ GetAppKey
*
*-=================================================================*/
HKEY
GetAppKey(
BOOL fCreate
)
{
HKEY hKey = 0;
if(fCreate)
{
if(RegCreateKey(HKEY_CURRENT_USER, cszAppKey, &hKey) == ERROR_SUCCESS)
return hKey;
}
else
{
if(RegOpenKey(HKEY_CURRENT_USER, cszAppKey, &hKey) == ERROR_SUCCESS)
return hKey;
}
return NULL;
}
/*+ ProfileIntIn
*
*-=================================================================*/
int
ProfileIntIn(
const TCHAR *szKey,
int iDefault
)
{
DWORD dwType=0;
int iValue=0;
BYTE aData[20];
DWORD cb;
HKEY hKey;
if((hKey = GetAppKey(TRUE)) == 0)
{
return iDefault;
}
*(UINT *)&aData = 0;
cb = sizeof(aData);
if(RegQueryValueEx(hKey, szKey, NULL, &dwType, aData, &cb))
{
iValue = iDefault;
}
else
{
if(dwType == REG_DWORD || dwType == REG_BINARY)
{
iValue = *(int *)&aData;
}
else if(dwType == REG_SZ)
{
iValue = atoi((LPSTR)aData);
}
}
RegCloseKey(hKey);
return iValue;
}
/*+ ProfileIntOut
*
*-=================================================================*/
BOOL
ProfileIntOut(
const TCHAR *szKey,
int iVal
)
{
HKEY hKey;
BOOL bRet = FALSE;
hKey = GetAppKey(TRUE);
if(hKey)
{
RegSetValueEx(hKey, szKey, 0, REG_DWORD, (LPBYTE)&iVal, sizeof(DWORD));
RegCloseKey(hKey);
bRet = TRUE;
}
return bRet;
}
/*+ ProfileStringIn
*
*-=================================================================*/
UINT
ProfileStringIn(
LPTSTR szKey,
LPTSTR szDef,
LPTSTR sz,
DWORD cb
)
{
HKEY hKey;
DWORD dwType;
if((hKey = GetAppKey(FALSE)) == 0)
{
lstrcpy(sz, szDef);
return lstrlen(sz);
}
if(RegQueryValueEx(hKey, szKey, NULL, &dwType, (LPBYTE)sz, &cb) || dwType != REG_SZ)
{
lstrcpy(sz, szDef);
cb = lstrlen(sz);
}
RegCloseKey(hKey);
return cb;
}
/*+ ProfileStringOut
*
*-=================================================================*/
void
ProfileStringOut(
LPTSTR szKey,
LPTSTR sz
)
{
HKEY hKey;
hKey = GetAppKey(TRUE);
if(hKey)
RegSetValueEx(hKey, szKey, 0, REG_SZ, (LPBYTE)sz, sizeof(TCHAR) * (lstrlen(sz)+1));
RegCloseKey(hKey);
}
/*+ LoadWindowPos
*
* retrieve the window position information from dragn.ini
*
*-=================================================================*/
#ifndef SPI_GETWORKAREA
#define SPI_GETWORKAREA 48 // because NT doesnt have this define yet
#endif
BOOL
LoadWindowPos(
LPRECT lprc
)
{
static RECT rcDefault = {0,0,CX_DEFAULT,CY_DEFAULT};
RECT rcScreen;
RECT rc;
HKEY hKey = GetAppKey(FALSE);
// read window placement from the registry.
//
*lprc = rcDefault;
if(hKey)
{
DWORD cb;
DWORD dwType;
cb = sizeof(rc);
if(! RegQueryValueEx(hKey, cszWindow, NULL, &dwType, (LPBYTE)&rc, &cb)
&& dwType == REG_BINARY && cb == sizeof(RECT))
{
*lprc = rc;
}
RegCloseKey(hKey);
}
// if we fail to get the working area (screen-tray), then assume
// the screen is 640x480
//
if(! SystemParametersInfo(SPI_GETWORKAREA, 0, &rcScreen, FALSE))
{
rcScreen.top = rcScreen.left = 0;
rcScreen.right = 640;
rcScreen.bottom = 480;
}
// if the proposed window position is outside the screen,
// use the default placement
//
if(! IntersectRect(&rc, &rcScreen, lprc))
{
*lprc = rcDefault;
}
return ! IsRectEmpty(lprc);
}
/*+ SaveWindowPos
*
* store the window position information in dragn.ini
*
*-=================================================================*/
BOOL
SaveWindowPos(
HWND hwnd
)
{
WINDOWPLACEMENT wpl;
HKEY hKey = GetAppKey(TRUE);
if(!hKey)
{
return FALSE;
}
// save the current size and position of the window to the registry
//
ZeroMemory(&wpl, sizeof(wpl));
wpl.length = sizeof(wpl);
GetWindowPlacement(hwnd, &wpl);
RegSetValueEx(hKey, cszWindow, 0, REG_BINARY,
(LPBYTE)&wpl.rcNormalPosition,
sizeof(wpl.rcNormalPosition));
RegCloseKey(hKey);
return TRUE;
}
/*****************************Private*Routine******************************\
* GetRecentFiles
*
* Reads at most MAX_RECENT_FILES from vcdplyer.ini. Returns the number
* of files actually read. Updates the File menu to show the "recent" files.
*
\**************************************************************************/
int
GetRecentFiles(
int iLastCount
)
{
int i;
TCHAR FileName[MAX_PATH];
TCHAR szKey[32];
HMENU hSubMenu;
//
// Delete the files from the menu
//
hSubMenu = GetSubMenu(GetMenu(hwndApp), 0);
// Delete the separator at slot 3 and all the other recent file entries
if(iLastCount != 0)
{
DeleteMenu(hSubMenu, 3, MF_BYPOSITION);
for(i = 1; i <= iLastCount; i++)
{
DeleteMenu(hSubMenu, ID_RECENT_FILE_BASE + i, MF_BYCOMMAND);
}
}
for(i = 1; i <= MAX_RECENT_FILES; i++)
{
DWORD len;
TCHAR szMenuName[MAX_PATH + 3];
wsprintf(szKey, TEXT("File %d"), i);
len = ProfileStringIn(szKey, TEXT(""), FileName, MAX_PATH * sizeof(TCHAR));
if(len == 0)
{
i = i - 1;
break;
}
lstrcpy(aRecentFiles[i - 1], FileName);
wsprintf(szMenuName, TEXT("&%d %s"), i, FileName);
if(i == 1)
{
InsertMenu(hSubMenu, 3, MF_SEPARATOR | MF_BYPOSITION, (UINT)-1, NULL);
}
InsertMenu(hSubMenu, 3 + i, MF_STRING | MF_BYPOSITION,
ID_RECENT_FILE_BASE + i, szMenuName);
}
//
// i is the number of recent files in the array.
//
return i;
}
/*****************************Private*Routine******************************\
* SetRecentFiles
*
* Writes the most recent files to the vcdplyer.ini file. Purges the oldest
* file if necessary.
*
\**************************************************************************/
int
SetRecentFiles(
TCHAR *FileName, // File name to add
int iCount // Current count of files
)
{
TCHAR FullPathFileName[MAX_PATH];
TCHAR *lpFile;
TCHAR szKey[32];
int iCountNew;
int i;
//
// Check for dupes - we don't allow them !
//
for(i = 0; i < iCount; i++)
{
if(0 == lstrcmpi(FileName, aRecentFiles[i]))
{
return iCount;
}
}
//
// Throw away the oldest entry
//
MoveMemory(&aRecentFiles[1], &aRecentFiles[0],
sizeof(aRecentFiles) - sizeof(aRecentFiles[1]));
//
// Copy in the full path of the new file.
//
GetFullPathName(FileName, MAX_PATH, FullPathFileName, &lpFile);
lstrcpy(aRecentFiles[0], FullPathFileName);
//
// Update the count of files, saturate to MAX_RECENT_FILES.
//
iCountNew = min(iCount + 1, MAX_RECENT_FILES);
//
// Clear the old stuff and the write out the recent files to disk
//
for(i = 1; i <= iCountNew; i++)
{
wsprintf(szKey, TEXT("File %d"), i);
ProfileStringOut(szKey, aRecentFiles[i - 1]);
}
//
// Update the file menu
//
GetRecentFiles(iCount);
return iCountNew; // the updated count of files.
}