Link with RW libs

This commit is contained in:
Sergeanur 2020-04-11 18:37:20 +03:00
parent c307e72fa0
commit daceee593b
17 changed files with 457 additions and 3 deletions

View File

@ -1,5 +1,5 @@
workspace "re3"
configurations { "Debug", "Release", "ReleaseFH" }
configurations { "Debug", "Release", "ReleaseFH", "DebugRW", "ReleaseRW" }
location "build"
files { "src/*.*" }
@ -13,6 +13,7 @@ workspace "re3"
files { "src/objects/*.*" }
files { "src/peds/*.*" }
files { "src/render/*.*" }
files { "src/rw/*.*" }
files { "src/save/*.*" }
files { "src/skel/*.*" }
files { "src/skel/win/*.*" }
@ -32,6 +33,7 @@ workspace "re3"
includedirs { "src/objects" }
includedirs { "src/peds" }
includedirs { "src/render" }
includedirs { "src/rw" }
includedirs { "src/save/" }
includedirs { "src/skel/" }
includedirs { "src/skel/win" }
@ -47,6 +49,12 @@ workspace "re3"
libdirs { "dxsdk/lib" }
libdirs { "milessdk/lib" }
filter "configurations:DebugRW or configurations:ReleaseRW"
defines { "RWLIBS" }
libdirs { "rwsdk/lib/d3d8/release" }
links { "rwcore", "rpworld", "rpmatfx", "rpskin", "rphanim", "rtbmp" }
filter {}
pbcommands = {
"setlocal EnableDelayedExpansion",
@ -102,3 +110,15 @@ project "re3"
staticruntime "on"
targetextension ".asi"
setpaths("$(GTA_III_RE_DIR)/", "gta3.exe", "scripts/")
filter "configurations:DebugRW"
defines { "DEBUG" }
staticruntime "on"
symbols "On"
setpaths("$(GTA_III_RE_DIR)/", "gta3.exe", "plugins/")
filter "configurations:ReleaseRW"
defines { "NDEBUG" }
optimize "On"
staticruntime "on"
setpaths("$(GTA_III_RE_DIR)/", "gta3.exe", "plugins/")

View File

@ -74,9 +74,11 @@ inline uint32 ldb(uint32 p, uint32 s, uint32 w)
}
#ifndef RWLIBS
// little hack
extern void **rwengine;
#define RwEngineInstance (*rwengine)
#endif
#include "skeleton.h"
#include "Draw.h"

View File

@ -24,7 +24,11 @@
#include <list>
#ifndef RWLIBS
void **rwengine = *(void***)0x5A10E1;
#else
extern "C" int vsprintf(char* const _Buffer, char const* const _Format, va_list _ArgList);
#endif
DebugMenuAPI gDebugMenuAPI;

View File

@ -147,7 +147,11 @@ RwTexDictionaryGtaStreamRead2(RwStream *stream, RwTexDictionary *texDict)
}
#ifdef GTA_PC
#ifdef RWLIBS
extern "C" RwInt32 _rwD3D8FindCorrectRasterFormat(RwRasterType type, RwInt32 flags);
#else
WRAPPER RwInt32 _rwD3D8FindCorrectRasterFormat(RwRasterType type, RwInt32 flags) { EAXJMP(0x59A350); }
#endif
void
ReadVideoCardCapsFile(uint32 &cap32, uint32 &cap24, uint32 &cap16, uint32 &cap8)

View File

