mirror of
https://github.com/XLabsProject/s1x-client.git
synced 2023-08-02 15:02:12 +02:00
Prepare custom texture support #185
This commit is contained in:
parent
eaca589729
commit
43649ce612
37
src/client/component/images.cpp
Normal file
37
src/client/component/images.cpp
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
#include <std_include.hpp>
|
||||||
|
#include "loader/component_loader.hpp"
|
||||||
|
|
||||||
|
#include "game/game.hpp"
|
||||||
|
|
||||||
|
#include <utils/hook.hpp>
|
||||||
|
|
||||||
|
namespace images
|
||||||
|
{
|
||||||
|
namespace
|
||||||
|
{
|
||||||
|
utils::hook::detour load_texture_hook;
|
||||||
|
|
||||||
|
static_assert(sizeof(game::GfxImage) == 104);
|
||||||
|
static_assert(offsetof(game::GfxImage, name) == (sizeof(game::GfxImage) - sizeof(void*)));
|
||||||
|
static_assert(offsetof(game::GfxImage, texture) == 56);
|
||||||
|
|
||||||
|
void load_texture_stub(game::GfxImageLoadDef** load_def, game::GfxImage* image)
|
||||||
|
{
|
||||||
|
printf("Loading image: %s\n", image->name);
|
||||||
|
load_texture_hook.invoke(load_def, image);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class component final : public component_interface
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
void post_unpack() override
|
||||||
|
{
|
||||||
|
if (!game::environment::is_mp()) return;
|
||||||
|
|
||||||
|
load_texture_hook.create(0x1405A21F0, load_texture_stub);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
REGISTER_COMPONENT(images::component)
|
@ -1,4 +1,5 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
#include <d3d11.h>
|
||||||
|
|
||||||
#define PROTOCOL 1
|
#define PROTOCOL 1
|
||||||
|
|
||||||
@ -1225,6 +1226,62 @@ namespace game
|
|||||||
const char* buffer;
|
const char* buffer;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct GfxImageLoadDef
|
||||||
|
{
|
||||||
|
char levelCount;
|
||||||
|
char numElements;
|
||||||
|
char pad[2];
|
||||||
|
int flags;
|
||||||
|
int format;
|
||||||
|
int resourceSize;
|
||||||
|
char data[1];
|
||||||
|
};
|
||||||
|
|
||||||
|
union $3FA29451CE6F1FA138A5ABAB84BE9676
|
||||||
|
{
|
||||||
|
ID3D11Texture1D *linemap;
|
||||||
|
ID3D11Texture2D *map;
|
||||||
|
ID3D11Texture3D *volmap;
|
||||||
|
ID3D11Texture2D *cubemap;
|
||||||
|
GfxImageLoadDef *loadDef;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct GfxTexture
|
||||||
|
{
|
||||||
|
$3FA29451CE6F1FA138A5ABAB84BE9676 ___u0;
|
||||||
|
ID3D11ShaderResourceView *shaderView;
|
||||||
|
ID3D11ShaderResourceView *shaderViewAlternate;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct Picmip
|
||||||
|
{
|
||||||
|
char platform[2];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct CardMemory
|
||||||
|
{
|
||||||
|
int platform[2];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct GfxImage
|
||||||
|
{
|
||||||
|
char pad[36];
|
||||||
|
char mapType;
|
||||||
|
char semantic;
|
||||||
|
char category;
|
||||||
|
char flags;
|
||||||
|
Picmip picmip;
|
||||||
|
char track;
|
||||||
|
//CardMemory cardMemory;
|
||||||
|
unsigned short width;
|
||||||
|
unsigned short height;
|
||||||
|
unsigned short depth;
|
||||||
|
unsigned short numElements;
|
||||||
|
GfxTexture texture;
|
||||||
|
char pad2[16];
|
||||||
|
const char *name;
|
||||||
|
};
|
||||||
|
|
||||||
union XAssetHeader
|
union XAssetHeader
|
||||||
{
|
{
|
||||||
void* data;
|
void* data;
|
||||||
@ -1234,6 +1291,7 @@ namespace game
|
|||||||
ScriptFile* scriptfile;
|
ScriptFile* scriptfile;
|
||||||
StringTable* stringTable;
|
StringTable* stringTable;
|
||||||
LuaFile* luaFile;
|
LuaFile* luaFile;
|
||||||
|
GfxImage* image;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct XAsset
|
struct XAsset
|
||||||
|
@ -78,7 +78,7 @@ namespace utils::hook
|
|||||||
return static_cast<T*>(this->get_original());
|
return static_cast<T*>(this->get_original());
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename T, typename... Args>
|
template <typename T = void, typename... Args>
|
||||||
T invoke(Args ... args)
|
T invoke(Args ... args)
|
||||||
{
|
{
|
||||||
return static_cast<T(*)(Args ...)>(this->get_original())(args...);
|
return static_cast<T(*)(Args ...)>(this->get_original())(args...);
|
||||||
|
Loading…
Reference in New Issue
Block a user