Path: blob/master/SonicMania/GameLink.h
338 views
#ifndef GAMELINK_H1#define GAMELINK_H23// -------------------------4// STANDARD LIBS5// -------------------------67#include <stddef.h>8#include <stdio.h>9#include <string.h>10#include <stdlib.h>11#include <stdarg.h>1213#define sprintf_s(x, _, ...) sprintf(x, __VA_ARGS__)1415#if defined _WIN3216#undef sprintf_s17#endif1819// -------------------------20// STANDARD TYPES21// -------------------------2223typedef signed char int8;24typedef unsigned char uint8;25typedef signed short int16;26typedef unsigned short uint16;27typedef signed int int32;28typedef unsigned int uint32;2930typedef uint32 bool32;31#define true 132#define false 03334typedef uint32 color;3536// -------------------------37// CONSTANTS38// -------------------------3940#ifndef SCREEN_XMAX41#define SCREEN_XMAX (1280)42#endif4344#ifndef SCREEN_YSIZE45#define SCREEN_YSIZE (240)46#endif4748#define SCREEN_YCENTER (SCREEN_YSIZE / 2)4950#define LAYER_COUNT (8)51#define DRAWGROUP_COUNT (16)5253#ifndef SCREEN_COUNT54#if RETRO_REV0255#define SCREEN_COUNT (4)56#else57#define SCREEN_COUNT (2)58#endif59#endif6061#define PLAYER_COUNT (4)62#define CAMERA_COUNT (4)6364// 0x800 scene objects, 0x40 reserved ones, and 0x100 spare slots for creation65#define RESERVE_ENTITY_COUNT (0x40)66#define TEMPENTITY_COUNT (0x100)67#define SCENEENTITY_COUNT (0x800)68#define ENTITY_COUNT (RESERVE_ENTITY_COUNT + SCENEENTITY_COUNT + TEMPENTITY_COUNT)69#define TEMPENTITY_START (ENTITY_COUNT - TEMPENTITY_COUNT)7071#define TYPE_COUNT (0x100)72#define TYPEGROUP_COUNT (0x104)7374#define CHANNEL_COUNT (0x10)7576#define TILE_SIZE (16)7778// -------------------------79// MACROS80// -------------------------8182#define MIN(a, b) ((a) < (b) ? (a) : (b))83#define MAX(a, b) ((a) > (b) ? (a) : (b))84#define CLAMP(value, minimum, maximum) (((value) < (minimum)) ? (minimum) : (((value) > (maximum)) ? (maximum) : (value)))85#define FABS(a) ((a) > 0 ? (a) : -(a))8687#define SET_BIT(value, set, pos) ((value) ^= (-(int32)(set) ^ (value)) & (1 << (pos)))88#define GET_BIT(b, pos) ((b) >> (pos)&1)8990#define INT_TO_VOID(x) (void *)(size_t)(x)91#define FLOAT_TO_VOID(x) INT_TO_VOID(*(int32 *)&(x))92#define VOID_TO_INT(x) (int32)(size_t)(x)93#define VOID_TO_FLOAT(x) *(float *)&(x)9495#define UNUSED(x) (void)x9697#define TO_FIXED(x) ((x) << 16)98#define FROM_FIXED(x) ((x) >> 16)99100// floating point variants101#define TO_FIXED_F(x) ((x)*65536.0)102#define FROM_FIXED_F(x) ((x) / 65536.0)103104// -------------------------105// STRUCTS106// -------------------------107108typedef struct {109int32 x;110int32 y;111} Vector2;112113typedef struct {114#if RETRO_REV0U115// used for languages such as beeflang that always have vfTables in classes116void *vfTable;117#endif118Vector2 position;119Vector2 scale;120Vector2 velocity;121Vector2 updateRange;122int32 angle;123int32 alpha;124int32 rotation;125int32 groundVel;126int32 zdepth;127uint16 group;128uint16 classID;129bool32 inRange;130bool32 isPermanent;131int32 tileCollisions;132bool32 interaction;133bool32 onGround;134uint8 active;135#if RETRO_REV02136uint8 filter;137#endif138uint8 direction;139uint8 drawGroup;140uint8 collisionLayers;141uint8 collisionPlane;142uint8 collisionMode;143uint8 drawFX;144uint8 inkEffect;145uint8 visible;146uint8 onScreen;147} Entity;148149typedef struct {150uint16 classID;151uint8 active;152} Object;153154#define RSDK_OBJECT \155uint16 classID; \156uint8 active;157158#if RETRO_REV0U159#define RSDK_ENTITY \160void *vfTable; \161Vector2 position; \162Vector2 scale; \163Vector2 velocity; \164Vector2 updateRange; \165int32 angle; \166int32 alpha; \167int32 rotation; \168int32 groundVel; \169int32 zdepth; \170uint16 group; \171uint16 classID; \172bool32 inRange; \173bool32 isPermanent; \174bool32 tileCollisions; \175bool32 interaction; \176bool32 onGround; \177uint8 active; \178uint8 filter; \179uint8 direction; \180uint8 drawGroup; \181uint8 collisionLayers; \182uint8 collisionPlane; \183uint8 collisionMode; \184uint8 drawFX; \185uint8 inkEffect; \186uint8 visible; \187uint8 onScreen;188#elif RETRO_REV02189#define RSDK_ENTITY \190Vector2 position; \191Vector2 scale; \192Vector2 velocity; \193Vector2 updateRange; \194int32 angle; \195int32 alpha; \196int32 rotation; \197int32 groundVel; \198int32 zdepth; \199uint16 group; \200uint16 classID; \201bool32 inRange; \202bool32 isPermanent; \203bool32 tileCollisions; \204bool32 interaction; \205bool32 onGround; \206uint8 active; \207uint8 filter; \208uint8 direction; \209uint8 drawGroup; \210uint8 collisionLayers; \211uint8 collisionPlane; \212uint8 collisionMode; \213uint8 drawFX; \214uint8 inkEffect; \215uint8 visible; \216uint8 onScreen;217#else218#define RSDK_ENTITY \219Vector2 position; \220Vector2 scale; \221Vector2 velocity; \222Vector2 updateRange; \223int32 angle; \224int32 alpha; \225int32 rotation; \226int32 groundVel; \227int32 zdepth; \228uint16 group; \229uint16 classID; \230bool32 inRange; \231bool32 isPermanent; \232bool32 tileCollisions; \233bool32 interaction; \234bool32 onGround; \235uint8 active; \236uint8 direction; \237uint8 drawGroup; \238uint8 collisionLayers; \239uint8 collisionPlane; \240uint8 collisionMode; \241uint8 drawFX; \242uint8 inkEffect; \243uint8 visible; \244uint8 onScreen;245#endif246247typedef struct {248RSDK_ENTITY249void *data[0x100];250#if RETRO_REV0U251void *unknown;252#endif253} EntityBase;254255#if RETRO_REV02256#define Unknown_pausePress UnknownInfo->pausePress257#define Unknown_anyKeyPress UnknownInfo->anyKeyPress258259typedef struct {260int32 platform;261int32 language;262int32 region;263} RSDKSKUInfo;264265// None of these besides the named 2 are even used266// and even then they're not even set in plus267typedef struct {268int32 unknown1;269int32 unknown2;270int32 unknown3;271int32 unknown4;272bool32 pausePress;273int32 unknown5;274int32 unknown6;275int32 unknown7;276int32 unknown8;277int32 unknown9;278bool32 anyKeyPress;279int32 unknown10;280} RSDKUnknownInfo;281#else282#define Unknown_pausePress TouchInfo->pausePress283#define Unknown_anyKeyPress TouchInfo->anyKeyPress284#endif285286typedef struct {287char gameTitle[0x40];288char gameSubtitle[0x100];289char version[0x10];290#if !RETRO_REV02291uint8 platform;292uint8 language;293uint8 region;294#endif295} RSDKGameInfo;296297typedef struct {298Entity *entity;299void *listData;300void *listCategory;301int32 timeCounter;302int32 currentDrawGroup;303int32 currentScreenID;304uint16 listPos;305uint16 entitySlot;306uint16 createSlot;307uint16 classCount;308bool32 inEditor;309bool32 effectGizmo;310bool32 debugMode;311bool32 useGlobalScripts;312bool32 timeEnabled;313uint8 activeCategory;314uint8 categoryCount;315uint8 state;316#if RETRO_REV02317uint8 filter;318#endif319uint8 milliseconds;320uint8 seconds;321uint8 minutes;322} RSDKSceneInfo;323324typedef struct {325bool32 down;326bool32 press;327int32 keyMap;328} InputState;329330typedef struct {331InputState keyUp;332InputState keyDown;333InputState keyLeft;334InputState keyRight;335InputState keyA;336InputState keyB;337InputState keyC;338InputState keyX;339InputState keyY;340InputState keyZ;341InputState keyStart;342InputState keySelect;343344// Rev01 hasn't split these into different structs yet345#if RETRO_REV01346InputState keyBumperL;347InputState keyBumperR;348InputState keyTriggerL;349InputState keyTriggerR;350InputState keyStickL;351InputState keyStickR;352#endif353} RSDKControllerState;354355typedef struct {356InputState keyUp;357InputState keyDown;358InputState keyLeft;359InputState keyRight;360#if RETRO_REV02361InputState keyStick;362float deadzone;363float hDelta;364float vDelta;365#else366float deadzone;367float triggerDeltaL;368float triggerDeltaR;369float hDeltaL;370float vDeltaL;371float hDeltaR;372float vDeltaR;373#endif374} RSDKAnalogState;375376#if RETRO_REV02377typedef struct {378InputState keyBumper;379InputState keyTrigger;380float bumperDelta;381float triggerDelta;382} RSDKTriggerState;383#endif384385typedef struct {386float x[0x10];387float y[0x10];388bool32 down[0x10];389uint8 count;390#if !RETRO_REV02391bool32 pauseHold;392bool32 pausePress;393bool32 unknown1;394bool32 anyKeyHold;395bool32 anyKeyPress;396bool32 unknown2;397#endif398} RSDKTouchInfo;399400typedef struct {401// uint16 *frameBuffer;402uint16 frameBuffer[SCREEN_XMAX * SCREEN_YSIZE];403Vector2 position;404Vector2 size;405Vector2 center;406int32 pitch;407int32 clipBound_X1;408int32 clipBound_Y1;409int32 clipBound_X2;410int32 clipBound_Y2;411int32 waterDrawPos;412} RSDKScreenInfo;413414#if RETRO_REV02415typedef struct {416void *functionTable;417void *APITable;418419RSDKGameInfo *gameInfo;420RSDKSKUInfo *currentSKU;421RSDKSceneInfo *sceneInfo;422423RSDKControllerState *controllerInfo;424RSDKAnalogState *stickInfoL;425RSDKAnalogState *stickInfoR;426RSDKTriggerState *triggerInfoL;427RSDKTriggerState *triggerInfoR;428RSDKTouchInfo *touchInfo;429430RSDKUnknownInfo *unknownInfo;431432RSDKScreenInfo *screenInfo;433434#if RETRO_REV0U435// only for origins, not technically needed for v5U if standalone I think436void *hedgehogLink;437#endif438439#if RETRO_USE_MOD_LOADER440void *modTable;441#endif442} EngineInfo;443#else444typedef struct {445void *functionTable;446447RSDKGameInfo *gameInfo;448RSDKSceneInfo *sceneInfo;449450RSDKControllerState *controllerInfo;451RSDKAnalogState *stickInfoL;452453RSDKTouchInfo *touchInfo;454455RSDKScreenInfo *screenInfo;456457#if RETRO_USE_MOD_LOADER458void *modTable;459#endif460} EngineInfo;461#endif462463#if RETRO_USE_MOD_LOADER464typedef struct {465uint8 engineVer;466uint8 gameVer;467uint8 modLoaderVer;468} ModVersionInfo;469#endif470471typedef struct {472int32 values[4][4];473} Matrix;474475typedef struct {476uint16 *chars;477uint16 length;478uint16 size;479} String;480481typedef struct {482int16 left;483int16 top;484int16 right;485int16 bottom;486} Hitbox;487488typedef struct {489int16 sprX;490int16 sprY;491int16 width;492int16 height;493int16 pivotX;494int16 pivotY;495uint16 delay;496int16 id;497uint8 sheetID;498} SpriteFrame;499500typedef struct {501void *frames;502int32 frameID;503int16 animationID;504int16 prevAnimationID;505int16 speed;506int16 timer;507int16 frameDuration;508int16 frameCount;509uint8 loopIndex;510uint8 rotationStyle;511} Animator;512513typedef struct {514int32 tilePos;515int32 parallaxFactor;516int32 scrollSpeed;517int32 scrollPos;518uint8 deform;519uint8 unknown;520} ScrollInfo;521522typedef struct {523Vector2 position;524Vector2 deform;525} ScanlineInfo;526527typedef struct {528uint8 type;529uint8 drawGroup[4];530uint8 widthShift;531uint8 heightShift;532uint16 width;533uint16 height;534Vector2 position;535int32 parallaxFactor;536int32 scrollSpeed;537int32 scrollPos;538int32 deformationOffset;539int32 deformationOffsetW;540int32 deformationData[0x400];541int32 deformationDataW[0x400];542void (*scanlineCallback)(ScanlineInfo *);543uint16 scrollInfoCount;544ScrollInfo scrollInfo[0x100];545uint32 name[4];546uint16 *layout;547uint8 *lineScroll;548} TileLayer;549550#if RETRO_REV0U || RETRO_USE_MOD_LOADER551typedef struct {552Vector2 position;553bool32 collided;554uint8 angle;555} CollisionSensor;556557typedef struct {558uint8 floorMasks[TILE_SIZE];559uint8 lWallMasks[TILE_SIZE];560uint8 rWallMasks[TILE_SIZE];561uint8 roofMasks[TILE_SIZE];562} CollisionMask;563564typedef struct {565uint8 floorAngle;566uint8 lWallAngle;567uint8 rWallAngle;568uint8 roofAngle;569uint8 flag;570} TileInfo;571#endif572573#if RETRO_REV02574typedef enum {575LEADERBOARD_LOAD_INIT,576LEADERBOARD_LOAD_PREV,577LEADERBOARD_LOAD_NEXT,578} LeaderboardLoadTypes;579580typedef struct {581int32 start;582int32 length;583} LeaderboardAvail;584585typedef struct {586uint8 statID;587const char *name;588void *data[64];589} StatInfo;590#endif591592typedef struct {593uint8 idPS4; // achievement ID (PS4)594int32 idUnknown; // achievement ID (unknown platform)595const char *id; // achievement ID (as a string, used for most platforms)596} AchievementID;597598typedef struct {599int32 idPS4; // leaderboard id (PS4)600int32 idUnknown; // leaderboard id (unknown platform)601int32 idSwitch; // leaderboard id (switch)602const char *idXbox; // Xbox One Leaderboard id (making an assumption based on the MS docs)603const char *idPC; // Leaderboard id (as a string, used for PC platforms)604} LeaderboardID;605606typedef struct {607String username;608#if RETRO_REV02609String userID;610#endif611int32 globalRank;612int32 score;613bool32 isUser;614int32 status;615} LeaderboardEntry;616617// -------------------------618// ENUMS619// -------------------------620621typedef enum {622PLATFORM_PC,623PLATFORM_PS4,624PLATFORM_XB1,625PLATFORM_SWITCH,626627PLATFORM_DEV = 0xFF,628} GamePlatforms;629630typedef enum {631SCOPE_NONE,632SCOPE_GLOBAL,633SCOPE_STAGE,634} Scopes;635636typedef enum {637INK_NONE,638INK_BLEND,639INK_ALPHA,640INK_ADD,641INK_SUB,642INK_TINT,643INK_MASKED,644INK_UNMASKED,645} InkEffects;646647typedef enum { FX_NONE = 0, FX_FLIP = 1, FX_ROTATE = 2, FX_SCALE = 4 } DrawFX;648649typedef enum { FLIP_NONE, FLIP_X, FLIP_Y, FLIP_XY } FlipFlags;650651typedef enum {652TYPE_BLANK,653#if RETRO_REV02654TYPE_DEVOUTPUT,655#endif656} DefaultObjTypes;657658typedef enum {659INPUT_UNASSIGNED = -2,660INPUT_AUTOASSIGN = -1,661INPUT_NONE = 0,662} InputIDs;663664typedef enum {665CONT_ANY,666CONT_P1,667CONT_P2,668CONT_P3,669CONT_P4,670} InputSlotIDs;671672typedef enum {673DEVICE_TYPE_NONE,674DEVICE_TYPE_KEYBOARD,675DEVICE_TYPE_CONTROLLER,676DEVICE_TYPE_UNKNOWN,677DEVICE_TYPE_STEAMOVERLAY,678} InputDeviceTypes;679680typedef enum {681DEVICE_KEYBOARD,682DEVICE_XBOX,683DEVICE_PS4,684DEVICE_SATURN,685DEVICE_SWITCH_HANDHELD,686DEVICE_SWITCH_JOY_GRIP,687DEVICE_SWITCH_JOY_L,688DEVICE_SWITCH_JOY_R,689DEVICE_SWITCH_PRO,690} InputDeviceIDs;691692typedef enum {693DEVICE_API_NONE,694DEVICE_API_KEYBOARD,695DEVICE_API_XINPUT,696DEVICE_API_RAWINPUT,697DEVICE_API_STEAM,698} InputDeviceAPIs;699700typedef enum {701ALIGN_LEFT,702ALIGN_RIGHT,703ALIGN_CENTER,704} Alignments;705706#if RETRO_REV02707typedef enum {708PRINT_NORMAL,709PRINT_POPUP,710PRINT_ERROR,711PRINT_FATAL,712} PrintModes;713#else714typedef enum {715MESSAGE_STRING,716MESSAGE_INT32,717MESSAGE_UINT32,718MESSAGE_FLOAT,719} PrintMessageTypes;720#endif721722typedef enum {723VAR_UINT8,724VAR_UINT16,725VAR_UINT32,726VAR_INT8,727VAR_INT16,728VAR_INT32,729VAR_ENUM,730VAR_BOOL,731VAR_STRING,732VAR_VECTOR2,733VAR_FLOAT,734VAR_COLOR,735} VarTypes;736737#if RETRO_REV02738typedef enum {739DBVAR_UNKNOWN,740DBVAR_BOOL,741DBVAR_UINT8,742DBVAR_UINT16,743DBVAR_UINT32,744DBVAR_UINT64, // unimplemented in RSDKv5745DBVAR_INT8,746DBVAR_INT16,747DBVAR_INT32,748DBVAR_INT64, // unimplemented in RSDKv5749DBVAR_FLOAT,750DBVAR_DOUBLE, // unimplemented in RSDKv5751DBVAR_VECTOR2, // unimplemented in RSDKv5752DBVAR_VECTOR3, // unimplemented in RSDKv5753DBVAR_VECTOR4, // unimplemented in RSDKv5754DBVAR_COLOR,755DBVAR_STRING,756DBVAR_HASHMD5, // unimplemented in RSDKv5757} DBVarTypes;758759typedef enum {760VIEWVAR_INVALID,761VIEWVAR_BOOL,762VIEWVAR_UINT8,763VIEWVAR_UINT16,764VIEWVAR_UINT32,765VIEWVAR_INT8,766VIEWVAR_INT16,767VIEWVAR_INT32,768} ViewableVarTypes;769#endif770771typedef enum {772ACTIVE_NEVER,773ACTIVE_ALWAYS,774ACTIVE_NORMAL,775ACTIVE_PAUSED,776ACTIVE_BOUNDS,777ACTIVE_XBOUNDS,778ACTIVE_YBOUNDS,779ACTIVE_RBOUNDS,780781// Not really even a real active value, but some objects set their active states to this so here it is I suppose782ACTIVE_DISABLED = 0xFF,783} ActiveFlags;784785typedef enum { ROTSTYLE_NONE, ROTSTYLE_FULL, ROTSTYLE_45DEG, ROTSTYLE_90DEG, ROTSTYLE_180DEG, ROTSTYLE_STATICFRAMES } RotationSyles;786787typedef enum {788LAYER_HSCROLL,789LAYER_VSCROLL,790LAYER_ROTOZOOM,791LAYER_BASIC,792} LayerTypes;793794typedef enum {795CMODE_FLOOR,796CMODE_LWALL,797CMODE_ROOF,798CMODE_RWALL,799} CModes;800801typedef enum {802C_NONE,803C_TOP,804C_LEFT,805C_RIGHT,806C_BOTTOM,807} CSides;808809typedef enum {810TILECOLLISION_NONE, // no tile collisions811TILECOLLISION_DOWN, // downwards tile collisions812#if RETRO_REV0U813TILECOLLISION_UP, // upwards tile collisions814#endif815} TileCollisionModes;816817typedef enum {818S3D_WIREFRAME,819S3D_SOLIDCOLOR,820821S3D_UNUSED_1,822S3D_UNUSED_2,823824S3D_WIREFRAME_SHADED,825S3D_SOLIDCOLOR_SHADED,826827S3D_SOLIDCOLOR_SHADED_BLENDED,828829S3D_WIREFRAME_SCREEN,830S3D_SOLIDCOLOR_SCREEN,831832S3D_WIREFRAME_SHADED_SCREEN,833S3D_SOLIDCOLOR_SHADED_SCREEN,834835S3D_SOLIDCOLOR_SHADED_BLENDED_SCREEN,836} Scene3DDrawTypes;837838typedef enum {839VIDEOSETTING_WINDOWED,840VIDEOSETTING_BORDERED,841VIDEOSETTING_EXCLUSIVEFS,842VIDEOSETTING_VSYNC,843VIDEOSETTING_TRIPLEBUFFERED,844VIDEOSETTING_WINDOW_WIDTH,845VIDEOSETTING_WINDOW_HEIGHT,846VIDEOSETTING_FSWIDTH,847VIDEOSETTING_FSHEIGHT,848VIDEOSETTING_REFRESHRATE,849VIDEOSETTING_SHADERSUPPORT,850VIDEOSETTING_SHADERID,851VIDEOSETTING_SCREENCOUNT,852#if RETRO_REV02853VIDEOSETTING_DIMTIMER,854#endif855VIDEOSETTING_STREAMSENABLED,856VIDEOSETTING_STREAM_VOL,857VIDEOSETTING_SFX_VOL,858VIDEOSETTING_LANGUAGE,859VIDEOSETTING_STORE,860VIDEOSETTING_RELOAD,861VIDEOSETTING_CHANGED,862VIDEOSETTING_WRITE,863} VideoSettingsValues;864865typedef enum {866GROUP_ALL = 0,867868GROUP_CUSTOM0 = TYPE_COUNT,869GROUP_CUSTOM1,870GROUP_CUSTOM2,871GROUP_CUSTOM3,872} TypeGroups;873874typedef enum {875STATUS_NONE = 0,876STATUS_CONTINUE = 100,877STATUS_OK = 200,878STATUS_FORBIDDEN = 403,879STATUS_NOTFOUND = 404,880STATUS_ERROR = 500,881STATUS_NOWIFI = 503,882STATUS_TIMEOUT = 504,883STATUS_CORRUPT = 505,884STATUS_NOSPACE = 506,885} StatusCodes;886887typedef enum {888REGION_US,889REGION_JP,890REGION_EU,891} GameRegions;892893typedef enum {894LANGUAGE_EN,895LANGUAGE_FR,896LANGUAGE_IT,897LANGUAGE_GE,898LANGUAGE_SP,899LANGUAGE_JP,900#if GAME_VERSION != VER_100901LANGUAGE_KO,902LANGUAGE_SC,903LANGUAGE_TC,904#endif905} GameLanguages;906907typedef enum {908ENGINESTATE_LOAD,909ENGINESTATE_REGULAR,910ENGINESTATE_PAUSED,911ENGINESTATE_FROZEN,912ENGINESTATE_STEPOVER = 4,913ENGINESTATE_DEVMENU = 8,914ENGINESTATE_VIDEOPLAYBACK,915ENGINESTATE_SHOWIMAGE,916#if RETRO_REV02917ENGINESTATE_ERRORMSG,918ENGINESTATE_ERRORMSG_FATAL,919#endif920ENGINESTATE_NONE,921} EngineStates;922923// see: https://docs.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes924// for value list & descriptions925typedef enum {926KEYMAP_AUTO_MAPPING = -1,927KEYMAP_NO_MAPPING = 0,928KEYMAP_LBUTTON = 0x01,929KEYMAP_RBUTTON = 0x02,930KEYMAP_CANCEL = 0x03,931KEYMAP_MBUTTON = 0x04,932KEYMAP_XBUTTON1 = 0x05,933KEYMAP_XBUTTON2 = 0x06,934KEYMAP_BACK = 0x08,935KEYMAP_TAB = 0x09,936KEYMAP_CLEAR = 0x0C,937KEYMAP_RETURN = 0x0D,938KEYMAP_SHIFT = 0x10,939KEYMAP_CONTROL = 0x11,940KEYMAP_MENU = 0x12,941KEYMAP_PAUSE = 0x13,942KEYMAP_CAPITAL = 0x14,943KEYMAP_KANA = 0x15,944KEYMAP_HANGEUL = 0x15,945KEYMAP_HANGUL = 0x15,946KEYMAP_JUNJA = 0x17,947KEYMAP_FINAL = 0x18,948KEYMAP_HANJA = 0x19,949KEYMAP_KANJI = 0x19,950KEYMAP_ESCAPE = 0x1B,951KEYMAP_CONVERT = 0x1C,952KEYMAP_NONCONVERT = 0x1D,953KEYMAP_ACCEPT = 0x1E,954KEYMAP_MODECHANGE = 0x1F,955KEYMAP_SPACE = 0x20,956KEYMAP_PRIOR = 0x21,957KEYMAP_NEXT = 0x22,958KEYMAP_END = 0x23,959KEYMAP_HOME = 0x24,960KEYMAP_LEFT = 0x25,961KEYMAP_UP = 0x26,962KEYMAP_RIGHT = 0x27,963KEYMAP_DOWN = 0x28,964KEYMAP_SELECT = 0x29,965KEYMAP_PRINT = 0x2A,966KEYMAP_EXECUTE = 0x2B,967KEYMAP_SNAPSHOT = 0x2C,968KEYMAP_INSERT = 0x2D,969KEYMAP_DELETE = 0x2E,970KEYMAP_HELP = 0x2F,971KEYMAP_0 = 0x30,972KEYMAP_1 = 0x31,973KEYMAP_2 = 0x32,974KEYMAP_3 = 0x33,975KEYMAP_4 = 0x34,976KEYMAP_5 = 0x35,977KEYMAP_6 = 0x36,978KEYMAP_7 = 0x37,979KEYMAP_8 = 0x38,980KEYMAP_9 = 0x39,981KEYMAP_A = 0x41,982KEYMAP_B = 0x42,983KEYMAP_C = 0x43,984KEYMAP_D = 0x44,985KEYMAP_E = 0x45,986KEYMAP_F = 0x46,987KEYMAP_G = 0x47,988KEYMAP_H = 0x48,989KEYMAP_I = 0x49,990KEYMAP_J = 0x4A,991KEYMAP_K = 0x4B,992KEYMAP_L = 0x4C,993KEYMAP_M = 0x4D,994KEYMAP_N = 0x4E,995KEYMAP_O = 0x4F,996KEYMAP_P = 0x50,997KEYMAP_Q = 0x51,998KEYMAP_R = 0x52,999KEYMAP_S = 0x53,1000KEYMAP_T = 0x54,1001KEYMAP_U = 0x55,1002KEYMAP_V = 0x56,1003KEYMAP_W = 0x57,1004KEYMAP_X = 0x58,1005KEYMAP_Y = 0x59,1006KEYMAP_Z = 0x5A,1007KEYMAP_LWIN = 0x5B,1008KEYMAP_RWIN = 0x5C,1009KEYMAP_APPS = 0x5D,1010KEYMAP_SLEEP = 0x5F,1011KEYMAP_NUMPAD0 = 0x60,1012KEYMAP_NUMPAD1 = 0x61,1013KEYMAP_NUMPAD2 = 0x62,1014KEYMAP_NUMPAD3 = 0x63,1015KEYMAP_NUMPAD4 = 0x64,1016KEYMAP_NUMPAD5 = 0x65,1017KEYMAP_NUMPAD6 = 0x66,1018KEYMAP_NUMPAD7 = 0x67,1019KEYMAP_NUMPAD8 = 0x68,1020KEYMAP_NUMPAD9 = 0x69,1021KEYMAP_MULTIPLY = 0x6A,1022KEYMAP_ADD = 0x6B,1023KEYMAP_SEPARATOR = 0x6C,1024KEYMAP_SUBTRACT = 0x6D,1025KEYMAP_DECIMAL = 0x6E,1026KEYMAP_DIVIDE = 0x6F,1027KEYMAP_F1 = 0x70,1028KEYMAP_F2 = 0x71,1029KEYMAP_F3 = 0x72,1030KEYMAP_F4 = 0x73,1031KEYMAP_F5 = 0x74,1032KEYMAP_F6 = 0x75,1033KEYMAP_F7 = 0x76,1034KEYMAP_F8 = 0x77,1035KEYMAP_F9 = 0x78,1036KEYMAP_F10 = 0x79,1037KEYMAP_F11 = 0x7A,1038KEYMAP_F12 = 0x7B,1039KEYMAP_F13 = 0x7C,1040KEYMAP_F14 = 0x7D,1041KEYMAP_F15 = 0x7E,1042KEYMAP_F16 = 0x7F,1043KEYMAP_F17 = 0x80,1044KEYMAP_F18 = 0x81,1045KEYMAP_F19 = 0x82,1046KEYMAP_F20 = 0x83,1047KEYMAP_F21 = 0x84,1048KEYMAP_F22 = 0x85,1049KEYMAP_F23 = 0x86,1050KEYMAP_F24 = 0x87,1051KEYMAP_NAVIGATION_VIEW = 0x88,1052KEYMAP_NAVIGATION_MENU = 0x89,1053KEYMAP_NAVIGATION_UP = 0x8A,1054KEYMAP_NAVIGATION_DOWN = 0x8B,1055KEYMAP_NAVIGATION_LEFT = 0x8C,1056KEYMAP_NAVIGATION_RIGHT = 0x8D,1057KEYMAP_NAVIGATION_ACCEPT = 0x8E,1058KEYMAP_NAVIGATION_CANCEL = 0x8F,1059KEYMAP_NUMLOCK = 0x90,1060KEYMAP_SCROLL = 0x91,1061KEYMAP_OEM_NEC_EQUAL = 0x92,1062KEYMAP_OEM_FJ_JISHO = 0x92,1063KEYMAP_OEM_FJ_MASSHOU = 0x93,1064KEYMAP_OEM_FJ_TOUROKU = 0x94,1065KEYMAP_OEM_FJ_LOYA = 0x95,1066KEYMAP_OEM_FJ_ROYA = 0x96,1067KEYMAP_LSHIFT = 0xA0,1068KEYMAP_RSHIFT = 0xA1,1069KEYMAP_LCONTROL = 0xA2,1070KEYMAP_RCONTROL = 0xA3,1071KEYMAP_LMENU = 0xA4,1072KEYMAP_RMENU = 0xA5,1073KEYMAP_BROWSER_BACK = 0xA6,1074KEYMAP_BROWSER_FORWARD = 0xA7,1075KEYMAP_BROWSER_REFRESH = 0xA8,1076KEYMAP_BROWSER_STOP = 0xA9,1077KEYMAP_BROWSER_SEARCH = 0xAA,1078KEYMAP_BROWSER_FAVORITES = 0xAB,1079KEYMAP_BROWSER_HOME = 0xAC,1080KEYMAP_VOLUME_MUTE = 0xAD,1081KEYMAP_VOLUME_DOWN = 0xAE,1082KEYMAP_VOLUME_UP = 0xAF,1083KEYMAP_MEDIA_NEXT_TRACK = 0xB0,1084KEYMAP_MEDIA_PREV_TRACK = 0xB1,1085KEYMAP_MEDIA_STOP = 0xB2,1086KEYMAP_MEDIA_PLAY_PAUSE = 0xB3,1087KEYMAP_LAUNCH_MAIL = 0xB4,1088KEYMAP_LAUNCH_MEDIA_SELECT = 0xB5,1089KEYMAP_LAUNCH_APP1 = 0xB6,1090KEYMAP_LAUNCH_APP2 = 0xB7,1091KEYMAP_OEM_1 = 0xBA,1092KEYMAP_OEM_PLUS = 0xBB,1093KEYMAP_OEM_COMMA = 0xBC,1094KEYMAP_OEM_MINUS = 0xBD,1095KEYMAP_OEM_PERIOD = 0xBE,1096KEYMAP_OEM_2 = 0xBF,1097KEYMAP_OEM_3 = 0xC0,1098KEYMAP_GAMEPAD_A = 0xC3,1099KEYMAP_GAMEPAD_B = 0xC4,1100KEYMAP_GAMEPAD_X = 0xC5,1101KEYMAP_GAMEPAD_Y = 0xC6,1102KEYMAP_GAMEPAD_RIGHT_SHOULDER = 0xC7,1103KEYMAP_GAMEPAD_LEFT_SHOULDER = 0xC8,1104KEYMAP_GAMEPAD_LEFT_TRIGGER = 0xC9,1105KEYMAP_GAMEPAD_RIGHT_TRIGGER = 0xCA,1106KEYMAP_GAMEPAD_DPAD_UP = 0xCB,1107KEYMAP_GAMEPAD_DPAD_DOWN = 0xCC,1108KEYMAP_GAMEPAD_DPAD_LEFT = 0xCD,1109KEYMAP_GAMEPAD_DPAD_RIGHT = 0xCE,1110KEYMAP_GAMEPAD_MENU = 0xCF,1111KEYMAP_GAMEPAD_VIEW = 0xD0,1112KEYMAP_GAMEPAD_LEFT_THUMBSTICK_BUTTON = 0xD1,1113KEYMAP_GAMEPAD_RIGHT_THUMBSTICK_BUTTON = 0xD2,1114KEYMAP_GAMEPAD_LEFT_THUMBSTICK_UP = 0xD3,1115KEYMAP_GAMEPAD_LEFT_THUMBSTICK_DOWN = 0xD4,1116KEYMAP_GAMEPAD_LEFT_THUMBSTICK_RIGHT = 0xD5,1117KEYMAP_GAMEPAD_LEFT_THUMBSTICK_LEFT = 0xD6,1118KEYMAP_GAMEPAD_RIGHT_THUMBSTICK_UP = 0xD7,1119KEYMAP_GAMEPAD_RIGHT_THUMBSTICK_DOWN = 0xD8,1120KEYMAP_GAMEPAD_RIGHT_THUMBSTICK_RIGHT = 0xD9,1121KEYMAP_GAMEPAD_RIGHT_THUMBSTICK_LEFT = 0xDA,1122KEYMAP_OEM_4 = 0xDB,1123KEYMAP_OEM_5 = 0xDC,1124KEYMAP_OEM_6 = 0xDD,1125KEYMAP_OEM_7 = 0xDE,1126KEYMAP_OEM_8 = 0xDF,1127KEYMAP_OEM_AX = 0xE1,1128KEYMAP_OEM_102 = 0xE2,1129KEYMAP_ICO_HELP = 0xE3,1130KEYMAP_ICO_00 = 0xE4,1131KEYMAP_PROCESSKEY = 0xE5,1132KEYMAP_ICO_CLEAR = 0xE6,1133KEYMAP_PACKET = 0xE7,1134KEYMAP_OEM_RESET = 0xE9,1135KEYMAP_OEM_JUMP = 0xEA,1136KEYMAP_OEM_PA1 = 0xEB,1137KEYMAP_OEM_PA2 = 0xEC,1138KEYMAP_OEM_PA3 = 0xED,1139KEYMAP_OEM_WSCTRL = 0xEE,1140KEYMAP_OEM_CUSEL = 0xEF,1141KEYMAP_OEM_ATTN = 0xF0,1142KEYMAP_OEM_FINISH = 0xF1,1143KEYMAP_OEM_COPY = 0xF2,1144KEYMAP_OEM_AUTO = 0xF3,1145KEYMAP_OEM_ENLW = 0xF4,1146KEYMAP_OEM_BACKTAB = 0xF5,1147KEYMAP_ATTN = 0xF6,1148KEYMAP_CRSEL = 0xF7,1149KEYMAP_EXSEL = 0xF8,1150KEYMAP_EREOF = 0xF9,1151KEYMAP_PLAY = 0xFA,1152KEYMAP_ZOOM = 0xFB,1153KEYMAP_NONAME = 0xFC,1154KEYMAP_PA1 = 0xFD,1155KEYMAP_OEM_CLEAR = 0xFE,1156} KeyMappings;11571158#if RETRO_USE_MOD_LOADER1159typedef enum {1160MODCB_ONGAMESTARTUP,1161MODCB_ONSTATICLOAD,1162MODCB_ONSTAGELOAD,1163MODCB_ONUPDATE,1164MODCB_ONLATEUPDATE,1165MODCB_ONSTATICUPDATE,1166MODCB_ONDRAW,1167MODCB_ONSTAGEUNLOAD,1168MODCB_ONSHADERLOAD,1169MODCB_ONVIDEOSKIPCB,1170MODCB_ONSCANLINECB,1171} ModCallbackEvents;11721173typedef enum {1174SUPER_UPDATE,1175SUPER_LATEUPDATE,1176SUPER_STATICUPDATE,1177SUPER_DRAW,1178SUPER_CREATE,1179SUPER_STAGELOAD,1180SUPER_EDITORLOAD,1181SUPER_EDITORDRAW,1182SUPER_SERIALIZE1183} ModSuper;1184#endif11851186// -------------------------1187// FUNCTION TABLES1188// -------------------------11891190#if RETRO_USE_MOD_LOADER1191// Mod Table1192typedef struct {1193// Registration & Core1194#if RETRO_REV0U1195void (*RegisterGlobals)(const char *globalsPath, void **globals, uint32 size, void (*initCB)(void *globals));1196void (*RegisterObject)(void **staticVars, void **modStaticVars, const char *name, uint32 entityClassSize, uint32 staticClassSize,1197uint32 modClassSize, void (*update)(void), void (*lateUpdate)(void), void (*staticUpdate)(void), void (*draw)(void),1198void (*create)(void *), void (*stageLoad)(void), void (*editorLoad)(void), void (*editorDraw)(void),1199void (*serialize)(void), void (*staticLoad)(void *staticVars), const char *inherited);1200#else1201void (*RegisterGlobals)(const char *globalsPath, void **globals, uint32 size);1202void (*RegisterObject)(void **staticVars, void **modStaticVars, const char *name, uint32 entityClassSize, uint32 staticClassSize,1203uint32 modClassSize, void (*update)(void), void (*lateUpdate)(void), void (*staticUpdate)(void), void (*draw)(void),1204void (*create)(void *), void (*stageLoad)(void), void (*editorLoad)(void), void (*editorDraw)(void),1205void (*serialize)(void), const char *inherited);1206#endif1207void *RegisterObject_STD;1208void (*RegisterObjectHook)(void **staticVars, const char *staticName);1209void *(*FindObject)(const char *name);1210void *(*GetGlobals)(void);1211void (*Super)(int32 classID, int32 callback, void *data);12121213// Mod Info1214bool32 (*LoadModInfo)(const char *id, String *name, String *description, String *version, bool32 *active);1215void (*GetModPath)(const char *id, String *result);1216int32 (*GetModCount)(bool32 active);1217const char *(*GetModIDByIndex)(uint32 index);1218bool32 (*ForeachModID)(String *id);12191220// Mod Callbacks & Public Functions1221void (*AddModCallback)(int32 callbackID, void (*callback)(void *));1222void *AddModCallback_STD;1223void (*AddPublicFunction)(const char *functionName, void *functionPtr);1224void *(*GetPublicFunction)(const char *id, const char *functionName);12251226// Mod Settings1227bool32 (*GetSettingsBool)(const char *id, const char *key, bool32 fallback);1228int32 (*GetSettingsInteger)(const char *id, const char *key, int32 fallback);1229float (*GetSettingsFloat)(const char *id, const char *key, float fallback);1230void (*GetSettingsString)(const char *id, const char *key, String *result, const char *fallback);1231void (*SetSettingsBool)(const char *key, bool32 val);1232void (*SetSettingsInteger)(const char *key, int32 val);1233void (*SetSettingsFloat)(const char *key, float val);1234void (*SetSettingsString)(const char *key, String *val);1235void (*SaveSettings)(void);12361237// Config1238bool32 (*GetConfigBool)(const char *key, bool32 fallback);1239int32 (*GetConfigInteger)(const char *key, int32 fallback);1240float (*GetConfigFloat)(const char *key, float fallback);1241void (*GetConfigString)(const char *key, String *result, const char *fallback);1242bool32 (*ForeachConfig)(String *config);1243bool32 (*ForeachConfigCategory)(String *category);12441245// Achievements1246void (*RegisterAchievement)(const char *identifier, const char *name, const char *desc);1247void (*GetAchievementInfo)(uint32 id, String *name, String *description, String *identifier, bool32 *achieved);1248int32 (*GetAchievementIndexByID)(const char *identifier);1249int32 (*GetAchievementCount)(void);12501251// Shaders1252void (*LoadShader)(const char *shaderName, bool32 linear);12531254// StateMachine1255void (*StateMachineRun)(void (*state)(void));1256void (*RegisterStateHook)(void (*state)(void), bool32 (*hook)(bool32 skippedState), bool32 priority);1257// runs all high priority state hooks hooked to the address of 'state', returns if the main state should be skipped or not1258bool32 (*HandleRunState_HighPriority)(void (*state)(void));1259// runs all low priority state hooks hooked to the address of 'state'1260void (*HandleRunState_LowPriority)(void (*state)(void), bool32 skipState);12611262#if RETRO_MOD_LOADER_VER >= 21263// Mod Settings (Part 2)1264bool32 (*ForeachSetting)(const char *id, String *setting);1265bool32 (*ForeachSettingCategory)(const char *id, String *category);12661267// Files1268bool32 (*ExcludeFile)(const char *id, const char *path);1269bool32 (*ExcludeAllFiles)(const char *id);1270bool32 (*ReloadFile)(const char *id, const char *path);1271bool32 (*ReloadAllFiles)(const char *id);12721273// Graphics1274void *(*GetSpriteAnimation)(uint16 id);1275void *(*GetSpriteSurface)(uint16 id);1276uint16 *(*GetPaletteBank)(uint8 id);1277uint8 *(*GetActivePaletteBuffer)(void);1278void (*GetRGB32To16Buffer)(uint16 **rgb32To16_R, uint16 **rgb32To16_G, uint16 **rgb32To16_B);1279uint16 *(*GetBlendLookupTable)(void);1280uint16 *(*GetSubtractLookupTable)(void);1281uint16 *(*GetTintLookupTable)(void);1282color (*GetMaskColor)(void);1283void *(*GetScanEdgeBuffer)(void);1284void *(*GetCamera)(uint8 id);1285void *(*GetShader)(uint8 id);1286void *(*GetModel)(uint16 id);1287void *(*GetScene3D)(uint16 id);1288void (*DrawDynamicAniTiles)(Animator *animator, uint16 tileIndex);12891290// Audio1291void *(*GetSfx)(uint16 id);1292void *(*GetChannel)(uint8 id);12931294// Objects/Entities1295bool32 (*GetGroupEntities)(uint16 group, void **entity);12961297// Collision1298void (*SetPathGripSensors)(CollisionSensor *sensors); // expects 5 sensors1299void (*FindFloorPosition)(CollisionSensor *sensor);1300void (*FindLWallPosition)(CollisionSensor *sensor);1301void (*FindRoofPosition)(CollisionSensor *sensor);1302void (*FindRWallPosition)(CollisionSensor *sensor);1303void (*FloorCollision)(CollisionSensor *sensor);1304void (*LWallCollision)(CollisionSensor *sensor);1305void (*RoofCollision)(CollisionSensor *sensor);1306void (*RWallCollision)(CollisionSensor *sensor);1307void (*CopyCollisionMask)(uint16 dst, uint16 src, uint8 cPlane, uint8 cMode);1308void (*GetCollisionInfo)(CollisionMask **masks, TileInfo **tileInfo);1309#endif1310} ModFunctionTable;1311#endif13121313#if RETRO_REV021314// API Table1315typedef struct {1316// API Core1317int32 (*GetUserLanguage)(void);1318bool32 (*GetConfirmButtonFlip)(void);1319void (*ExitGame)(void);1320void (*LaunchManual)(void);1321#if RETRO_REV0U1322int32 (*GetDefaultGamepadType)(void);1323#endif1324bool32 (*IsOverlayEnabled)(uint32 deviceID);1325bool32 (*CheckDLC)(int32 dlc);1326#if MANIA_USE_EGS1327bool32 (*SetupExtensionOverlay)(void);1328bool32 (*CanShowExtensionOverlay)(int32 overlay);1329#endif1330bool32 (*ShowExtensionOverlay)(int32 overlay);1331#if MANIA_USE_EGS1332bool32 (*CanShowAltExtensionOverlay)(int32 overlay);1333bool32 (*ShowAltExtensionOverlay)(int32 overlay);1334int32 (*GetConnectingStringID)(void);1335void (*ShowLimitedVideoOptions)(int32 id);1336#endif13371338// Achievements1339void (*TryUnlockAchievement)(AchievementID *id);1340bool32 (*GetAchievementsEnabled)(void);1341void (*SetAchievementsEnabled)(bool32 enabled);1342#if MANIA_USE_EGS1343bool32 (*CheckAchievementsEnabled)(void);1344void (*SetAchievementNames)(String **names, int32 count);1345#endif13461347// Leaderboards1348#if MANIA_USE_EGS1349bool32 (*CheckLeaderboardsEnabled)(void);1350#endif1351void (*InitLeaderboards)(void);1352void (*FetchLeaderboard)(LeaderboardID *leaderboard, bool32 isUser);1353void (*TrackScore)(LeaderboardID *leaderboard, int32 score, void (*callback)(bool32 success, int32 rank));1354int32 (*GetLeaderboardsStatus)(void);1355LeaderboardAvail (*LeaderboardEntryViewSize)(void);1356LeaderboardAvail (*LeaderboardEntryLoadSize)(void);1357void (*LoadLeaderboardEntries)(int32 start, uint32 end, int32 type);1358void (*ResetLeaderboardInfo)(void);1359LeaderboardEntry *(*ReadLeaderboardEntry)(uint32 entryID);13601361// Rich Presence1362void (*SetRichPresence)(int32 id, String *text);13631364// Stats1365void (*TryTrackStat)(StatInfo *stat);1366bool32 (*GetStatsEnabled)(void);1367void (*SetStatsEnabled)(bool32 enabled);13681369// Authorization1370void (*ClearPrerollErrors)(void);1371void (*TryAuth)(void);1372int32 (*GetUserAuthStatus)(void);1373bool32 (*GetUsername)(String *userName);13741375// Storage1376void (*TryInitStorage)(void);1377int32 (*GetStorageStatus)(void);1378int32 (*GetSaveStatus)(void);1379void (*ClearSaveStatus)(void);1380void (*SetSaveStatusContinue)(void);1381void (*SetSaveStatusOK)(void);1382void (*SetSaveStatusForbidden)(void);1383void (*SetSaveStatusError)(void);1384void (*SetNoSave)(bool32 noSave);1385bool32 (*GetNoSave)(void);13861387// User File Management1388void (*LoadUserFile)(const char *name, void *buffer, uint32 size, void (*callback)(int32 status)); // load user file from game dir1389void (*SaveUserFile)(const char *name, void *buffer, uint32 size, void (*callback)(int32 status), bool32 compressed); // save user file to game dir1390void (*DeleteUserFile)(const char *name, void (*callback)(int32 status)); // delete user file from game dir13911392// User DBs1393uint16 (*InitUserDB)(const char *name, ...);1394uint16 (*LoadUserDB)(const char *filename, void (*callback)(int32 status));1395bool32 (*SaveUserDB)(uint16 tableID, void (*callback)(int32 status));1396void (*ClearUserDB)(uint16 tableID);1397void (*ClearAllUserDBs)(void);1398uint16 (*SetupUserDBRowSorting)(uint16 tableID);1399bool32 (*GetUserDBRowsChanged)(uint16 tableID);1400int32 (*AddRowSortFilter)(uint16 tableID, int32 type, const char *name, void *value);1401int32 (*SortDBRows)(uint16 tableID, int32 type, const char *name, bool32 sortAscending);1402int32 (*GetSortedUserDBRowCount)(uint16 tableID);1403int32 (*GetSortedUserDBRowID)(uint16 tableID, uint16 row);1404int32 (*AddUserDBRow)(uint16 tableID);1405bool32 (*SetUserDBValue)(uint16 tableID, uint32 row, int32 type, const char *name, void *value);1406bool32 (*GetUserDBValue)(uint16 tableID, uint32 row, int32 type, const char *name, void *value);1407uint32 (*GetUserDBRowUUID)(uint16 tableID, uint16 row);1408uint16 (*GetUserDBRowByID)(uint16 tableID, uint32 uuid);1409void (*GetUserDBRowCreationTime)(uint16 tableID, uint16 row, char *buffer, size_t bufferSize, const char *format);1410bool32 (*RemoveDBRow)(uint16 tableID, uint16 row);1411bool32 (*RemoveAllDBRows)(uint16 tableID);1412} APIFunctionTable;1413#endif14141415// Function Table1416typedef struct {1417// Registration1418#if RETRO_REV0U1419void (*RegisterGlobalVariables)(void **globals, int32 size, void (*initCB)(void *globals));1420void (*RegisterObject)(void **staticVars, const char *name, uint32 entityClassSize, uint32 staticClassSize, void (*update)(void),1421void (*lateUpdate)(void), void (*staticUpdate)(void), void (*draw)(void), void (*create)(void *), void (*stageLoad)(void),1422void (*editorLoad)(void), void (*editorDraw)(void), void (*serialize)(void), void (*staticLoad)(void *staticVars));1423#else1424void (*RegisterGlobalVariables)(void **globals, int32 size);1425void (*RegisterObject)(void **staticVars, const char *name, uint32 entityClassSize, uint32 staticClassSize, void (*update)(void),1426void (*lateUpdate)(void), void (*staticUpdate)(void), void (*draw)(void), void (*create)(void *), void (*stageLoad)(void),1427void (*editorLoad)(void), void (*editorDraw)(void), void (*serialize)(void));1428#endif1429#if RETRO_REV021430void (*RegisterStaticVariables)(void **varClass, const char *name, uint32 classSize);1431#endif14321433// Entities & Objects1434bool32 (*GetActiveEntities)(uint16 group, void **entity);1435bool32 (*GetAllEntities)(uint16 classID, void **entity);1436void (*BreakForeachLoop)(void);1437void (*SetEditableVar)(uint8 type, const char *name, uint8 classID, int32 offset);1438void *(*GetEntity)(uint16 slot);1439int32 (*GetEntitySlot)(void *entity);1440int32 (*GetEntityCount)(uint16 classID, bool32 isActive);1441int32 (*GetDrawListRefSlot)(uint8 drawGroup, uint16 listPos);1442void *(*GetDrawListRef)(uint8 drawGroup, uint16 listPos);1443void (*ResetEntity)(void *entity, uint16 classID, void *data);1444void (*ResetEntitySlot)(uint16 slot, uint16 classID, void *data);1445Entity *(*CreateEntity)(uint16 classID, void *data, int32 x, int32 y);1446void (*CopyEntity)(void *destEntity, void *srcEntity, bool32 clearSrcEntity);1447bool32 (*CheckOnScreen)(void *entity, Vector2 *range);1448bool32 (*CheckPosOnScreen)(Vector2 *position, Vector2 *range);1449void (*AddDrawListRef)(uint8 drawGroup, uint16 entitySlot);1450void (*SwapDrawListEntries)(uint8 drawGroup, uint16 slot1, uint16 slot2, uint16 count);1451void (*SetDrawGroupProperties)(uint8 drawGroup, bool32 sorted, void (*hookCB)(void));14521453// Scene Management1454void (*SetScene)(const char *categoryName, const char *sceneName);1455void (*SetEngineState)(uint8 state);1456#if RETRO_REV021457void (*ForceHardReset)(bool32 shouldHardReset);1458#endif1459bool32 (*CheckValidScene)(void);1460bool32 (*CheckSceneFolder)(const char *folderName);1461void (*LoadScene)(void);1462int32 (*FindObject)(const char *name);14631464// Cameras1465void (*ClearCameras)(void);1466void (*AddCamera)(Vector2 *targetPos, int32 offsetX, int32 offsetY, bool32 worldRelative);14671468// API (Rev01 only)1469#if !RETRO_REV021470void *(*GetAPIFunction)(const char *funcName);1471#endif14721473// Window/Video Settings1474int32 (*GetVideoSetting)(int32 id);1475void (*SetVideoSetting)(int32 id, int32 value);1476void (*UpdateWindow)(void);14771478// Math1479int32 (*Sin1024)(int32 angle);1480int32 (*Cos1024)(int32 angle);1481int32 (*Tan1024)(int32 angle);1482int32 (*ASin1024)(int32 angle);1483int32 (*ACos1024)(int32 angle);1484int32 (*Sin512)(int32 angle);1485int32 (*Cos512)(int32 angle);1486int32 (*Tan512)(int32 angle);1487int32 (*ASin512)(int32 angle);1488int32 (*ACos512)(int32 angle);1489int32 (*Sin256)(int32 angle);1490int32 (*Cos256)(int32 angle);1491int32 (*Tan256)(int32 angle);1492int32 (*ASin256)(int32 angle);1493int32 (*ACos256)(int32 angle);1494int32 (*Rand)(int32 min, int32 max);1495int32 (*RandSeeded)(int32 min, int32 max, int32 *seed);1496void (*SetRandSeed)(int32 seed);1497uint8 (*ATan2)(int32 x, int32 y);14981499// Matrices1500void (*SetIdentityMatrix)(Matrix *matrix);1501void (*MatrixMultiply)(Matrix *dest, Matrix *matrixA, Matrix *matrixB);1502void (*MatrixTranslateXYZ)(Matrix *matrix, int32 x, int32 y, int32 z, bool32 setIdentity);1503void (*MatrixScaleXYZ)(Matrix *matrix, int32 x, int32 y, int32 z);1504void (*MatrixRotateX)(Matrix *matrix, int16 angle);1505void (*MatrixRotateY)(Matrix *matrix, int16 angle);1506void (*MatrixRotateZ)(Matrix *matrix, int16 angle);1507void (*MatrixRotateXYZ)(Matrix *matrix, int16 x, int16 y, int16 z);1508void (*MatrixInverse)(Matrix *dest, Matrix *matrix);1509void (*MatrixCopy)(Matrix *matDest, Matrix *matSrc);15101511// Strings1512void (*InitString)(String *string, const char *text, uint32 textLength);1513void (*CopyString)(String *dst, String *src);1514void (*SetString)(String *string, const char *text);1515void (*AppendString)(String *string, String *appendString);1516void (*AppendText)(String *string, const char *appendText);1517void (*LoadStringList)(String *stringList, const char *filePath, uint32 charSize);1518bool32 (*SplitStringList)(String *splitStrings, String *stringList, int32 startStringID, int32 stringCount);1519void (*GetCString)(char *destChars, String *string);1520bool32 (*CompareStrings)(String *string1, String *string2, bool32 exactMatch);15211522// Screens & Displays1523void (*GetDisplayInfo)(int32 *displayID, int32 *width, int32 *height, int32 *refreshRate, char *text);1524void (*GetWindowSize)(int32 *width, int32 *height);1525int32 (*SetScreenSize)(uint8 screenID, uint16 width, uint16 height);1526void (*SetClipBounds)(uint8 screenID, int32 x1, int32 y1, int32 x2, int32 y2);1527#if RETRO_REV021528void (*SetScreenVertices)(uint8 startVert2P_S1, uint8 startVert2P_S2, uint8 startVert3P_S1, uint8 startVert3P_S2, uint8 startVert3P_S3);1529#endif15301531// Spritesheets1532uint16 (*LoadSpriteSheet)(const char *filePath, uint8 scope);15331534// Palettes & Colors1535#if RETRO_REV021536void (*SetTintLookupTable)(uint16 *lookupTable);1537#else1538uint16 *(*GetTintLookupTable)(void);1539#endif1540void (*SetPaletteMask)(color maskColor);1541void (*SetPaletteEntry)(uint8 bankID, uint8 index, uint32 color);1542color (*GetPaletteEntry)(uint8 bankID, uint8 index);1543void (*SetActivePalette)(uint8 newActiveBank, int32 startLine, int32 endLine);1544void (*CopyPalette)(uint8 sourceBank, uint8 srcBankStart, uint8 destinationBank, uint8 destBankStart, uint8 count);1545#if RETRO_REV021546void (*LoadPalette)(uint8 bankID, const char *path, uint16 disabledRows);1547#endif1548void (*RotatePalette)(uint8 bankID, uint8 startIndex, uint8 endIndex, bool32 right);1549void (*SetLimitedFade)(uint8 destBankID, uint8 srcBankA, uint8 srcBankB, int16 blendAmount, int32 startIndex, int32 endIndex);1550#if RETRO_REV021551void (*BlendColors)(uint8 destBankID, color *srcColorsA, color *srcColorsB, int32 blendAmount, int32 startIndex, int32 count);1552#endif15531554// Drawing1555void (*DrawRect)(int32 x, int32 y, int32 width, int32 height, uint32 color, int32 alpha, int32 inkEffect, bool32 screenRelative);1556void (*DrawLine)(int32 x1, int32 y1, int32 x2, int32 y2, uint32 color, int32 alpha, int32 inkEffect, bool32 screenRelative);1557void (*DrawCircle)(int32 x, int32 y, int32 radius, uint32 color, int32 alpha, int32 inkEffect, bool32 screenRelative);1558void (*DrawCircleOutline)(int32 x, int32 y, int32 innerRadius, int32 outerRadius, uint32 color, int32 alpha, int32 inkEffect,1559bool32 screenRelative);1560void (*DrawFace)(Vector2 *vertices, int32 vertCount, int32 r, int32 g, int32 b, int32 alpha, int32 inkEffect);1561void (*DrawBlendedFace)(Vector2 *vertices, color *vertColors, int32 vertCount, int32 alpha, int32 inkEffect);1562void (*DrawSprite)(Animator *animator, Vector2 *position, bool32 screenRelative);1563void (*DrawDeformedSprite)(uint16 sheetID, int32 inkEffect, bool32 screenRelative);1564void (*DrawText)(Animator *animator, Vector2 *position, String *string, int32 endFrame, int32 textLength, int32 align, int32 spacing, void *unused,1565Vector2 *charOffsets, bool32 screenRelative);1566void (*DrawTile)(uint16 *tiles, int32 countX, int32 countY, Vector2 *position, Vector2 *offset, bool32 screenRelative);1567void (*CopyTile)(uint16 dest, uint16 src, uint16 count);1568void (*DrawAniTiles)(uint16 sheetID, uint16 tileIndex, uint16 srcX, uint16 srcY, uint16 width, uint16 height);1569#if RETRO_REV0U1570void (*DrawDynamicAniTiles)(Animator *animator, uint16 tileIndex);1571#endif1572void (*FillScreen)(uint32 color, int32 alphaR, int32 alphaG, int32 alphaB);15731574// Meshes & 3D Scenes1575uint16 (*LoadMesh)(const char *filename, uint8 scope);1576uint16 (*Create3DScene)(const char *identifier, uint16 faceCount, uint8 scope);1577void (*Prepare3DScene)(uint16 sceneIndex);1578void (*SetDiffuseColor)(uint16 sceneIndex, uint8 x, uint8 y, uint8 z);1579void (*SetDiffuseIntensity)(uint16 sceneIndex, uint8 x, uint8 y, uint8 z);1580void (*SetSpecularIntensity)(uint16 sceneIndex, uint8 x, uint8 y, uint8 z);1581void (*AddModelTo3DScene)(uint16 modelFrames, uint16 sceneIndex, uint8 drawMode, Matrix *matWorld, Matrix *matView, color color);1582void (*SetModelAnimation)(uint16 modelFrames, Animator *animator, int16 speed, uint8 loopIndex, bool32 forceApply, int16 frameID);1583void (*AddMeshFrameTo3DScene)(uint16 modelFrames, uint16 sceneIndex, Animator *animator, uint8 drawMode, Matrix *matWorld, Matrix *matView,1584color color);1585void (*Draw3DScene)(uint16 sceneIndex);15861587// Sprite Animations & Frames1588uint16 (*LoadSpriteAnimation)(const char *filePath, uint8 scope);1589uint16 (*CreateSpriteAnimation)(const char *filePath, uint32 frameCount, uint32 listCount, uint8 scope);1590void (*SetSpriteAnimation)(uint16 aniFrames, uint16 listID, Animator *animator, bool32 forceApply, int32 frameID);1591void (*EditSpriteAnimation)(uint16 aniFrames, uint16 listID, const char *name, int32 frameOffset, uint16 frameCount, int16 speed, uint8 loopIndex,1592uint8 rotationStyle);1593void (*SetSpriteString)(uint16 aniFrames, uint16 listID, String *string);1594uint16 (*FindSpriteAnimation)(uint16 aniFrames, const char *name);1595SpriteFrame *(*GetFrame)(uint16 aniFrames, uint16 listID, int32 frameID);1596Hitbox *(*GetHitbox)(Animator *animator, uint8 hitboxID);1597int16 (*GetFrameID)(Animator *animator);1598int32 (*GetStringWidth)(uint16 aniFrames, uint16 listID, String *string, int32 startIndex, int32 length, int32 spacing);1599void (*ProcessAnimation)(Animator *animator);16001601// Tile Layers1602uint16 (*GetTileLayerID)(const char *name);1603TileLayer *(*GetTileLayer)(uint16 layerID);1604void (*GetLayerSize)(uint16 layer, Vector2 *size, bool32 usePixelUnits);1605uint16 (*GetTile)(uint16 layer, int32 x, int32 y);1606void (*SetTile)(uint16 layer, int32 x, int32 y, uint16 tile);1607void (*CopyTileLayer)(uint16 dstLayerID, int32 dstStartX, int32 dstStartY, uint16 srcLayerID, int32 srcStartX, int32 srcStartY, int32 countX,1608int32 countY);1609void (*ProcessParallax)(TileLayer *tileLayer);1610ScanlineInfo *(*GetScanlines)(void);16111612// Object & Tile Collisions1613bool32 (*CheckObjectCollisionTouchBox)(void *thisEntity, Hitbox *thisHitbox, void *otherEntity, Hitbox *otherHitbox);1614bool32 (*CheckObjectCollisionTouchCircle)(void *thisEntity, int32 thisRadius, void *otherEntity, int32 otherRadius);1615uint8 (*CheckObjectCollisionBox)(void *thisEntity, Hitbox *thisHitbox, void *otherEntity, Hitbox *otherHitbox, bool32 setPos);1616bool32 (*CheckObjectCollisionPlatform)(void *thisEntity, Hitbox *thisHitbox, void *otherEntity, Hitbox *otherHitbox, bool32 setPos);1617bool32 (*ObjectTileCollision)(void *entity, uint16 collisionLayers, uint8 collisionMode, uint8 collisionPlane, int32 xOffset, int32 yOffset,1618bool32 setPos);1619bool32 (*ObjectTileGrip)(void *entity, uint16 collisionLayers, uint8 collisionMode, uint8 collisionPlane, int32 xOffset, int32 yOffset,1620int32 tolerance);1621void (*ProcessObjectMovement)(void *entity, Hitbox *outer, Hitbox *inner);1622#if RETRO_REV0U1623void (*SetupCollisionConfig)(int32 minDistance, uint8 lowTolerance, uint8 highTolerance, uint8 floorAngleTolerance, uint8 wallAngleTolerance,1624uint8 roofAngleTolerance);1625void (*SetPathGripSensors)(CollisionSensor *sensors); // expects 5 sensors1626void (*FindFloorPosition)(CollisionSensor *sensor);1627void (*FindLWallPosition)(CollisionSensor *sensor);1628void (*FindRoofPosition)(CollisionSensor *sensor);1629void (*FindRWallPosition)(CollisionSensor *sensor);1630void (*FloorCollision)(CollisionSensor *sensor);1631void (*LWallCollision)(CollisionSensor *sensor);1632void (*RoofCollision)(CollisionSensor *sensor);1633void (*RWallCollision)(CollisionSensor *sensor);1634#endif1635int32 (*GetTileAngle)(uint16 tile, uint8 cPlane, uint8 cMode);1636void (*SetTileAngle)(uint16 tile, uint8 cPlane, uint8 cMode, uint8 angle);1637uint8 (*GetTileFlags)(uint16 tile, uint8 cPlane);1638void (*SetTileFlags)(uint16 tile, uint8 cPlane, uint8 flag);1639#if RETRO_REV0U1640void (*CopyCollisionMask)(uint16 dst, uint16 src, uint8 cPlane, uint8 cMode);1641void (*GetCollisionInfo)(CollisionMask **masks, TileInfo **tileInfo);1642#endif16431644// Audio1645uint16 (*GetSfx)(const char *path);1646int32 (*PlaySfx)(uint16 sfx, int32 loopPoint, int32 priority);1647void (*StopSfx)(uint16 sfx);1648int32 (*PlayStream)(const char *filename, uint32 channel, uint32 startPos, uint32 loopPoint, bool32 loadASync);1649void (*SetChannelAttributes)(uint8 channel, float volume, float pan, float speed);1650void (*StopChannel)(uint32 channel);1651void (*PauseChannel)(uint32 channel);1652void (*ResumeChannel)(uint32 channel);1653bool32 (*IsSfxPlaying)(uint16 sfx);1654bool32 (*ChannelActive)(uint32 channel);1655uint32 (*GetChannelPos)(uint32 channel);16561657// Videos & "HD Images"1658bool32 (*LoadVideo)(const char *filename, double startDelay, bool32 (*skipCallback)(void));1659bool32 (*LoadImage)(const char *filename, double displayLength, double fadeSpeed, bool32 (*skipCallback)(void));16601661// Input1662#if RETRO_REV021663uint32 (*GetInputDeviceID)(uint8 inputSlot);1664uint32 (*GetFilteredInputDeviceID)(bool32 confirmOnly, bool32 unassignedOnly, uint32 maxInactiveTimer);1665int32 (*GetInputDeviceType)(uint32 deviceID);1666bool32 (*IsInputDeviceAssigned)(uint32 deviceID);1667int32 (*GetInputDeviceUnknown)(uint32 deviceID);1668int32 (*InputDeviceUnknown1)(uint32 deviceID, int32 unknown1, int32 unknown2);1669int32 (*InputDeviceUnknown2)(uint32 deviceID, int32 unknown1, int32 unknown2);1670int32 (*GetInputSlotUnknown)(uint8 inputSlot);1671int32 (*InputSlotUnknown1)(uint8 inputSlot, int32 unknown1, int32 unknown2);1672int32 (*InputSlotUnknown2)(uint8 inputSlot, int32 unknown1, int32 unknown2);1673void (*AssignInputSlotToDevice)(uint8 inputSlot, uint32 deviceID);1674bool32 (*IsInputSlotAssigned)(uint8 inputSlot);1675void (*ResetInputSlotAssignments)(void);1676#endif1677#if !RETRO_REV021678void (*GetUnknownInputValue)(int32 inputSlot, int32 type, int32 *value);1679#endif16801681// User File Management1682bool32 (*LoadUserFile)(const char *fileName, void *buffer, uint32 size); // load user file from exe dir1683bool32 (*SaveUserFile)(const char *fileName, void *buffer, uint32 size); // save user file to exe dir16841685// Printing (Rev02)1686#if RETRO_REV021687void (*PrintLog)(int32 mode, const char *message, ...);1688void (*PrintText)(int32 mode, const char *message);1689void (*PrintString)(int32 mode, String *message);1690void (*PrintUInt32)(int32 mode, const char *message, uint32 i);1691void (*PrintInt32)(int32 mode, const char *message, int32 i);1692void (*PrintFloat)(int32 mode, const char *message, float f);1693void (*PrintVector2)(int32 mode, const char *message, Vector2 vec);1694void (*PrintHitbox)(int32 mode, const char *message, Hitbox hitbox);1695#endif16961697// Editor1698void (*SetActiveVariable)(int32 classID, const char *name);1699void (*AddVarEnumValue)(const char *name);17001701// Printing (Rev01)1702#if !RETRO_REV021703void (*PrintMessage)(void *message, uint8 type);1704#endif17051706// Debugging1707#if RETRO_REV021708void (*ClearViewableVariables)(void);1709void (*AddViewableVariable)(const char *name, void *value, int32 type, int32 min, int32 max);1710#endif17111712#if RETRO_REV0U1713// Origins Extras1714void (*NotifyCallback)(int32 callbackID, int32 param1, int32 param2, int32 param3);1715void (*SetGameFinished)(void);1716void (*StopAllSfx)(void);1717#endif1718} RSDKFunctionTable;17191720// -------------------------1721// HELPERS1722// -------------------------17231724// used for casts and etc1725#define Type_StateMachine void (*)(void)1726// used for variable decl1727#define StateMachine(name) void (*name)(void)1728#if RETRO_USE_MOD_LOADER1729#define StateMachine_Run(state) Mod.StateMachineRun(state)1730#else1731#define StateMachine_Run(state) \1732if (state) { \1733state(); \1734}1735#endif1736#define StateMachine_None NULL17371738// Fancy macro + build magic to make tables & static vars1739#define TABLE(var, ...) var1740#define STATIC(var, val) var17411742#define RSDK_EDITABLE_VAR(object, type, var) RSDK.SetEditableVar(type, #var, (uint8)object->classID, offsetof(Entity##object, var))1743#define RSDK_EDITABLE_ARRAY(object, type, var, count, arrType) \1744for (int i = 0; i < (count); ++i) { \1745char buffer[0x40]; \1746sprintf_s(buffer, (int32)sizeof(buffer), "%s%d", #var, i); \1747RSDK.SetEditableVar(type, buffer, (uint8)object->classID, offsetof(Entity##object, var) + sizeof(arrType) * i); \1748}17491750// Some extra precaution to prevent crashes in editor1751#define RSDK_ACTIVE_VAR(object, var) \1752if (object) { \1753RSDK.SetActiveVariable(object->classID, #var); \1754} \1755else { \1756RSDK.SetActiveVariable(-1, #var); \1757}1758#define RSDK_ENUM_VAR(name, var) RSDK.AddVarEnumValue(name)17591760#if GAME_INCLUDE_EDITOR1761#define RSDK_DRAWING_OVERLAY(isDrawingOverlay) SceneInfo->debugMode = isDrawingOverlay17621763#if RETRO_REV0U1764#define RSDK_REGISTER_OBJECT(object) \1765RSDK.RegisterObject((void **)&object, #object, sizeof(Entity##object), sizeof(Object##object), object##_Update, object##_LateUpdate, \1766object##_StaticUpdate, object##_Draw, object##_Create, object##_StageLoad, object##_EditorLoad, object##_EditorDraw, \1767object##_Serialize, NULL)17681769#define RSDK_REGISTER_OBJECT_STATICLOAD(object) \1770RSDK.RegisterObject((void **)&object, #object, sizeof(Entity##object), sizeof(Object##object), object##_Update, object##_LateUpdate, \1771object##_StaticUpdate, object##_Draw, object##_Create, object##_StageLoad, object##_EditorLoad, object##_EditorDraw, \1772object##_Serialize, object##_StaticLoad)1773#else1774#define RSDK_REGISTER_OBJECT(object) \1775RSDK.RegisterObject((void **)&object, #object, sizeof(Entity##object), sizeof(Object##object), object##_Update, object##_LateUpdate, \1776object##_StaticUpdate, object##_Draw, object##_Create, object##_StageLoad, object##_EditorLoad, object##_EditorDraw, \1777object##_Serialize)1778#endif17791780#else17811782#if RETRO_REV0U1783#define RSDK_REGISTER_OBJECT(object) \1784RSDK.RegisterObject((void **)&object, #object, sizeof(Entity##object), sizeof(Object##object), object##_Update, object##_LateUpdate, \1785object##_StaticUpdate, object##_Draw, object##_Create, object##_StageLoad, NULL, NULL, object##_Serialize, NULL)17861787#define RSDK_REGISTER_OBJECT_STATICLOAD(object) \1788RSDK.RegisterObject((void **)&object, #object, sizeof(Entity##object), sizeof(Object##object), object##_Update, object##_LateUpdate, \1789object##_StaticUpdate, object##_Draw, object##_Create, object##_StageLoad, NULL, NULL, object##_Serialize, \1790object##_StaticLoad)1791#else1792#define RSDK_REGISTER_OBJECT(object) \1793RSDK.RegisterObject((void **)&object, #object, sizeof(Entity##object), sizeof(Object##object), object##_Update, object##_LateUpdate, \1794object##_StaticUpdate, object##_Draw, object##_Create, object##_StageLoad, NULL, NULL, object##_Serialize)1795#endif17961797#endif17981799#if RETRO_USE_MOD_LOADER18001801// dear god.18021803#if RETRO_REV0U18041805// Excludes StaticLoad (Parity With REV01 & REV02)1806#define MOD_REGISTER_OBJECT(object, inherit, update, lateUpdate, staticUpdate, draw, create, stageLoad, editorLoad, editorDraw, serialize) \1807Mod.RegisterObject((void **)&object, NULL, #object, sizeof(Entity##object), sizeof(Object##object), 0, update, lateUpdate, staticUpdate, draw, \1808create, stageLoad, editorLoad, editorDraw, serialize, NULL, inherit)18091810#define MOD_REGISTER_OBJ_OVERLOAD(object, update, lateUpdate, staticUpdate, draw, create, stageLoad, editorLoad, editorDraw, serialize) \1811MOD_REGISTER_OBJECT(object, #object, update, lateUpdate, staticUpdate, draw, create, stageLoad, editorLoad, editorDraw, serialize, NULL)18121813#define MOD_REGISTER_OBJ_OVERLOAD_NOCLASS(object, update, lateUpdate, staticUpdate, draw, create, stageLoad, editorLoad, editorDraw, serialize) \1814Mod.RegisterObject(NULL, NULL, #object, sizeof(Entity##object), 0, 0, update, lateUpdate, staticUpdate, draw, create, stageLoad, editorLoad, \1815editorDraw, serialize, NULL, NULL)18161817#define MOD_REGISTER_OBJ_OVERLOAD_MSV(object, modSVars, update, lateUpdate, staticUpdate, draw, create, stageLoad, editorLoad, editorDraw, \1818serialize) \1819Mod.RegisterObject((void **)&object, (void **)&modSVars, #object, sizeof(Entity##object), sizeof(Object##object), sizeof(ModObject##object), \1820update, lateUpdate, staticUpdate, draw, create, stageLoad, editorLoad, editorDraw, serialize, NULL, NULL)18211822#define MOD_REGISTER_OBJ_OVERLOAD_MSV_NOCLASS(object, modSVars, update, lateUpdate, staticUpdate, draw, create, stageLoad, editorLoad, editorDraw, \1823serialize) \1824Mod.RegisterObject(NULL, (void **)&modSVars, #object, sizeof(Entity##object), 0, sizeof(ModObject##object), update, lateUpdate, staticUpdate, \1825draw, create, stageLoad, editorLoad, editorDraw, serialize, NULL, NULL)18261827// Includes StaticLoad1828#define MOD_REGISTER_OBJECT_STATIC(object, inherit, update, lateUpdate, staticUpdate, draw, create, stageLoad, editorLoad, editorDraw, serialize, \1829staticLoad) \1830Mod.RegisterObject((void **)&object, NULL, #object, sizeof(Entity##object), sizeof(Object##object), 0, update, lateUpdate, staticUpdate, draw, \1831create, stageLoad, editorLoad, editorDraw, serialize, staticLoad, inherit)18321833#define MOD_REGISTER_OBJ_OVERLOAD_STATIC(object, update, lateUpdate, staticUpdate, draw, create, stageLoad, editorLoad, editorDraw, serialize, \1834staticLoad) \1835MOD_REGISTER_OBJECT(object, #object, update, lateUpdate, staticUpdate, draw, create, stageLoad, editorLoad, editorDraw, serialize, staticLoad)18361837#define MOD_REGISTER_OBJ_OVERLOAD_NOCLASS_STATIC(object, update, lateUpdate, staticUpdate, draw, create, stageLoad, editorLoad, editorDraw, \1838serialize, staticLoad) \1839Mod.RegisterObject(NULL, NULL, #object, sizeof(Entity##object), 0, 0, update, lateUpdate, staticUpdate, draw, create, stageLoad, editorLoad, \1840editorDraw, serialize, staticLoad, NULL)18411842#define MOD_REGISTER_OBJ_OVERLOAD_MSV_STATIC(object, modSVars, update, lateUpdate, staticUpdate, draw, create, stageLoad, editorLoad, editorDraw, \1843serialize, staticLoad) \1844Mod.RegisterObject((void **)&object, (void **)&modSVars, #object, sizeof(Entity##object), sizeof(Object##object), sizeof(ModObject##object), \1845update, lateUpdate, staticUpdate, draw, create, stageLoad, editorLoad, editorDraw, serialize, staticLoad, NULL)18461847#define MOD_REGISTER_OBJ_OVERLOAD_MSV_NOCLASS_STATIC(object, modSVars, update, lateUpdate, staticUpdate, draw, create, stageLoad, editorLoad, \1848editorDraw, serialize, staticLoad) \1849Mod.RegisterObject(NULL, (void **)&modSVars, #object, sizeof(Entity##object), 0, sizeof(ModObject##object), update, lateUpdate, staticUpdate, \1850draw, create, stageLoad, editorLoad, editorDraw, serialize, staticLoad, NULL)18511852#else18531854#define MOD_REGISTER_OBJECT(object, inherit, update, lateUpdate, staticUpdate, draw, create, stageLoad, editorLoad, editorDraw, serialize) \1855Mod.RegisterObject((void **)&object, NULL, #object, sizeof(Entity##object), sizeof(Object##object), 0, update, lateUpdate, staticUpdate, draw, \1856create, stageLoad, editorLoad, editorDraw, serialize, inherit)18571858#define MOD_REGISTER_OBJ_OVERLOAD(object, update, lateUpdate, staticUpdate, draw, create, stageLoad, editorLoad, editorDraw, serialize) \1859MOD_REGISTER_OBJECT(object, #object, update, lateUpdate, staticUpdate, draw, create, stageLoad, editorLoad, editorDraw, serialize)18601861#define MOD_REGISTER_OBJ_OVERLOAD_NOCLASS(object, update, lateUpdate, staticUpdate, draw, create, stageLoad, editorLoad, editorDraw, serialize) \1862Mod.RegisterObject(NULL, NULL, #object, sizeof(Entity##object), 0, 0, update, lateUpdate, staticUpdate, draw, create, stageLoad, editorLoad, \1863editorDraw, serialize, NULL)18641865#define MOD_REGISTER_OBJ_OVERLOAD_MSV(object, modSVars, update, lateUpdate, staticUpdate, draw, create, stageLoad, editorLoad, editorDraw, \1866serialize) \1867Mod.RegisterObject((void **)&object, (void **)&modSVars, #object, sizeof(Entity##object), sizeof(Object##object), sizeof(ModObject##object), \1868update, lateUpdate, staticUpdate, draw, create, stageLoad, editorLoad, editorDraw, serialize, NULL)18691870#define MOD_REGISTER_OBJ_OVERLOAD_MSV_NOCLASS(object, modSVars, update, lateUpdate, staticUpdate, draw, create, stageLoad, editorLoad, editorDraw, \1871serialize) \1872Mod.RegisterObject(NULL, (void **)&modSVars, #object, sizeof(Entity##object), 0, sizeof(ModObject##object), update, lateUpdate, staticUpdate, \1873draw, create, stageLoad, editorLoad, editorDraw, serialize, NULL)1874#endif187518761877#define MOD_REGISTER_OBJECT_HOOK(object) Mod.RegisterObjectHook((void **)&object, #object)18781879#define GET_PUBLIC_FUNC(modID, name, returnType, ...) returnType (*name)(__VA_ARGS__) = Mod.GetPublicFunction(modID, #name)1880#endif18811882#if RETRO_REV021883#define RSDK_REGISTER_STATIC_VARIABLES(variables) RSDK.RegisterStaticVariables((void **)&variables, #variables, sizeof(Object##variables))1884#endif18851886#define RSDK_THIS(class) Entity##class *self = (Entity##class *)SceneInfo->entity1887#define RSDK_THIS_GEN() Entity *self = SceneInfo->entity1888#define RSDK_GET_ENTITY(slot, class) ((Entity##class *)RSDK.GetEntity(slot))1889#define RSDK_GET_ENTITY_GEN(slot) ((Entity *)RSDK.GetEntity(slot))1890#define CREATE_ENTITY(object, data, x, y) ((Entity##object *)RSDK.CreateEntity(object->classID, data, x, y))18911892#define INIT_STRING(string) \1893string.chars = NULL; \1894string.length = 0; \1895string.size = 018961897// Initializes entity values to the defaults1898#define INIT_ENTITY(entity) \1899(entity)->active = ACTIVE_BOUNDS; \1900(entity)->visible = false; \1901(entity)->updateRange.x = TO_FIXED(128); \1902(entity)->updateRange.y = TO_FIXED(128);19031904#define foreach_active(type, entityOut) \1905Entity##type *entityOut = NULL; \1906while (RSDK.GetActiveEntities(type->classID, (void **)&entityOut))1907#define foreach_all(type, entityOut) \1908Entity##type *entityOut = NULL; \1909while (RSDK.GetAllEntities(type->classID, (void **)&entityOut))19101911#define foreach_active_type(type, entityOut) \1912Entity *entityOut = NULL; \1913while (RSDK.GetActiveEntities(type, (void **)&entityOut))19141915#define foreach_all_type(type, entityOut) \1916Entity *entityOut = NULL; \1917while (RSDK.GetAllEntities(type, (void **)&entityOut))19181919#if RETRO_USE_MOD_LOADER19201921#if RETRO_MOD_LOADER_VER >= 21922#define foreach_active_group(group, entityOut) \1923Entity *entityOut = NULL; \1924while (Mod.GetGroupEntities(group, (void **)&entityOut))1925#endif19261927#define foreach_config(text) \1928String *text = NULL; \1929while (Mod.ForeachConfig(&text))1930#define foreach_configCategory(text) \1931String *text = NULL; \1932while (Mod.ForeachConfigCategory(&text))19331934#if RETRO_MOD_LOADER_VER >= 219351936#define foreach_setting(id, text) \1937String *text = NULL; \1938while (Mod.ForeachSetting(id, &text))1939#define foreach_settingCategory(id, text) \1940String *text = NULL; \1941while (Mod.ForeachSettingCategory(id, &text))1942#endif19431944#endif19451946#define foreach_break \1947RSDK.BreakForeachLoop(); \1948break1949#define foreach_return \1950RSDK.BreakForeachLoop(); \1951return19521953#define destroyEntity(entity) RSDK.ResetEntity(entity, TYPE_BLANK, NULL)1954#define destroyEntitySlot(slot) RSDK.ResetEntitySlot(slot, TYPE_BLANK, NULL)19551956#if GAME_INCLUDE_EDITOR1957#define showGizmos() (SceneInfo->listPos == SceneInfo->entitySlot || SceneInfo->effectGizmo)1958#endif19591960// -------------------------1961// ENGINE VARIABLES1962// -------------------------19631964extern RSDKFunctionTable RSDK;1965#if RETRO_REV021966extern APIFunctionTable API;1967#endif1968#if RETRO_USE_MOD_LOADER1969extern ModFunctionTable Mod;19701971extern const char *modID;1972#endif19731974extern RSDKSceneInfo *SceneInfo;1975extern RSDKGameInfo *GameInfo;1976#if MANIA_USE_PLUS1977extern RSDKSKUInfo *SKU;1978#endif1979extern RSDKControllerState *ControllerInfo;1980extern RSDKAnalogState *AnalogStickInfoL;1981#if MANIA_USE_PLUS1982extern RSDKAnalogState *AnalogStickInfoR;1983extern RSDKTriggerState *TriggerInfoL;1984extern RSDKTriggerState *TriggerInfoR;1985#endif1986extern RSDKTouchInfo *TouchInfo;1987#if MANIA_USE_PLUS1988extern RSDKUnknownInfo *UnknownInfo;1989#endif1990extern RSDKScreenInfo *ScreenInfo;19911992#endif /* GAMELINK_H */199319941995