@ -11,7 +11,8 @@ typedef RwV3d *(*rwVectorsMultFn) (RwV3d * pointsOut,
const RwV3d * pointsIn,
RwInt32 numPoints,
const RwMatrix * matrix);
#ifndef RWLIBS
WRAPPER void _rwObjectHasFrameSetFrame(void* object, RwFrame* frame) { EAXJMP(0x5BC950); }
WRAPPER RpAtomic* AtomicDefaultRenderCallBack(RpAtomic* atomic) { EAXJMP(0x59E690); }
@ -412,4 +413,427 @@ WRAPPER RxNodeDefinition* RxNodeDefinitionGetAtomicEnumerateLights() { EAXJMP(0x
WRAPPER RxNodeDefinition* RxNodeDefinitionGetMaterialScatter() { EAXJMP(0x5DDAA0); }
WRAPPER RxNodeDefinition* RxNodeDefinitionGetLight() { EAXJMP(0x5DF040); }
WRAPPER RxNodeDefinition* RxNodeDefinitionGetPostLight() { EAXJMP(0x5DF560); }
WRAPPER void RxD3D8AllInOneSetRenderCallBack(RxPipelineNode* node, RxD3D8AllInOneRenderCallBack callback) { EAXJMP(0x5DFC60); }
WRAPPER void RxD3D8AllInOneSetRenderCallBack(RxPipelineNode* node, RxD3D8AllInOneRenderCallBack callback) { EAXJMP(0x5DFC60); }
#else
extern "C"
{
void* _rwFrameOpen(void* instance, RwInt32 offset, RwInt32 size);
void* _rwFrameClose(void* instance, RwInt32 offset, RwInt32 size);
RwFrame* _rwFrameCloneAndLinkClones(RwFrame* root);
RwFrame* _rwFramePurgeClone(RwFrame* root);
RwBool RwFrameDirty(RwFrame const* frame);
void _rwFrameInit(RwFrame* frame);
RwBool _rwMatrixSetMultFn(rwMatrixMultFn multMat);
void* _rwMatrixClose(void* instance, RwInt32 offset, RwInt32 size);
void* _rwMatrixOpen(void* instance, RwInt32 offset, RwInt32 size);
RwBool _rwVectorSetMultFn(rwVectorMultFn multPoint, rwVectorsMultFn multPoints, rwVectorMultFn multVector, rwVectorsMultFn multVectors);
void* _rwVectorClose(void* instance, RwInt32 offset, RwInt32 size);
void* _rwVectorOpen(void* instance, RwInt32 offset, RwInt32 size);
RwBool _rwPluginRegistryOpen();
RwBool _rwPluginRegistryClose();
}
STARTPATCHES
InjectHook(0x5BC950, &_rwObjectHasFrameSetFrame, PATCH_JUMP);
InjectHook(0x59E690, &AtomicDefaultRenderCallBack, PATCH_JUMP);
InjectHook(0x59E6C0, &_rpAtomicResyncInterpolatedSphere, PATCH_JUMP);
InjectHook(0x59E800, &RpAtomicGetWorldBoundingSphere, PATCH_JUMP);
InjectHook(0x59ED50, &RpClumpGetNumAtomics, PATCH_JUMP);
InjectHook(0x59ED80, &RpClumpRender, PATCH_JUMP);
InjectHook(0x59EDD0, &RpClumpForAllAtomics, PATCH_JUMP);
InjectHook(0x59EE10, &RpClumpForAllCameras, PATCH_JUMP);
InjectHook(0x59EE60, &RpClumpForAllLights, PATCH_JUMP);
InjectHook(0x59EEB0, &RpAtomicCreate, PATCH_JUMP);
InjectHook(0x59EFA0, &RpAtomicSetGeometry, PATCH_JUMP);
InjectHook(0x59F020, &RpAtomicDestroy, PATCH_JUMP);
InjectHook(0x59F0A0, &RpAtomicClone, PATCH_JUMP);
InjectHook(0x59F1B0, &RpClumpClone, PATCH_JUMP);
InjectHook(0x59F490, &RpClumpCreate, PATCH_JUMP);
InjectHook(0x59F500, &RpClumpDestroy, PATCH_JUMP);
InjectHook(0x59F680, &RpClumpAddAtomic, PATCH_JUMP);
InjectHook(0x59F6B0, &RpClumpRemoveAtomic, PATCH_JUMP);
InjectHook(0x59F6E0, &RpClumpRemoveLight, PATCH_JUMP);
InjectHook(0x59FC50, &RpClumpStreamRead, PATCH_JUMP);
InjectHook(0x5A0510, &RpAtomicRegisterPlugin, PATCH_JUMP);
InjectHook(0x5A0540, &RpClumpRegisterPlugin, PATCH_JUMP);
InjectHook(0x5A0570, &RpAtomicRegisterPluginStream, PATCH_JUMP);
InjectHook(0x5A05A0, &RpAtomicSetStreamAlwaysCallBack, PATCH_JUMP);
InjectHook(0x5A05C0, &RpAtomicSetStreamRightsCallBack, PATCH_JUMP);
InjectHook(0x5A05E0, &RpAtomicGetPluginOffset, PATCH_JUMP);
InjectHook(0x5A0600, &RpAtomicSetFrame, PATCH_JUMP);
InjectHook(0x5A0DC0, &RwEngineRegisterPlugin, PATCH_JUMP);
InjectHook(0x5A0DF0, &RwEngineGetPluginOffset, PATCH_JUMP);
InjectHook(0x5A0E10, &RwEngineGetNumSubSystems, PATCH_JUMP);
InjectHook(0x5A0E40, &RwEngineGetSubSystemInfo, PATCH_JUMP);
InjectHook(0x5A0E70, &RwEngineGetCurrentSubSystem, PATCH_JUMP);
InjectHook(0x5A0EA0, &RwEngineSetSubSystem, PATCH_JUMP);
InjectHook(0x5A0ED0, &RwEngineGetNumVideoModes, PATCH_JUMP);
InjectHook(0x5A0F00, &RwEngineGetVideoModeInfo, PATCH_JUMP);
InjectHook(0x5A0F30, &RwEngineGetCurrentVideoMode, PATCH_JUMP);
InjectHook(0x5A0F60, &RwEngineSetVideoMode, PATCH_JUMP);
InjectHook(0x5A0F90, &RwEngineStop, PATCH_JUMP);
InjectHook(0x5A0FE0, &RwEngineStart, PATCH_JUMP);
InjectHook(0x5A1070, &RwEngineClose, PATCH_JUMP);
InjectHook(0x5A10E0, &RwEngineOpen, PATCH_JUMP);
InjectHook(0x5A1290, &RwEngineTerm, PATCH_JUMP);
InjectHook(0x5A12D0, &RwEngineInit, PATCH_JUMP);
InjectHook(0x5A15E0, &_rwFrameOpen, PATCH_JUMP);
InjectHook(0x5A1650, &_rwFrameClose, PATCH_JUMP);
InjectHook(0x5A1690, &_rwFrameCloneAndLinkClones, PATCH_JUMP);
InjectHook(0x5A1880, &_rwFramePurgeClone, PATCH_JUMP);
InjectHook(0x5A1930, &RwFrameDirty, PATCH_JUMP);
InjectHook(0x5A1950, &_rwFrameInit, PATCH_JUMP);
InjectHook(0x5A1A00, &RwFrameCreate, PATCH_JUMP);
InjectHook(0x5A1A30, &RwFrameDestroy, PATCH_JUMP);
InjectHook(0x5A1BF0, &RwFrameDestroyHierarchy, PATCH_JUMP);
InjectHook(0x5A1C60, &RwFrameUpdateObjects, PATCH_JUMP);
InjectHook(0x5A1CE0, &RwFrameGetLTM, PATCH_JUMP);
InjectHook(0x5A1D00, &RwFrameAddChild, PATCH_JUMP);
InjectHook(0x5A1ED0, &RwFrameRemoveChild, PATCH_JUMP);
InjectHook(0x5A1FC0, &RwFrameForAllChildren, PATCH_JUMP);
InjectHook(0x5A2000, &RwFrameTranslate, PATCH_JUMP);
InjectHook(0x5A20A0, &RwFrameScale, PATCH_JUMP);
InjectHook(0x5A2140, &RwFrameTransform, PATCH_JUMP);
InjectHook(0x5A21E0, &RwFrameRotate, PATCH_JUMP);
InjectHook(0x5A2280, &RwFrameSetIdentity, PATCH_JUMP);
InjectHook(0x5A2340, &RwFrameForAllObjects, PATCH_JUMP);
InjectHook(0x5A2380, &RwFrameRegisterPlugin, PATCH_JUMP);
InjectHook(0x5A23B0, &_rwMatrixSetMultFn, PATCH_JUMP);
InjectHook(0x5A2520, &_rwMatrixDeterminant, PATCH_JUMP);
InjectHook(0x5A2570, &_rwMatrixOrthogonalError, PATCH_JUMP);
InjectHook(0x5A25D0, &_rwMatrixNormalError, PATCH_JUMP);
InjectHook(0x5A2660, &_rwMatrixIdentityError, PATCH_JUMP);
InjectHook(0x5A2730, &_rwMatrixClose, PATCH_JUMP);
InjectHook(0x5A2770, &_rwMatrixOpen, PATCH_JUMP);
InjectHook(0x5A2820, &RwMatrixOptimize, PATCH_JUMP);
InjectHook(0x5A28E0, &RwMatrixUpdate, PATCH_JUMP);
InjectHook(0x5A28F0, &RwMatrixMultiply, PATCH_JUMP);
InjectHook(0x5A2960, &RwMatrixRotateOneMinusCosineSine, PATCH_JUMP);
InjectHook(0x5A2BF0, &RwMatrixRotate, PATCH_JUMP);
InjectHook(0x5A2C90, &RwMatrixInvert, PATCH_JUMP);
InjectHook(0x5A2EE0, &RwMatrixScale, PATCH_JUMP);
InjectHook(0x5A3070, &RwMatrixTranslate, PATCH_JUMP);
InjectHook(0x5A31C0, &RwMatrixTransform, PATCH_JUMP);
InjectHook(0x5A3300, &RwMatrixDestroy, PATCH_JUMP);
InjectHook(0x5A3330, &RwMatrixCreate, PATCH_JUMP);
InjectHook(0x5A3450, &_rwVectorSetMultFn, PATCH_JUMP);
InjectHook(0x5A3600, &_rwV3dNormalize, PATCH_JUMP);
InjectHook(0x5A36A0, &RwV3dLength, PATCH_JUMP);
InjectHook(0x5A3710, &_rwSqrt, PATCH_JUMP);
InjectHook(0x5A3770, &_rwInvSqrt, PATCH_JUMP);
InjectHook(0x5A37D0, &RwV3dTransformPoints, PATCH_JUMP);
InjectHook(0x5A37E0, &RwV3dTransformVectors, PATCH_JUMP);
InjectHook(0x5A37F0, &_rwVectorClose, PATCH_JUMP);
InjectHook(0x5A3860, &_rwVectorOpen, PATCH_JUMP);
InjectHook(0x5A3AD0, &RwStreamRead, PATCH_JUMP);
InjectHook(0x5A3C30, &RwStreamWrite, PATCH_JUMP);
InjectHook(0x5A3DF0, &RwStreamSkip, PATCH_JUMP);
InjectHook(0x5A3F10, &RwStreamClose, PATCH_JUMP);
InjectHook(0x5A3FE0, &RwStreamOpen, PATCH_JUMP);
InjectHook(0x5A43A0, &RwIm2DGetNearScreenZ, PATCH_JUMP);
InjectHook(0x5A43B0, &RwIm2DGetFarScreenZ, PATCH_JUMP);
InjectHook(0x5A43C0, &RwRenderStateSet, PATCH_JUMP);
InjectHook(0x5A4410, &RwRenderStateGet, PATCH_JUMP);
InjectHook(0x5A4420, &RwIm2DRenderLine, PATCH_JUMP);
InjectHook(0x5A4430, &RwIm2DRenderPrimitive, PATCH_JUMP);
InjectHook(0x5A4440, &RwIm2DRenderIndexedPrimitive, PATCH_JUMP);
InjectHook(0x5A5020, &RwCameraEndUpdate, PATCH_JUMP);
InjectHook(0x5A5030, &RwCameraBeginUpdate, PATCH_JUMP);
InjectHook(0x5A5040, &RwCameraSetViewOffset, PATCH_JUMP);
InjectHook(0x5A5070, &RwCameraSetNearClipPlane, PATCH_JUMP);
InjectHook(0x5A5140, &RwCameraSetFarClipPlane, PATCH_JUMP);
InjectHook(0x5A5170, &RwCameraFrustumTestSphere, PATCH_JUMP);
InjectHook(0x5A51E0, &RwCameraClear, PATCH_JUMP);
InjectHook(0x5A5210, &RwCameraShowRaster, PATCH_JUMP);
InjectHook(0x5A5240, &RwCameraSetProjection, PATCH_JUMP);
InjectHook(0x5A52B0, &RwCameraSetViewWindow, PATCH_JUMP);
InjectHook(0x5A52F0, &RwCameraRegisterPlugin, PATCH_JUMP);
InjectHook(0x5A5320, &RwCameraDestroy, PATCH_JUMP);
InjectHook(0x5A5360, &RwCameraCreate, PATCH_JUMP);
InjectHook(0x5A7100, &RwTextureSetMipmapping, PATCH_JUMP);
InjectHook(0x5A7120, &RwTextureGetMipmapping, PATCH_JUMP);
InjectHook(0x5A7130, &RwTextureSetAutoMipmapping, PATCH_JUMP);
InjectHook(0x5A7150, &RwTextureGetAutoMipmapping, PATCH_JUMP);
InjectHook(0x5A7160, &RwTexDictionaryCreate, PATCH_JUMP);
InjectHook(0x5A7200, &RwTexDictionaryDestroy, PATCH_JUMP);
InjectHook(0x5A7290, &RwTexDictionaryForAllTextures, PATCH_JUMP);
InjectHook(0x5A72D0, &RwTextureCreate, PATCH_JUMP);
InjectHook(0x5A7330, &RwTextureDestroy, PATCH_JUMP);
InjectHook(0x5A73B0, &RwTextureSetName, PATCH_JUMP);
InjectHook(0x5A7420, &RwTextureSetMaskName, PATCH_JUMP);
InjectHook(0x5A7490, &RwTexDictionaryAddTexture, PATCH_JUMP);
InjectHook(0x5A74D0, &RwTexDictionaryFindNamedTexture, PATCH_JUMP);
InjectHook(0x5A7550, &RwTexDictionarySetCurrent, PATCH_JUMP);
InjectHook(0x5A7570, &RwTexDictionaryGetCurrent, PATCH_JUMP);
InjectHook(0x5A7580, &RwTextureRead, PATCH_JUMP);
InjectHook(0x5A7780, &RwTextureRasterGenerateMipmaps, PATCH_JUMP);
InjectHook(0x5A9120, &RwImageCreate, PATCH_JUMP);
InjectHook(0x5A9180, &RwImageDestroy, PATCH_JUMP);
InjectHook(0x5A91E0, &RwImageAllocatePixels, PATCH_JUMP);
InjectHook(0x5A92A0, &RwImageFreePixels, PATCH_JUMP);
InjectHook(0x5A92D0, &RwImageMakeMask, PATCH_JUMP);
InjectHook(0x5A93A0, &RwImageApplyMask, PATCH_JUMP);
InjectHook(0x5A9750, &RwImageSetPath, PATCH_JUMP);
InjectHook(0x5A9810, &RwImageRead, PATCH_JUMP);
InjectHook(0x5A9B40, &RwImageFindFileType, PATCH_JUMP);
InjectHook(0x5A9C10, &RwImageReadMaskedImage, PATCH_JUMP);
InjectHook(0x5A9F50, &RwImageCopy, PATCH_JUMP);
InjectHook(0x5AA130, &RwImageGammaCorrect, PATCH_JUMP);
InjectHook(0x5AA2C0, &RwImageSetGamma, PATCH_JUMP);
InjectHook(0x5AA4E0, &_rwStreamWriteVersionedChunkHeader, PATCH_JUMP);
InjectHook(0x5AA540, &RwStreamFindChunk, PATCH_JUMP);
InjectHook(0x5AA640, &RwMemLittleEndian32, PATCH_JUMP);
InjectHook(0x5AA650, &RwMemNative32, PATCH_JUMP);
InjectHook(0x5AA660, &RwMemFloat32ToReal, PATCH_JUMP);
InjectHook(0x5AA680, &RwStreamWriteReal, PATCH_JUMP);
InjectHook(0x5AA720, &RwStreamWriteInt32, PATCH_JUMP);
InjectHook(0x5AA740, &RwStreamReadReal, PATCH_JUMP);
InjectHook(0x5AA7B0, &RwStreamReadInt32, PATCH_JUMP);
InjectHook(0x5AA800, &RwTextureStreamGetSize, PATCH_JUMP);
InjectHook(0x5AA870, &RwTextureStreamWrite, PATCH_JUMP);
InjectHook(0x5AAA40, &RwTextureStreamRead, PATCH_JUMP);
InjectHook(0x5AB020, &RwTexDictionaryStreamWrite, PATCH_JUMP);
InjectHook(0x5AC890, &RpMorphTargetCalcBoundingSphere, PATCH_JUMP);
InjectHook(0x5AC9A0, &RpGeometryAddMorphTargets, PATCH_JUMP);
InjectHook(0x5ACB60, &RpGeometryTriangleSetVertexIndices, PATCH_JUMP);
InjectHook(0x5ACB90, &RpGeometryTriangleSetMaterial, PATCH_JUMP);
InjectHook(0x5ACBF0, &RpGeometryForAllMaterials, PATCH_JUMP);
InjectHook(0x5ACC30, &RpGeometryLock, PATCH_JUMP);
InjectHook(0x5ACC60, &RpGeometryUnlock, PATCH_JUMP);
InjectHook(0x5ACD10, &RpGeometryCreate, PATCH_JUMP);
InjectHook(0x5ACF40, &_rpGeometryAddRef, PATCH_JUMP);
InjectHook(0x5ACF50, &RpGeometryDestroy, PATCH_JUMP);
InjectHook(0x5ACFF0, &RpGeometryRegisterPlugin, PATCH_JUMP);
InjectHook(0x5AD020, &RpGeometryRegisterPluginStream, PATCH_JUMP);
InjectHook(0x5AD050, &RpGeometryStreamRead, PATCH_JUMP);
InjectHook(0x5AD6D0, &RwRasterGetCurrentContext, PATCH_JUMP);
InjectHook(0x5AD6F0, &RwRasterUnlock, PATCH_JUMP);
InjectHook(0x5AD710, &RwRasterRenderFast, PATCH_JUMP);
InjectHook(0x5AD750, &RwRasterUnlockPalette, PATCH_JUMP);
InjectHook(0x5AD780, &RwRasterDestroy, PATCH_JUMP);
InjectHook(0x5AD7C0, &RwRasterPushContext, PATCH_JUMP);
InjectHook(0x5AD810, &RwRasterRegisterPlugin, PATCH_JUMP);
InjectHook(0x5AD840, &RwRasterLockPalette, PATCH_JUMP);
InjectHook(0x5AD870, &RwRasterPopContext, PATCH_JUMP);
InjectHook(0x5AD8C0, &RwRasterGetNumLevels, PATCH_JUMP);
InjectHook(0x5AD900, &RwRasterShowRaster, PATCH_JUMP);
InjectHook(0x5AD930, &RwRasterCreate, PATCH_JUMP);
InjectHook(0x5AD9D0, &RwRasterLock, PATCH_JUMP);
InjectHook(0x5ADC30, &RpMaterialCreate, PATCH_JUMP);
InjectHook(0x5ADCB0, &RpMaterialDestroy, PATCH_JUMP);
InjectHook(0x5ADD10, &RpMaterialSetTexture, PATCH_JUMP);
InjectHook(0x5ADD40, &RpMaterialRegisterPlugin, PATCH_JUMP);
InjectHook(0x5ADD70, &RpMaterialRegisterPluginStream, PATCH_JUMP);
InjectHook(0x5ADDA0, &RpMaterialStreamRead, PATCH_JUMP);
InjectHook(0x5AE0B0, &_rpSectorDefaultRenderCallBack, PATCH_JUMP);
InjectHook(0x5AE100, &_rpWorldForAllGlobalLights, PATCH_JUMP);
InjectHook(0x5AE150, &_rpWorldSectorForAllLocalLights, PATCH_JUMP);
InjectHook(0x5AE190, &RpWorldUnlock, PATCH_JUMP);
InjectHook(0x5AE2B0, &RpWorldSectorGetWorld, PATCH_JUMP);
InjectHook(0x5AE340, &RpWorldDestroy, PATCH_JUMP);
InjectHook(0x5AE6A0, &RpWorldCreate, PATCH_JUMP);
InjectHook(0x5AEA40, &RpWorldRegisterPlugin, PATCH_JUMP);
InjectHook(0x5AEA70, &RpWorldRegisterPluginStream, PATCH_JUMP);
InjectHook(0x5AEAA0, &RpWorldPluginAttach, PATCH_JUMP);
InjectHook(0x5AFB80, &RpWorldAddCamera, PATCH_JUMP);
InjectHook(0x5AFBB0, &RpWorldRemoveCamera, PATCH_JUMP);
InjectHook(0x5AFC10, &RpAtomicGetWorld, PATCH_JUMP);
InjectHook(0x5AFC20, &RpWorldAddClump, PATCH_JUMP);
InjectHook(0x5AFDA0, &RpWorldAddLight, PATCH_JUMP);
InjectHook(0x5AFDF0, &RpWorldRemoveLight, PATCH_JUMP);
InjectHook(0x5AFE70, &RtBMPImageRead, PATCH_JUMP);
InjectHook(0x5B07D0, &RpSkinPluginAttach, PATCH_JUMP);
InjectHook(0x5B1050, &RpSkinAtomicSetHAnimHierarchy, PATCH_JUMP);
InjectHook(0x5B1070, &RpSkinAtomicGetHAnimHierarchy, PATCH_JUMP);
InjectHook(0x5B1080, &RpSkinGeometryGetSkin, PATCH_JUMP);
InjectHook(0x5B1090, &RpSkinGeometrySetSkin, PATCH_JUMP);
InjectHook(0x5B10D0, &RpSkinGetSkinToBoneMatrices, PATCH_JUMP);
InjectHook(0x5B10E0, &RpHAnimHierarchyCreate, PATCH_JUMP);
InjectHook(0x5B11F0, &RpHAnimFrameGetHierarchy, PATCH_JUMP);
InjectHook(0x5B1200, &RpHAnimHierarchySetCurrentAnim, PATCH_JUMP);
InjectHook(0x5B12B0, &RpHAnimHierarchySubAnimTime, PATCH_JUMP);
InjectHook(0x5B1480, &RpHAnimHierarchyAddAnimTime, PATCH_JUMP);
InjectHook(0x5B1780, &RpHAnimHierarchyUpdateMatrices, PATCH_JUMP);
InjectHook(0x5B1C10, &RpHAnimAnimationStreamRead, PATCH_JUMP);
InjectHook(0x5B1D50, &RpHAnimPluginAttach, PATCH_JUMP);
InjectHook(0x5B2640, &RpMatFXPluginAttach, PATCH_JUMP);
InjectHook(0x5B3750, &RpMatFXAtomicEnableEffects, PATCH_JUMP);
InjectHook(0x5B3780, &RpMatFXMaterialSetEffects, PATCH_JUMP);
InjectHook(0x5B38D0, &RpMatFXMaterialSetupEnvMap, PATCH_JUMP);
InjectHook(0x5B3A40, &RpMatFXMaterialSetBumpMapTexture, PATCH_JUMP);
InjectHook(0x5B3CF0, &RwD3D8SetRenderState, PATCH_JUMP);
InjectHook(0x5B3D40, &RwD3D8GetRenderState, PATCH_JUMP);
InjectHook(0x5B3D60, &RwD3D8SetTextureStageState, PATCH_JUMP);
InjectHook(0x5B53A0, &RwD3D8SetTexture, PATCH_JUMP);
InjectHook(0x5B6720, &RwIm3DTransform, PATCH_JUMP);
InjectHook(0x5B67F0, &RwIm3DEnd, PATCH_JUMP);
InjectHook(0x5B6820, &RwIm3DRenderIndexedPrimitive, PATCH_JUMP);
InjectHook(0x5B6980, &RwIm3DRenderLine, PATCH_JUMP);
InjectHook(0x5B6A50, &RwIm3DSetTransformPipeline, PATCH_JUMP);
InjectHook(0x5B6AC0, &RwIm3DSetRenderPipeline, PATCH_JUMP);
InjectHook(0x5B95D0, &RwD3D8EngineSetRefreshRate, PATCH_JUMP);
InjectHook(0x5B9640, &RwD3D8CameraAttachWindow, PATCH_JUMP);
InjectHook(0x5BAEB0, &RwD3D8DeviceSupportsDXTTexture, PATCH_JUMP);
InjectHook(0x5BAF90, &RwD3D8SetVertexShader, PATCH_JUMP);
InjectHook(0x5BAFD0, &RwD3D8SetPixelShader, PATCH_JUMP);
InjectHook(0x5BB010, &RwD3D8SetStreamSource, PATCH_JUMP);
InjectHook(0x5BB060, &RwD3D8SetIndices, PATCH_JUMP);
InjectHook(0x5BB0B0, &RwD3D8DrawIndexedPrimitive, PATCH_JUMP);
InjectHook(0x5BB140, &RwD3D8DrawPrimitive, PATCH_JUMP);
InjectHook(0x5BB1D0, &RwD3D8SetTransform, PATCH_JUMP);
InjectHook(0x5BB310, &RwD3D8GetTransform, PATCH_JUMP);
InjectHook(0x5BB340, &RwD3D8SetTransformWorld, PATCH_JUMP);
InjectHook(0x5BB490, &RwD3D8SetSurfaceProperties, PATCH_JUMP);
InjectHook(0x5BB7A0, &RwD3D8SetLight, PATCH_JUMP);
InjectHook(0x5BB890, &RwD3D8EnableLight, PATCH_JUMP);
InjectHook(0x5BB9F0, &RwD3D8DynamicVertexBufferCreate, PATCH_JUMP);
InjectHook(0x5BBAE0, &RwD3D8DynamicVertexBufferDestroy, PATCH_JUMP);
InjectHook(0x5BBB10, &RwD3D8IndexBufferCreate, PATCH_JUMP);
InjectHook(0x5BBB40, &RwD3D8CreatePixelShader, PATCH_JUMP);
InjectHook(0x5BBB90, &RwD3D8DeletePixelShader, PATCH_JUMP);
InjectHook(0x5BBC00, &RwD3D8SetPixelShaderConstant, PATCH_JUMP);
InjectHook(0x5BBC30, &RwD3D8GetCaps, PATCH_JUMP);
InjectHook(0x5BBC40, &RwD3D8CameraIsSphereFullyInsideFrustum, PATCH_JUMP);
InjectHook(0x5BBCA0, &RwD3D8CameraIsBBoxFullyInsideFrustum, PATCH_JUMP);
InjectHook(0x5BBD30, &RwD3D8DynamicVertexBufferLock, PATCH_JUMP);
InjectHook(0x5BBEB0, &RwD3D8DynamicVertexBufferUnlock, PATCH_JUMP);
InjectHook(0x5BBED0, &_rwIntelSSEsupported, PATCH_JUMP);
InjectHook(0x5BBF10, &RwImageSetFromRaster, PATCH_JUMP);
InjectHook(0x5BBF50, &RwRasterSetFromImage, PATCH_JUMP);
InjectHook(0x5BBF80, &RwImageFindRasterFormat, PATCH_JUMP);
InjectHook(0x5BBFF0, &RwFrameRegisterPluginStream, PATCH_JUMP);
InjectHook(0x5BC020, &_rwFrameListDeinitialize, PATCH_JUMP);
InjectHook(0x5BC050, &_rwFrameListStreamRead, PATCH_JUMP);
InjectHook(0x5BC300, &RpLightSetRadius, PATCH_JUMP);
InjectHook(0x5BC320, &RpLightSetColor, PATCH_JUMP);
InjectHook(0x5BC370, &RpLightGetConeAngle, PATCH_JUMP);
InjectHook(0x5BC5B0, &RpLightRegisterPlugin, PATCH_JUMP);
InjectHook(0x5BC5E0, &RpLightStreamRead, PATCH_JUMP);
InjectHook(0x5BC780, &RpLightDestroy, PATCH_JUMP);
InjectHook(0x5BC7C0, &RpLightCreate, PATCH_JUMP);
InjectHook(0x5BE280, &_rwD3D8TexDictionaryEnableRasterFormatConversion, PATCH_JUMP);
InjectHook(0x5BF110, &RwOsGetFileInterface, PATCH_JUMP);
InjectHook(0x5C1720, &RwFreeListDestroy, PATCH_JUMP);
InjectHook(0x5C1790, &RwFreeListCreate, PATCH_JUMP);
InjectHook(0x5C19F0, &RwFreeListPurge, PATCH_JUMP);
InjectHook(0x5C1B90, &RwFreeListPurgeAllFreeLists, PATCH_JUMP);
InjectHook(0x5C1D40, &RwFreeListForAllUsed, PATCH_JUMP);
InjectHook(0x5C2780, &_rxPipelineClose, PATCH_JUMP);
InjectHook(0x5C27E0, &_rxPipelineOpen, PATCH_JUMP);
InjectHook(0x5C2AD0, &RxHeapGetGlobalHeap, PATCH_JUMP);
InjectHook(0x5C2AE0, &RxPacketCreate, PATCH_JUMP);
InjectHook(0x5C2B10, &RxClusterSetExternalData, PATCH_JUMP);
InjectHook(0x5C2B70, &RxClusterSetData, PATCH_JUMP);
InjectHook(0x5C2BD0, &RxClusterInitializeData, PATCH_JUMP);
InjectHook(0x5C2C40, &RxClusterResizeData, PATCH_JUMP);
InjectHook(0x5C2C90, &RxClusterLockWrite, PATCH_JUMP);
InjectHook(0x5C2D60, &RxPipelineExecute, PATCH_JUMP);
InjectHook(0x5C2E00, &RxPipelineCreate, PATCH_JUMP);
InjectHook(0x5C2E70, &_rxPipelineDestroy, PATCH_JUMP);
InjectHook(0x5C3080, &RwResourcesFreeResEntry, PATCH_JUMP);
InjectHook(0x5C30F0, &_rwResourcesPurge, PATCH_JUMP);
InjectHook(0x5C3170, &RwResourcesAllocateResEntry, PATCH_JUMP);
InjectHook(0x5C3360, &RwResourcesEmptyArena, PATCH_JUMP);
InjectHook(0x5C3450, &_rwPluginRegistryOpen, PATCH_JUMP);
InjectHook(0x5C3480, &_rwPluginRegistryClose, PATCH_JUMP);
InjectHook(0x5C3590, &_rwPluginRegistryGetPluginOffset, PATCH_JUMP);
InjectHook(0x5C35C0, &_rwPluginRegistryAddPlugin, PATCH_JUMP);
InjectHook(0x5C37F0, &_rwPluginRegistryInitObject, PATCH_JUMP);
InjectHook(0x5C3850, &_rwPluginRegistryDeInitObject, PATCH_JUMP);
InjectHook(0x5C3880, &_rwPluginRegistryCopyObject, PATCH_JUMP);
InjectHook(0x5C3910, &RwErrorSet, PATCH_JUMP);
InjectHook(0x5C3970, &_rwerror, PATCH_JUMP);
InjectHook(0x5C3980, &_rwPluginRegistryAddPluginStream, PATCH_JUMP);
InjectHook(0x5C39C0, &_rwPluginRegistryAddPlgnStrmlwysCB, PATCH_JUMP);
InjectHook(0x5C39F0, &_rwPluginRegistryAddPlgnStrmRightsCB, PATCH_JUMP);
InjectHook(0x5C3A20, & _rwPluginRegistryReadDataChunks, PATCH_JUMP);
InjectHook(0x5C3B50, & _rwPluginRegistryInvokeRights, PATCH_JUMP);
InjectHook(0x5C3BA0, &_rwPluginRegistryGetSize, PATCH_JUMP);
InjectHook(0x5C3BE0, &_rwPluginRegistryWriteDataChunks, PATCH_JUMP);
InjectHook(0x5C3CB0, &_rwPluginRegistrySkipDataChunks, PATCH_JUMP);
InjectHook(0x5C3D30, &RwCameraStreamRead, PATCH_JUMP);
InjectHook(0x5C5570, &RwBBoxCalculate, PATCH_JUMP);
InjectHook(0x5C72B0, &RwImageResample, PATCH_JUMP);
InjectHook(0x5C7B30, &RwImageCreateResample, PATCH_JUMP);
InjectHook(0x5D9240, &RxRenderStateVectorSetDefaultRenderStateVector, PATCH_JUMP);
InjectHook(0x5D9340, &RxRenderStateVectorCreate, PATCH_JUMP);
InjectHook(0x5D9410, &RxRenderStateVectorDestroy, PATCH_JUMP);
InjectHook(0x5D9460, &RxRenderStateVectorLoadDriverState, PATCH_JUMP);
InjectHook(0x5D95D0, &_rxEmbeddedPacketBetweenPipelines, PATCH_JUMP);
InjectHook(0x5D9740, &_rxEmbeddedPacketBetweenNodes, PATCH_JUMP);
InjectHook(0x5D9810, &_rxPacketDestroy, PATCH_JUMP);
InjectHook(0x5C8B10, &_rpMaterialListDeinitialize, PATCH_JUMP);
InjectHook(0x5C8B70, &_rpMaterialListInitialize, PATCH_JUMP);
InjectHook(0x5C8B80, &_rpMaterialListGetMaterial, PATCH_JUMP);
InjectHook(0x5C8B90, &_rpMaterialListAppendMaterial, PATCH_JUMP);
InjectHook(0x5C8C50, &_rpMaterialListFindMaterialIndex, PATCH_JUMP);
InjectHook(0x5C8C80, &_rpMaterialListStreamRead, PATCH_JUMP);
InjectHook(0x5C8FE0, &_rpMeshHeaderCreate, PATCH_JUMP);
InjectHook(0x5C8FF0, &_rpMeshClose, PATCH_JUMP);
InjectHook(0x5C9020, &_rpMeshOpen, PATCH_JUMP);
InjectHook(0x5C9140, &_rpBuildMeshCreate, PATCH_JUMP);
InjectHook(0x5C9220, &_rpBuildMeshDestroy, PATCH_JUMP);
InjectHook(0x5C9260, &_rpMeshDestroy, PATCH_JUMP);
InjectHook(0x5C92A0, &_rpBuildMeshAddTriangle, PATCH_JUMP);
InjectHook(0x5C9380, &_rpMeshHeaderForAllMeshes, PATCH_JUMP);
InjectHook(0x5C93C0, &_rpMeshWrite, PATCH_JUMP);
InjectHook(0x5C9510, &_rpMeshRead, PATCH_JUMP);
InjectHook(0x5C96E0, &_rpMeshSize, PATCH_JUMP);
InjectHook(0x5C9730, &RpBuildMeshGenerateDefaultTriStrip, PATCH_JUMP);
InjectHook(0x5CAE10, &_rpTriListMeshGenerate, PATCH_JUMP);
InjectHook(0x5CB230, &_rpMeshOptimise, PATCH_JUMP);
InjectHook(0x5CB2B0, &RpWorldSectorRegisterPlugin, PATCH_JUMP);
InjectHook(0x5CB2E0, &RpWorldSectorRegisterPluginStream, PATCH_JUMP);
InjectHook(0x5CB630, &RpWorldSetDefaultSectorPipeline, PATCH_JUMP);
InjectHook(0x5CB670, &RpAtomicSetDefaultPipeline, PATCH_JUMP);
InjectHook(0x5CDEE0, &RpHAnimStdKeyFrameToMatrix, PATCH_JUMP);
InjectHook(0x5CE000, &RpHAnimStdKeyFrameInterpolate, PATCH_JUMP);
InjectHook(0x5CE420, &RpHAnimStdKeyFrameBlend, PATCH_JUMP);
InjectHook(0x5CE820, &RpHAnimStdKeyFrameStreamRead, PATCH_JUMP);
InjectHook(0x5CE8C0, &RpHAnimStdKeyFrameStreamWrite, PATCH_JUMP);
InjectHook(0x5CE930, &RpHAnimStdKeyFrameStreamGetSize, PATCH_JUMP);
InjectHook(0x5CE950, &RpHAnimStdKeyFrameMulRecip, PATCH_JUMP);
InjectHook(0x5CEAB0, &RpHAnimStdKeyFrameAdd, PATCH_JUMP);
InjectHook(0x5D1070, &RxHeapFree, PATCH_JUMP);
InjectHook(0x5D1260, &RxHeapAlloc, PATCH_JUMP);
InjectHook(0x5D14D0, &RxHeapRealloc, PATCH_JUMP);
InjectHook(0x5D1680, &_rxHeapReset, PATCH_JUMP);
InjectHook(0x5D16F0, &RxHeapDestroy, PATCH_JUMP);
InjectHook(0x5D1750, &RxHeapCreate, PATCH_JUMP);
InjectHook(0x5D1EC0, &RxPipelineNodeFindOutputByName, PATCH_JUMP);
InjectHook(0x5D1F20, &RxPipelineNodeFindInput, PATCH_JUMP);
InjectHook(0x5D1F30, &RxPipelineNodeRequestCluster, PATCH_JUMP);
InjectHook(0x5D1FA0, &RxLockedPipeUnlock, PATCH_JUMP);
InjectHook(0x5D29F0, &RxPipelineLock, PATCH_JUMP);
InjectHook(0x5D2B10, &RxPipelineFindNodeByName, PATCH_JUMP);
InjectHook(0x5D2BA0, &RxLockedPipeAddFragment, PATCH_JUMP);
InjectHook(0x5D2EE0, &RxLockedPipeAddPath, PATCH_JUMP);
InjectHook(0x5D31C0, &RxNodeDefinitionGetImmRenderSetup, PATCH_JUMP);
InjectHook(0x5D35C0, &RxNodeDefinitionGetImmMangleTriangleIndices, PATCH_JUMP);
InjectHook(0x5D3C60, &RxNodeDefinitionGetCullTriangle, PATCH_JUMP);
InjectHook(0x5D4F80, &RxNodeDefinitionGetClipTriangle, PATCH_JUMP);
InjectHook(0x5D51C0, &RxNodeDefinitionGetSubmitTriangle, PATCH_JUMP);
InjectHook(0x5D5400, &RxNodeDefinitionGetImmInstance, PATCH_JUMP);
InjectHook(0x5D6000, &RxNodeDefinitionGetTransform, PATCH_JUMP);
InjectHook(0x5D61C0, &RxNodeDefinitionGetImmStash, PATCH_JUMP);
InjectHook(0x5D6470, &RxNodeDefinitionGetImmMangleLineIndices, PATCH_JUMP);
InjectHook(0x5D7230, &RxNodeDefinitionGetClipLine, PATCH_JUMP);
InjectHook(0x5D74C0, &RxNodeDefinitionGetSubmitLine, PATCH_JUMP);
InjectHook(0x5D9C90, &_rwD3D8LightsOpen, PATCH_JUMP);
InjectHook(0x5D9EF0, &_rwD3D8LightsClose, PATCH_JUMP);
InjectHook(0x5D9F80, &_rwD3D8LightsGlobalEnable, PATCH_JUMP);
InjectHook(0x5DA210, &_rwD3D8LightLocalEnable, PATCH_JUMP);
InjectHook(0x5DA450, &_rwD3D8LightsEnable, PATCH_JUMP);
InjectHook(0x5DAAC0, &RxNodeDefinitionGetD3D8WorldSectorAllInOne, PATCH_JUMP);
InjectHook(0x5DC500, &RxNodeDefinitionGetD3D8AtomicAllInOne, PATCH_JUMP);
InjectHook(0x5DCC50, &RxNodeDefinitionGetWorldSectorInstance, PATCH_JUMP);
InjectHook(0x5DCD80, &RxNodeDefinitionGetWorldSectorEnumerateLights, PATCH_JUMP);
InjectHook(0x5DD800, &RxNodeDefinitionGetAtomicInstance, PATCH_JUMP);
InjectHook(0x5DD9B0, &RxNodeDefinitionGetAtomicEnumerateLights, PATCH_JUMP);
InjectHook(0x5DDAA0, &RxNodeDefinitionGetMaterialScatter, PATCH_JUMP);
InjectHook(0x5DF040, &RxNodeDefinitionGetLight, PATCH_JUMP);
InjectHook(0x5DF560, &RxNodeDefinitionGetPostLight, PATCH_JUMP);
InjectHook(0x5DFC60, &RxD3D8AllInOneSetRenderCallBack, PATCH_JUMP);
ENDPATCHES
#endif