SP maps.
This commit is contained in:
parent
81c049e192
commit
18cc328efc
@ -4,6 +4,7 @@ namespace Components
|
|||||||
{
|
{
|
||||||
bool AssetHandler::BypassState = false;
|
bool AssetHandler::BypassState = false;
|
||||||
std::map<Game::XAssetType, AssetHandler::Callback> AssetHandler::TypeCallbacks;
|
std::map<Game::XAssetType, AssetHandler::Callback> AssetHandler::TypeCallbacks;
|
||||||
|
std::vector<AssetHandler::RestrictCallback> AssetHandler::RestrictCallbacks;
|
||||||
|
|
||||||
Game::XAssetHeader AssetHandler::FindAsset(Game::XAssetType type, const char* filename)
|
Game::XAssetHeader AssetHandler::FindAsset(Game::XAssetType type, const char* filename)
|
||||||
{
|
{
|
||||||
@ -60,7 +61,6 @@ namespace Components
|
|||||||
jmp eax
|
jmp eax
|
||||||
|
|
||||||
finishFound:
|
finishFound:
|
||||||
|
|
||||||
pop edi
|
pop edi
|
||||||
pop esi
|
pop esi
|
||||||
pop ebp
|
pop ebp
|
||||||
@ -70,14 +70,65 @@ namespace Components
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool AssetHandler::IsAssetEligible(Game::XAssetType type, Game::XAssetHeader *asset)
|
||||||
|
{
|
||||||
|
const char* name = Game::DB_GetXAssetNameHandlers[type](asset);
|
||||||
|
if (!name) return false;
|
||||||
|
|
||||||
|
for (auto callback : AssetHandler::RestrictCallbacks)
|
||||||
|
{
|
||||||
|
if (!callback(type, *asset, name))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void __declspec(naked) AssetHandler::AddAssetStub()
|
||||||
|
{
|
||||||
|
__asm
|
||||||
|
{
|
||||||
|
push [esp + 8]
|
||||||
|
push [esp + 8]
|
||||||
|
call AssetHandler::IsAssetEligible
|
||||||
|
add esp, 08h
|
||||||
|
|
||||||
|
test al, al
|
||||||
|
jz doNotLoad
|
||||||
|
|
||||||
|
// push [esp + 8]
|
||||||
|
// push [esp + 8]
|
||||||
|
// call DoBeforeLoadAsset
|
||||||
|
// add esp, 08h
|
||||||
|
|
||||||
|
mov eax, [esp + 8]
|
||||||
|
sub esp, 14h
|
||||||
|
mov ecx, 5BB657h
|
||||||
|
jmp ecx
|
||||||
|
|
||||||
|
doNotLoad:
|
||||||
|
mov eax, [esp + 8]
|
||||||
|
retn
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void AssetHandler::On(Game::XAssetType type, AssetHandler::Callback callback)
|
void AssetHandler::On(Game::XAssetType type, AssetHandler::Callback callback)
|
||||||
{
|
{
|
||||||
AssetHandler::TypeCallbacks[type] = callback;
|
AssetHandler::TypeCallbacks[type] = callback;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AssetHandler::Restrict(RestrictCallback callback)
|
||||||
|
{
|
||||||
|
AssetHandler::RestrictCallbacks.push_back(callback);
|
||||||
|
}
|
||||||
|
|
||||||
AssetHandler::AssetHandler()
|
AssetHandler::AssetHandler()
|
||||||
{
|
{
|
||||||
Utils::Hook(Game::DB_FindXAssetHeader, AssetHandler::FindAssetStub).Install()->Quick();
|
Utils::Hook(Game::DB_FindXAssetHeader, AssetHandler::FindAssetStub).Install()->Quick();
|
||||||
|
|
||||||
|
Utils::Hook(0x5BB650, AssetHandler::AddAssetStub, HOOK_JUMP).Install()->Quick();
|
||||||
}
|
}
|
||||||
|
|
||||||
AssetHandler::~AssetHandler()
|
AssetHandler::~AssetHandler()
|
||||||
|
@ -4,19 +4,24 @@ namespace Components
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
typedef Game::XAssetHeader(*Callback)(Game::XAssetType, const char*);
|
typedef Game::XAssetHeader(*Callback)(Game::XAssetType, const char*);
|
||||||
|
typedef bool(*RestrictCallback)(Game::XAssetType type, Game::XAssetHeader asset, const char* name);
|
||||||
|
|
||||||
AssetHandler();
|
AssetHandler();
|
||||||
~AssetHandler();
|
~AssetHandler();
|
||||||
const char* GetName() { return "AssetHandler"; };
|
const char* GetName() { return "AssetHandler"; };
|
||||||
|
|
||||||
static void On(Game::XAssetType type, Callback callback);
|
static void On(Game::XAssetType type, Callback callback);
|
||||||
|
static void Restrict(RestrictCallback callback);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static bool BypassState;
|
static bool BypassState;
|
||||||
|
|
||||||
static Game::XAssetHeader FindAsset(Game::XAssetType type, const char* filename);
|
static Game::XAssetHeader FindAsset(Game::XAssetType type, const char* filename);
|
||||||
|
static bool IsAssetEligible(Game::XAssetType type, Game::XAssetHeader* asset);
|
||||||
static void FindAssetStub();
|
static void FindAssetStub();
|
||||||
|
static void AddAssetStub();
|
||||||
|
|
||||||
static std::map<Game::XAssetType, Callback> TypeCallbacks;
|
static std::map<Game::XAssetType, Callback> TypeCallbacks;
|
||||||
|
static std::vector<RestrictCallback> RestrictCallbacks;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -53,6 +53,18 @@ namespace Components
|
|||||||
FastFiles::ZonePaths.push_back(path);
|
FastFiles::ZonePaths.push_back(path);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string FastFiles::Current()
|
||||||
|
{
|
||||||
|
const char* file = (Utils::Hook::Get<char*>(0x112A680) + 4);
|
||||||
|
|
||||||
|
if ((int)file == 4)
|
||||||
|
{
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
return file;
|
||||||
|
}
|
||||||
|
|
||||||
FastFiles::FastFiles()
|
FastFiles::FastFiles()
|
||||||
{
|
{
|
||||||
// Redirect zone paths
|
// Redirect zone paths
|
||||||
@ -62,6 +74,27 @@ namespace Components
|
|||||||
Utils::Hook(0x506BC7, FastFiles::LoadDLCUIZones, HOOK_CALL).Install()->Quick();
|
Utils::Hook(0x506BC7, FastFiles::LoadDLCUIZones, HOOK_CALL).Install()->Quick();
|
||||||
Utils::Hook(0x60B4AC, FastFiles::LoadDLCUIZones, HOOK_CALL).Install()->Quick();
|
Utils::Hook(0x60B4AC, FastFiles::LoadDLCUIZones, HOOK_CALL).Install()->Quick();
|
||||||
|
|
||||||
|
// basic checks (hash jumps, both normal and playlist)
|
||||||
|
Utils::Hook::Nop(0x5B97A3, 2);
|
||||||
|
Utils::Hook::Nop(0x5BA493, 2);
|
||||||
|
|
||||||
|
Utils::Hook::Nop(0x5B991C, 2);
|
||||||
|
Utils::Hook::Nop(0x5BA60C, 2);
|
||||||
|
|
||||||
|
Utils::Hook::Nop(0x5B97B4, 2);
|
||||||
|
Utils::Hook::Nop(0x5BA4A4, 2);
|
||||||
|
|
||||||
|
// allow loading of IWffu (unsigned) files
|
||||||
|
Utils::Hook::Set<BYTE>(0x4158D9, 0xEB); // main function
|
||||||
|
Utils::Hook::Nop(0x4A1D97, 2); // DB_AuthLoad_InflateInit
|
||||||
|
|
||||||
|
// some other, unknown, check
|
||||||
|
Utils::Hook::Set<BYTE>(0x5B9912, 0xB8);
|
||||||
|
Utils::Hook::Set<DWORD>(0x5B9913, 1);
|
||||||
|
|
||||||
|
Utils::Hook::Set<BYTE>(0x5BA602, 0xB8);
|
||||||
|
Utils::Hook::Set<DWORD>(0x5BA603, 1);
|
||||||
|
|
||||||
// Add custom zone paths
|
// Add custom zone paths
|
||||||
FastFiles::AddZonePath("zone\\patch\\");
|
FastFiles::AddZonePath("zone\\patch\\");
|
||||||
FastFiles::AddZonePath("zone\\dlc\\");
|
FastFiles::AddZonePath("zone\\dlc\\");
|
||||||
|
@ -8,6 +8,7 @@ namespace Components
|
|||||||
const char* GetName() { return "FastFiles"; };
|
const char* GetName() { return "FastFiles"; };
|
||||||
|
|
||||||
static void AddZonePath(std::string path);
|
static void AddZonePath(std::string path);
|
||||||
|
static std::string Current();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static std::vector<std::string> ZonePaths;
|
static std::vector<std::string> ZonePaths;
|
||||||
|
@ -7,6 +7,7 @@ namespace Components
|
|||||||
void Loader::Initialize()
|
void Loader::Initialize()
|
||||||
{
|
{
|
||||||
Loader::Register(new Dvar());
|
Loader::Register(new Dvar());
|
||||||
|
Loader::Register(new Maps());
|
||||||
Loader::Register(new Menus());
|
Loader::Register(new Menus());
|
||||||
Loader::Register(new Party());
|
Loader::Register(new Party());
|
||||||
Loader::Register(new Colors());
|
Loader::Register(new Colors());
|
||||||
|
@ -21,6 +21,7 @@ namespace Components
|
|||||||
}
|
}
|
||||||
|
|
||||||
#include "Dvar.hpp"
|
#include "Dvar.hpp"
|
||||||
|
#include "Maps.hpp"
|
||||||
#include "Menus.hpp"
|
#include "Menus.hpp"
|
||||||
#include "Colors.hpp"
|
#include "Colors.hpp"
|
||||||
#include "Logger.hpp"
|
#include "Logger.hpp"
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
namespace Components
|
namespace Components
|
||||||
{
|
{
|
||||||
|
Dvar::Var Localization::UseLocalization;
|
||||||
std::map<std::string, std::string> Localization::LocalizeMap;
|
std::map<std::string, std::string> Localization::LocalizeMap;
|
||||||
|
|
||||||
void Localization::Set(const char* key, const char* value)
|
void Localization::Set(const char* key, const char* value)
|
||||||
@ -11,6 +12,8 @@ namespace Components
|
|||||||
|
|
||||||
const char* Localization::Get(const char* key)
|
const char* Localization::Get(const char* key)
|
||||||
{
|
{
|
||||||
|
if (!Localization::UseLocalization.Get<bool>()) return key;
|
||||||
|
|
||||||
if (Localization::LocalizeMap.find(key) != Localization::LocalizeMap.end())
|
if (Localization::LocalizeMap.find(key) != Localization::LocalizeMap.end())
|
||||||
{
|
{
|
||||||
return Localization::LocalizeMap[key].data();
|
return Localization::LocalizeMap[key].data();
|
||||||
@ -30,7 +33,8 @@ namespace Components
|
|||||||
{
|
{
|
||||||
Utils::Hook(0x629B90, Localization::Get, HOOK_JUMP).Install()->Quick();
|
Utils::Hook(0x629B90, Localization::Get, HOOK_JUMP).Install()->Quick();
|
||||||
|
|
||||||
Localization::Set("MENU_MULTIPLAYER_CAPS", "^5Fotze");
|
//Localization::Set("MENU_MULTIPLAYER_CAPS", "^5Fotze");
|
||||||
|
Localization::UseLocalization = Dvar::Var::Register<bool>("ui_localize", true, Game::dvar_flag::DVAR_FLAG_NONE, "Use localization strings");
|
||||||
}
|
}
|
||||||
|
|
||||||
Localization::~Localization()
|
Localization::~Localization()
|
||||||
|
@ -12,5 +12,6 @@ namespace Components
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
static std::map<std::string, std::string> LocalizeMap;
|
static std::map<std::string, std::string> LocalizeMap;
|
||||||
|
static Dvar::Var UseLocalization;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
104
iw4/Components/Maps.cpp
Normal file
104
iw4/Components/Maps.cpp
Normal file
@ -0,0 +1,104 @@
|
|||||||
|
#include "..\STDInclude.hpp"
|
||||||
|
|
||||||
|
namespace Components
|
||||||
|
{
|
||||||
|
void* Maps::WorldMP = 0;
|
||||||
|
void* Maps::WorldSP = 0;
|
||||||
|
|
||||||
|
void Maps::GetBSPName(char* buffer, size_t size, const char* format, const char* mapname)
|
||||||
|
{
|
||||||
|
if (_strnicmp("mp_", mapname, 3))
|
||||||
|
{
|
||||||
|
format = "maps/%s.d3dbsp";
|
||||||
|
|
||||||
|
Utils::Hook::Set<void*>(0x4D90B7, (char*)Maps::WorldSP + 52);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Utils::Hook::Set<void*>(0x4D90B7, (char*)Maps::WorldMP + 4);
|
||||||
|
}
|
||||||
|
|
||||||
|
_snprintf(buffer, size, format, mapname);
|
||||||
|
}
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
char unknown[16];
|
||||||
|
} xAssetEntry_t;
|
||||||
|
|
||||||
|
static xAssetEntry_t xEntries[789312];
|
||||||
|
|
||||||
|
void ReallocXAssetEntries()
|
||||||
|
{
|
||||||
|
int newsize = 516 * 2048;
|
||||||
|
//newEnts = malloc(newsize);
|
||||||
|
|
||||||
|
// get (obfuscated) memory locations
|
||||||
|
unsigned int origMin = 0x134CAD8;
|
||||||
|
unsigned int origMax = 0x134CAE8;
|
||||||
|
|
||||||
|
unsigned int difference = (unsigned int)xEntries - origMin;
|
||||||
|
|
||||||
|
// scan the .text memory
|
||||||
|
char* scanMin = (char*)0x401000;
|
||||||
|
char* scanMax = (char*)0x6D7000;
|
||||||
|
char* current = scanMin;
|
||||||
|
|
||||||
|
for (; current < scanMax; current += 1) {
|
||||||
|
unsigned int* intCur = (unsigned int*)current;
|
||||||
|
|
||||||
|
// if the address points to something within our range of interest
|
||||||
|
if (*intCur == origMin || *intCur == origMax) {
|
||||||
|
// patch it
|
||||||
|
*intCur += difference;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
*(DWORD*)0x5BAEB0 = 789312;
|
||||||
|
}
|
||||||
|
|
||||||
|
Maps::Maps()
|
||||||
|
{
|
||||||
|
// hunk size (was 300 MiB)
|
||||||
|
Utils::Hook::Set<DWORD>(0x64A029, 0x1C200000); // 450 MiB
|
||||||
|
Utils::Hook::Set<DWORD>(0x64A057, 0x1C200000);
|
||||||
|
|
||||||
|
// Intercept BSP name resolving
|
||||||
|
Utils::Hook(0x4C5979, Maps::GetBSPName, HOOK_CALL).Install()->Quick();
|
||||||
|
|
||||||
|
Maps::WorldSP = Game::ReallocateAssetPool(Game::XAssetType::ASSET_TYPE_GAME_MAP_SP, 1);
|
||||||
|
Maps::WorldMP = Utils::Hook::Get<char*>(0x4D90B7) - 4;
|
||||||
|
|
||||||
|
Game::ReallocateAssetPool(Game::XAssetType::ASSET_TYPE_IMAGE, 7168);
|
||||||
|
Game::ReallocateAssetPool(Game::XAssetType::ASSET_TYPE_LOADED_SOUND, 2700);
|
||||||
|
Game::ReallocateAssetPool(Game::XAssetType::ASSET_TYPE_FX, 1200);
|
||||||
|
Game::ReallocateAssetPool(Game::XAssetType::ASSET_TYPE_LOCALIZE, 14000);
|
||||||
|
Game::ReallocateAssetPool(Game::XAssetType::ASSET_TYPE_XANIM, 8192);
|
||||||
|
Game::ReallocateAssetPool(Game::XAssetType::ASSET_TYPE_XMODEL, 5125);
|
||||||
|
Game::ReallocateAssetPool(Game::XAssetType::ASSET_TYPE_PHYSPRESET, 128);
|
||||||
|
Game::ReallocateAssetPool(Game::XAssetType::ASSET_TYPE_PIXELSHADER, 10000);
|
||||||
|
Game::ReallocateAssetPool(Game::XAssetType::ASSET_TYPE_VERTEXSHADER, 3072);
|
||||||
|
Game::ReallocateAssetPool(Game::XAssetType::ASSET_TYPE_MATERIAL, 8192);
|
||||||
|
Game::ReallocateAssetPool(Game::XAssetType::ASSET_TYPE_VERTEXDECL, 196);
|
||||||
|
Game::ReallocateAssetPool(Game::XAssetType::ASSET_TYPE_WEAPON, 2400);
|
||||||
|
Game::ReallocateAssetPool(Game::XAssetType::ASSET_TYPE_STRINGTABLE, 800);
|
||||||
|
|
||||||
|
ReallocXAssetEntries();
|
||||||
|
|
||||||
|
AssetHandler::Restrict([] (Game::XAssetType type, Game::XAssetHeader asset, const char* name) -> bool
|
||||||
|
{
|
||||||
|
if (type == Game::XAssetType::ASSET_TYPE_MAP_ENTS)
|
||||||
|
{
|
||||||
|
static std::string mapEntities;
|
||||||
|
FileSystem::File ents(Utils::VA("%s.ents", name));
|
||||||
|
if (ents.Exists())
|
||||||
|
{
|
||||||
|
mapEntities = ents.GetBuffer();
|
||||||
|
asset.mapEnts->entitystring = mapEntities.data();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
15
iw4/Components/Maps.hpp
Normal file
15
iw4/Components/Maps.hpp
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
namespace Components
|
||||||
|
{
|
||||||
|
class Maps : public Component
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Maps();
|
||||||
|
const char* GetName() { return "Maps"; };
|
||||||
|
|
||||||
|
private:
|
||||||
|
static void* WorldMP;
|
||||||
|
static void* WorldSP;
|
||||||
|
|
||||||
|
static void GetBSPName(char* buffer, size_t size, const char* format, const char* mapname);
|
||||||
|
};
|
||||||
|
}
|
@ -153,8 +153,6 @@ namespace Components
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
OutputDebugStringA(Utils::VA("%X %s", menu->window.name, menu->window.name));
|
|
||||||
|
|
||||||
return menu;
|
return menu;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -69,8 +69,5 @@ namespace Components
|
|||||||
Utils::Hook::Nop(0x6830B1, 20);
|
Utils::Hook::Nop(0x6830B1, 20);
|
||||||
Utils::Hook(0x682EBF, QuickPatch::GetStatsID, HOOK_CALL).Install()->Quick();
|
Utils::Hook(0x682EBF, QuickPatch::GetStatsID, HOOK_CALL).Install()->Quick();
|
||||||
Utils::Hook(0x6830B1, QuickPatch::GetStatsID, HOOK_CALL).Install()->Quick();
|
Utils::Hook(0x6830B1, QuickPatch::GetStatsID, HOOK_CALL).Install()->Quick();
|
||||||
|
|
||||||
// Why?
|
|
||||||
Game::ReallocateAssetPool(Game::XAssetType::ASSET_TYPE_WEAPON, 2400);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -15,6 +15,7 @@ namespace Game
|
|||||||
Com_Milliseconds_t Com_Milliseconds = (Com_Milliseconds_t)0x42A660;
|
Com_Milliseconds_t Com_Milliseconds = (Com_Milliseconds_t)0x42A660;
|
||||||
|
|
||||||
DB_FindXAssetHeader_t DB_FindXAssetHeader = (DB_FindXAssetHeader_t)0x407930;
|
DB_FindXAssetHeader_t DB_FindXAssetHeader = (DB_FindXAssetHeader_t)0x407930;
|
||||||
|
DB_GetXAssetNameHandler_t* DB_GetXAssetNameHandlers = (DB_GetXAssetNameHandler_t*)0x799328;
|
||||||
DB_GetXAssetSizeHandler_t* DB_GetXAssetSizeHandlers = (DB_GetXAssetSizeHandler_t*)0x799488;
|
DB_GetXAssetSizeHandler_t* DB_GetXAssetSizeHandlers = (DB_GetXAssetSizeHandler_t*)0x799488;
|
||||||
DB_LoadXAssets_t DB_LoadXAssets = (DB_LoadXAssets_t)0x4E5930;
|
DB_LoadXAssets_t DB_LoadXAssets = (DB_LoadXAssets_t)0x4E5930;
|
||||||
|
|
||||||
|
@ -27,6 +27,9 @@ namespace Game
|
|||||||
typedef XAssetHeader (__cdecl * DB_FindXAssetHeader_t)(XAssetType type, const char* filename);
|
typedef XAssetHeader (__cdecl * DB_FindXAssetHeader_t)(XAssetType type, const char* filename);
|
||||||
extern DB_FindXAssetHeader_t DB_FindXAssetHeader;
|
extern DB_FindXAssetHeader_t DB_FindXAssetHeader;
|
||||||
|
|
||||||
|
typedef const char* (__cdecl * DB_GetXAssetNameHandler_t)(Game::XAssetHeader* asset);
|
||||||
|
extern DB_GetXAssetNameHandler_t* DB_GetXAssetNameHandlers;
|
||||||
|
|
||||||
typedef int(__cdecl * DB_GetXAssetSizeHandler_t)();
|
typedef int(__cdecl * DB_GetXAssetSizeHandler_t)();
|
||||||
extern DB_GetXAssetSizeHandler_t* DB_GetXAssetSizeHandlers;
|
extern DB_GetXAssetSizeHandler_t* DB_GetXAssetSizeHandlers;
|
||||||
|
|
||||||
|
@ -858,6 +858,12 @@ namespace Game
|
|||||||
const char* name;
|
const char* name;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct MapEnts
|
||||||
|
{
|
||||||
|
const char* name;
|
||||||
|
const char* entitystring;
|
||||||
|
};
|
||||||
|
|
||||||
union XAssetHeader
|
union XAssetHeader
|
||||||
{
|
{
|
||||||
void *data;
|
void *data;
|
||||||
@ -866,5 +872,12 @@ namespace Game
|
|||||||
Material *material;
|
Material *material;
|
||||||
snd_alias_list_t *aliasList;
|
snd_alias_list_t *aliasList;
|
||||||
localizedEntry_s *localize;
|
localizedEntry_s *localize;
|
||||||
|
MapEnts* mapEnts;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct XAsset
|
||||||
|
{
|
||||||
|
XAssetType type;
|
||||||
|
XAssetHeader header;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -61,6 +61,7 @@
|
|||||||
<ClInclude Include="Components\Loader.hpp" />
|
<ClInclude Include="Components\Loader.hpp" />
|
||||||
<ClInclude Include="Components\Localization.hpp" />
|
<ClInclude Include="Components\Localization.hpp" />
|
||||||
<ClInclude Include="Components\Logger.hpp" />
|
<ClInclude Include="Components\Logger.hpp" />
|
||||||
|
<ClInclude Include="Components\Maps.hpp" />
|
||||||
<ClInclude Include="Components\Materials.hpp" />
|
<ClInclude Include="Components\Materials.hpp" />
|
||||||
<ClInclude Include="Components\Menus.hpp" />
|
<ClInclude Include="Components\Menus.hpp" />
|
||||||
<ClInclude Include="Components\MusicalTalent.hpp" />
|
<ClInclude Include="Components\MusicalTalent.hpp" />
|
||||||
@ -96,6 +97,7 @@
|
|||||||
<ClCompile Include="Components\Loader.cpp" />
|
<ClCompile Include="Components\Loader.cpp" />
|
||||||
<ClCompile Include="Components\Localization.cpp" />
|
<ClCompile Include="Components\Localization.cpp" />
|
||||||
<ClCompile Include="Components\Logger.cpp" />
|
<ClCompile Include="Components\Logger.cpp" />
|
||||||
|
<ClCompile Include="Components\Maps.cpp" />
|
||||||
<ClCompile Include="Components\Materials.cpp" />
|
<ClCompile Include="Components\Materials.cpp" />
|
||||||
<ClCompile Include="Components\Menus.cpp" />
|
<ClCompile Include="Components\Menus.cpp" />
|
||||||
<ClCompile Include="Components\MusicalTalent.cpp" />
|
<ClCompile Include="Components\MusicalTalent.cpp" />
|
||||||
|
@ -125,6 +125,9 @@
|
|||||||
<ClCompile Include="Components\Localization.cpp">
|
<ClCompile Include="Components\Localization.cpp">
|
||||||
<Filter>Source\Components\Modules</Filter>
|
<Filter>Source\Components\Modules</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="Components\Maps.cpp">
|
||||||
|
<Filter>Source\Components\Modules</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="Steam\Interfaces\SteamUser.hpp">
|
<ClInclude Include="Steam\Interfaces\SteamUser.hpp">
|
||||||
@ -226,5 +229,8 @@
|
|||||||
<ClInclude Include="Components\Localization.hpp">
|
<ClInclude Include="Components\Localization.hpp">
|
||||||
<Filter>Source\Components\Modules</Filter>
|
<Filter>Source\Components\Modules</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="Components\Maps.hpp">
|
||||||
|
<Filter>Source\Components\Modules</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
Loading…
x
Reference in New Issue
Block a user