#pragma once // taken from ttf2sdk typedef void* FileHandle_t; struct VPKData; 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; }; extern IFileSystem* g_pFilesystem; std::string ReadVPKFile(const char* path); std::string ReadVPKOriginalFile(const char* path);