This repository has been archived on 2024-06-01. You can view files and clone it, but cannot push or open issues or pull requests.
cathook/include/hooks/HookedMethods.hpp
2018-05-15 21:32:56 +02:00

124 lines
5.3 KiB
C++

/*
Created by Jenny White on 28.04.18.
Copyright (c) 2018 nullworks. All rights reserved.
*/
#pragma once
#include "common.hpp"
#if ENABLE_VISUALS
union SDL_Event;
struct SDL_Window;
#endif
#define DECLARE_HOOKED_METHOD(name, rtype, ...) \
namespace types \
{ \
using name = rtype (*)(__VA_ARGS__); \
} \
namespace methods \
{ \
rtype name(__VA_ARGS__); \
} \
namespace original \
{ \
extern types::name name; \
}
#define DEFINE_HOOKED_METHOD(name, rtype, ...) \
types::name original::name{ nullptr }; \
rtype methods::name(__VA_ARGS__)
#define HOOK_ARGS(name) \
hooked_methods::methods::name, offsets::name(), \
&hooked_methods::original::name
namespace hooked_methods
{
// ClientMode
DECLARE_HOOKED_METHOD(CreateMove, bool, void *, float, CUserCmd *);
DECLARE_HOOKED_METHOD(LevelInit, void, void *, const char *);
DECLARE_HOOKED_METHOD(LevelShutdown, void, void *);
// ClientMode + 4
DECLARE_HOOKED_METHOD(FireGameEvent, void, void *, IGameEvent *);
// IBaseClient
DECLARE_HOOKED_METHOD(DispatchUserMessage, bool, void *, int, bf_read &);
DECLARE_HOOKED_METHOD(IN_KeyEvent, int, void *, int, ButtonCode_t,
const char *);
// IInput
DECLARE_HOOKED_METHOD(GetUserCmd, CUserCmd *, IInput *, int);
// INetChannel
DECLARE_HOOKED_METHOD(SendNetMsg, bool, INetChannel *, INetMessage &, bool,
bool);
DECLARE_HOOKED_METHOD(CanPacket, bool, INetChannel *);
DECLARE_HOOKED_METHOD(Shutdown, void, INetChannel *, const char *);
// ISteamFriends
DECLARE_HOOKED_METHOD(GetFriendPersonaName, const char *, ISteamFriends *,
CSteamID);
// IEngineVGui
DECLARE_HOOKED_METHOD(Paint, void, IEngineVGui *, PaintMode_t);
// IGameEventManager2
DECLARE_HOOKED_METHOD(FireEvent, bool, IGameEventManager2 *, IGameEvent *,
bool);
DECLARE_HOOKED_METHOD(FireEventClientSide, bool, IGameEventManager2 *,
IGameEvent *);
DECLARE_HOOKED_METHOD(IsPlayingTimeDemo, bool);
#if ENABLE_VISUALS
// ClientMode
DECLARE_HOOKED_METHOD(OverrideView, void, void *, CViewSetup *);
// g_IEngine
// IVModelRender
DECLARE_HOOKED_METHOD(DrawModelExecute, void, IVModelRender *,
const DrawModelState_t &, const ModelRenderInfo_t &,
matrix3x4_t *);
// IStudioRender
DECLARE_HOOKED_METHOD(BeginFrame, void, IStudioRender *);
// IBaseClient
DECLARE_HOOKED_METHOD(FrameStageNotify, void, void *, ClientFrameStage_t);
// vgui::IPanel
DECLARE_HOOKED_METHOD(PaintTraverse, void, vgui::IPanel *, unsigned int, bool,
bool);
// SDL
DECLARE_HOOKED_METHOD(SDL_GL_SwapWindow, void, SDL_Window *);
DECLARE_HOOKED_METHOD(SDL_PollEvent, int, SDL_Event *);
// IUniformRandomStream
DECLARE_HOOKED_METHOD(RandomInt, int, IUniformRandomStream *, int, int);
#endif
}
// TODO
// wontfix.club
#if 0
#if ENABLE_NULL_GRAPHICS
typedef ITexture *(*FindTexture_t)(void *, const char *, const char *, bool,
int);
typedef IMaterial *(*FindMaterialEx_t)(void *, const char *, const char *, int,
bool, const char *);
typedef IMaterial *(*FindMaterial_t)(void *, const char *, const char *, bool,
const char *);
/* 70 */ void ReloadTextures_null_hook(void *this_);
/* 71 */ void ReloadMaterials_null_hook(void *this_, const char *pSubString);
/* 73 */ IMaterial *FindMaterial_null_hook(void *this_,
char const *pMaterialName,
const char *pTextureGroupName,
bool complain,
const char *pComplainPrefix);
/* 81 */ ITexture *FindTexture_null_hook(void *this_, char const *pTextureName,
const char *pTextureGroupName,
bool complain,
int nAdditionalCreationFlags);
/* 121 */ void ReloadFilesInList_null_hook(void *this_,
IFileList *pFilesToReload);
/* 123 */ IMaterial *FindMaterialEx_null_hook(void *this_,
char const *pMaterialName,
const char *pTextureGroupName,
int nContext, bool complain,
const char *pComplainPrefix);
#endif
#endif