94 lines
2.9 KiB
C
94 lines
2.9 KiB
C
|
#ifndef VTABLEMANAGER_H
|
||
|
#define VTABLEMANAGER_H
|
||
|
|
||
|
#include "Trampolines.h"
|
||
|
|
||
|
#include "CVector.h"
|
||
|
#include "hooks.h"
|
||
|
#include "VTableEntries.h"
|
||
|
|
||
|
/* !!WARNING: HERE BE DRAGONS
|
||
|
|
||
|
.~))>>
|
||
|
.~)>>
|
||
|
.~))))>>>
|
||
|
.~))>> ___
|
||
|
.~))>>)))>> .-~))>>
|
||
|
.~)))))>> .-~))>>)>
|
||
|
.~)))>>))))>> .-~)>>)>
|
||
|
) .~))>>))))>> .-~)))))>>)>
|
||
|
( )@@*) //)>)))))) .-~))))>>)>
|
||
|
).@(@@ //))>>))) .-~))>>)))))>>)>
|
||
|
(( @.@). //))))) .-~)>>)))))>>)>
|
||
|
)) )@@*.@@ ) //)>))) //))))))>>))))>>)>
|
||
|
(( ((@@@.@@ |/))))) //)))))>>)))>>)>
|
||
|
)) @@*. )@@ ) (\_(\-\b |))>)) //)))>>)))))))>>)>
|
||
|
(( @@@(.@(@ . _/`-` ~|b |>))) //)>>)))))))>>)>
|
||
|
)* @@@ )@* (@) (@) /\b|))) //))))))>>))))>>
|
||
|
(( @. )@( @ . _/ / / \b)) //))>>)))))>>>_._
|
||
|
)@@ (@@*)@@. (6///6)- / ^ \b)//))))))>>)))>> ~~-.
|
||
|
( @jgs@@. @@@.*@_ VvvvvV// ^ \b/)>>))))>> _. `bb
|
||
|
((@@ @@@*.(@@ . - | o |' \ ( ^ \b)))>> .' b`,
|
||
|
((@@).*@@ )@ ) \^^^/ (( ^ ~)_ \ / b `,
|
||
|
(@@. (@@ ). `-' ((( ^ `\ \ \ \ \| b `.
|
||
|
(*.@* / (((( \| | | \ . b `.
|
||
|
/ / ((((( \ \ / _.-~\ Y, b ;
|
||
|
/ / / (((((( \ \.-~ _.`" _.-~`, b ;
|
||
|
/ / `(((((() ) (((((~ `, b ;
|
||
|
_/ _/ `"""/ /' ; b ;
|
||
|
_.-~_.-~ / /' _.'~bb _.'
|
||
|
((((~~ / /' _.'~bb.--~
|
||
|
(((( __.-~bb.-~
|
||
|
.' b .~~
|
||
|
:bb ,'
|
||
|
~~~~
|
||
|
*/
|
||
|
|
||
|
|
||
|
enum
|
||
|
{
|
||
|
HAM_UNSET = 0,
|
||
|
HAM_IGNORED,
|
||
|
HAM_HANDLED,
|
||
|
HAM_OVERRIDE,
|
||
|
HAM_SUPERCEDE
|
||
|
};
|
||
|
|
||
|
enum
|
||
|
{
|
||
|
HAM_TYPE_UNKNOWN = 0,
|
||
|
HAM_TYPE_CBASE,
|
||
|
HAM_TYPE_ENTVAR,
|
||
|
HAM_TYPE_EDICT,
|
||
|
HAM_TYPE_INT,
|
||
|
HAM_TYPE_FLOAT
|
||
|
};
|
||
|
|
||
|
enum
|
||
|
{
|
||
|
HAM_ERROR_BOUNDS = -2,
|
||
|
HAM_ERROR_TYPE = -1,
|
||
|
HAM_ERROR_NONE = 0
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
class VTableManager
|
||
|
{
|
||
|
public:
|
||
|
CVector<VTableUse *> UseEntries;
|
||
|
CVector<VTableTakeDamage *> TakeDamageEntries;
|
||
|
CVector<VTableBlocked *> BlockedEntries;
|
||
|
|
||
|
/* returns the original function */
|
||
|
void *InsertIntoVTable(void **vtable, int index, void *trampoline);
|
||
|
void Cleanup(void);
|
||
|
};
|
||
|
|
||
|
extern VTableManager VTMan;
|
||
|
|
||
|
//#include "VTableEntries.h"
|
||
|
|
||
|
#endif // VTABLEMANAGER_H
|