From ab01e60f6366ee6c1795121faee2ec67fd4b33bc Mon Sep 17 00:00:00 2001 From: SuperSonic16 <25761885+thesupersonic16@users.noreply.github.com> Date: Sun, 14 Jul 2024 08:47:57 +1000 Subject: [PATCH] Initial Commit --- .gitignore | 215 ++ S3KOEditorLink.sln | 25 + S3KOEditorLink/Game.c | 102 + S3KOEditorLink/Game.h | 93 + S3KOEditorLink/GameLink.h | 2026 +++++++++++++++++ S3KOEditorLink/GameObjects.h | 23 + S3KOEditorLink/GamePatches.c | 88 + S3KOEditorLink/GamePatches.h | 6 + S3KOEditorLink/S3KOEditorLink.h | 12 + S3KOEditorLink/S3KOEditorLink.vcxproj | 107 + S3KOEditorLink/S3KOEditorLink.vcxproj.filters | 45 + S3KOEditorLink/dllmain.c | 26 + S3KOEditorLink/include/Helpers.h | 61 + S3KOEditorLink/include/detours.h | 1108 +++++++++ S3KOEditorLink/include/detver.h | 27 + S3KOEditorLink/include/syelog.h | 89 + S3KOEditorLink/lib/detours.lib | Bin 0 -> 688776 bytes S3KOEditorLink/lib/syelog.lib | Bin 0 -> 48202 bytes 18 files changed, 4053 insertions(+) create mode 100644 .gitignore create mode 100644 S3KOEditorLink.sln create mode 100644 S3KOEditorLink/Game.c create mode 100644 S3KOEditorLink/Game.h create mode 100644 S3KOEditorLink/GameLink.h create mode 100644 S3KOEditorLink/GameObjects.h create mode 100644 S3KOEditorLink/GamePatches.c create mode 100644 S3KOEditorLink/GamePatches.h create mode 100644 S3KOEditorLink/S3KOEditorLink.h create mode 100644 S3KOEditorLink/S3KOEditorLink.vcxproj create mode 100644 S3KOEditorLink/S3KOEditorLink.vcxproj.filters create mode 100644 S3KOEditorLink/dllmain.c create mode 100644 S3KOEditorLink/include/Helpers.h create mode 100644 S3KOEditorLink/include/detours.h create mode 100644 S3KOEditorLink/include/detver.h create mode 100644 S3KOEditorLink/include/syelog.h create mode 100644 S3KOEditorLink/lib/detours.lib create mode 100644 S3KOEditorLink/lib/syelog.lib diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e5b3890 --- /dev/null +++ b/.gitignore @@ -0,0 +1,215 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. + +# User-specific files +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +build/ +bld/ +bin/ +[Bb]in/ +[Oo]bj/ + +# Visual Studio 2015 cache/options directory +.vs/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUNIT +*.VisualState.xml +TestResult.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# DNX +project.lock.json +artifacts/ + +*_i.c +*_p.c +*_i.h +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opensdf +*.sdf +*.cachefile + +# Visual Studio profiler +*.psess +*.vsp +*.vspx + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# JustCode is a .NET coding add-in +.JustCode + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# NCrunch +_NCrunch_* +.*crunch*.local.xml + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +## TODO: Comment the next line if you want to checkin your +## web deploy settings but do note that will include unencrypted +## passwords +#*.pubxml + +*.publishproj + +# NuGet Packages +*.nupkg +# The packages folder can be ignored because of Package Restore +**/packages/* +# except build/, which is used as an MSBuild target. +!**/packages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/packages/repositories.config + +# Windows Azure Build Output +csx/ +*.build.csdef + +# Windows Store app package directory +AppPackages/ + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!*.[Cc]ache/ + +# Others +ClientBin/ +[Ss]tyle[Cc]op.* +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.pfx +*.publishsettings +node_modules/ +orleans.codegen.cs + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm + +# SQL Server files +*.mdf +*.ldf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings + +# Microsoft Fakes +FakesAssemblies/ + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# LightSwitch generated files +GeneratedArtifacts/ +_Pvt_Extensions/ +ModelManifest.xml + +Ignored/ diff --git a/S3KOEditorLink.sln b/S3KOEditorLink.sln new file mode 100644 index 0000000..5e2aaf7 --- /dev/null +++ b/S3KOEditorLink.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.6.33723.286 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "S3KOEditorLink", "S3KOEditorLink\S3KOEditorLink.vcxproj", "{AF540CCC-DFB0-4EC4-A302-AF115FD31F8F}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {AF540CCC-DFB0-4EC4-A302-AF115FD31F8F}.Debug|x64.ActiveCfg = Debug|x64 + {AF540CCC-DFB0-4EC4-A302-AF115FD31F8F}.Debug|x64.Build.0 = Debug|x64 + {AF540CCC-DFB0-4EC4-A302-AF115FD31F8F}.Release|x64.ActiveCfg = Release|x64 + {AF540CCC-DFB0-4EC4-A302-AF115FD31F8F}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {44F8BC84-64B7-48AC-80E0-BD9B04B75DE0} + EndGlobalSection +EndGlobal diff --git a/S3KOEditorLink/Game.c b/S3KOEditorLink/Game.c new file mode 100644 index 0000000..f5b20a6 --- /dev/null +++ b/S3KOEditorLink/Game.c @@ -0,0 +1,102 @@ +#include "S3KOEditorLink.h" +#include "GamePatches.h" + +// RSDK +int32 RSDKRevision = RETRO_REVISION; +RSDKFunctionTable RSDK; +RSDKSceneInfo *SceneInfo = NULL; + +// Handles +HMODULE LinkModule = NULL; +HMODULE OriginsModule = NULL; + +HMODULE LoadLocalOrigins() +{ + if (OriginsModule) + return OriginsModule; + + // Backup + char oldWorkingDirectory[MAX_PATH]; + GetCurrentDirectoryA(MAX_PATH, oldWorkingDirectory); + + char modulePath[MAX_PATH]; + if (GetModuleFileNameA(LinkModule, modulePath, MAX_PATH) == 0) + return OriginsModule; + + // Path + char* pos = strrchr(modulePath, '\\'); + if (pos == NULL) + return OriginsModule; + pos[0] = '\0'; + + SetCurrentDirectoryA(modulePath); + OriginsModule = LoadLibraryA("SonicOrigins.exe"); + SetCurrentDirectoryA(oldWorkingDirectory); + return OriginsModule; +} + +HMODULE LoadOriginsModule() +{ + // Check if the module is already loaded + OriginsModule = GetModuleHandleA("SonicOrigins.exe"); + if (OriginsModule) + return OriginsModule; + + // Load module + OriginsModule = LoadLibraryA("SonicOrigins.exe"); + if (!OriginsModule) + OriginsModule = LoadLocalOrigins(); + + if (!OriginsModule) + { + MessageBoxA(NULL, "Failed to load SonicOrigins.exe", "Error", MB_ICONERROR | MB_OK); + OriginsModule = NULL; + } + + return OriginsModule; +} + +void RegisterAllObjects() +{ + // Aslong as it works + intptr_t start = (intptr_t)ORIGINS_ADDR(0xAA5C50); + intptr_t end = (intptr_t)ORIGINS_ADDR(0xAAD0F8); + while (start < end) + { + if (*(void**)start) + { + if ((*(unsigned short**)start)[0] == 0x158B && + (*(unsigned short**)start)[3] == 0xFA81 && + (*(unsigned short**)start)[4] == 0x0400 && + (*(unsigned short**)start)[5] == 0x0000) + ((void(__fastcall*)())((*(void**)start)))(); + } + start += sizeof(void*); + } +} + +void LinkGameLogicDLL(EngineInfo* info) +{ + // Engine + memset(&RSDK, 0, sizeof(RSDKFunctionTable)); + if (info->functionTable) + memcpy(&RSDK, info->functionTable, sizeof(RSDKFunctionTable)); + SceneInfo = info->sceneInfo; + + if (LoadOriginsModule()) + { + // Globals + ((void(__fastcall*)(void*, int, void*))(ORIGINS_ADDR(0xAD730)))(ORIGINS_ADDR(0x4000210), 0x4C35B0, ORIGINS_ADDR(0x3A86E0)); + + // Register objects + int32 objectCount = *(int32*)(ORIGINS_ADDR(0x28BDC78)); + if (objectCount == 0) + { + ApplyPatches(); + RegisterAllObjects(); + } + + // Call link + ((void(__fastcall*)(EngineInfo*))((EngineInfo*)ORIGINS_ADDR(0xAD750)))(info); + } +} \ No newline at end of file diff --git a/S3KOEditorLink/Game.h b/S3KOEditorLink/Game.h new file mode 100644 index 0000000..261d8b7 --- /dev/null +++ b/S3KOEditorLink/Game.h @@ -0,0 +1,93 @@ +#ifndef GAME_H +#define GAME_H + +// ===================================================================== +// RSDK Project: Sonic Mania (Plus) +// Decompiled by: Rubberduckycooly & RMGRich +// ===================================================================== + +// ------------------------- +// ENGINE VERSIONS +// ------------------------- + +#ifndef RETRO_REVISION +#define RETRO_REVISION (3) +#endif + +#define RETRO_REV01 (RETRO_REVISION == 1) + +// RSDKv5 was revised & updated for plus onwards +// this is basically the same functionality as "MANIA_USE_PLUS" +// but I split this one to be more specific about engine changes vs game changes +#define RETRO_REV02 (RETRO_REVISION >= 2) + +// RSDKv5 was revised & updated to v5U for sonic origins +// enabling this will add the RSDKv5U funcs and allow this to run properly on that engine ver +#define RETRO_REV0U (RETRO_REVISION >= 3) + + +// Controls whether EditorLoad & EditorDraw should be included in the final product or not +// This is a copy of what the original game likely had, as the original game does not include EditorLoad or EditorDraw funcs for any objects +#ifndef GAME_INCLUDE_EDITOR +#ifdef RETRO_INCLUDE_EDITOR +#define GAME_INCLUDE_EDITOR RETRO_INCLUDE_EDITOR +#else +#define GAME_INCLUDE_EDITOR (1) +#endif +#endif + +#ifndef RETRO_USE_MOD_LOADER +#define RETRO_USE_MOD_LOADER (1) +#endif + +#ifndef RETRO_MOD_LOADER_VER +#define RETRO_MOD_LOADER_VER (2) +#endif + +// ------------------------- +// GAME VERSIONS +// ------------------------- + +#define VER_100 (0) // 1.00 (initial console release) +#define VER_103 (3) // 1.03 (PC release/console patch) +#define VER_105 (5) // 1.04/1.05 (mania plus release) +#define VER_106 (6) // 1.06 (steam denuvo removal update) +#define VER_107 (7) // 1.07 (EGS/Origin releases) + +#if MANIA_PREPLUS + +#if MANIA_FIRST_RELEASE + +#undef GAME_VERSION +#define GAME_VERSION VER_100 +#undef RETRO_REVISION +#define RETRO_REVISION (1) + +#else + +#undef GAME_VERSION +#define GAME_VERSION VER_103 +#undef RETRO_REVISION +#define RETRO_REVISION (1) + +#endif + +#else + +#ifndef GAME_VERSION +#define GAME_VERSION VER_106 +#endif + +#endif + +#define MANIA_USE_PLUS (GAME_VERSION >= VER_105) +#define MANIA_USE_EGS (GAME_VERSION == VER_107) + +// ------------------------- +// GAME LOGIC +// ------------------------- + +#include "GameLink.h" +#include "GameObjects.h" + +#endif //! GAME_H diff --git a/S3KOEditorLink/GameLink.h b/S3KOEditorLink/GameLink.h new file mode 100644 index 0000000..585e3c2 --- /dev/null +++ b/S3KOEditorLink/GameLink.h @@ -0,0 +1,2026 @@ +#ifndef GAMELINK_H +#define GAMELINK_H + +// ------------------------- +// STANDARD LIBS +// ------------------------- + +#include +#include +#include +#include +#include + +#define sprintf_s(x, _, ...) sprintf(x, __VA_ARGS__) + +#if defined _WIN32 +#undef sprintf_s +#endif + +// ------------------------- +// STANDARD TYPES +// ------------------------- + +typedef signed char int8; +typedef unsigned char uint8; +typedef signed short int16; +typedef unsigned short uint16; +typedef signed int int32; +typedef unsigned int uint32; + +typedef uint32 bool32; +#define true 1 +#define false 0 + +typedef uint32 color; + +// ------------------------- +// CONSTANTS +// ------------------------- + +#ifndef SCREEN_XMAX +#define SCREEN_XMAX (1280) +#endif + +#ifndef SCREEN_YSIZE +#define SCREEN_YSIZE (240) +#endif + +#define SCREEN_YCENTER (SCREEN_YSIZE / 2) + +#define LAYER_COUNT (8) +#define DRAWGROUP_COUNT (16) + +#ifndef SCREEN_COUNT +#if RETRO_REV02 +#define SCREEN_COUNT (4) +#else +#define SCREEN_COUNT (2) +#endif +#endif + +#define PLAYER_COUNT (4) +#define CAMERA_COUNT (4) + +// 0x800 scene objects, 0x40 reserved ones, and 0x100 spare slots for creation +#define RESERVE_ENTITY_COUNT (0x40) +#define TEMPENTITY_COUNT (0x100) +#define SCENEENTITY_COUNT (0x800) +#define ENTITY_COUNT (RESERVE_ENTITY_COUNT + SCENEENTITY_COUNT + TEMPENTITY_COUNT) +#define TEMPENTITY_START (ENTITY_COUNT - TEMPENTITY_COUNT) + +#define TYPE_COUNT (0x100) +#define TYPEGROUP_COUNT (0x104) + +#define CHANNEL_COUNT (0x10) + +#define TILE_SIZE (16) + +// ------------------------- +// MACROS +// ------------------------- + +#define MIN(a, b) ((a) < (b) ? (a) : (b)) +#define MAX(a, b) ((a) > (b) ? (a) : (b)) +#define CLAMP(value, minimum, maximum) (((value) < (minimum)) ? (minimum) : (((value) > (maximum)) ? (maximum) : (value))) +#define FABS(a) ((a) > 0 ? (a) : -(a)) + +#define SET_BIT(value, set, pos) ((value) ^= (-(int32)(set) ^ (value)) & (1 << (pos))) +#define GET_BIT(b, pos) ((b) >> (pos)&1) + +#define INT_TO_VOID(x) (void *)(size_t)(x) +#define FLOAT_TO_VOID(x) INT_TO_VOID(*(int32 *)&(x)) +#define VOID_TO_INT(x) (int32)(size_t)(x) +#define VOID_TO_FLOAT(x) *(float *)&(x) + +#define UNUSED(x) (void)x + +#define TO_FIXED(x) ((x) << 16) +#define FROM_FIXED(x) ((x) >> 16) + +// floating point variants +#define TO_FIXED_F(x) ((x)*65536.0) +#define FROM_FIXED_F(x) ((x) / 65536.0) + +// ------------------------- +// STRUCTS +// ------------------------- + +typedef struct { + int32 x; + int32 y; +} Vector2; + +typedef struct { +#if RETRO_REV0U + // used for languages such as beeflang that always have vfTables in classes + void *vfTable; +#endif + Vector2 position; + Vector2 scale; + Vector2 velocity; + Vector2 updateRange; + int32 angle; + int32 alpha; + int32 rotation; + int32 groundVel; + int32 zdepth; + uint16 group; + uint16 classID; + bool32 inRange; + bool32 isPermanent; + int32 tileCollisions; + bool32 interaction; + bool32 onGround; + uint8 active; +#if RETRO_REV02 + uint8 filter; +#endif + uint8 direction; + uint8 drawGroup; + uint8 collisionLayers; + uint8 collisionPlane; + uint8 collisionMode; + uint8 drawFX; + uint8 inkEffect; + uint8 visible; + uint8 onScreen; +} Entity; + +typedef struct { + uint16 classID; + uint8 active; +} Object; + +#define RSDK_OBJECT \ + uint16 classID; \ + uint8 active; + +#if RETRO_REV0U +#define RSDK_ENTITY \ + void *vfTable; \ + Vector2 position; \ + Vector2 scale; \ + Vector2 velocity; \ + Vector2 updateRange; \ + int32 angle; \ + int32 alpha; \ + int32 rotation; \ + int32 groundVel; \ + int32 zdepth; \ + uint16 group; \ + uint16 classID; \ + bool32 inRange; \ + bool32 isPermanent; \ + bool32 tileCollisions; \ + bool32 interaction; \ + bool32 onGround; \ + uint8 active; \ + uint8 filter; \ + uint8 direction; \ + uint8 drawGroup; \ + uint8 collisionLayers; \ + uint8 collisionPlane; \ + uint8 collisionMode; \ + uint8 drawFX; \ + uint8 inkEffect; \ + uint8 visible; \ + uint8 onScreen; +#elif RETRO_REV02 +#define RSDK_ENTITY \ + Vector2 position; \ + Vector2 scale; \ + Vector2 velocity; \ + Vector2 updateRange; \ + int32 angle; \ + int32 alpha; \ + int32 rotation; \ + int32 groundVel; \ + int32 zdepth; \ + uint16 group; \ + uint16 classID; \ + bool32 inRange; \ + bool32 isPermanent; \ + bool32 tileCollisions; \ + bool32 interaction; \ + bool32 onGround; \ + uint8 active; \ + uint8 filter; \ + uint8 direction; \ + uint8 drawGroup; \ + uint8 collisionLayers; \ + uint8 collisionPlane; \ + uint8 collisionMode; \ + uint8 drawFX; \ + uint8 inkEffect; \ + uint8 visible; \ + uint8 onScreen; +#else +#define RSDK_ENTITY \ + Vector2 position; \ + Vector2 scale; \ + Vector2 velocity; \ + Vector2 updateRange; \ + int32 angle; \ + int32 alpha; \ + int32 rotation; \ + int32 groundVel; \ + int32 zdepth; \ + uint16 group; \ + uint16 classID; \ + bool32 inRange; \ + bool32 isPermanent; \ + bool32 tileCollisions; \ + bool32 interaction; \ + bool32 onGround; \ + uint8 active; \ + uint8 direction; \ + uint8 drawGroup; \ + uint8 collisionLayers; \ + uint8 collisionPlane; \ + uint8 collisionMode; \ + uint8 drawFX; \ + uint8 inkEffect; \ + uint8 visible; \ + uint8 onScreen; +#endif + +typedef struct { + RSDK_ENTITY + void *data[0x100]; +#if RETRO_REV0U + void *unknown; +#endif +} EntityBase; + +#if RETRO_REV02 +#define Unknown_pausePress UnknownInfo->pausePress +#define Unknown_anyKeyPress UnknownInfo->anyKeyPress + +typedef struct { + int32 platform; + int32 language; + int32 region; +} RSDKSKUInfo; + +// None of these besides the named 2 are even used +// and even then they're not even set in plus +typedef struct { + int32 unknown1; + int32 unknown2; + int32 unknown3; + int32 unknown4; + bool32 pausePress; + int32 unknown5; + int32 unknown6; + int32 unknown7; + int32 unknown8; + int32 unknown9; + bool32 anyKeyPress; + int32 unknown10; +} RSDKUnknownInfo; +#else +#define Unknown_pausePress TouchInfo->pausePress +#define Unknown_anyKeyPress TouchInfo->anyKeyPress +#endif + +typedef struct { + char gameTitle[0x40]; + char gameSubtitle[0x100]; + char version[0x10]; +#if !RETRO_REV02 + uint8 platform; + uint8 language; + uint8 region; +#endif +} RSDKGameInfo; + +typedef struct { + Entity *entity; + void *listData; + void *listCategory; + int32 timeCounter; + int32 currentDrawGroup; + int32 currentScreenID; + uint16 listPos; + uint16 entitySlot; + uint16 createSlot; + uint16 classCount; + bool32 inEditor; + bool32 effectGizmo; + bool32 debugMode; + bool32 useGlobalScripts; + bool32 timeEnabled; + uint8 activeCategory; + uint8 categoryCount; + uint8 state; +#if RETRO_REV02 + uint8 filter; +#endif + uint8 milliseconds; + uint8 seconds; + uint8 minutes; +} RSDKSceneInfo; + +typedef struct { + bool32 down; + bool32 press; + int32 keyMap; +} InputState; + +typedef struct { + InputState keyUp; + InputState keyDown; + InputState keyLeft; + InputState keyRight; + InputState keyA; + InputState keyB; + InputState keyC; + InputState keyX; + InputState keyY; + InputState keyZ; + InputState keyStart; + InputState keySelect; + + // Rev01 hasn't split these into different structs yet +#if RETRO_REV01 + InputState keyBumperL; + InputState keyBumperR; + InputState keyTriggerL; + InputState keyTriggerR; + InputState keyStickL; + InputState keyStickR; +#endif +} RSDKControllerState; + +typedef struct { + InputState keyUp; + InputState keyDown; + InputState keyLeft; + InputState keyRight; +#if RETRO_REV02 + InputState keyStick; + float deadzone; + float hDelta; + float vDelta; +#else + float deadzone; + float triggerDeltaL; + float triggerDeltaR; + float hDeltaL; + float vDeltaL; + float hDeltaR; + float vDeltaR; +#endif +} RSDKAnalogState; + +#if RETRO_REV02 +typedef struct { + InputState keyBumper; + InputState keyTrigger; + float bumperDelta; + float triggerDelta; +} RSDKTriggerState; +#endif + +typedef struct { + float x[0x10]; + float y[0x10]; + bool32 down[0x10]; + uint8 count; +#if !RETRO_REV02 + bool32 pauseHold; + bool32 pausePress; + bool32 unknown1; + bool32 anyKeyHold; + bool32 anyKeyPress; + bool32 unknown2; +#endif +} RSDKTouchInfo; + +typedef struct { + // uint16 *frameBuffer; + uint16 frameBuffer[SCREEN_XMAX * SCREEN_YSIZE]; + Vector2 position; + Vector2 size; + Vector2 center; + int32 pitch; + int32 clipBound_X1; + int32 clipBound_Y1; + int32 clipBound_X2; + int32 clipBound_Y2; + int32 waterDrawPos; +} RSDKScreenInfo; + +#if RETRO_REV02 +typedef struct { + void *functionTable; + void *APITable; + + RSDKGameInfo *gameInfo; + RSDKSKUInfo *currentSKU; + RSDKSceneInfo *sceneInfo; + + RSDKControllerState *controllerInfo; + RSDKAnalogState *stickInfoL; + RSDKAnalogState *stickInfoR; + RSDKTriggerState *triggerInfoL; + RSDKTriggerState *triggerInfoR; + RSDKTouchInfo *touchInfo; + + RSDKUnknownInfo *unknownInfo; + + RSDKScreenInfo *screenInfo; + +#if RETRO_REV0U + // only for origins, not technically needed for v5U if standalone I think + void *hedgehogLink; +#endif + +#if RETRO_USE_MOD_LOADER + void *modTable; +#endif +} EngineInfo; +#else +typedef struct { + void *functionTable; + + RSDKGameInfo *gameInfo; + RSDKSceneInfo *sceneInfo; + + RSDKControllerState *controllerInfo; + RSDKAnalogState *stickInfoL; + + RSDKTouchInfo *touchInfo; + + RSDKScreenInfo *screenInfo; + +#if RETRO_USE_MOD_LOADER + void *modTable; +#endif +} EngineInfo; +#endif + +#if RETRO_USE_MOD_LOADER +typedef struct { + uint8 engineVer; + uint8 gameVer; + uint8 modLoaderVer; +} ModVersionInfo; +#endif + +typedef struct { + int32 values[4][4]; +} Matrix; + +typedef struct { + uint16 *chars; + uint16 length; + uint16 size; +} String; + +typedef struct { + int16 left; + int16 top; + int16 right; + int16 bottom; +} Hitbox; + +typedef struct { + int16 sprX; + int16 sprY; + int16 width; + int16 height; + int16 pivotX; + int16 pivotY; + uint16 delay; + int16 id; + uint8 sheetID; +} SpriteFrame; + +typedef struct { + void *frames; + int32 frameID; + int16 animationID; + int16 prevAnimationID; + int16 speed; + int16 timer; + int16 frameDuration; + int16 frameCount; + uint8 loopIndex; + uint8 rotationStyle; +} Animator; + +typedef struct { + int32 tilePos; + int32 parallaxFactor; + int32 scrollSpeed; + int32 scrollPos; + uint8 deform; + uint8 unknown; +} ScrollInfo; + +typedef struct { + Vector2 position; + Vector2 deform; +} ScanlineInfo; + +typedef struct { + uint8 type; + uint8 drawGroup[4]; + uint8 widthShift; + uint8 heightShift; + uint16 width; + uint16 height; + Vector2 position; + int32 parallaxFactor; + int32 scrollSpeed; + int32 scrollPos; + int32 deformationOffset; + int32 deformationOffsetW; + int32 deformationData[0x400]; + int32 deformationDataW[0x400]; + void (*scanlineCallback)(ScanlineInfo *); + uint16 scrollInfoCount; + ScrollInfo scrollInfo[0x100]; + uint32 name[4]; + uint16 *layout; + uint8 *lineScroll; +} TileLayer; + +#if RETRO_REV0U || RETRO_USE_MOD_LOADER +typedef struct { + Vector2 position; + bool32 collided; + uint8 angle; +} CollisionSensor; + +typedef struct { + uint8 floorMasks[TILE_SIZE]; + uint8 lWallMasks[TILE_SIZE]; + uint8 rWallMasks[TILE_SIZE]; + uint8 roofMasks[TILE_SIZE]; +} CollisionMask; + +typedef struct { + uint8 floorAngle; + uint8 lWallAngle; + uint8 rWallAngle; + uint8 roofAngle; + uint8 flag; +} TileInfo; +#endif + +#if RETRO_REV02 +typedef enum { + LEADERBOARD_LOAD_INIT, + LEADERBOARD_LOAD_PREV, + LEADERBOARD_LOAD_NEXT, +} LeaderboardLoadTypes; + +typedef struct { + int32 start; + int32 length; +} LeaderboardAvail; + +typedef struct { + uint8 statID; + const char *name; + void *data[64]; +} StatInfo; +#endif + +typedef struct { + uint8 idPS4; // achievement ID (PS4) + int32 idUnknown; // achievement ID (unknown platform) + const char *id; // achievement ID (as a string, used for most platforms) +} AchievementID; + +typedef struct { + int32 idPS4; // leaderboard id (PS4) + int32 idUnknown; // leaderboard id (unknown platform) + int32 idSwitch; // leaderboard id (switch) + const char *idXbox; // Xbox One Leaderboard id (making an assumption based on the MS docs) + const char *idPC; // Leaderboard id (as a string, used for PC platforms) +} LeaderboardID; + +typedef struct { + String username; +#if RETRO_REV02 + String userID; +#endif + int32 globalRank; + int32 score; + bool32 isUser; + int32 status; +} LeaderboardEntry; + +// ------------------------- +// ENUMS +// ------------------------- + +typedef enum { + PLATFORM_PC, + PLATFORM_PS4, + PLATFORM_XB1, + PLATFORM_SWITCH, + + PLATFORM_DEV = 0xFF, +} GamePlatforms; + +typedef enum { + SCOPE_NONE, + SCOPE_GLOBAL, + SCOPE_STAGE, +} Scopes; + +typedef enum { + INK_NONE, + INK_BLEND, + INK_ALPHA, + INK_ADD, + INK_SUB, + INK_TINT, + INK_MASKED, + INK_UNMASKED, +} InkEffects; + +typedef enum { FX_NONE = 0, FX_FLIP = 1, FX_ROTATE = 2, FX_SCALE = 4 } DrawFX; + +typedef enum { FLIP_NONE, FLIP_X, FLIP_Y, FLIP_XY } FlipFlags; + +typedef enum { + TYPE_BLANK, +#if RETRO_REV02 + TYPE_DEVOUTPUT, +#endif +} DefaultObjTypes; + +typedef enum { + INPUT_UNASSIGNED = -2, + INPUT_AUTOASSIGN = -1, + INPUT_NONE = 0, +} InputIDs; + +typedef enum { + CONT_ANY, + CONT_P1, + CONT_P2, + CONT_P3, + CONT_P4, +} InputSlotIDs; + +typedef enum { + DEVICE_TYPE_NONE, + DEVICE_TYPE_KEYBOARD, + DEVICE_TYPE_CONTROLLER, + DEVICE_TYPE_UNKNOWN, + DEVICE_TYPE_STEAMOVERLAY, +} InputDeviceTypes; + +typedef enum { + DEVICE_KEYBOARD, + DEVICE_XBOX, + DEVICE_PS4, + DEVICE_SATURN, + DEVICE_SWITCH_HANDHELD, + DEVICE_SWITCH_JOY_GRIP, + DEVICE_SWITCH_JOY_L, + DEVICE_SWITCH_JOY_R, + DEVICE_SWITCH_PRO, +} InputDeviceIDs; + +typedef enum { + DEVICE_API_NONE, + DEVICE_API_KEYBOARD, + DEVICE_API_XINPUT, + DEVICE_API_RAWINPUT, + DEVICE_API_STEAM, +} InputDeviceAPIs; + +typedef enum { + ALIGN_LEFT, + ALIGN_RIGHT, + ALIGN_CENTER, +} Alignments; + +#if RETRO_REV02 +typedef enum { + PRINT_NORMAL, + PRINT_POPUP, + PRINT_ERROR, + PRINT_FATAL, +} PrintModes; +#else +typedef enum { + MESSAGE_STRING, + MESSAGE_INT32, + MESSAGE_UINT32, + MESSAGE_FLOAT, +} PrintMessageTypes; +#endif + +typedef enum { + VAR_UINT8, + VAR_UINT16, + VAR_UINT32, + VAR_INT8, + VAR_INT16, + VAR_INT32, + VAR_ENUM, + VAR_BOOL, + VAR_STRING, + VAR_VECTOR2, + VAR_FLOAT, + VAR_COLOR, +} VarTypes; + +#if RETRO_REV02 +typedef enum { + DBVAR_UNKNOWN, + DBVAR_BOOL, + DBVAR_UINT8, + DBVAR_UINT16, + DBVAR_UINT32, + DBVAR_UINT64, // unimplemented in RSDKv5 + DBVAR_INT8, + DBVAR_INT16, + DBVAR_INT32, + DBVAR_INT64, // unimplemented in RSDKv5 + DBVAR_FLOAT, + DBVAR_DOUBLE, // unimplemented in RSDKv5 + DBVAR_VECTOR2, // unimplemented in RSDKv5 + DBVAR_VECTOR3, // unimplemented in RSDKv5 + DBVAR_VECTOR4, // unimplemented in RSDKv5 + DBVAR_COLOR, + DBVAR_STRING, + DBVAR_HASHMD5, // unimplemented in RSDKv5 +} DBVarTypes; + +typedef enum { + VIEWVAR_INVALID, + VIEWVAR_BOOL, + VIEWVAR_UINT8, + VIEWVAR_UINT16, + VIEWVAR_UINT32, + VIEWVAR_INT8, + VIEWVAR_INT16, + VIEWVAR_INT32, +} ViewableVarTypes; +#endif + +typedef enum { + ACTIVE_NEVER, + ACTIVE_ALWAYS, + ACTIVE_NORMAL, + ACTIVE_PAUSED, + ACTIVE_BOUNDS, + ACTIVE_XBOUNDS, + ACTIVE_YBOUNDS, + ACTIVE_RBOUNDS, + + // Not really even a real active value, but some objects set their active states to this so here it is I suppose + ACTIVE_DISABLED = 0xFF, +} ActiveFlags; + +typedef enum { ROTSTYLE_NONE, ROTSTYLE_FULL, ROTSTYLE_45DEG, ROTSTYLE_90DEG, ROTSTYLE_180DEG, ROTSTYLE_STATICFRAMES } RotationSyles; + +typedef enum { + LAYER_HSCROLL, + LAYER_VSCROLL, + LAYER_ROTOZOOM, + LAYER_BASIC, +} LayerTypes; + +typedef enum { + CMODE_FLOOR, + CMODE_LWALL, + CMODE_ROOF, + CMODE_RWALL, +} CModes; + +typedef enum { + C_NONE, + C_TOP, + C_LEFT, + C_RIGHT, + C_BOTTOM, +} CSides; + +typedef enum { + TILECOLLISION_NONE, // no tile collisions + TILECOLLISION_DOWN, // downwards tile collisions +#if RETRO_REV0U + TILECOLLISION_UP, // upwards tile collisions +#endif +} TileCollisionModes; + +typedef enum { + S3D_WIREFRAME, + S3D_SOLIDCOLOR, + + S3D_UNUSED_1, + S3D_UNUSED_2, + + S3D_WIREFRAME_SHADED, + S3D_SOLIDCOLOR_SHADED, + + S3D_SOLIDCOLOR_SHADED_BLENDED, + + S3D_WIREFRAME_SCREEN, + S3D_SOLIDCOLOR_SCREEN, + + S3D_WIREFRAME_SHADED_SCREEN, + S3D_SOLIDCOLOR_SHADED_SCREEN, + + S3D_SOLIDCOLOR_SHADED_BLENDED_SCREEN, +} Scene3DDrawTypes; + +typedef enum { + VIDEOSETTING_WINDOWED, + VIDEOSETTING_BORDERED, + VIDEOSETTING_EXCLUSIVEFS, + VIDEOSETTING_VSYNC, + VIDEOSETTING_TRIPLEBUFFERED, + VIDEOSETTING_WINDOW_WIDTH, + VIDEOSETTING_WINDOW_HEIGHT, + VIDEOSETTING_FSWIDTH, + VIDEOSETTING_FSHEIGHT, + VIDEOSETTING_REFRESHRATE, + VIDEOSETTING_SHADERSUPPORT, + VIDEOSETTING_SHADERID, + VIDEOSETTING_SCREENCOUNT, +#if RETRO_REV02 + VIDEOSETTING_DIMTIMER, +#endif + VIDEOSETTING_STREAMSENABLED, + VIDEOSETTING_STREAM_VOL, + VIDEOSETTING_SFX_VOL, + VIDEOSETTING_LANGUAGE, + VIDEOSETTING_STORE, + VIDEOSETTING_RELOAD, + VIDEOSETTING_CHANGED, + VIDEOSETTING_WRITE, +} VideoSettingsValues; + +typedef enum { + GROUP_ALL = 0, + + GROUP_CUSTOM0 = TYPE_COUNT, + GROUP_CUSTOM1, + GROUP_CUSTOM2, + GROUP_CUSTOM3, +} TypeGroups; + +typedef enum { + STATUS_NONE = 0, + STATUS_CONTINUE = 100, + STATUS_OK = 200, + STATUS_FORBIDDEN = 403, + STATUS_NOTFOUND = 404, + STATUS_ERROR = 500, + STATUS_NOWIFI = 503, + STATUS_TIMEOUT = 504, + STATUS_CORRUPT = 505, + STATUS_NOSPACE = 506, +} StatusCodes; + +typedef enum { + REGION_US, + REGION_JP, + REGION_EU, +} GameRegions; + +typedef enum { + LANGUAGE_EN, + LANGUAGE_FR, + LANGUAGE_IT, + LANGUAGE_GE, + LANGUAGE_SP, + LANGUAGE_JP, +#if GAME_VERSION != VER_100 + LANGUAGE_KO, + LANGUAGE_SC, + LANGUAGE_TC, +#endif +} GameLanguages; + +typedef enum { + ENGINESTATE_LOAD, + ENGINESTATE_REGULAR, + ENGINESTATE_PAUSED, + ENGINESTATE_FROZEN, + ENGINESTATE_STEPOVER = 4, + ENGINESTATE_DEVMENU = 8, + ENGINESTATE_VIDEOPLAYBACK, + ENGINESTATE_SHOWIMAGE, +#if RETRO_REV02 + ENGINESTATE_ERRORMSG, + ENGINESTATE_ERRORMSG_FATAL, +#endif + ENGINESTATE_NONE, +} EngineStates; + +// see: https://docs.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes +// for value list & descriptions +typedef enum { + KEYMAP_AUTO_MAPPING = -1, + KEYMAP_NO_MAPPING = 0, + KEYMAP_LBUTTON = 0x01, + KEYMAP_RBUTTON = 0x02, + KEYMAP_CANCEL = 0x03, + KEYMAP_MBUTTON = 0x04, + KEYMAP_XBUTTON1 = 0x05, + KEYMAP_XBUTTON2 = 0x06, + KEYMAP_BACK = 0x08, + KEYMAP_TAB = 0x09, + KEYMAP_CLEAR = 0x0C, + KEYMAP_RETURN = 0x0D, + KEYMAP_SHIFT = 0x10, + KEYMAP_CONTROL = 0x11, + KEYMAP_MENU = 0x12, + KEYMAP_PAUSE = 0x13, + KEYMAP_CAPITAL = 0x14, + KEYMAP_KANA = 0x15, + KEYMAP_HANGEUL = 0x15, + KEYMAP_HANGUL = 0x15, + KEYMAP_JUNJA = 0x17, + KEYMAP_FINAL = 0x18, + KEYMAP_HANJA = 0x19, + KEYMAP_KANJI = 0x19, + KEYMAP_ESCAPE = 0x1B, + KEYMAP_CONVERT = 0x1C, + KEYMAP_NONCONVERT = 0x1D, + KEYMAP_ACCEPT = 0x1E, + KEYMAP_MODECHANGE = 0x1F, + KEYMAP_SPACE = 0x20, + KEYMAP_PRIOR = 0x21, + KEYMAP_NEXT = 0x22, + KEYMAP_END = 0x23, + KEYMAP_HOME = 0x24, + KEYMAP_LEFT = 0x25, + KEYMAP_UP = 0x26, + KEYMAP_RIGHT = 0x27, + KEYMAP_DOWN = 0x28, + KEYMAP_SELECT = 0x29, + KEYMAP_PRINT = 0x2A, + KEYMAP_EXECUTE = 0x2B, + KEYMAP_SNAPSHOT = 0x2C, + KEYMAP_INSERT = 0x2D, + KEYMAP_DELETE = 0x2E, + KEYMAP_HELP = 0x2F, + KEYMAP_0 = 0x30, + KEYMAP_1 = 0x31, + KEYMAP_2 = 0x32, + KEYMAP_3 = 0x33, + KEYMAP_4 = 0x34, + KEYMAP_5 = 0x35, + KEYMAP_6 = 0x36, + KEYMAP_7 = 0x37, + KEYMAP_8 = 0x38, + KEYMAP_9 = 0x39, + KEYMAP_A = 0x41, + KEYMAP_B = 0x42, + KEYMAP_C = 0x43, + KEYMAP_D = 0x44, + KEYMAP_E = 0x45, + KEYMAP_F = 0x46, + KEYMAP_G = 0x47, + KEYMAP_H = 0x48, + KEYMAP_I = 0x49, + KEYMAP_J = 0x4A, + KEYMAP_K = 0x4B, + KEYMAP_L = 0x4C, + KEYMAP_M = 0x4D, + KEYMAP_N = 0x4E, + KEYMAP_O = 0x4F, + KEYMAP_P = 0x50, + KEYMAP_Q = 0x51, + KEYMAP_R = 0x52, + KEYMAP_S = 0x53, + KEYMAP_T = 0x54, + KEYMAP_U = 0x55, + KEYMAP_V = 0x56, + KEYMAP_W = 0x57, + KEYMAP_X = 0x58, + KEYMAP_Y = 0x59, + KEYMAP_Z = 0x5A, + KEYMAP_LWIN = 0x5B, + KEYMAP_RWIN = 0x5C, + KEYMAP_APPS = 0x5D, + KEYMAP_SLEEP = 0x5F, + KEYMAP_NUMPAD0 = 0x60, + KEYMAP_NUMPAD1 = 0x61, + KEYMAP_NUMPAD2 = 0x62, + KEYMAP_NUMPAD3 = 0x63, + KEYMAP_NUMPAD4 = 0x64, + KEYMAP_NUMPAD5 = 0x65, + KEYMAP_NUMPAD6 = 0x66, + KEYMAP_NUMPAD7 = 0x67, + KEYMAP_NUMPAD8 = 0x68, + KEYMAP_NUMPAD9 = 0x69, + KEYMAP_MULTIPLY = 0x6A, + KEYMAP_ADD = 0x6B, + KEYMAP_SEPARATOR = 0x6C, + KEYMAP_SUBTRACT = 0x6D, + KEYMAP_DECIMAL = 0x6E, + KEYMAP_DIVIDE = 0x6F, + KEYMAP_F1 = 0x70, + KEYMAP_F2 = 0x71, + KEYMAP_F3 = 0x72, + KEYMAP_F4 = 0x73, + KEYMAP_F5 = 0x74, + KEYMAP_F6 = 0x75, + KEYMAP_F7 = 0x76, + KEYMAP_F8 = 0x77, + KEYMAP_F9 = 0x78, + KEYMAP_F10 = 0x79, + KEYMAP_F11 = 0x7A, + KEYMAP_F12 = 0x7B, + KEYMAP_F13 = 0x7C, + KEYMAP_F14 = 0x7D, + KEYMAP_F15 = 0x7E, + KEYMAP_F16 = 0x7F, + KEYMAP_F17 = 0x80, + KEYMAP_F18 = 0x81, + KEYMAP_F19 = 0x82, + KEYMAP_F20 = 0x83, + KEYMAP_F21 = 0x84, + KEYMAP_F22 = 0x85, + KEYMAP_F23 = 0x86, + KEYMAP_F24 = 0x87, + KEYMAP_NAVIGATION_VIEW = 0x88, + KEYMAP_NAVIGATION_MENU = 0x89, + KEYMAP_NAVIGATION_UP = 0x8A, + KEYMAP_NAVIGATION_DOWN = 0x8B, + KEYMAP_NAVIGATION_LEFT = 0x8C, + KEYMAP_NAVIGATION_RIGHT = 0x8D, + KEYMAP_NAVIGATION_ACCEPT = 0x8E, + KEYMAP_NAVIGATION_CANCEL = 0x8F, + KEYMAP_NUMLOCK = 0x90, + KEYMAP_SCROLL = 0x91, + KEYMAP_OEM_NEC_EQUAL = 0x92, + KEYMAP_OEM_FJ_JISHO = 0x92, + KEYMAP_OEM_FJ_MASSHOU = 0x93, + KEYMAP_OEM_FJ_TOUROKU = 0x94, + KEYMAP_OEM_FJ_LOYA = 0x95, + KEYMAP_OEM_FJ_ROYA = 0x96, + KEYMAP_LSHIFT = 0xA0, + KEYMAP_RSHIFT = 0xA1, + KEYMAP_LCONTROL = 0xA2, + KEYMAP_RCONTROL = 0xA3, + KEYMAP_LMENU = 0xA4, + KEYMAP_RMENU = 0xA5, + KEYMAP_BROWSER_BACK = 0xA6, + KEYMAP_BROWSER_FORWARD = 0xA7, + KEYMAP_BROWSER_REFRESH = 0xA8, + KEYMAP_BROWSER_STOP = 0xA9, + KEYMAP_BROWSER_SEARCH = 0xAA, + KEYMAP_BROWSER_FAVORITES = 0xAB, + KEYMAP_BROWSER_HOME = 0xAC, + KEYMAP_VOLUME_MUTE = 0xAD, + KEYMAP_VOLUME_DOWN = 0xAE, + KEYMAP_VOLUME_UP = 0xAF, + KEYMAP_MEDIA_NEXT_TRACK = 0xB0, + KEYMAP_MEDIA_PREV_TRACK = 0xB1, + KEYMAP_MEDIA_STOP = 0xB2, + KEYMAP_MEDIA_PLAY_PAUSE = 0xB3, + KEYMAP_LAUNCH_MAIL = 0xB4, + KEYMAP_LAUNCH_MEDIA_SELECT = 0xB5, + KEYMAP_LAUNCH_APP1 = 0xB6, + KEYMAP_LAUNCH_APP2 = 0xB7, + KEYMAP_OEM_1 = 0xBA, + KEYMAP_OEM_PLUS = 0xBB, + KEYMAP_OEM_COMMA = 0xBC, + KEYMAP_OEM_MINUS = 0xBD, + KEYMAP_OEM_PERIOD = 0xBE, + KEYMAP_OEM_2 = 0xBF, + KEYMAP_OEM_3 = 0xC0, + KEYMAP_GAMEPAD_A = 0xC3, + KEYMAP_GAMEPAD_B = 0xC4, + KEYMAP_GAMEPAD_X = 0xC5, + KEYMAP_GAMEPAD_Y = 0xC6, + KEYMAP_GAMEPAD_RIGHT_SHOULDER = 0xC7, + KEYMAP_GAMEPAD_LEFT_SHOULDER = 0xC8, + KEYMAP_GAMEPAD_LEFT_TRIGGER = 0xC9, + KEYMAP_GAMEPAD_RIGHT_TRIGGER = 0xCA, + KEYMAP_GAMEPAD_DPAD_UP = 0xCB, + KEYMAP_GAMEPAD_DPAD_DOWN = 0xCC, + KEYMAP_GAMEPAD_DPAD_LEFT = 0xCD, + KEYMAP_GAMEPAD_DPAD_RIGHT = 0xCE, + KEYMAP_GAMEPAD_MENU = 0xCF, + KEYMAP_GAMEPAD_VIEW = 0xD0, + KEYMAP_GAMEPAD_LEFT_THUMBSTICK_BUTTON = 0xD1, + KEYMAP_GAMEPAD_RIGHT_THUMBSTICK_BUTTON = 0xD2, + KEYMAP_GAMEPAD_LEFT_THUMBSTICK_UP = 0xD3, + KEYMAP_GAMEPAD_LEFT_THUMBSTICK_DOWN = 0xD4, + KEYMAP_GAMEPAD_LEFT_THUMBSTICK_RIGHT = 0xD5, + KEYMAP_GAMEPAD_LEFT_THUMBSTICK_LEFT = 0xD6, + KEYMAP_GAMEPAD_RIGHT_THUMBSTICK_UP = 0xD7, + KEYMAP_GAMEPAD_RIGHT_THUMBSTICK_DOWN = 0xD8, + KEYMAP_GAMEPAD_RIGHT_THUMBSTICK_RIGHT = 0xD9, + KEYMAP_GAMEPAD_RIGHT_THUMBSTICK_LEFT = 0xDA, + KEYMAP_OEM_4 = 0xDB, + KEYMAP_OEM_5 = 0xDC, + KEYMAP_OEM_6 = 0xDD, + KEYMAP_OEM_7 = 0xDE, + KEYMAP_OEM_8 = 0xDF, + KEYMAP_OEM_AX = 0xE1, + KEYMAP_OEM_102 = 0xE2, + KEYMAP_ICO_HELP = 0xE3, + KEYMAP_ICO_00 = 0xE4, + KEYMAP_PROCESSKEY = 0xE5, + KEYMAP_ICO_CLEAR = 0xE6, + KEYMAP_PACKET = 0xE7, + KEYMAP_OEM_RESET = 0xE9, + KEYMAP_OEM_JUMP = 0xEA, + KEYMAP_OEM_PA1 = 0xEB, + KEYMAP_OEM_PA2 = 0xEC, + KEYMAP_OEM_PA3 = 0xED, + KEYMAP_OEM_WSCTRL = 0xEE, + KEYMAP_OEM_CUSEL = 0xEF, + KEYMAP_OEM_ATTN = 0xF0, + KEYMAP_OEM_FINISH = 0xF1, + KEYMAP_OEM_COPY = 0xF2, + KEYMAP_OEM_AUTO = 0xF3, + KEYMAP_OEM_ENLW = 0xF4, + KEYMAP_OEM_BACKTAB = 0xF5, + KEYMAP_ATTN = 0xF6, + KEYMAP_CRSEL = 0xF7, + KEYMAP_EXSEL = 0xF8, + KEYMAP_EREOF = 0xF9, + KEYMAP_PLAY = 0xFA, + KEYMAP_ZOOM = 0xFB, + KEYMAP_NONAME = 0xFC, + KEYMAP_PA1 = 0xFD, + KEYMAP_OEM_CLEAR = 0xFE, +} KeyMappings; + +#if RETRO_USE_MOD_LOADER +typedef enum { + MODCB_ONGAMESTARTUP, + MODCB_ONSTATICLOAD, + MODCB_ONSTAGELOAD, + MODCB_ONUPDATE, + MODCB_ONLATEUPDATE, + MODCB_ONSTATICUPDATE, + MODCB_ONDRAW, + MODCB_ONSTAGEUNLOAD, + MODCB_ONSHADERLOAD, + MODCB_ONVIDEOSKIPCB, + MODCB_ONSCANLINECB, +} ModCallbackEvents; + +typedef enum { + SUPER_UPDATE, + SUPER_LATEUPDATE, + SUPER_STATICUPDATE, + SUPER_DRAW, + SUPER_CREATE, + SUPER_STAGELOAD, + SUPER_EDITORDRAW, + SUPER_EDITORLOAD, + SUPER_SERIALIZE +} ModSuper; +#endif + +// ------------------------- +// FUNCTION TABLES +// ------------------------- + +#if RETRO_USE_MOD_LOADER +// Mod Table +typedef struct { + // Registration & Core +#if RETRO_REV0U + void (*RegisterGlobals)(const char *globalsPath, void **globals, uint32 size, void (*initCB)(void *globals)); + void (*RegisterObject)(void **staticVars, void **modStaticVars, const char *name, uint32 entityClassSize, uint32 staticClassSize, + uint32 modClassSize, void (*update)(void), void (*lateUpdate)(void), void (*staticUpdate)(void), void (*draw)(void), + void (*create)(void *), void (*stageLoad)(void), void (*editorDraw)(void), void (*editorLoad)(void), + void (*serialize)(void), void (*staticLoad)(void *staticVars), const char *inherited); +#else + void (*RegisterGlobals)(const char *globalsPath, void **globals, uint32 size); + void (*RegisterObject)(void **staticVars, void **modStaticVars, const char *name, uint32 entityClassSize, uint32 staticClassSize, + uint32 modClassSize, void (*update)(void), void (*lateUpdate)(void), void (*staticUpdate)(void), void (*draw)(void), + void (*create)(void *), void (*stageLoad)(void), void (*editorDraw)(void), void (*editorLoad)(void), + void (*serialize)(void), const char *inherited); +#endif + void *RegisterObject_STD; + void (*RegisterObjectHook)(void **staticVars, const char *staticName); + void *(*FindObject)(const char *name); + void *(*GetGlobals)(void); + void (*Super)(int32 classID, int32 callback, void *data); + + // Mod Info + bool32 (*LoadModInfo)(const char *id, String *name, String *description, String *version, bool32 *active); + void (*GetModPath)(const char *id, String *result); + int32 (*GetModCount)(bool32 active); + const char *(*GetModIDByIndex)(uint32 index); + bool32 (*ForeachModID)(String *id); + + // Mod Callbacks & Public Functions + void (*AddModCallback)(int32 callbackID, void (*callback)(void *)); + void *AddModCallback_STD; + void (*AddPublicFunction)(const char *functionName, void *functionPtr); + void *(*GetPublicFunction)(const char *id, const char *functionName); + + // Mod Settings + bool32 (*GetSettingsBool)(const char *id, const char *key, bool32 fallback); + int32 (*GetSettingsInteger)(const char *id, const char *key, int32 fallback); + float (*GetSettingsFloat)(const char *id, const char *key, float fallback); + void (*GetSettingsString)(const char *id, const char *key, String *result, const char *fallback); + void (*SetSettingsBool)(const char *key, bool32 val); + void (*SetSettingsInteger)(const char *key, int32 val); + void (*SetSettingsFloat)(const char *key, float val); + void (*SetSettingsString)(const char *key, String *val); + void (*SaveSettings)(void); + + // Config + bool32 (*GetConfigBool)(const char *key, bool32 fallback); + int32 (*GetConfigInteger)(const char *key, int32 fallback); + float (*GetConfigFloat)(const char *key, float fallback); + void (*GetConfigString)(const char *key, String *result, const char *fallback); + bool32 (*ForeachConfig)(String *config); + bool32 (*ForeachConfigCategory)(String *category); + + // Achievements + void (*RegisterAchievement)(const char *identifier, const char *name, const char *desc); + void (*GetAchievementInfo)(uint32 id, String *name, String *description, String *identifier, bool32 *achieved); + int32 (*GetAchievementIndexByID)(const char *identifier); + int32 (*GetAchievementCount)(void); + + // Shaders + void (*LoadShader)(const char *shaderName, bool32 linear); + +#if RETRO_REV0U + // StateMachine + void (*StateMachineRun)(void (*state)(Entity *), Entity *entity); + + void (*RegisterStateHook)(void (*state)(Entity *), bool32 (*hook)(bool32 skippedState, Entity *entity), bool32 priority); + // runs all high priority state hooks hooked to the address of 'state', returns if the main state should be skipped or not + bool32 (*HandleRunState_HighPriority)(void *state, Entity *entity); + // runs all low priority state hooks hooked to the address of 'state' + void (*HandleRunState_LowPriority)(void *state, Entity *entity, bool32 skipState); +#else + // StateMachine + void (*StateMachineRun)(void (*state)(void)); + + void (*RegisterStateHook)(void (*state)(void), bool32 (*hook)(bool32 skippedState), bool32 priority); + // runs all high priority state hooks hooked to the address of 'state', returns if the main state should be skipped or not + bool32 (*HandleRunState_HighPriority)(void *state); + // runs all low priority state hooks hooked to the address of 'state' + void (*HandleRunState_LowPriority)(void *state, bool32 skipState); + +#endif +#if RETRO_MOD_LOADER_VER >= 2 + // Mod Settings (Part 2) + bool32 (*ForeachSetting)(const char *id, String *setting); + bool32 (*ForeachSettingCategory)(const char *id, String *category); + + // Files + bool32 (*ExcludeFile)(const char *id, const char *path); + bool32 (*ExcludeAllFiles)(const char *id); + bool32 (*ReloadFile)(const char *id, const char *path); + bool32 (*ReloadAllFiles)(const char *id); + + // Graphics + void *(*GetSpriteAnimation)(uint16 id); + void *(*GetSpriteSurface)(uint16 id); + uint16 *(*GetPaletteBank)(uint8 id); + uint8 *(*GetActivePaletteBuffer)(void); + void (*GetRGB32To16Buffer)(uint16 **rgb32To16_R, uint16 **rgb32To16_G, uint16 **rgb32To16_B); + uint16 *(*GetBlendLookupTable)(void); + uint16 *(*GetSubtractLookupTable)(void); + uint16 *(*GetTintLookupTable)(void); + color (*GetMaskColor)(void); + void *(*GetScanEdgeBuffer)(void); + void *(*GetCamera)(uint8 id); + void *(*GetShader)(uint8 id); + void *(*GetModel)(uint16 id); + void *(*GetScene3D)(uint16 id); + void (*DrawDynamicAniTiles)(Animator *animator, uint16 tileIndex); + + // Audio + void *(*GetSfx)(uint16 id); + void *(*GetChannel)(uint8 id); + + // Objects/Entities + bool32 (*GetGroupEntities)(uint16 group, void **entity); + + // Collision + void (*SetPathGripSensors)(CollisionSensor *sensors); // expects 5 sensors + void (*FindFloorPosition)(CollisionSensor *sensor); + void (*FindLWallPosition)(CollisionSensor *sensor); + void (*FindRoofPosition)(CollisionSensor *sensor); + void (*FindRWallPosition)(CollisionSensor *sensor); + void (*FloorCollision)(CollisionSensor *sensor); + void (*LWallCollision)(CollisionSensor *sensor); + void (*RoofCollision)(CollisionSensor *sensor); + void (*RWallCollision)(CollisionSensor *sensor); + void (*CopyCollisionMask)(uint16 dst, uint16 src, uint8 cPlane, uint8 cMode); + void (*GetCollisionInfo)(CollisionMask **masks, TileInfo **tileInfo); +#endif +} ModFunctionTable; +#endif + +#if RETRO_REV02 +// API Table +typedef struct { + // API Core + int32 (*GetUserLanguage)(void); + bool32 (*GetConfirmButtonFlip)(void); + void (*ExitGame)(void); + void (*LaunchManual)(void); +#if RETRO_REV0U + int32 (*GetDefaultGamepadType)(void); +#endif + bool32 (*IsOverlayEnabled)(uint32 deviceID); + bool32 (*CheckDLC)(int32 dlc); +#if MANIA_USE_EGS + bool32 (*SetupExtensionOverlay)(void); + bool32 (*CanShowExtensionOverlay)(int32 overlay); +#endif + bool32 (*ShowExtensionOverlay)(int32 overlay); +#if MANIA_USE_EGS + bool32 (*CanShowAltExtensionOverlay)(int32 overlay); + bool32 (*ShowAltExtensionOverlay)(int32 overlay); + int32 (*GetConnectingStringID)(void); + void (*ShowLimitedVideoOptions)(int32 id); +#endif + + // Achievements + void (*TryUnlockAchievement)(AchievementID *id); + bool32 (*GetAchievementsEnabled)(void); + void (*SetAchievementsEnabled)(bool32 enabled); +#if MANIA_USE_EGS + bool32 (*CheckAchievementsEnabled)(void); + void (*SetAchievementNames)(String **names, int32 count); +#endif + + // Leaderboards +#if MANIA_USE_EGS + bool32 (*CheckLeaderboardsEnabled)(void); +#endif + void (*InitLeaderboards)(void); + void (*FetchLeaderboard)(LeaderboardID *leaderboard, bool32 isUser); + void (*TrackScore)(LeaderboardID *leaderboard, int32 score, void (*callback)(bool32 success, int32 rank)); + int32 (*GetLeaderboardsStatus)(void); + LeaderboardAvail (*LeaderboardEntryViewSize)(void); + LeaderboardAvail (*LeaderboardEntryLoadSize)(void); + void (*LoadLeaderboardEntries)(int32 start, uint32 end, int32 type); + void (*ResetLeaderboardInfo)(void); + LeaderboardEntry *(*ReadLeaderboardEntry)(uint32 entryID); + + // Rich Presence + void (*SetRichPresence)(int32 id, String *text); + + // Stats + void (*TryTrackStat)(StatInfo *stat); + bool32 (*GetStatsEnabled)(void); + void (*SetStatsEnabled)(bool32 enabled); + + // Authorization + void (*ClearPrerollErrors)(void); + void (*TryAuth)(void); + int32 (*GetUserAuthStatus)(void); + bool32 (*GetUsername)(String *userName); + + // Storage + void (*TryInitStorage)(void); + int32 (*GetStorageStatus)(void); + int32 (*GetSaveStatus)(void); + void (*ClearSaveStatus)(void); + void (*SetSaveStatusContinue)(void); + void (*SetSaveStatusOK)(void); + void (*SetSaveStatusForbidden)(void); + void (*SetSaveStatusError)(void); + void (*SetNoSave)(bool32 noSave); + bool32 (*GetNoSave)(void); + + // User File Management + void (*LoadUserFile)(const char *name, void *buffer, uint32 size, void (*callback)(int32 status)); // load user file from game dir + void (*SaveUserFile)(const char *name, void *buffer, uint32 size, void (*callback)(int32 status), bool32 compressed); // save user file to game dir + void (*DeleteUserFile)(const char *name, void (*callback)(int32 status)); // delete user file from game dir + + // User DBs + uint16 (*InitUserDB)(const char *name, ...); + uint16 (*LoadUserDB)(const char *filename, void (*callback)(int32 status)); + bool32 (*SaveUserDB)(uint16 tableID, void (*callback)(int32 status)); + void (*ClearUserDB)(uint16 tableID); + void (*ClearAllUserDBs)(void); + uint16 (*SetupUserDBRowSorting)(uint16 tableID); + bool32 (*GetUserDBRowsChanged)(uint16 tableID); + int32 (*AddRowSortFilter)(uint16 tableID, int32 type, const char *name, void *value); + int32 (*SortDBRows)(uint16 tableID, int32 type, const char *name, bool32 sortAscending); + int32 (*GetSortedUserDBRowCount)(uint16 tableID); + int32 (*GetSortedUserDBRowID)(uint16 tableID, uint16 row); + int32 (*AddUserDBRow)(uint16 tableID); + bool32 (*SetUserDBValue)(uint16 tableID, uint32 row, int32 type, const char *name, void *value); + bool32 (*GetUserDBValue)(uint16 tableID, uint32 row, int32 type, const char *name, void *value); + uint32 (*GetUserDBRowUUID)(uint16 tableID, uint16 row); + uint16 (*GetUserDBRowByID)(uint16 tableID, uint32 uuid); + void (*GetUserDBRowCreationTime)(uint16 tableID, uint16 row, char *buffer, size_t bufferSize, const char *format); + bool32 (*RemoveDBRow)(uint16 tableID, uint16 row); + bool32 (*RemoveAllDBRows)(uint16 tableID); +} APIFunctionTable; +#endif + +// Function Table +typedef struct { + // Registration +#if RETRO_REV0U + void (*RegisterGlobalVariables)(void **globals, int32 size, void (*initCB)(void *globals)); + void (*RegisterObject)(void **staticVars, const char *name, uint32 entityClassSize, uint32 staticClassSize, void (*update)(void), + void (*lateUpdate)(void), void (*staticUpdate)(void), void (*draw)(void), void (*create)(void *), void (*stageLoad)(void), + void (*editorDraw)(void), void (*editorLoad)(void), void (*serialize)(void), void (*staticLoad)(void *staticVars)); +#else + void (*RegisterGlobalVariables)(void **globals, int32 size); + void (*RegisterObject)(void **staticVars, const char *name, uint32 entityClassSize, uint32 staticClassSize, void (*update)(void), + void (*lateUpdate)(void), void (*staticUpdate)(void), void (*draw)(void), void (*create)(void *), void (*stageLoad)(void), + void (*editorDraw)(void), void (*editorLoad)(void), void (*serialize)(void)); +#endif +#if RETRO_REV02 + void (*RegisterStaticVariables)(void **varClass, const char *name, uint32 classSize); +#endif + + // Entities & Objects + bool32 (*GetActiveEntities)(uint16 group, void **entity); + bool32 (*GetAllEntities)(uint16 classID, void **entity); + void (*BreakForeachLoop)(void); + void (*SetEditableVar)(uint8 type, const char *name, uint8 classID, int32 offset); + void *(*GetEntity)(uint16 slot); + int32 (*GetEntitySlot)(void *entity); + int32 (*GetEntityCount)(uint16 classID, bool32 isActive); + int32 (*GetDrawListRefSlot)(uint8 drawGroup, uint16 listPos); + void *(*GetDrawListRef)(uint8 drawGroup, uint16 listPos); + void (*ResetEntity)(void *entity, uint16 classID, void *data); + void (*ResetEntitySlot)(uint16 slot, uint16 classID, void *data); + Entity *(*CreateEntity)(uint16 classID, void *data, int32 x, int32 y); + void (*CopyEntity)(void *destEntity, void *srcEntity, bool32 clearSrcEntity); + bool32 (*CheckOnScreen)(void *entity, Vector2 *range); + bool32 (*CheckPosOnScreen)(Vector2 *position, Vector2 *range); + void (*AddDrawListRef)(uint8 drawGroup, uint16 entitySlot); + void (*SwapDrawListEntries)(uint8 drawGroup, uint16 slot1, uint16 slot2, uint16 count); + void (*SetDrawGroupProperties)(uint8 drawGroup, bool32 sorted, void (*hookCB)(void)); + + // Scene Management + void (*SetScene)(const char *categoryName, const char *sceneName); + void (*SetEngineState)(uint8 state); +#if RETRO_REV02 + void (*ForceHardReset)(bool32 shouldHardReset); +#endif + bool32 (*CheckValidScene)(void); + bool32 (*CheckSceneFolder)(const char *folderName); + void (*LoadScene)(void); + int32 (*FindObject)(const char *name); + + // Cameras + void (*ClearCameras)(void); + void (*AddCamera)(Vector2 *targetPos, int32 offsetX, int32 offsetY, bool32 worldRelative); + + // API (Rev01 only) +#if !RETRO_REV02 + void *(*GetAPIFunction)(const char *funcName); +#endif + + // Window/Video Settings + int32 (*GetVideoSetting)(int32 id); + void (*SetVideoSetting)(int32 id, int32 value); + void (*UpdateWindow)(void); + + // Math + int32 (*Sin1024)(int32 angle); + int32 (*Cos1024)(int32 angle); + int32 (*Tan1024)(int32 angle); + int32 (*ASin1024)(int32 angle); + int32 (*ACos1024)(int32 angle); + int32 (*Sin512)(int32 angle); + int32 (*Cos512)(int32 angle); + int32 (*Tan512)(int32 angle); + int32 (*ASin512)(int32 angle); + int32 (*ACos512)(int32 angle); + int32 (*Sin256)(int32 angle); + int32 (*Cos256)(int32 angle); + int32 (*Tan256)(int32 angle); + int32 (*ASin256)(int32 angle); + int32 (*ACos256)(int32 angle); + int32 (*Rand)(int32 min, int32 max); + int32 (*RandSeeded)(int32 min, int32 max, int32 *seed); + void (*SetRandSeed)(int32 seed); + uint8 (*ATan2)(int32 x, int32 y); + + // Matrices + void (*SetIdentityMatrix)(Matrix *matrix); + void (*MatrixMultiply)(Matrix *dest, Matrix *matrixA, Matrix *matrixB); + void (*MatrixTranslateXYZ)(Matrix *matrix, int32 x, int32 y, int32 z, bool32 setIdentity); + void (*MatrixScaleXYZ)(Matrix *matrix, int32 x, int32 y, int32 z); + void (*MatrixRotateX)(Matrix *matrix, int16 angle); + void (*MatrixRotateY)(Matrix *matrix, int16 angle); + void (*MatrixRotateZ)(Matrix *matrix, int16 angle); + void (*MatrixRotateXYZ)(Matrix *matrix, int16 x, int16 y, int16 z); + void (*MatrixInverse)(Matrix *dest, Matrix *matrix); + void (*MatrixCopy)(Matrix *matDest, Matrix *matSrc); + + // Strings + void (*InitString)(String *string, const char *text, uint32 textLength); + void (*CopyString)(String *dst, String *src); + void (*SetString)(String *string, const char *text); + void (*AppendString)(String *string, String *appendString); + void (*AppendText)(String *string, const char *appendText); + void (*LoadStringList)(String *stringList, const char *filePath, uint32 charSize); + bool32 (*SplitStringList)(String *splitStrings, String *stringList, int32 startStringID, int32 stringCount); + void (*GetCString)(char *destChars, String *string); + bool32 (*CompareStrings)(String *string1, String *string2, bool32 exactMatch); + + // Screens & Displays + void (*GetDisplayInfo)(int32 *displayID, int32 *width, int32 *height, int32 *refreshRate, char *text); + void (*GetWindowSize)(int32 *width, int32 *height); + int32 (*SetScreenSize)(uint8 screenID, uint16 width, uint16 height); + void (*SetClipBounds)(uint8 screenID, int32 x1, int32 y1, int32 x2, int32 y2); +#if RETRO_REV02 + void (*SetScreenVertices)(uint8 startVert2P_S1, uint8 startVert2P_S2, uint8 startVert3P_S1, uint8 startVert3P_S2, uint8 startVert3P_S3); +#endif + + // Spritesheets + uint16 (*LoadSpriteSheet)(const char *filePath, uint8 scope); + + // Palettes & Colors +#if RETRO_REV02 + void (*SetTintLookupTable)(uint16 *lookupTable); +#else + uint16 *(*GetTintLookupTable)(void); +#endif + void (*SetPaletteMask)(color maskColor); + void (*SetPaletteEntry)(uint8 bankID, uint8 index, uint32 color); + color (*GetPaletteEntry)(uint8 bankID, uint8 index); + void (*SetActivePalette)(uint8 newActiveBank, int32 startLine, int32 endLine); +#if RETRO_REV0U + void (*CopyPalette)(uint8 sourceBank, uint8 srcBankStart, uint8 destinationBank, uint8 destBankStart, uint8 count); + void (*LoadPalette)(uint8 bankID, const char *path, uint16 disabledRows); +#elif RETRO_REV02 + void (*CopyPalette)(uint8 sourceBank, uint8 srcBankStart, uint8 destinationBank, uint8 destBankStart, uint16 count); +#endif + void (*RotatePalette)(uint8 bankID, uint8 startIndex, uint8 endIndex, bool32 right); + void (*SetLimitedFade)(uint8 destBankID, uint8 srcBankA, uint8 srcBankB, int16 blendAmount, int32 startIndex, int32 endIndex); +#if RETRO_REV02 + void (*BlendColors)(uint8 destBankID, color *srcColorsA, color *srcColorsB, int32 blendAmount, int32 startIndex, int32 count); +#endif + + // Drawing + void (*DrawRect)(int32 x, int32 y, int32 width, int32 height, uint32 color, int32 alpha, int32 inkEffect, bool32 screenRelative); + void (*DrawLine)(int32 x1, int32 y1, int32 x2, int32 y2, uint32 color, int32 alpha, int32 inkEffect, bool32 screenRelative); + void (*DrawCircle)(int32 x, int32 y, int32 radius, uint32 color, int32 alpha, int32 inkEffect, bool32 screenRelative); + void (*DrawCircleOutline)(int32 x, int32 y, int32 innerRadius, int32 outerRadius, uint32 color, int32 alpha, int32 inkEffect, + bool32 screenRelative); + void (*DrawFace)(Vector2 *vertices, int32 vertCount, int32 r, int32 g, int32 b, int32 alpha, int32 inkEffect); + void (*DrawBlendedFace)(Vector2 *vertices, color *vertColors, int32 vertCount, int32 alpha, int32 inkEffect); + void (*DrawSprite)(Animator *animator, Vector2 *position, bool32 screenRelative); + void (*DrawDeformedSprite)(uint16 sheetID, int32 inkEffect, bool32 screenRelative); + void (*DrawText)(Animator *animator, Vector2 *position, String *string, int32 endFrame, int32 textLength, int32 align, int32 spacing, + void *unused, Vector2 *charOffsets, bool32 screenRelative); + void (*DrawTile)(uint16 *tiles, int32 countX, int32 countY, Vector2 *position, Vector2 *offset, bool32 screenRelative); + void (*CopyTile)(uint16 dest, uint16 src, uint16 count); + void (*DrawAniTiles)(uint16 sheetID, uint16 tileIndex, uint16 srcX, uint16 srcY, uint16 width, uint16 height); +#if RETRO_REV0U + void (*DrawDynamicAniTiles)(Animator *animator, uint16 tileIndex); +#endif + void (*FillScreen)(uint32 color, int32 alphaR, int32 alphaG, int32 alphaB); + + // Meshes & 3D Scenes + uint16 (*LoadMesh)(const char *filename, uint8 scope); + uint16 (*Create3DScene)(const char *identifier, uint16 faceCount, uint8 scope); + void (*Prepare3DScene)(uint16 sceneIndex); + void (*SetDiffuseColor)(uint16 sceneIndex, uint8 x, uint8 y, uint8 z); + void (*SetDiffuseIntensity)(uint16 sceneIndex, uint8 x, uint8 y, uint8 z); + void (*SetSpecularIntensity)(uint16 sceneIndex, uint8 x, uint8 y, uint8 z); + void (*AddModelTo3DScene)(uint16 modelFrames, uint16 sceneIndex, uint8 drawMode, Matrix *matWorld, Matrix *matView, color color); + void (*SetModelAnimation)(uint16 modelFrames, Animator *animator, int16 speed, uint8 loopIndex, bool32 forceApply, int16 frameID); + void (*AddMeshFrameTo3DScene)(uint16 modelFrames, uint16 sceneIndex, Animator *animator, uint8 drawMode, Matrix *matWorld, Matrix *matView, + color color); + void (*Draw3DScene)(uint16 sceneIndex); + + // Sprite Animations & Frames + uint16 (*LoadSpriteAnimation)(const char *filePath, uint8 scope); + uint16 (*CreateSpriteAnimation)(const char *filePath, uint32 frameCount, uint32 listCount, uint8 scope); +#if RETRO_REV0U || RETRO_MOD_LOADER_VER >= 2 + void (*SetSpriteAnimation)(uint16 aniFrames, uint16 listID, Animator *animator, bool32 forceApply, int32 frameID); +#else + void (*SetSpriteAnimation)(uint16 aniFrames, uint16 listID, Animator *animator, bool32 forceApply, int16 frameID); +#endif + void (*EditSpriteAnimation)(uint16 aniFrames, uint16 listID, const char *name, int32 frameOffset, uint16 frameCount, int16 speed, uint8 loopIndex, + uint8 rotationStyle); + void (*SetSpriteString)(uint16 aniFrames, uint16 listID, String *string); + uint16 (*FindSpriteAnimation)(uint16 aniFrames, const char *name); + SpriteFrame *(*GetFrame)(uint16 aniFrames, uint16 listID, int32 frameID); + Hitbox *(*GetHitbox)(Animator *animator, uint8 hitboxID); + int16 (*GetFrameID)(Animator *animator); + int32 (*GetStringWidth)(uint16 aniFrames, uint16 listID, String *string, int32 startIndex, int32 length, int32 spacing); + void (*ProcessAnimation)(Animator *animator); + + // Tile Layers + uint16 (*GetTileLayerID)(const char *name); + TileLayer *(*GetTileLayer)(uint16 layerID); + void (*GetLayerSize)(uint16 layer, Vector2 *size, bool32 usePixelUnits); + uint16 (*GetTile)(uint16 layer, int32 x, int32 y); + void (*SetTile)(uint16 layer, int32 x, int32 y, uint16 tile); + void (*CopyTileLayer)(uint16 dstLayerID, int32 dstStartX, int32 dstStartY, uint16 srcLayerID, int32 srcStartX, int32 srcStartY, int32 countX, + int32 countY); + void (*ProcessParallax)(TileLayer *tileLayer); + ScanlineInfo *(*GetScanlines)(void); + + // Object & Tile Collisions + bool32 (*CheckObjectCollisionTouchBox)(void *thisEntity, Hitbox *thisHitbox, void *otherEntity, Hitbox *otherHitbox); + bool32 (*CheckObjectCollisionTouchCircle)(void *thisEntity, int32 thisRadius, void *otherEntity, int32 otherRadius); + uint8 (*CheckObjectCollisionBox)(void *thisEntity, Hitbox *thisHitbox, void *otherEntity, Hitbox *otherHitbox, bool32 setPos); + bool32 (*CheckObjectCollisionPlatform)(void *thisEntity, Hitbox *thisHitbox, void *otherEntity, Hitbox *otherHitbox, bool32 setPos); + bool32 (*ObjectTileCollision)(void *entity, uint16 collisionLayers, uint8 collisionMode, uint8 collisionPlane, int32 xOffset, int32 yOffset, + bool32 setPos); + bool32 (*ObjectTileGrip)(void *entity, uint16 collisionLayers, uint8 collisionMode, uint8 collisionPlane, int32 xOffset, int32 yOffset, + int32 tolerance); + void (*ProcessObjectMovement)(void *entity, Hitbox *outer, Hitbox *inner); +#if RETRO_REV0U + void (*SetupCollisionConfig)(int32 minDistance, uint8 lowTolerance, uint8 highTolerance, uint8 floorAngleTolerance, uint8 wallAngleTolerance, + uint8 roofAngleTolerance); + void (*SetPathGripSensors)(CollisionSensor *sensors); // expects 5 sensors + void (*FindFloorPosition)(CollisionSensor *sensor); + void (*FindLWallPosition)(CollisionSensor *sensor); + void (*FindRoofPosition)(CollisionSensor *sensor); + void (*FindRWallPosition)(CollisionSensor *sensor); + void (*FloorCollision)(CollisionSensor *sensor); + void (*LWallCollision)(CollisionSensor *sensor); + void (*RoofCollision)(CollisionSensor *sensor); + void (*RWallCollision)(CollisionSensor *sensor); +#endif + int32 (*GetTileAngle)(uint16 tile, uint8 cPlane, uint8 cMode); + void (*SetTileAngle)(uint16 tile, uint8 cPlane, uint8 cMode, uint8 angle); + uint8 (*GetTileFlags)(uint16 tile, uint8 cPlane); + void (*SetTileFlags)(uint16 tile, uint8 cPlane, uint8 flag); +#if RETRO_REV0U + void (*CopyCollisionMask)(uint16 dst, uint16 src, uint8 cPlane, uint8 cMode); + void (*GetCollisionInfo)(CollisionMask **masks, TileInfo **tileInfo); +#endif + + // Audio + uint16 (*GetSfx)(const char *path); + int32 (*PlaySfx)(uint16 sfx, int32 loopPoint, int32 priority); + void (*StopSfx)(uint16 sfx); + int32 (*PlayStream)(const char *filename, uint32 channel, uint32 startPos, uint32 loopPoint, bool32 loadASync); + void (*SetChannelAttributes)(uint8 channel, float volume, float pan, float speed); + void (*StopChannel)(uint32 channel); + void (*PauseChannel)(uint32 channel); + void (*ResumeChannel)(uint32 channel); + bool32 (*IsSfxPlaying)(uint16 sfx); + bool32 (*ChannelActive)(uint32 channel); + uint32 (*GetChannelPos)(uint32 channel); + + // Videos & "HD Images" + bool32 (*LoadVideo)(const char *filename, double startDelay, bool32 (*skipCallback)(void)); + bool32 (*LoadImage)(const char *filename, double displayLength, double fadeSpeed, bool32 (*skipCallback)(void)); + + // Input +#if RETRO_REV02 + uint32 (*GetInputDeviceID)(uint8 inputSlot); + uint32 (*GetFilteredInputDeviceID)(bool32 confirmOnly, bool32 unassignedOnly, uint32 maxInactiveTimer); + int32 (*GetInputDeviceType)(uint32 deviceID); + bool32 (*IsInputDeviceAssigned)(uint32 deviceID); + int32 (*GetInputDeviceUnknown)(uint32 deviceID); + int32 (*InputDeviceUnknown1)(uint32 deviceID, int32 unknown1, int32 unknown2); + int32 (*InputDeviceUnknown2)(uint32 deviceID, int32 unknown1, int32 unknown2); + int32 (*GetInputSlotUnknown)(uint8 inputSlot); + int32 (*InputSlotUnknown1)(uint8 inputSlot, int32 unknown1, int32 unknown2); + int32 (*InputSlotUnknown2)(uint8 inputSlot, int32 unknown1, int32 unknown2); + void (*AssignInputSlotToDevice)(uint8 inputSlot, uint32 deviceID); + bool32 (*IsInputSlotAssigned)(uint8 inputSlot); + void (*ResetInputSlotAssignments)(void); +#endif +#if !RETRO_REV02 + void (*GetUnknownInputValue)(int32 inputSlot, int32 type, int32 *value); +#endif + + // User File Management + bool32 (*LoadUserFile)(const char *fileName, void *buffer, uint32 size); // load user file from exe dir + bool32 (*SaveUserFile)(const char *fileName, void *buffer, uint32 size); // save user file to exe dir + + // Printing (Rev02) +#if RETRO_REV02 + void (*PrintLog)(int32 mode, const char *message, ...); + void (*PrintText)(int32 mode, const char *message); + void (*PrintString)(int32 mode, String *message); + void (*PrintUInt32)(int32 mode, const char *message, uint32 i); + void (*PrintInt32)(int32 mode, const char *message, int32 i); + void (*PrintFloat)(int32 mode, const char *message, float f); + void (*PrintVector2)(int32 mode, const char *message, Vector2 vec); + void (*PrintHitbox)(int32 mode, const char *message, Hitbox hitbox); +#endif + + // Editor + void (*SetActiveVariable)(int32 classID, const char *name); + void (*AddVarEnumValue)(const char *name); + + // Printing (Rev01) +#if !RETRO_REV02 + void (*PrintMessage)(void *message, uint8 type); +#endif + + // Debugging +#if RETRO_REV02 + void (*ClearViewableVariables)(void); + void (*AddViewableVariable)(const char *name, void *value, int32 type, int32 min, int32 max); +#endif + +#if RETRO_REV0U + // Origins Extras + void (*NotifyCallback)(int32 callbackID, int32 param1, int32 param2, int32 param3); + void (*SetGameFinished)(void); + void (*StopAllSfx)(void); +#endif +} RSDKFunctionTable; + +// ------------------------- +// HELPERS +// ------------------------- + +#if RETRO_REV0U +// used for casts and etc +#define Type_StateMachine void (*)(Entity *) +// used for variable decl +#define StateMachine(name) void (*name)(Entity *) +#if RETRO_USE_MOD_LOADER +#define StateMachine_Run2(state, entity) Mod.StateMachineRun(state, entity) +#define StateMachine_Run(state) Mod.StateMachineRun(state, NULL) +#else +#define StateMachine_Run(state, entity) \ + if (state) { \ + state(entity); \ + } +#endif +#else +// used for casts and etc +#define Type_StateMachine void (*)(void) +// used for variable decl +#define StateMachine(name) void (*name)(void) +#if RETRO_USE_MOD_LOADER +#define StateMachine_Run(state) Mod.StateMachineRun(state) +#else +#define StateMachine_Run(state) \ + if (state) { \ + state(); \ + } +#endif +#endif +#define StateMachine_None NULL + +// Fancy macro + build magic to make tables & static vars +#define TABLE(var, ...) var +#define STATIC(var, val) var + +#define RSDK_EDITABLE_VAR(object, type, var) RSDK.SetEditableVar(type, #var, (uint8)object->classID, offsetof(Entity##object, var)) +#define RSDK_EDITABLE_ARRAY(object, type, var, count, arrType) \ + for (int i = 0; i < (count); ++i) { \ + char buffer[0x40]; \ + sprintf_s(buffer, (int32)sizeof(buffer), "%s%d", #var, i); \ + RSDK.SetEditableVar(type, buffer, (uint8)object->classID, offsetof(Entity##object, var) + sizeof(arrType) * i); \ + } + +// Some extra precaution to prevent crashes in editor +#define RSDK_ACTIVE_VAR(object, var) \ + if (object) { \ + RSDK.SetActiveVariable(object->classID, #var); \ + } \ + else { \ + RSDK.SetActiveVariable(-1, #var); \ + } +#define RSDK_ENUM_VAR(name, var) RSDK.AddVarEnumValue(name) + +#if GAME_INCLUDE_EDITOR +#define RSDK_DRAWING_OVERLAY(isDrawingOverlay) SceneInfo->debugMode = isDrawingOverlay + +#if RETRO_REV0U +#define RSDK_REGISTER_OBJECT(object) \ + RSDK.RegisterObject((void **)&object, #object, sizeof(Entity##object), sizeof(Object##object), object##_Update, object##_LateUpdate, \ + object##_StaticUpdate, object##_Draw, object##_Create, object##_StageLoad, object##_EditorDraw, object##_EditorLoad, \ + object##_Serialize, NULL) + +#define RSDK_REGISTER_OBJECT_STATICLOAD(object) \ + RSDK.RegisterObject((void **)&object, #object, sizeof(Entity##object), sizeof(Object##object), object##_Update, object##_LateUpdate, \ + object##_StaticUpdate, object##_Draw, object##_Create, object##_StageLoad, object##_EditorDraw, object##_EditorLoad, \ + object##_Serialize, object##_StaticLoad) +#else +#define RSDK_REGISTER_OBJECT(object) \ + RSDK.RegisterObject((void **)&object, #object, sizeof(Entity##object), sizeof(Object##object), object##_Update, object##_LateUpdate, \ + object##_StaticUpdate, object##_Draw, object##_Create, object##_StageLoad, object##_EditorDraw, object##_EditorLoad, \ + object##_Serialize) +#endif + +#else + +#if RETRO_REV0U +#define RSDK_REGISTER_OBJECT(object) \ + RSDK.RegisterObject((void **)&object, #object, sizeof(Entity##object), sizeof(Object##object), object##_Update, object##_LateUpdate, \ + object##_StaticUpdate, object##_Draw, object##_Create, object##_StageLoad, NULL, NULL, object##_Serialize, NULL) + +#define RSDK_REGISTER_OBJECT_STATICLOAD(object) \ + RSDK.RegisterObject((void **)&object, #object, sizeof(Entity##object), sizeof(Object##object), object##_Update, object##_LateUpdate, \ + object##_StaticUpdate, object##_Draw, object##_Create, object##_StageLoad, NULL, NULL, object##_Serialize, \ + object##_StaticLoad) +#else +#define RSDK_REGISTER_OBJECT(object) \ + RSDK.RegisterObject((void **)&object, #object, sizeof(Entity##object), sizeof(Object##object), object##_Update, object##_LateUpdate, \ + object##_StaticUpdate, object##_Draw, object##_Create, object##_StageLoad, NULL, NULL, object##_Serialize) +#endif + +#endif + +#if RETRO_USE_MOD_LOADER + +// dear god. + +#if RETRO_REV0U + +// Excludes StaticLoad (Parity With REV01 & REV02) +#define MOD_REGISTER_OBJECT(object, inherit, update, lateUpdate, staticUpdate, draw, create, stageLoad, editorDraw, editorLoad, serialize) \ + Mod.RegisterObject((void **)&object, NULL, #object, sizeof(Entity##object), sizeof(Object##object), 0, update, lateUpdate, staticUpdate, draw, \ + create, stageLoad, editorDraw, editorLoad, serialize, NULL, inherit) + +#define MOD_REGISTER_OBJ_OVERLOAD(object, update, lateUpdate, staticUpdate, draw, create, stageLoad, editorDraw, editorLoad, serialize) \ + MOD_REGISTER_OBJECT(object, #object, update, lateUpdate, staticUpdate, draw, create, stageLoad, editorDraw, editorLoad, serialize) + +#define MOD_REGISTER_OBJ_OVERLOAD_NOCLASS(object, update, lateUpdate, staticUpdate, draw, create, stageLoad, editorDraw, editorLoad, serialize) \ + Mod.RegisterObject(NULL, NULL, #object, sizeof(Entity##object), 0, 0, update, lateUpdate, staticUpdate, draw, create, stageLoad, editorDraw, \ + editorLoad, serialize, NULL, NULL) + +#define MOD_REGISTER_OBJ_OVERLOAD_MSV(object, modSVars, update, lateUpdate, staticUpdate, draw, create, stageLoad, editorDraw, editorLoad, \ + serialize) \ + Mod.RegisterObject((void **)&object, (void **)&modSVars, #object, sizeof(Entity##object), sizeof(Object##object), sizeof(ModObject##object), \ + update, lateUpdate, staticUpdate, draw, create, stageLoad, editorDraw, editorLoad, serialize, NULL, NULL) + +#define MOD_REGISTER_OBJ_OVERLOAD_MSV_NOCLASS(object, modSVars, update, lateUpdate, staticUpdate, draw, create, stageLoad, editorDraw, editorLoad, \ + serialize) \ + Mod.RegisterObject(NULL, (void **)&modSVars, #object, sizeof(Entity##object), 0, sizeof(ModObject##object), update, lateUpdate, staticUpdate, \ + draw, create, stageLoad, editorDraw, editorLoad, serialize, NULL, NULL) + +// Includes StaticLoad +#define MOD_REGISTER_OBJECT_STATIC(object, inherit, update, lateUpdate, staticUpdate, draw, create, stageLoad, editorDraw, editorLoad, serialize, \ + staticLoad) \ + Mod.RegisterObject((void **)&object, NULL, #object, sizeof(Entity##object), sizeof(Object##object), 0, update, lateUpdate, staticUpdate, draw, \ + create, stageLoad, editorDraw, editorLoad, serialize, staticLoad, inherit) + +#define MOD_REGISTER_OBJ_OVERLOAD_STATIC(object, update, lateUpdate, staticUpdate, draw, create, stageLoad, editorDraw, editorLoad, serialize, \ + staticLoad) \ + MOD_REGISTER_OBJECT(object, #object, update, lateUpdate, staticUpdate, draw, create, stageLoad, editorDraw, editorLoad, serialize, staticLoad) + +#define MOD_REGISTER_OBJ_OVERLOAD_NOCLASS_STATIC(object, update, lateUpdate, staticUpdate, draw, create, stageLoad, editorDraw, editorLoad, \ + serialize, staticLoad) \ + Mod.RegisterObject(NULL, NULL, #object, sizeof(Entity##object), 0, 0, update, lateUpdate, staticUpdate, draw, create, stageLoad, editorDraw, \ + editorLoad, serialize, staticLoad, NULL) + +#define MOD_REGISTER_OBJ_OVERLOAD_MSV_STATIC(object, modSVars, update, lateUpdate, staticUpdate, draw, create, stageLoad, editorDraw, editorLoad, \ + serialize, staticLoad) \ + Mod.RegisterObject((void **)&object, (void **)&modSVars, #object, sizeof(Entity##object), sizeof(Object##object), sizeof(ModObject##object), \ + update, lateUpdate, staticUpdate, draw, create, stageLoad, editorDraw, editorLoad, serialize, staticLoad, NULL) + +#define MOD_REGISTER_OBJ_OVERLOAD_MSV_NOCLASS_STATIC(object, modSVars, update, lateUpdate, staticUpdate, draw, create, stageLoad, editorDraw, \ + editorLoad, serialize, staticLoad) \ + Mod.RegisterObject(NULL, (void **)&modSVars, #object, sizeof(Entity##object), 0, sizeof(ModObject##object), update, lateUpdate, staticUpdate, \ + draw, create, stageLoad, editorDraw, editorLoad, serialize, staticLoad, NULL) + +#else + +#define MOD_REGISTER_OBJECT(object, inherit, update, lateUpdate, staticUpdate, draw, create, stageLoad, editorDraw, editorLoad, serialize) \ + Mod.RegisterObject((void **)&object, NULL, #object, sizeof(Entity##object), sizeof(Object##object), 0, update, lateUpdate, staticUpdate, draw, \ + create, stageLoad, editorDraw, editorLoad, serialize, inherit) + +#define MOD_REGISTER_OBJ_OVERLOAD(object, update, lateUpdate, staticUpdate, draw, create, stageLoad, editorDraw, editorLoad, serialize) \ + MOD_REGISTER_OBJECT(object, #object, update, lateUpdate, staticUpdate, draw, create, stageLoad, editorDraw, editorLoad, serialize) + +#define MOD_REGISTER_OBJ_OVERLOAD_NOCLASS(object, update, lateUpdate, staticUpdate, draw, create, stageLoad, editorDraw, editorLoad, serialize) \ + Mod.RegisterObject(NULL, NULL, #object, sizeof(Entity##object), 0, 0, update, lateUpdate, staticUpdate, draw, create, stageLoad, editorDraw, \ + editorLoad, serialize, NULL) + +#define MOD_REGISTER_OBJ_OVERLOAD_MSV(object, modSVars, update, lateUpdate, staticUpdate, draw, create, stageLoad, editorDraw, editorLoad, \ + serialize) \ + Mod.RegisterObject((void **)&object, (void **)&modSVars, #object, sizeof(Entity##object), sizeof(Object##object), sizeof(ModObject##object), \ + update, lateUpdate, staticUpdate, draw, create, stageLoad, editorDraw, editorLoad, serialize, NULL) + +#define MOD_REGISTER_OBJ_OVERLOAD_MSV_NOCLASS(object, modSVars, update, lateUpdate, staticUpdate, draw, create, stageLoad, editorDraw, editorLoad, \ + serialize) \ + Mod.RegisterObject(NULL, (void **)&modSVars, #object, sizeof(Entity##object), 0, sizeof(ModObject##object), update, lateUpdate, staticUpdate, \ + draw, create, stageLoad, editorDraw, editorLoad, serialize, NULL) +#endif + +#define MOD_REGISTER_OBJECT_HOOK(object) Mod.RegisterObjectHook((void **)&object, #object) + +#define GET_PUBLIC_FUNC(modID, name, returnType, ...) returnType (*name)(__VA_ARGS__) = Mod.GetPublicFunction(modID, #name) +#endif + +#if RETRO_REV02 +#define RSDK_REGISTER_STATIC_VARIABLES(variables) RSDK.RegisterStaticVariables((void **)&variables, #variables, sizeof(Object##variables)) +#endif + +#define RSDK_THIS(class) Entity##class *self = (Entity##class *)SceneInfo->entity +#define RSDK_THIS_GEN() Entity *self = SceneInfo->entity +#define RSDK_GET_ENTITY(slot, class) ((Entity##class *)RSDK.GetEntity(slot)) +#define RSDK_GET_ENTITY_GEN(slot) ((Entity *)RSDK.GetEntity(slot)) +#define CREATE_ENTITY(object, data, x, y) ((Entity##object *)RSDK.CreateEntity(object->classID, data, x, y)) + +#define INIT_STRING(string) \ + string.chars = NULL; \ + string.length = 0; \ + string.size = 0 + +// Initializes entity values to the defaults +#define INIT_ENTITY(entity) \ + (entity)->active = ACTIVE_BOUNDS; \ + (entity)->visible = false; \ + (entity)->updateRange.x = TO_FIXED(128); \ + (entity)->updateRange.y = TO_FIXED(128); + +#define foreach_active(type, entityOut) \ + Entity##type *entityOut = NULL; \ + while (RSDK.GetActiveEntities(type->classID, (void **)&entityOut)) +#define foreach_all(type, entityOut) \ + Entity##type *entityOut = NULL; \ + while (RSDK.GetAllEntities(type->classID, (void **)&entityOut)) + +#define foreach_active_type(type, entityOut) \ + Entity *entityOut = NULL; \ + while (RSDK.GetActiveEntities(type, (void **)&entityOut)) + +#define foreach_all_type(type, entityOut) \ + Entity *entityOut = NULL; \ + while (RSDK.GetAllEntities(type, (void **)&entityOut)) + +#if RETRO_USE_MOD_LOADER + +#if RETRO_MOD_LOADER_VER >= 2 +#define foreach_active_group(group, entityOut) \ + Entity *entityOut = NULL; \ + while (Mod.GetGroupEntities(group, (void **)&entityOut)) +#endif + +#define foreach_config(text) \ + String *text = NULL; \ + while (Mod.ForeachConfig(&text)) +#define foreach_configCategory(text) \ + String *text = NULL; \ + while (Mod.ForeachConfigCategory(&text)) + +#if RETRO_MOD_LOADER_VER >= 2 + +#define foreach_setting(id, text) \ + String *text = NULL; \ + while (Mod.ForeachSetting(id, &text)) +#define foreach_settingCategory(id, text) \ + String *text = NULL; \ + while (Mod.ForeachSettingCategory(id, &text)) +#endif + +#endif + +#define foreach_break \ + RSDK.BreakForeachLoop(); \ + break +#define foreach_return \ + RSDK.BreakForeachLoop(); \ + return + +#define destroyEntity(entity) RSDK.ResetEntity(entity, TYPE_BLANK, NULL) +#define destroyEntitySlot(slot) RSDK.ResetEntitySlot(slot, TYPE_BLANK, NULL) + +#if GAME_INCLUDE_EDITOR +#define showGizmos() (SceneInfo->listPos == SceneInfo->entitySlot || SceneInfo->effectGizmo) +#endif + +// ------------------------- +// ENGINE VARIABLES +// ------------------------- + +extern RSDKFunctionTable RSDK; +#if RETRO_REV02 +extern APIFunctionTable API; +#endif +#if RETRO_USE_MOD_LOADER +extern ModFunctionTable Mod; + +extern const char *modID; +#endif + +extern RSDKSceneInfo *SceneInfo; +extern RSDKGameInfo *GameInfo; +#if RETRO_REV02 +extern RSDKSKUInfo *SKU; +#endif +extern RSDKControllerState *ControllerInfo; +extern RSDKAnalogState *AnalogStickInfoL; +#if RETRO_REV02 +extern RSDKAnalogState *AnalogStickInfoR; +extern RSDKTriggerState *TriggerInfoL; +extern RSDKTriggerState *TriggerInfoR; +#endif +extern RSDKTouchInfo *TouchInfo; +#if RETRO_REV02 +extern RSDKUnknownInfo *UnknownInfo; +#endif +extern RSDKScreenInfo *ScreenInfo; + +#endif /* GAMELINK_H */ diff --git a/S3KOEditorLink/GameObjects.h b/S3KOEditorLink/GameObjects.h new file mode 100644 index 0000000..e53c181 --- /dev/null +++ b/S3KOEditorLink/GameObjects.h @@ -0,0 +1,23 @@ +#ifndef GAMEOBJECTS_H +#define GAMEOBJECTS_H + +#ifdef _MSC_VER +#define DLLExport __declspec(dllexport) +#else +#define DLLExport +#endif + +#if RETRO_REV02 +DLLExport void LinkGameLogicDLL(EngineInfo *info); +#else +DLLExport void LinkGameLogicDLL(EngineInfo info); +#endif + +#if RETRO_USE_MOD_LOADER +DLLExport bool32 LinkModLogic(EngineInfo *info, const char *id); +#endif + +// custom-added extra little bit of info to let the engine know what RSDK version it is +DLLExport extern int32 RSDKRevision; + +#endif //! GAMEOBJECTS_H \ No newline at end of file diff --git a/S3KOEditorLink/GamePatches.c b/S3KOEditorLink/GamePatches.c new file mode 100644 index 0000000..832c71b --- /dev/null +++ b/S3KOEditorLink/GamePatches.c @@ -0,0 +1,88 @@ +#include "S3KOEditorLink.h" + +#define WRITE_BYTE(offset, val) WRITE_MEMORY(ORIGINS_ADDR(offset), (char)val) +#define INSTALL_HOOK_VAR(functionName, addr) original##functionName = addr; INSTALL_HOOK(functionName); +#define WRITE_POINTER(location, pointer) \ + { \ + DWORD oldProtect; \ + VirtualProtect((void*)location, sizeof(void*), PAGE_EXECUTE_READWRITE, &oldProtect); \ + *(void**)location = pointer; \ + VirtualProtect((void*)location, sizeof(void*), oldProtect, NULL); \ + } + +// Hooks +HOOK(void*, __fastcall, AllocateHeap, NULL, size_t size) +{ + return malloc(size); +} +HOOK(void, __fastcall, FreeHeap, NULL, void* buffer) +{ + free(buffer); +} + +HOOK(void, __fastcall, DrawDebugString, NULL, Vector2 pos, const char* format, ...) +{ + // Start processing variable arguments + va_list args; + va_start(args, format); + char buffer[256]; + memset(buffer, 0, sizeof(buffer)); + vsnprintf(buffer, sizeof(buffer), format, args); + + // RSDK start + uint16 ani = RSDK.LoadSpriteAnimation("Dev/Font.bin", SCOPE_STAGE); + Animator animator; + int32 startX = pos.x; + + for (int i = 0; buffer[i]; ++i) + { + char chr = buffer[i]; + if (chr == '\n') + { + pos.x = startX; + pos.y += TO_FIXED(8); + continue; + } + + RSDK.SetSpriteAnimation(ani, 0, &animator, true, chr); + RSDK.DrawSprite(&animator, &pos, false); + pos.x += TO_FIXED(8); + } + + // Clean up variable arguments + va_end(args); +} + +HOOK(void, __fastcall, Platform_Create, NULL, void* self, void* data) +{ + if (SceneInfo->inEditor && *((uint8*)ORIGINS_ADDR(0x1A54FA)) != 0xE9) + WRITE_MEMORY(ORIGINS_ADDR(0x1A54FA), (char)0xE9, (char)0xD0, (char)0x02, (char)0x00, (char)0x00, (char)0x90); + + originalPlatform_Create(self, data); +} + + +void ApplyPatches() +{ + if (!OriginsModule) + return; + + // Hooks + INSTALL_HOOK_VAR(AllocateHeap, ORIGINS_ADDR(0xA79040)); + INSTALL_HOOK_VAR(FreeHeap, ORIGINS_ADDR(0xA79000)); + + INSTALL_HOOK_VAR(DrawDebugString, ORIGINS_ADDR(0x184870)); + INSTALL_HOOK_VAR(Platform_Create, ORIGINS_ADDR(0x1A4D70)); + + // Imports (IAT?) + WRITE_POINTER((OriginsModule + 0xAA54B8), GetSystemTimeAsFileTime); + + // Object patches + WRITE_BYTE(0x03DFDA, 0x51); // ThreePath_EditorLoad + WRITE_BYTE(0x0438B5, 0x51); // S3K_EndingSetup_StaticLoad + WRITE_BYTE(0x02BB30, 0x51); // S3K_FBZSetup_StaticLoad + WRITE_BYTE(0x1C0CD0, 0xC3); // BoundsMarker_StageLoad + WRITE_BYTE(0x1AF600, 0xC3); // PlatformControl_StageLoad + WRITE_BYTE(0x1A3340, 0xC3); // GenericTrigger_StageLoad + WRITE_BYTE(0x279A40, 0xC3); // This object needs attention +} diff --git a/S3KOEditorLink/GamePatches.h b/S3KOEditorLink/GamePatches.h new file mode 100644 index 0000000..92d3ff0 --- /dev/null +++ b/S3KOEditorLink/GamePatches.h @@ -0,0 +1,6 @@ +#ifndef GAMEPATCHES_H +#define GAMEPATCHES_H + +extern void ApplyPatches(); + +#endif /* GAMEPATCHES_H */ \ No newline at end of file diff --git a/S3KOEditorLink/S3KOEditorLink.h b/S3KOEditorLink/S3KOEditorLink.h new file mode 100644 index 0000000..93d3683 --- /dev/null +++ b/S3KOEditorLink/S3KOEditorLink.h @@ -0,0 +1,12 @@ +#ifndef S3KOEDITORLINK_H +#define S3KOEDITORLINK_H +#include "Game.h" +#include + +#define ORIGINS_ADDR(offset) ((void*)((intptr_t)OriginsModule + offset)) + +// Module +extern HMODULE LinkModule; +extern HMODULE OriginsModule; + +#endif /* S3KOEDITORLINK_H */ \ No newline at end of file diff --git a/S3KOEditorLink/S3KOEditorLink.vcxproj b/S3KOEditorLink/S3KOEditorLink.vcxproj new file mode 100644 index 0000000..1945f2f --- /dev/null +++ b/S3KOEditorLink/S3KOEditorLink.vcxproj @@ -0,0 +1,107 @@ + + + + + Debug + x64 + + + Release + x64 + + + + 16.0 + Win32Proj + {af540ccc-dfb0-4ec4-a302-af115fd31f8f} + S3KOEditorLink + 10.0 + + + + DynamicLibrary + true + v143 + Unicode + + + DynamicLibrary + false + v143 + true + Unicode + + + + + + + + + + + + + + + Game + $(ProjectDir)include;$(IncludePath) + $(ProjectDir)lib;$(LibraryPath) + + + Game + $(ProjectDir)include;$(IncludePath) + $(ProjectDir)lib;$(LibraryPath) + + + + Level3 + true + _DEBUG;S3KOEDITORLINK_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + NotUsing + pch.h + + + Windows + true + false + Dbghelp.lib;detours.lib;%(AdditionalDependencies) + + + + + Level3 + true + true + true + NDEBUG;S3KOEDITORLINK_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + NotUsing + pch.h + + + Windows + true + true + true + false + Dbghelp.lib;detours.lib;%(AdditionalDependencies) + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/S3KOEditorLink/S3KOEditorLink.vcxproj.filters b/S3KOEditorLink/S3KOEditorLink.vcxproj.filters new file mode 100644 index 0000000..c87a2e7 --- /dev/null +++ b/S3KOEditorLink/S3KOEditorLink.vcxproj.filters @@ -0,0 +1,45 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + + + Source Files + + + Source Files + + + Source Files + + + \ No newline at end of file diff --git a/S3KOEditorLink/dllmain.c b/S3KOEditorLink/dllmain.c new file mode 100644 index 0000000..87a9399 --- /dev/null +++ b/S3KOEditorLink/dllmain.c @@ -0,0 +1,26 @@ +// dllmain.cpp : Defines the entry point for the DLL application. +#include "S3KOEditorLink.h" + +BOOL APIENTRY DllMain( HMODULE hModule, + DWORD ul_reason_for_call, + LPVOID lpReserved + ) +{ + switch (ul_reason_for_call) + { + case DLL_PROCESS_ATTACH: + LinkModule = hModule; + break; + case DLL_THREAD_ATTACH: + case DLL_THREAD_DETACH: + break; + case DLL_PROCESS_DETACH: + if (OriginsModule) + FreeLibrary(OriginsModule); + OriginsModule = NULL; + break; + } + + return TRUE; +} + diff --git a/S3KOEditorLink/include/Helpers.h b/S3KOEditorLink/include/Helpers.h new file mode 100644 index 0000000..117fbc2 --- /dev/null +++ b/S3KOEditorLink/include/Helpers.h @@ -0,0 +1,61 @@ +#pragma once + +#define WIN32_LEAN_AND_MEAN + +#include +#include + +#define FUNCTION_PTR(returnType, callingConvention, function, location, ...) \ + returnType (callingConvention *function)(__VA_ARGS__) = (returnType(callingConvention*)(__VA_ARGS__))(location) + +#define PROC_ADDRESS(libraryName, procName) \ + GetProcAddress(LoadLibrary(TEXT(libraryName)), procName) + +#define HOOK(returnType, callingConvention, functionName, location, ...) \ + typedef returnType callingConvention functionName(__VA_ARGS__); \ + functionName* original##functionName = (functionName*)(location); \ + returnType callingConvention implOf##functionName(__VA_ARGS__) + +#define INSTALL_HOOK(functionName) \ + { \ + DetourTransactionBegin(); \ + DetourUpdateThread(GetCurrentThread()); \ + DetourAttach((void**)&original##functionName, implOf##functionName); \ + DetourTransactionCommit(); \ + } + +#define VTABLE_HOOK(returnType, callingConvention, className, functionName, ...) \ + typedef returnType callingConvention functionName(className* This, __VA_ARGS__); \ + functionName* original##functionName; \ + returnType callingConvention implOf##functionName(className* This, __VA_ARGS__) + +#define INSTALL_VTABLE_HOOK(object, functionName, functionIndex) \ + { \ + void** addr = &(*(void***)object)[functionIndex]; \ + if (*addr != implOf##functionName) \ + { \ + original##functionName = (functionName*)*addr; \ + DWORD oldProtect; \ + VirtualProtect(addr, sizeof(void*), PAGE_EXECUTE_READWRITE, &oldProtect); \ + *addr = implOf##functionName; \ + VirtualProtect(addr, sizeof(void*), oldProtect, NULL); \ + } \ + } + +#define WRITE_MEMORY(location, ...) \ + { \ + const char data[] = { __VA_ARGS__ }; \ + DWORD oldProtect; \ + VirtualProtect((void*)location, sizeof(data), PAGE_EXECUTE_READWRITE, &oldProtect); \ + memcpy((void*)location, data, sizeof(data)); \ + VirtualProtect((void*)location, sizeof(data), oldProtect, NULL); \ + } + +#define WRITE_MEMORY_ARRAY(location, arr) \ + { \ + const char data[] = arr; \ + DWORD oldProtect; \ + VirtualProtect((void*)location, sizeof(data), PAGE_EXECUTE_READWRITE, &oldProtect); \ + memcpy((void*)location, data, sizeof(data)); \ + VirtualProtect((void*)location, sizeof(data), oldProtect, NULL); \ + } diff --git a/S3KOEditorLink/include/detours.h b/S3KOEditorLink/include/detours.h new file mode 100644 index 0000000..0aade5c --- /dev/null +++ b/S3KOEditorLink/include/detours.h @@ -0,0 +1,1108 @@ +///////////////////////////////////////////////////////////////////////////// +// +// Core Detours Functionality (detours.h of detours.lib) +// +// Microsoft Research Detours Package, Version 4.0.1 +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// + +#pragma once +#ifndef _DETOURS_H_ +#define _DETOURS_H_ + +#define DETOURS_VERSION 0x4c0c1 // 0xMAJORcMINORcPATCH + +////////////////////////////////////////////////////////////////////////////// +// + +#ifdef DETOURS_INTERNAL + +#define _CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS 1 +#define _ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE 1 + +#pragma warning(disable:4068) // unknown pragma (suppress) + +#if _MSC_VER >= 1900 +#pragma warning(push) +#pragma warning(disable:4091) // empty typedef +#endif + +#include +#if (_MSC_VER < 1310) +#else +#pragma warning(push) +#if _MSC_VER > 1400 +#pragma warning(disable:6102 6103) // /analyze warnings +#endif +#include +#pragma warning(pop) +#endif + +#endif // DETOURS_INTERNAL + +////////////////////////////////////////////////////////////////////////////// +// + +#undef DETOURS_X64 +#undef DETOURS_X86 +#undef DETOURS_IA64 +#undef DETOURS_ARM +#undef DETOURS_ARM64 +#undef DETOURS_BITS +#undef DETOURS_32BIT +#undef DETOURS_64BIT + +#if defined(_X86_) +#define DETOURS_X86 +#define DETOURS_OPTION_BITS 64 + +#elif defined(_AMD64_) +#define DETOURS_X64 +#define DETOURS_OPTION_BITS 32 + +#elif defined(_IA64_) +#define DETOURS_IA64 +#define DETOURS_OPTION_BITS 32 + +#elif defined(_ARM_) +#define DETOURS_ARM + +#elif defined(_ARM64_) +#define DETOURS_ARM64 + +#else +#error Unknown architecture (x86, amd64, ia64, arm, arm64) +#endif + +#ifdef _WIN64 +#undef DETOURS_32BIT +#define DETOURS_64BIT 1 +#define DETOURS_BITS 64 +// If all 64bit kernels can run one and only one 32bit architecture. +//#define DETOURS_OPTION_BITS 32 +#else +#define DETOURS_32BIT 1 +#undef DETOURS_64BIT +#define DETOURS_BITS 32 +// If all 64bit kernels can run one and only one 32bit architecture. +//#define DETOURS_OPTION_BITS 32 +#endif + +#define VER_DETOURS_BITS DETOUR_STRINGIFY(DETOURS_BITS) + +////////////////////////////////////////////////////////////////////////////// +// + +#if (_MSC_VER < 1299) +typedef LONG LONG_PTR; +typedef ULONG ULONG_PTR; +#endif + +///////////////////////////////////////////////// SAL 2.0 Annotations w/o SAL. +// +// These definitions are include so that Detours will build even if the +// compiler doesn't have full SAL 2.0 support. +// +#ifndef DETOURS_DONT_REMOVE_SAL_20 + +#ifdef DETOURS_TEST_REMOVE_SAL_20 +#undef _Analysis_assume_ +#undef _Benign_race_begin_ +#undef _Benign_race_end_ +#undef _Field_range_ +#undef _Field_size_ +#undef _In_ +#undef _In_bytecount_ +#undef _In_count_ +#undef _In_opt_ +#undef _In_opt_bytecount_ +#undef _In_opt_count_ +#undef _In_opt_z_ +#undef _In_range_ +#undef _In_reads_ +#undef _In_reads_bytes_ +#undef _In_reads_opt_ +#undef _In_reads_opt_bytes_ +#undef _In_reads_or_z_ +#undef _In_z_ +#undef _Inout_ +#undef _Inout_opt_ +#undef _Inout_z_count_ +#undef _Out_ +#undef _Out_opt_ +#undef _Out_writes_ +#undef _Outptr_result_maybenull_ +#undef _Readable_bytes_ +#undef _Success_ +#undef _Writable_bytes_ +#undef _Pre_notnull_ +#endif + +#if defined(_Deref_out_opt_z_) && !defined(_Outptr_result_maybenull_) +#define _Outptr_result_maybenull_ _Deref_out_opt_z_ +#endif + +#if defined(_In_count_) && !defined(_In_reads_) +#define _In_reads_(x) _In_count_(x) +#endif + +#if defined(_In_opt_count_) && !defined(_In_reads_opt_) +#define _In_reads_opt_(x) _In_opt_count_(x) +#endif + +#if defined(_In_opt_bytecount_) && !defined(_In_reads_opt_bytes_) +#define _In_reads_opt_bytes_(x) _In_opt_bytecount_(x) +#endif + +#if defined(_In_bytecount_) && !defined(_In_reads_bytes_) +#define _In_reads_bytes_(x) _In_bytecount_(x) +#endif + +#ifndef _In_ +#define _In_ +#endif + +#ifndef _In_bytecount_ +#define _In_bytecount_(x) +#endif + +#ifndef _In_count_ +#define _In_count_(x) +#endif + +#ifndef _In_opt_ +#define _In_opt_ +#endif + +#ifndef _In_opt_bytecount_ +#define _In_opt_bytecount_(x) +#endif + +#ifndef _In_opt_count_ +#define _In_opt_count_(x) +#endif + +#ifndef _In_opt_z_ +#define _In_opt_z_ +#endif + +#ifndef _In_range_ +#define _In_range_(x,y) +#endif + +#ifndef _In_reads_ +#define _In_reads_(x) +#endif + +#ifndef _In_reads_bytes_ +#define _In_reads_bytes_(x) +#endif + +#ifndef _In_reads_opt_ +#define _In_reads_opt_(x) +#endif + +#ifndef _In_reads_opt_bytes_ +#define _In_reads_opt_bytes_(x) +#endif + +#ifndef _In_reads_or_z_ +#define _In_reads_or_z_ +#endif + +#ifndef _In_z_ +#define _In_z_ +#endif + +#ifndef _Inout_ +#define _Inout_ +#endif + +#ifndef _Inout_opt_ +#define _Inout_opt_ +#endif + +#ifndef _Inout_z_count_ +#define _Inout_z_count_(x) +#endif + +#ifndef _Out_ +#define _Out_ +#endif + +#ifndef _Out_opt_ +#define _Out_opt_ +#endif + +#ifndef _Out_writes_ +#define _Out_writes_(x) +#endif + +#ifndef _Outptr_result_maybenull_ +#define _Outptr_result_maybenull_ +#endif + +#ifndef _Writable_bytes_ +#define _Writable_bytes_(x) +#endif + +#ifndef _Readable_bytes_ +#define _Readable_bytes_(x) +#endif + +#ifndef _Success_ +#define _Success_(x) +#endif + +#ifndef _Pre_notnull_ +#define _Pre_notnull_ +#endif + +#ifdef DETOURS_INTERNAL + +#pragma warning(disable:4615) // unknown warning type (suppress with older compilers) + +#ifndef _Benign_race_begin_ +#define _Benign_race_begin_ +#endif + +#ifndef _Benign_race_end_ +#define _Benign_race_end_ +#endif + +#ifndef _Field_size_ +#define _Field_size_(x) +#endif + +#ifndef _Field_range_ +#define _Field_range_(x,y) +#endif + +#ifndef _Analysis_assume_ +#define _Analysis_assume_(x) +#endif + +#endif // DETOURS_INTERNAL +#endif // DETOURS_DONT_REMOVE_SAL_20 + +////////////////////////////////////////////////////////////////////////////// +// +#ifndef GUID_DEFINED +#define GUID_DEFINED +typedef struct _GUID +{ + DWORD Data1; + WORD Data2; + WORD Data3; + BYTE Data4[ 8 ]; +} GUID; + +#ifdef INITGUID +#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \ + const GUID name \ + = { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } } +#else +#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \ + const GUID name +#endif // INITGUID +#endif // !GUID_DEFINED + +#if defined(__cplusplus) +#ifndef _REFGUID_DEFINED +#define _REFGUID_DEFINED +#define REFGUID const GUID & +#endif // !_REFGUID_DEFINED +#else // !__cplusplus +#ifndef _REFGUID_DEFINED +#define _REFGUID_DEFINED +#define REFGUID const GUID * const +#endif // !_REFGUID_DEFINED +#endif // !__cplusplus + +#ifndef ARRAYSIZE +#define ARRAYSIZE(x) (sizeof(x)/sizeof(x[0])) +#endif + +// +////////////////////////////////////////////////////////////////////////////// + +#ifdef __cplusplus +extern "C" { +#endif // __cplusplus + +/////////////////////////////////////////////////// Instruction Target Macros. +// +#define DETOUR_INSTRUCTION_TARGET_NONE ((PVOID)0) +#define DETOUR_INSTRUCTION_TARGET_DYNAMIC ((PVOID)(LONG_PTR)-1) +#define DETOUR_SECTION_HEADER_SIGNATURE 0x00727444 // "Dtr\0" + +extern const GUID DETOUR_EXE_RESTORE_GUID; +extern const GUID DETOUR_EXE_HELPER_GUID; + +#define DETOUR_TRAMPOLINE_SIGNATURE 0x21727444 // Dtr! +typedef struct _DETOUR_TRAMPOLINE DETOUR_TRAMPOLINE, *PDETOUR_TRAMPOLINE; + +/////////////////////////////////////////////////////////// Binary Structures. +// +#pragma pack(push, 8) +typedef struct _DETOUR_SECTION_HEADER +{ + DWORD cbHeaderSize; + DWORD nSignature; + DWORD nDataOffset; + DWORD cbDataSize; + + DWORD nOriginalImportVirtualAddress; + DWORD nOriginalImportSize; + DWORD nOriginalBoundImportVirtualAddress; + DWORD nOriginalBoundImportSize; + + DWORD nOriginalIatVirtualAddress; + DWORD nOriginalIatSize; + DWORD nOriginalSizeOfImage; + DWORD cbPrePE; + + DWORD nOriginalClrFlags; + DWORD reserved1; + DWORD reserved2; + DWORD reserved3; + + // Followed by cbPrePE bytes of data. +} DETOUR_SECTION_HEADER, *PDETOUR_SECTION_HEADER; + +typedef struct _DETOUR_SECTION_RECORD +{ + DWORD cbBytes; + DWORD nReserved; + GUID guid; +} DETOUR_SECTION_RECORD, *PDETOUR_SECTION_RECORD; + +typedef struct _DETOUR_CLR_HEADER +{ + // Header versioning + ULONG cb; + USHORT MajorRuntimeVersion; + USHORT MinorRuntimeVersion; + + // Symbol table and startup information + IMAGE_DATA_DIRECTORY MetaData; + ULONG Flags; + + // Followed by the rest of the IMAGE_COR20_HEADER +} DETOUR_CLR_HEADER, *PDETOUR_CLR_HEADER; + +typedef struct _DETOUR_EXE_RESTORE +{ + DWORD cb; + DWORD cbidh; + DWORD cbinh; + DWORD cbclr; + + PBYTE pidh; + PBYTE pinh; + PBYTE pclr; + + IMAGE_DOS_HEADER idh; + union { + IMAGE_NT_HEADERS inh; // all environments have this +#ifdef IMAGE_NT_OPTIONAL_HDR32_MAGIC // some environments do not have this + IMAGE_NT_HEADERS32 inh32; +#endif +#ifdef IMAGE_NT_OPTIONAL_HDR64_MAGIC // some environments do not have this + IMAGE_NT_HEADERS64 inh64; +#endif +#ifdef IMAGE_NT_OPTIONAL_HDR64_MAGIC // some environments do not have this + BYTE raw[sizeof(IMAGE_NT_HEADERS64) + + sizeof(IMAGE_SECTION_HEADER) * 32]; +#else + BYTE raw[0x108 + sizeof(IMAGE_SECTION_HEADER) * 32]; +#endif + }; + DETOUR_CLR_HEADER clr; + +} DETOUR_EXE_RESTORE, *PDETOUR_EXE_RESTORE; + +#ifdef IMAGE_NT_OPTIONAL_HDR64_MAGIC +C_ASSERT(sizeof(IMAGE_NT_HEADERS64) == 0x108); +#endif + +// The size can change, but assert for clarity due to the muddying #ifdefs. +#ifdef _WIN64 +C_ASSERT(sizeof(DETOUR_EXE_RESTORE) == 0x688); +#else +C_ASSERT(sizeof(DETOUR_EXE_RESTORE) == 0x678); +#endif + +typedef struct _DETOUR_EXE_HELPER +{ + DWORD cb; + DWORD pid; + DWORD nDlls; + CHAR rDlls[4]; +} DETOUR_EXE_HELPER, *PDETOUR_EXE_HELPER; + +#pragma pack(pop) + +#define DETOUR_SECTION_HEADER_DECLARE(cbSectionSize) \ +{ \ + sizeof(DETOUR_SECTION_HEADER),\ + DETOUR_SECTION_HEADER_SIGNATURE,\ + sizeof(DETOUR_SECTION_HEADER),\ + (cbSectionSize),\ + \ + 0,\ + 0,\ + 0,\ + 0,\ + \ + 0,\ + 0,\ + 0,\ + 0,\ +} + +/////////////////////////////////////////////////////////////// Helper Macros. +// +#define DETOURS_STRINGIFY(x) DETOURS_STRINGIFY_(x) +#define DETOURS_STRINGIFY_(x) #x + +///////////////////////////////////////////////////////////// Binary Typedefs. +// +typedef BOOL (CALLBACK *PF_DETOUR_BINARY_BYWAY_CALLBACK)( + _In_opt_ PVOID pContext, + _In_opt_ LPCSTR pszFile, + _Outptr_result_maybenull_ LPCSTR *ppszOutFile); + +typedef BOOL (CALLBACK *PF_DETOUR_BINARY_FILE_CALLBACK)( + _In_opt_ PVOID pContext, + _In_ LPCSTR pszOrigFile, + _In_ LPCSTR pszFile, + _Outptr_result_maybenull_ LPCSTR *ppszOutFile); + +typedef BOOL (CALLBACK *PF_DETOUR_BINARY_SYMBOL_CALLBACK)( + _In_opt_ PVOID pContext, + _In_ ULONG nOrigOrdinal, + _In_ ULONG nOrdinal, + _Out_ ULONG *pnOutOrdinal, + _In_opt_ LPCSTR pszOrigSymbol, + _In_opt_ LPCSTR pszSymbol, + _Outptr_result_maybenull_ LPCSTR *ppszOutSymbol); + +typedef BOOL (CALLBACK *PF_DETOUR_BINARY_COMMIT_CALLBACK)( + _In_opt_ PVOID pContext); + +typedef BOOL (CALLBACK *PF_DETOUR_ENUMERATE_EXPORT_CALLBACK)(_In_opt_ PVOID pContext, + _In_ ULONG nOrdinal, + _In_opt_ LPCSTR pszName, + _In_opt_ PVOID pCode); + +typedef BOOL (CALLBACK *PF_DETOUR_IMPORT_FILE_CALLBACK)(_In_opt_ PVOID pContext, + _In_opt_ HMODULE hModule, + _In_opt_ LPCSTR pszFile); + +typedef BOOL (CALLBACK *PF_DETOUR_IMPORT_FUNC_CALLBACK)(_In_opt_ PVOID pContext, + _In_ DWORD nOrdinal, + _In_opt_ LPCSTR pszFunc, + _In_opt_ PVOID pvFunc); + +// Same as PF_DETOUR_IMPORT_FUNC_CALLBACK but extra indirection on last parameter. +typedef BOOL (CALLBACK *PF_DETOUR_IMPORT_FUNC_CALLBACK_EX)(_In_opt_ PVOID pContext, + _In_ DWORD nOrdinal, + _In_opt_ LPCSTR pszFunc, + _In_opt_ PVOID* ppvFunc); + +typedef VOID * PDETOUR_BINARY; +typedef VOID * PDETOUR_LOADED_BINARY; + +//////////////////////////////////////////////////////////// Transaction APIs. +// +LONG WINAPI DetourTransactionBegin(VOID); +LONG WINAPI DetourTransactionAbort(VOID); +LONG WINAPI DetourTransactionCommit(VOID); +LONG WINAPI DetourTransactionCommitEx(_Out_opt_ PVOID **pppFailedPointer); + +LONG WINAPI DetourUpdateThread(_In_ HANDLE hThread); + +LONG WINAPI DetourAttach(_Inout_ PVOID *ppPointer, + _In_ PVOID pDetour); + +LONG WINAPI DetourAttachEx(_Inout_ PVOID *ppPointer, + _In_ PVOID pDetour, + _Out_opt_ PDETOUR_TRAMPOLINE *ppRealTrampoline, + _Out_opt_ PVOID *ppRealTarget, + _Out_opt_ PVOID *ppRealDetour); + +LONG WINAPI DetourDetach(_Inout_ PVOID *ppPointer, + _In_ PVOID pDetour); + +BOOL WINAPI DetourSetIgnoreTooSmall(_In_ BOOL fIgnore); +BOOL WINAPI DetourSetRetainRegions(_In_ BOOL fRetain); +PVOID WINAPI DetourSetSystemRegionLowerBound(_In_ PVOID pSystemRegionLowerBound); +PVOID WINAPI DetourSetSystemRegionUpperBound(_In_ PVOID pSystemRegionUpperBound); + +////////////////////////////////////////////////////////////// Code Functions. +// +PVOID WINAPI DetourFindFunction(_In_ LPCSTR pszModule, + _In_ LPCSTR pszFunction); +PVOID WINAPI DetourCodeFromPointer(_In_ PVOID pPointer, + _Out_opt_ PVOID *ppGlobals); +PVOID WINAPI DetourCopyInstruction(_In_opt_ PVOID pDst, + _Inout_opt_ PVOID *ppDstPool, + _In_ PVOID pSrc, + _Out_opt_ PVOID *ppTarget, + _Out_opt_ LONG *plExtra); +BOOL WINAPI DetourSetCodeModule(_In_ HMODULE hModule, + _In_ BOOL fLimitReferencesToModule); +PVOID WINAPI DetourAllocateRegionWithinJumpBounds(_In_ LPCVOID pbTarget, + _Out_ PDWORD pcbAllocatedSize); + +///////////////////////////////////////////////////// Loaded Binary Functions. +// +HMODULE WINAPI DetourGetContainingModule(_In_ PVOID pvAddr); +HMODULE WINAPI DetourEnumerateModules(_In_opt_ HMODULE hModuleLast); +PVOID WINAPI DetourGetEntryPoint(_In_opt_ HMODULE hModule); +ULONG WINAPI DetourGetModuleSize(_In_opt_ HMODULE hModule); +BOOL WINAPI DetourEnumerateExports(_In_ HMODULE hModule, + _In_opt_ PVOID pContext, + _In_ PF_DETOUR_ENUMERATE_EXPORT_CALLBACK pfExport); +BOOL WINAPI DetourEnumerateImports(_In_opt_ HMODULE hModule, + _In_opt_ PVOID pContext, + _In_opt_ PF_DETOUR_IMPORT_FILE_CALLBACK pfImportFile, + _In_opt_ PF_DETOUR_IMPORT_FUNC_CALLBACK pfImportFunc); + +BOOL WINAPI DetourEnumerateImportsEx(_In_opt_ HMODULE hModule, + _In_opt_ PVOID pContext, + _In_opt_ PF_DETOUR_IMPORT_FILE_CALLBACK pfImportFile, + _In_opt_ PF_DETOUR_IMPORT_FUNC_CALLBACK_EX pfImportFuncEx); + +_Writable_bytes_(*pcbData) +_Readable_bytes_(*pcbData) +_Success_(return != NULL) +PVOID WINAPI DetourFindPayload(_In_opt_ HMODULE hModule, + _In_ REFGUID rguid, + _Out_ DWORD *pcbData); + +_Writable_bytes_(*pcbData) +_Readable_bytes_(*pcbData) +_Success_(return != NULL) +PVOID WINAPI DetourFindPayloadEx(_In_ REFGUID rguid, + _Out_ DWORD * pcbData); + +DWORD WINAPI DetourGetSizeOfPayloads(_In_opt_ HMODULE hModule); + +///////////////////////////////////////////////// Persistent Binary Functions. +// + +PDETOUR_BINARY WINAPI DetourBinaryOpen(_In_ HANDLE hFile); + +_Writable_bytes_(*pcbData) +_Readable_bytes_(*pcbData) +_Success_(return != NULL) +PVOID WINAPI DetourBinaryEnumeratePayloads(_In_ PDETOUR_BINARY pBinary, + _Out_opt_ GUID *pGuid, + _Out_ DWORD *pcbData, + _Inout_ DWORD *pnIterator); + +_Writable_bytes_(*pcbData) +_Readable_bytes_(*pcbData) +_Success_(return != NULL) +PVOID WINAPI DetourBinaryFindPayload(_In_ PDETOUR_BINARY pBinary, + _In_ REFGUID rguid, + _Out_ DWORD *pcbData); + +PVOID WINAPI DetourBinarySetPayload(_In_ PDETOUR_BINARY pBinary, + _In_ REFGUID rguid, + _In_reads_opt_(cbData) PVOID pData, + _In_ DWORD cbData); +BOOL WINAPI DetourBinaryDeletePayload(_In_ PDETOUR_BINARY pBinary, _In_ REFGUID rguid); +BOOL WINAPI DetourBinaryPurgePayloads(_In_ PDETOUR_BINARY pBinary); +BOOL WINAPI DetourBinaryResetImports(_In_ PDETOUR_BINARY pBinary); +BOOL WINAPI DetourBinaryEditImports(_In_ PDETOUR_BINARY pBinary, + _In_opt_ PVOID pContext, + _In_opt_ PF_DETOUR_BINARY_BYWAY_CALLBACK pfByway, + _In_opt_ PF_DETOUR_BINARY_FILE_CALLBACK pfFile, + _In_opt_ PF_DETOUR_BINARY_SYMBOL_CALLBACK pfSymbol, + _In_opt_ PF_DETOUR_BINARY_COMMIT_CALLBACK pfCommit); +BOOL WINAPI DetourBinaryWrite(_In_ PDETOUR_BINARY pBinary, _In_ HANDLE hFile); +BOOL WINAPI DetourBinaryClose(_In_ PDETOUR_BINARY pBinary); + +/////////////////////////////////////////////////// Create Process & Load Dll. +// +typedef BOOL (WINAPI *PDETOUR_CREATE_PROCESS_ROUTINEA)( + _In_opt_ LPCSTR lpApplicationName, + _Inout_opt_ LPSTR lpCommandLine, + _In_opt_ LPSECURITY_ATTRIBUTES lpProcessAttributes, + _In_opt_ LPSECURITY_ATTRIBUTES lpThreadAttributes, + _In_ BOOL bInheritHandles, + _In_ DWORD dwCreationFlags, + _In_opt_ LPVOID lpEnvironment, + _In_opt_ LPCSTR lpCurrentDirectory, + _In_ LPSTARTUPINFOA lpStartupInfo, + _Out_ LPPROCESS_INFORMATION lpProcessInformation); + +typedef BOOL (WINAPI *PDETOUR_CREATE_PROCESS_ROUTINEW)( + _In_opt_ LPCWSTR lpApplicationName, + _Inout_opt_ LPWSTR lpCommandLine, + _In_opt_ LPSECURITY_ATTRIBUTES lpProcessAttributes, + _In_opt_ LPSECURITY_ATTRIBUTES lpThreadAttributes, + _In_ BOOL bInheritHandles, + _In_ DWORD dwCreationFlags, + _In_opt_ LPVOID lpEnvironment, + _In_opt_ LPCWSTR lpCurrentDirectory, + _In_ LPSTARTUPINFOW lpStartupInfo, + _Out_ LPPROCESS_INFORMATION lpProcessInformation); + +BOOL WINAPI DetourCreateProcessWithDllA(_In_opt_ LPCSTR lpApplicationName, + _Inout_opt_ LPSTR lpCommandLine, + _In_opt_ LPSECURITY_ATTRIBUTES lpProcessAttributes, + _In_opt_ LPSECURITY_ATTRIBUTES lpThreadAttributes, + _In_ BOOL bInheritHandles, + _In_ DWORD dwCreationFlags, + _In_opt_ LPVOID lpEnvironment, + _In_opt_ LPCSTR lpCurrentDirectory, + _In_ LPSTARTUPINFOA lpStartupInfo, + _Out_ LPPROCESS_INFORMATION lpProcessInformation, + _In_ LPCSTR lpDllName, + _In_opt_ PDETOUR_CREATE_PROCESS_ROUTINEA pfCreateProcessA); + +BOOL WINAPI DetourCreateProcessWithDllW(_In_opt_ LPCWSTR lpApplicationName, + _Inout_opt_ LPWSTR lpCommandLine, + _In_opt_ LPSECURITY_ATTRIBUTES lpProcessAttributes, + _In_opt_ LPSECURITY_ATTRIBUTES lpThreadAttributes, + _In_ BOOL bInheritHandles, + _In_ DWORD dwCreationFlags, + _In_opt_ LPVOID lpEnvironment, + _In_opt_ LPCWSTR lpCurrentDirectory, + _In_ LPSTARTUPINFOW lpStartupInfo, + _Out_ LPPROCESS_INFORMATION lpProcessInformation, + _In_ LPCSTR lpDllName, + _In_opt_ PDETOUR_CREATE_PROCESS_ROUTINEW pfCreateProcessW); + +#ifdef UNICODE +#define DetourCreateProcessWithDll DetourCreateProcessWithDllW +#define PDETOUR_CREATE_PROCESS_ROUTINE PDETOUR_CREATE_PROCESS_ROUTINEW +#else +#define DetourCreateProcessWithDll DetourCreateProcessWithDllA +#define PDETOUR_CREATE_PROCESS_ROUTINE PDETOUR_CREATE_PROCESS_ROUTINEA +#endif // !UNICODE + +BOOL WINAPI DetourCreateProcessWithDllExA(_In_opt_ LPCSTR lpApplicationName, + _Inout_opt_ LPSTR lpCommandLine, + _In_opt_ LPSECURITY_ATTRIBUTES lpProcessAttributes, + _In_opt_ LPSECURITY_ATTRIBUTES lpThreadAttributes, + _In_ BOOL bInheritHandles, + _In_ DWORD dwCreationFlags, + _In_opt_ LPVOID lpEnvironment, + _In_opt_ LPCSTR lpCurrentDirectory, + _In_ LPSTARTUPINFOA lpStartupInfo, + _Out_ LPPROCESS_INFORMATION lpProcessInformation, + _In_ LPCSTR lpDllName, + _In_opt_ PDETOUR_CREATE_PROCESS_ROUTINEA pfCreateProcessA); + +BOOL WINAPI DetourCreateProcessWithDllExW(_In_opt_ LPCWSTR lpApplicationName, + _Inout_opt_ LPWSTR lpCommandLine, + _In_opt_ LPSECURITY_ATTRIBUTES lpProcessAttributes, + _In_opt_ LPSECURITY_ATTRIBUTES lpThreadAttributes, + _In_ BOOL bInheritHandles, + _In_ DWORD dwCreationFlags, + _In_opt_ LPVOID lpEnvironment, + _In_opt_ LPCWSTR lpCurrentDirectory, + _In_ LPSTARTUPINFOW lpStartupInfo, + _Out_ LPPROCESS_INFORMATION lpProcessInformation, + _In_ LPCSTR lpDllName, + _In_opt_ PDETOUR_CREATE_PROCESS_ROUTINEW pfCreateProcessW); + +#ifdef UNICODE +#define DetourCreateProcessWithDllEx DetourCreateProcessWithDllExW +#else +#define DetourCreateProcessWithDllEx DetourCreateProcessWithDllExA +#endif // !UNICODE + +BOOL WINAPI DetourCreateProcessWithDllsA(_In_opt_ LPCSTR lpApplicationName, + _Inout_opt_ LPSTR lpCommandLine, + _In_opt_ LPSECURITY_ATTRIBUTES lpProcessAttributes, + _In_opt_ LPSECURITY_ATTRIBUTES lpThreadAttributes, + _In_ BOOL bInheritHandles, + _In_ DWORD dwCreationFlags, + _In_opt_ LPVOID lpEnvironment, + _In_opt_ LPCSTR lpCurrentDirectory, + _In_ LPSTARTUPINFOA lpStartupInfo, + _Out_ LPPROCESS_INFORMATION lpProcessInformation, + _In_ DWORD nDlls, + _In_reads_(nDlls) LPCSTR *rlpDlls, + _In_opt_ PDETOUR_CREATE_PROCESS_ROUTINEA pfCreateProcessA); + +BOOL WINAPI DetourCreateProcessWithDllsW(_In_opt_ LPCWSTR lpApplicationName, + _Inout_opt_ LPWSTR lpCommandLine, + _In_opt_ LPSECURITY_ATTRIBUTES lpProcessAttributes, + _In_opt_ LPSECURITY_ATTRIBUTES lpThreadAttributes, + _In_ BOOL bInheritHandles, + _In_ DWORD dwCreationFlags, + _In_opt_ LPVOID lpEnvironment, + _In_opt_ LPCWSTR lpCurrentDirectory, + _In_ LPSTARTUPINFOW lpStartupInfo, + _Out_ LPPROCESS_INFORMATION lpProcessInformation, + _In_ DWORD nDlls, + _In_reads_(nDlls) LPCSTR *rlpDlls, + _In_opt_ PDETOUR_CREATE_PROCESS_ROUTINEW pfCreateProcessW); + +#ifdef UNICODE +#define DetourCreateProcessWithDlls DetourCreateProcessWithDllsW +#else +#define DetourCreateProcessWithDlls DetourCreateProcessWithDllsA +#endif // !UNICODE + +BOOL WINAPI DetourProcessViaHelperA(_In_ DWORD dwTargetPid, + _In_ LPCSTR lpDllName, + _In_ PDETOUR_CREATE_PROCESS_ROUTINEA pfCreateProcessA); + +BOOL WINAPI DetourProcessViaHelperW(_In_ DWORD dwTargetPid, + _In_ LPCSTR lpDllName, + _In_ PDETOUR_CREATE_PROCESS_ROUTINEW pfCreateProcessW); + +#ifdef UNICODE +#define DetourProcessViaHelper DetourProcessViaHelperW +#else +#define DetourProcessViaHelper DetourProcessViaHelperA +#endif // !UNICODE + +BOOL WINAPI DetourProcessViaHelperDllsA(_In_ DWORD dwTargetPid, + _In_ DWORD nDlls, + _In_reads_(nDlls) LPCSTR *rlpDlls, + _In_ PDETOUR_CREATE_PROCESS_ROUTINEA pfCreateProcessA); + +BOOL WINAPI DetourProcessViaHelperDllsW(_In_ DWORD dwTargetPid, + _In_ DWORD nDlls, + _In_reads_(nDlls) LPCSTR *rlpDlls, + _In_ PDETOUR_CREATE_PROCESS_ROUTINEW pfCreateProcessW); + +#ifdef UNICODE +#define DetourProcessViaHelperDlls DetourProcessViaHelperDllsW +#else +#define DetourProcessViaHelperDlls DetourProcessViaHelperDllsA +#endif // !UNICODE + +BOOL WINAPI DetourUpdateProcessWithDll(_In_ HANDLE hProcess, + _In_reads_(nDlls) LPCSTR *rlpDlls, + _In_ DWORD nDlls); + +BOOL WINAPI DetourUpdateProcessWithDllEx(_In_ HANDLE hProcess, + _In_ HMODULE hImage, + _In_ BOOL bIs32Bit, + _In_reads_(nDlls) LPCSTR *rlpDlls, + _In_ DWORD nDlls); + +BOOL WINAPI DetourCopyPayloadToProcess(_In_ HANDLE hProcess, + _In_ REFGUID rguid, + _In_reads_bytes_(cbData) PVOID pvData, + _In_ DWORD cbData); +BOOL WINAPI DetourRestoreAfterWith(VOID); +BOOL WINAPI DetourRestoreAfterWithEx(_In_reads_bytes_(cbData) PVOID pvData, + _In_ DWORD cbData); +BOOL WINAPI DetourIsHelperProcess(VOID); +VOID CALLBACK DetourFinishHelperProcess(_In_ HWND, + _In_ HINSTANCE, + _In_ LPSTR, + _In_ INT); + +// +////////////////////////////////////////////////////////////////////////////// +#ifdef __cplusplus +} +#endif // __cplusplus + +//////////////////////////////////////////////// Detours Internal Definitions. +// +#ifdef __cplusplus +#ifdef DETOURS_INTERNAL + +#define NOTHROW +// #define NOTHROW (nothrow) + +////////////////////////////////////////////////////////////////////////////// +// +#if (_MSC_VER < 1299) +#include +typedef IMAGEHLP_MODULE IMAGEHLP_MODULE64; +typedef PIMAGEHLP_MODULE PIMAGEHLP_MODULE64; +typedef IMAGEHLP_SYMBOL SYMBOL_INFO; +typedef PIMAGEHLP_SYMBOL PSYMBOL_INFO; + +static inline +LONG InterlockedCompareExchange(_Inout_ LONG *ptr, _In_ LONG nval, _In_ LONG oval) +{ + return (LONG)::InterlockedCompareExchange((PVOID*)ptr, (PVOID)nval, (PVOID)oval); +} +#else +#pragma warning(push) +#pragma warning(disable:4091) // empty typedef +#include +#pragma warning(pop) +#endif + +#ifdef IMAGEAPI // defined by DBGHELP.H +typedef LPAPI_VERSION (NTAPI *PF_ImagehlpApiVersionEx)(_In_ LPAPI_VERSION AppVersion); + +typedef BOOL (NTAPI *PF_SymInitialize)(_In_ HANDLE hProcess, + _In_opt_ LPCSTR UserSearchPath, + _In_ BOOL fInvadeProcess); +typedef DWORD (NTAPI *PF_SymSetOptions)(_In_ DWORD SymOptions); +typedef DWORD (NTAPI *PF_SymGetOptions)(VOID); +typedef DWORD64 (NTAPI *PF_SymLoadModule64)(_In_ HANDLE hProcess, + _In_opt_ HANDLE hFile, + _In_ LPSTR ImageName, + _In_opt_ LPSTR ModuleName, + _In_ DWORD64 BaseOfDll, + _In_opt_ DWORD SizeOfDll); +typedef BOOL (NTAPI *PF_SymGetModuleInfo64)(_In_ HANDLE hProcess, + _In_ DWORD64 qwAddr, + _Out_ PIMAGEHLP_MODULE64 ModuleInfo); +typedef BOOL (NTAPI *PF_SymFromName)(_In_ HANDLE hProcess, + _In_ LPSTR Name, + _Out_ PSYMBOL_INFO Symbol); + +typedef struct _DETOUR_SYM_INFO +{ + HANDLE hProcess; + HMODULE hDbgHelp; + PF_ImagehlpApiVersionEx pfImagehlpApiVersionEx; + PF_SymInitialize pfSymInitialize; + PF_SymSetOptions pfSymSetOptions; + PF_SymGetOptions pfSymGetOptions; + PF_SymLoadModule64 pfSymLoadModule64; + PF_SymGetModuleInfo64 pfSymGetModuleInfo64; + PF_SymFromName pfSymFromName; +} DETOUR_SYM_INFO, *PDETOUR_SYM_INFO; + +PDETOUR_SYM_INFO DetourLoadImageHlp(VOID); + +#endif // IMAGEAPI + +#if defined(_INC_STDIO) && !defined(_CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS) +#error detours.h must be included before stdio.h (or at least define _CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS earlier) +#endif +#define _CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS 1 + +#ifndef DETOUR_TRACE +#if DETOUR_DEBUG +#define DETOUR_TRACE(x) printf x +#define DETOUR_BREAK() __debugbreak() +#include +#include +#else +#define DETOUR_TRACE(x) +#define DETOUR_BREAK() +#endif +#endif + +#if 1 || defined(DETOURS_IA64) + +// +// IA64 instructions are 41 bits, 3 per bundle, plus 5 bit bundle template => 128 bits per bundle. +// + +#define DETOUR_IA64_INSTRUCTIONS_PER_BUNDLE (3) + +#define DETOUR_IA64_TEMPLATE_OFFSET (0) +#define DETOUR_IA64_TEMPLATE_SIZE (5) + +#define DETOUR_IA64_INSTRUCTION_SIZE (41) +#define DETOUR_IA64_INSTRUCTION0_OFFSET (DETOUR_IA64_TEMPLATE_SIZE) +#define DETOUR_IA64_INSTRUCTION1_OFFSET (DETOUR_IA64_TEMPLATE_SIZE + DETOUR_IA64_INSTRUCTION_SIZE) +#define DETOUR_IA64_INSTRUCTION2_OFFSET (DETOUR_IA64_TEMPLATE_SIZE + DETOUR_IA64_INSTRUCTION_SIZE + DETOUR_IA64_INSTRUCTION_SIZE) + +C_ASSERT(DETOUR_IA64_TEMPLATE_SIZE + DETOUR_IA64_INSTRUCTIONS_PER_BUNDLE * DETOUR_IA64_INSTRUCTION_SIZE == 128); + +__declspec(align(16)) struct DETOUR_IA64_BUNDLE +{ + public: + union + { + BYTE data[16]; + UINT64 wide[2]; + }; + + enum { + A_UNIT = 1u, + I_UNIT = 2u, + M_UNIT = 3u, + B_UNIT = 4u, + F_UNIT = 5u, + L_UNIT = 6u, + X_UNIT = 7u, + }; + struct DETOUR_IA64_METADATA + { + ULONG nTemplate : 8; // Instruction template. + ULONG nUnit0 : 4; // Unit for slot 0 + ULONG nUnit1 : 4; // Unit for slot 1 + ULONG nUnit2 : 4; // Unit for slot 2 + }; + + protected: + static const DETOUR_IA64_METADATA s_rceCopyTable[33]; + + UINT RelocateBundle(_Inout_ DETOUR_IA64_BUNDLE* pDst, _Inout_opt_ DETOUR_IA64_BUNDLE* pBundleExtra) const; + + bool RelocateInstruction(_Inout_ DETOUR_IA64_BUNDLE* pDst, + _In_ BYTE slot, + _Inout_opt_ DETOUR_IA64_BUNDLE* pBundleExtra) const; + + // 120 112 104 96 88 80 72 64 56 48 40 32 24 16 8 0 + // f. e. d. c. b. a. 9. 8. 7. 6. 5. 4. 3. 2. 1. 0. + + // 00 + // f.e. d.c. b.a. 9.8. 7.6. 5.4. 3.2. 1.0. + // 0000 0000 0000 0000 0000 0000 0000 001f : Template [4..0] + // 0000 0000 0000 0000 0000 03ff ffff ffe0 : Zero [ 41.. 5] + // 0000 0000 0000 0000 0000 3c00 0000 0000 : Zero [ 45.. 42] + // 0000 0000 0007 ffff ffff c000 0000 0000 : One [ 82.. 46] + // 0000 0000 0078 0000 0000 0000 0000 0000 : One [ 86.. 83] + // 0fff ffff ff80 0000 0000 0000 0000 0000 : Two [123.. 87] + // f000 0000 0000 0000 0000 0000 0000 0000 : Two [127..124] + BYTE GetTemplate() const; + // Get 4 bit opcodes. + BYTE GetInst0() const; + BYTE GetInst1() const; + BYTE GetInst2() const; + BYTE GetUnit(BYTE slot) const; + BYTE GetUnit0() const; + BYTE GetUnit1() const; + BYTE GetUnit2() const; + // Get 37 bit data. + UINT64 GetData0() const; + UINT64 GetData1() const; + UINT64 GetData2() const; + + // Get/set the full 41 bit instructions. + UINT64 GetInstruction(BYTE slot) const; + UINT64 GetInstruction0() const; + UINT64 GetInstruction1() const; + UINT64 GetInstruction2() const; + void SetInstruction(BYTE slot, UINT64 instruction); + void SetInstruction0(UINT64 instruction); + void SetInstruction1(UINT64 instruction); + void SetInstruction2(UINT64 instruction); + + // Get/set bitfields. + static UINT64 GetBits(UINT64 Value, UINT64 Offset, UINT64 Count); + static UINT64 SetBits(UINT64 Value, UINT64 Offset, UINT64 Count, UINT64 Field); + + // Get specific read-only fields. + static UINT64 GetOpcode(UINT64 instruction); // 4bit opcode + static UINT64 GetX(UINT64 instruction); // 1bit opcode extension + static UINT64 GetX3(UINT64 instruction); // 3bit opcode extension + static UINT64 GetX6(UINT64 instruction); // 6bit opcode extension + + // Get/set specific fields. + static UINT64 GetImm7a(UINT64 instruction); + static UINT64 SetImm7a(UINT64 instruction, UINT64 imm7a); + static UINT64 GetImm13c(UINT64 instruction); + static UINT64 SetImm13c(UINT64 instruction, UINT64 imm13c); + static UINT64 GetSignBit(UINT64 instruction); + static UINT64 SetSignBit(UINT64 instruction, UINT64 signBit); + static UINT64 GetImm20a(UINT64 instruction); + static UINT64 SetImm20a(UINT64 instruction, UINT64 imm20a); + static UINT64 GetImm20b(UINT64 instruction); + static UINT64 SetImm20b(UINT64 instruction, UINT64 imm20b); + + static UINT64 SignExtend(UINT64 Value, UINT64 Offset); + + BOOL IsMovlGp() const; + + VOID SetInst(BYTE Slot, BYTE nInst); + VOID SetInst0(BYTE nInst); + VOID SetInst1(BYTE nInst); + VOID SetInst2(BYTE nInst); + VOID SetData(BYTE Slot, UINT64 nData); + VOID SetData0(UINT64 nData); + VOID SetData1(UINT64 nData); + VOID SetData2(UINT64 nData); + BOOL SetNop(BYTE Slot); + BOOL SetNop0(); + BOOL SetNop1(); + BOOL SetNop2(); + + public: + BOOL IsBrl() const; + VOID SetBrl(); + VOID SetBrl(UINT64 target); + UINT64 GetBrlTarget() const; + VOID SetBrlTarget(UINT64 target); + VOID SetBrlImm(UINT64 imm); + UINT64 GetBrlImm() const; + + UINT64 GetMovlGp() const; + VOID SetMovlGp(UINT64 gp); + + VOID SetStop(); + + UINT Copy(_Out_ DETOUR_IA64_BUNDLE *pDst, _Inout_opt_ DETOUR_IA64_BUNDLE* pBundleExtra = NULL) const; +}; +#endif // DETOURS_IA64 + +#ifdef DETOURS_ARM + +#define DETOURS_PFUNC_TO_PBYTE(p) ((PBYTE)(((ULONG_PTR)(p)) & ~(ULONG_PTR)1)) +#define DETOURS_PBYTE_TO_PFUNC(p) ((PBYTE)(((ULONG_PTR)(p)) | (ULONG_PTR)1)) + +#endif // DETOURS_ARM + +////////////////////////////////////////////////////////////////////////////// + +#ifdef __cplusplus +extern "C" { +#endif // __cplusplus + +#define DETOUR_OFFLINE_LIBRARY(x) \ +PVOID WINAPI DetourCopyInstruction##x(_In_opt_ PVOID pDst, \ + _Inout_opt_ PVOID *ppDstPool, \ + _In_ PVOID pSrc, \ + _Out_opt_ PVOID *ppTarget, \ + _Out_opt_ LONG *plExtra); \ + \ +BOOL WINAPI DetourSetCodeModule##x(_In_ HMODULE hModule, \ + _In_ BOOL fLimitReferencesToModule); \ + +DETOUR_OFFLINE_LIBRARY(X86) +DETOUR_OFFLINE_LIBRARY(X64) +DETOUR_OFFLINE_LIBRARY(ARM) +DETOUR_OFFLINE_LIBRARY(ARM64) +DETOUR_OFFLINE_LIBRARY(IA64) + +#undef DETOUR_OFFLINE_LIBRARY + +////////////////////////////////////////////////////////////////////////////// +// +// Helpers for manipulating page protection. +// + +_Success_(return != FALSE) +BOOL WINAPI DetourVirtualProtectSameExecuteEx(_In_ HANDLE hProcess, + _In_ PVOID pAddress, + _In_ SIZE_T nSize, + _In_ DWORD dwNewProtect, + _Out_ PDWORD pdwOldProtect); + +_Success_(return != FALSE) +BOOL WINAPI DetourVirtualProtectSameExecute(_In_ PVOID pAddress, + _In_ SIZE_T nSize, + _In_ DWORD dwNewProtect, + _Out_ PDWORD pdwOldProtect); +#ifdef __cplusplus +} +#endif // __cplusplus + +////////////////////////////////////////////////////////////////////////////// + +#define MM_ALLOCATION_GRANULARITY 0x10000 + +////////////////////////////////////////////////////////////////////////////// + +#endif // DETOURS_INTERNAL +#endif // __cplusplus + +#endif // _DETOURS_H_ +// +//////////////////////////////////////////////////////////////// End of File. diff --git a/S3KOEditorLink/include/detver.h b/S3KOEditorLink/include/detver.h new file mode 100644 index 0000000..f0aae9b --- /dev/null +++ b/S3KOEditorLink/include/detver.h @@ -0,0 +1,27 @@ +////////////////////////////////////////////////////////////////////////////// +// +// Common version parameters. +// +// Microsoft Research Detours Package, Version 4.0.1 +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// + +#define _USING_V110_SDK71_ 1 +#include "winver.h" +#if 0 +#include +#include +#else +#ifndef DETOURS_STRINGIFY +#define DETOURS_STRINGIFY(x) DETOURS_STRINGIFY_(x) +#define DETOURS_STRINGIFY_(x) #x +#endif + +#define VER_FILEFLAGSMASK 0x3fL +#define VER_FILEFLAGS 0x0L +#define VER_FILEOS 0x00040004L +#define VER_FILETYPE 0x00000002L +#define VER_FILESUBTYPE 0x00000000L +#endif +#define VER_DETOURS_BITS DETOUR_STRINGIFY(DETOURS_BITS) diff --git a/S3KOEditorLink/include/syelog.h b/S3KOEditorLink/include/syelog.h new file mode 100644 index 0000000..7cfa9f3 --- /dev/null +++ b/S3KOEditorLink/include/syelog.h @@ -0,0 +1,89 @@ +////////////////////////////////////////////////////////////////////////////// +// +// Detours Test Program (syelog.h of syelog.lib) +// +// Microsoft Research Detours Package +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +#pragma once +#ifndef _SYELOGD_H_ +#define _SYELOGD_H_ +#include + +#pragma pack(push, 1) +#pragma warning(push) +#pragma warning(disable: 4200) + +////////////////////////////////////////////////////////////////////////////// +// +// +#define SYELOG_PIPE_NAMEA "\\\\.\\pipe\\syelog" +#define SYELOG_PIPE_NAMEW L"\\\\.\\pipe\\syelog" +#ifdef UNICODE +#define SYELOG_PIPE_NAME SYELOG_PIPE_NAMEW +#else +#define SYELOG_PIPE_NAME SYELOG_PIPE_NAMEA +#endif + +////////////////////////////////////////////////////////////////////////////// +// +#define SYELOG_MAXIMUM_MESSAGE 4086 // 4096 - sizeof(header stuff) + +typedef struct _SYELOG_MESSAGE +{ + USHORT nBytes; + BYTE nFacility; + BYTE nSeverity; + DWORD nProcessId; + FILETIME ftOccurance; + BOOL fTerminate; + CHAR szMessage[SYELOG_MAXIMUM_MESSAGE]; +} SYELOG_MESSAGE, *PSYELOG_MESSAGE; + + +// Facility Codes. +// +#define SYELOG_FACILITY_KERNEL 0x10 // OS Kernel +#define SYELOG_FACILITY_SECURITY 0x20 // OS Security +#define SYELOG_FACILITY_LOGGING 0x30 // OS Logging-internal +#define SYELOG_FACILITY_SERVICE 0x40 // User-mode system daemon +#define SYELOG_FACILITY_APPLICATION 0x50 // User-mode application +#define SYELOG_FACILITY_USER 0x60 // User self-generated. +#define SYELOG_FACILITY_LOCAL0 0x70 // Locally defined. +#define SYELOG_FACILITY_LOCAL1 0x71 // Locally defined. +#define SYELOG_FACILITY_LOCAL2 0x72 // Locally defined. +#define SYELOG_FACILITY_LOCAL3 0x73 // Locally defined. +#define SYELOG_FACILITY_LOCAL4 0x74 // Locally defined. +#define SYELOG_FACILITY_LOCAL5 0x75 // Locally defined. +#define SYELOG_FACILITY_LOCAL6 0x76 // Locally defined. +#define SYELOG_FACILITY_LOCAL7 0x77 // Locally defined. +#define SYELOG_FACILITY_LOCAL8 0x78 // Locally defined. +#define SYELOG_FACILITY_LOCAL9 0x79 // Locally defined. + +// Severity Codes. +// +#define SYELOG_SEVERITY_FATAL 0x00 // System is dead. +#define SYELOG_SEVERITY_ALERT 0x10 // Take action immediately. +#define SYELOG_SEVERITY_CRITICAL 0x20 // Critical condition. +#define SYELOG_SEVERITY_ERROR 0x30 // Error +#define SYELOG_SEVERITY_WARNING 0x40 // Warning +#define SYELOG_SEVERITY_NOTICE 0x50 // Significant condition. +#define SYELOG_SEVERITY_INFORMATION 0x60 // Informational +#define SYELOG_SEVERITY_AUDIT_FAIL 0x66 // Audit Failed +#define SYELOG_SEVERITY_AUDIT_PASS 0x67 // Audit Succeeeded +#define SYELOG_SEVERITY_DEBUG 0x70 // Debugging + +// Logging Functions. +// +VOID SyelogOpen(PCSTR pszIdentifier, BYTE nFacility); +VOID Syelog(BYTE nSeverity, PCSTR pszMsgf, ...); +VOID SyelogV(BYTE nSeverity, PCSTR pszMsgf, va_list args); +VOID SyelogClose(BOOL fTerminate); + +#pragma warning(pop) +#pragma pack(pop) + +#endif // _SYELOGD_H_ +// +///////////////////////////////////////////////////////////////// End of File. diff --git a/S3KOEditorLink/lib/detours.lib b/S3KOEditorLink/lib/detours.lib new file mode 100644 index 0000000000000000000000000000000000000000..ca0bdda36d0c0be118941300ec8331eedf202898 GIT binary patch literal 688776 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

e%grP}D*PJH?b(WhZGFQC=$BicQ{U= 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

8nFKGNljsH&Lzt{L5H2z18|4HM2*7#pE{*uQ3 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 literal 0 HcmV?d00001 diff --git a/S3KOEditorLink/lib/syelog.lib b/S3KOEditorLink/lib/syelog.lib new file mode 100644 index 0000000000000000000000000000000000000000..f577c5656ca23518e76febdfe29d49a067863273 GIT binary patch literal 48202 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 kkGR|Mdz{~NBhbXRf6GnM3KSy?7mjD0& literal 0 HcmV?d00001