79 lines
1.8 KiB
C++
79 lines
1.8 KiB
C++
#pragma once
|
|
#include "sourceinterface.h"
|
|
|
|
// taken from ttf2sdk
|
|
typedef void* FileHandle_t;
|
|
|
|
#pragma pack(push, 1)
|
|
struct VPKFileEntry
|
|
{
|
|
char* directory;
|
|
char* filename;
|
|
char* extension;
|
|
unsigned char unknown[0x38];
|
|
};
|
|
#pragma pack(pop)
|
|
|
|
#pragma pack(push, 1)
|
|
struct VPKData
|
|
{
|
|
unsigned char unknown[5];
|
|
char path[255];
|
|
unsigned char unknown2[0x134];
|
|
int32_t numEntries;
|
|
unsigned char unknown3[12];
|
|
VPKFileEntry* entries;
|
|
};
|
|
#pragma pack(pop)
|
|
|
|
enum SearchPathAdd_t
|
|
{
|
|
PATH_ADD_TO_HEAD, // First path searched
|
|
PATH_ADD_TO_TAIL, // Last path searched
|
|
};
|
|
|
|
class CSearchPath
|
|
{
|
|
public:
|
|
unsigned char unknown[0x18];
|
|
const char* debugPath;
|
|
};
|
|
|
|
class IFileSystem
|
|
{
|
|
public:
|
|
struct VTable
|
|
{
|
|
void* unknown[10];
|
|
void (*AddSearchPath)(IFileSystem* fileSystem, const char* pPath, const char* pathID, SearchPathAdd_t addType);
|
|
void* unknown2[84];
|
|
bool (*ReadFromCache)(IFileSystem* fileSystem, const char* path, void* result);
|
|
void* unknown3[15];
|
|
VPKData* (*MountVPK)(IFileSystem* fileSystem, const char* vpkPath);
|
|
};
|
|
|
|
struct VTable2
|
|
{
|
|
int (*Read)(IFileSystem::VTable2** fileSystem, void* pOutput, int size, FileHandle_t file);
|
|
void* unknown[1];
|
|
FileHandle_t (*Open)(
|
|
IFileSystem::VTable2** fileSystem, const char* pFileName, const char* pOptions, const char* pathID, int64_t unknown);
|
|
void (*Close)(IFileSystem* fileSystem, FileHandle_t file);
|
|
long long (*Seek)(IFileSystem::VTable2** fileSystem, FileHandle_t file, long long offset, long long whence);
|
|
void* unknown2[5];
|
|
bool (*FileExists)(IFileSystem::VTable2** fileSystem, const char* pFileName, const char* pPathID);
|
|
};
|
|
|
|
VTable* m_vtable;
|
|
VTable2* m_vtable2;
|
|
};
|
|
|
|
// use the R2 namespace for game funcs
|
|
namespace R2
|
|
{
|
|
extern SourceInterface<IFileSystem>* g_pFilesystem;
|
|
|
|
std::string ReadVPKFile(const char* path);
|
|
std::string ReadVPKOriginalFile(const char* path);
|
|
} // namespace R2
|