Path: blob/master/RSDKv5/RSDK/Core/RetroEngine.hpp
1163 views
#ifndef RETROENGINE_H1#define RETROENGINE_H23// ================4// STANDARD LIBS5// ================6#include <stdio.h>7#include <string.h>8#include <cmath>9#include <ctime>1011// ================12// STANDARD TYPES13// ================14typedef signed char int8;15typedef unsigned char uint8;16typedef signed short int16;17typedef unsigned short uint16;18typedef signed int int32;19typedef unsigned int uint32;20typedef signed long long int64;21typedef unsigned long long uint64;2223typedef uint32 bool32;24typedef uint32 color;2526namespace RSDK27{2829enum GamePlatforms {30PLATFORM_PC,31PLATFORM_PS4,32PLATFORM_XB1,33PLATFORM_SWITCH,3435PLATFORM_DEV = 0xFF,36};3738enum GameLanguages {39LANGUAGE_EN,40LANGUAGE_FR,41LANGUAGE_IT,42LANGUAGE_GE,43LANGUAGE_SP,44LANGUAGE_JP,45LANGUAGE_KO,46LANGUAGE_SC,47LANGUAGE_TC,48};4950enum GameRegions {51REGION_US,52REGION_JP,53REGION_EU,54};5556} // namespace RSDK5758// =================59// INTELLISENSE HACKS (hopefully rdc doesn't kill me)60// =================6162#ifdef _INTELLISENSE_NX63#undef __unix__64#undef __linux__65#endif6667#ifdef _INTELLISENSE_ANDROID68#undef _WIN3269#undef _LIBCPP_MSVCRT_LIKE70#endif7172#ifndef RETRO_USE_ORIGINAL_CODE73#define RETRO_USE_ORIGINAL_CODE (0)74#endif7576#ifndef RETRO_STANDALONE77#define RETRO_STANDALONE (1)78#endif7980// ============================81// PLATFORMS82// ============================83#define RETRO_WIN (0)84#define RETRO_PS4 (1)85#define RETRO_XB1 (2)86#define RETRO_SWITCH (3)87// CUSTOM88#define RETRO_OSX (4)89#define RETRO_LINUX (5)90#define RETRO_iOS (6)91#define RETRO_ANDROID (7)92#define RETRO_UWP (8)9394// ============================95// PLATFORMS (used mostly in legacy but could come in handy here)96// ============================97#define RETRO_STANDARD (0)98#define RETRO_MOBILE (1)99100#define sprintf_s(x, _, ...) snprintf(x, _, __VA_ARGS__)101102#if defined _WIN32103#undef sprintf_s104105#if defined WINAPI_FAMILY106#if WINAPI_FAMILY != WINAPI_FAMILY_APP107#define RETRO_PLATFORM (RETRO_WIN)108#define RETRO_DEVICETYPE (RETRO_STANDARD)109#else110#define RETRO_PLATFORM (RETRO_UWP)111#define RETRO_DEVICETYPE (RETRO_STANDARD)112#endif113#else114#define RETRO_PLATFORM (RETRO_WIN)115#define RETRO_DEVICETYPE (RETRO_STANDARD)116#endif117118#elif defined __APPLE__119#define RETRO_USING_MOUSE120#define RETRO_USING_TOUCH121#include <TargetConditionals.h>122123#if TARGET_IPHONE_SIMULATOR124#define RETRO_PLATFORM (RETRO_iOS)125#define RETRO_DEVICETYPE (RETRO_MOBILE)126#elif TARGET_OS_IPHONE127#define RETRO_PLATFORM (RETRO_iOS)128#define RETRO_DEVICETYPE (RETRO_MOBILE)129#elif TARGET_OS_MAC130#define RETRO_PLATFORM (RETRO_OSX)131#define RETRO_DEVICETYPE (RETRO_STANDARD)132#else133#error "Unknown Apple platform"134#endif135#elif defined __ANDROID__136#define RETRO_PLATFORM (RETRO_ANDROID)137#define RETRO_DEVICETYPE (RETRO_MOBILE)138#elif defined __SWITCH__139#define RETRO_PLATFORM (RETRO_SWITCH)140#define RETRO_DEVICETYPE (RETRO_STANDARD)141#elif defined __linux__142#define RETRO_PLATFORM (RETRO_LINUX)143#define RETRO_DEVICETYPE (RETRO_STANDARD)144#else145#define RETRO_PLATFORM (RETRO_WIN)146#define RETRO_DEVICETYPE (RETRO_STANDARD)147#endif148149#ifndef SCREEN_XMAX150#define SCREEN_XMAX (1280)151#endif152153#ifndef SCREEN_YSIZE154#define SCREEN_YSIZE (240)155#endif156157#define SCREEN_CENTERY (SCREEN_YSIZE / 2)158159// ============================160// RENDER DEVICE BACKENDS161// ============================162#define RETRO_RENDERDEVICE_DIRECTX9 (0)163#define RETRO_RENDERDEVICE_DIRECTX11 (0)164// CUSTOM165#define RETRO_RENDERDEVICE_SDL2 (0)166#define RETRO_RENDERDEVICE_GLFW (0)167#define RETRO_RENDERDEVICE_VK (0)168#define RETRO_RENDERDEVICE_EGL (0)169170// ============================171// AUDIO DEVICE BACKENDS172// ============================173#define RETRO_AUDIODEVICE_XAUDIO (0)174// CUSTOM175#ifndef RETRO_AUDIODEVICE_SDL2176#define RETRO_AUDIODEVICE_SDL2 (0)177#endif178#define RETRO_AUDIODEVICE_OBOE (0)179#ifndef RETRO_AUDIODEVICE_PORT180#define RETRO_AUDIODEVICE_PORT (0)181#endif182#ifndef RETRO_AUDIODEVICE_MINI183#define RETRO_AUDIODEVICE_MINI (0)184#endif185186// ============================187// INPUT DEVICE BACKENDS188// ============================189#define RETRO_INPUTDEVICE_KEYBOARD (1)190#define RETRO_INPUTDEVICE_XINPUT (0)191#define RETRO_INPUTDEVICE_RAWINPUT (0)192#define RETRO_INPUTDEVICE_STEAM (0)193#define RETRO_INPUTDEVICE_NX (0)194// CUSTOM195#define RETRO_INPUTDEVICE_SDL2 (0)196#define RETRO_INPUTDEVICE_GLFW (0)197#define RETRO_INPUTDEVICE_PDBOAT (0)198199// ============================200// USER CORE BACKENDS201// ============================202#define RETRO_USERCORE_ID (0)203204#define RETRO_USERCORE_DUMMY (!(RETRO_USERCORE_ID & 0x80)) // bit 7 disables the dummy core stuff if you ever need that for some odd reason205#define RETRO_USERCORE_STEAM (RETRO_USERCORE_ID == 1)206#define RETRO_USERCORE_PS4 (RETRO_USERCORE_ID == 2)207#define RETRO_USERCORE_XB1 (RETRO_USERCORE_ID == 3)208#define RETRO_USERCORE_NX (RETRO_USERCORE_ID == 4)209#define RETRO_USERCORE_EOS (RETRO_USERCORE_ID == 5)210211// ============================212// ENGINE CONFIG213// ============================214215// Determines if the engine is RSDKv5 rev01 (all versions of mania pre-plus), rev02 (all versions of mania post-plus) or RSDKv5U (sonic origins)216#ifndef RETRO_REVISION217#define RETRO_REVISION (3)218#endif219220// RSDKv5 Rev02 (Used prior to Sonic Mania Plus)221#define RETRO_REV01 (RETRO_REVISION >= 1)222223// RSDKv5 Rev02 (Used in Sonic Mania Plus)224#define RETRO_REV02 (RETRO_REVISION >= 2)225226// RSDKv5U (Used in Sonic Origins)227#define RETRO_REV0U (RETRO_REVISION >= 3)228229// Determines if the engine should use EGS features like achievements or not (must be rev02)230#define RETRO_VER_EGS (RETRO_REV02 && 0)231232// Enables only EGS's ingame achievements popup without enabling anything else233#define RETRO_USE_DUMMY_ACHIEVEMENTS (RETRO_REV02 && 1)234235// Forces all DLC flags to be disabled, this should be enabled in any public releases236#ifndef RSDK_AUTOBUILD237#define RSDK_AUTOBUILD (0)238#endif239240// Enables the use of the mod loader241#ifndef RETRO_USE_MOD_LOADER242#define RETRO_USE_MOD_LOADER (!RETRO_USE_ORIGINAL_CODE && 1)243#endif244245// Defines the version of the mod loader, this should be changed ONLY if the ModFunctionTable is updated in any way246#ifndef RETRO_MOD_LOADER_VER247#define RETRO_MOD_LOADER_VER (2)248#endif249250// Disables the log, not recommended unless it impacts performance251#ifndef RETRO_DISABLE_LOG252#define RETRO_DISABLE_LOG (0)253#endif254255// ============================256// PLATFORM INIT257// ============================258259#if RETRO_PLATFORM == RETRO_WIN260261#ifdef RSDK_USE_SDL2262#undef RETRO_RENDERDEVICE_SDL2263#define RETRO_RENDERDEVICE_SDL2 (1)264265#undef RETRO_INPUTDEVICE_SDL2266#define RETRO_INPUTDEVICE_SDL2 (1)267268#elif defined(RSDK_USE_DX9)269#undef RETRO_RENDERDEVICE_DIRECTX9270#define RETRO_RENDERDEVICE_DIRECTX9 (1)271272#undef RETRO_INPUTDEVICE_XINPUT273#define RETRO_INPUTDEVICE_XINPUT (1)274275#undef RETRO_INPUTDEVICE_RAWINPUT276#define RETRO_INPUTDEVICE_RAWINPUT (1)277278#elif defined(RSDK_USE_DX11)279#undef RETRO_RENDERDEVICE_DIRECTX11280#define RETRO_RENDERDEVICE_DIRECTX11 (1)281282#undef RETRO_INPUTDEVICE_XINPUT283#define RETRO_INPUTDEVICE_XINPUT (1)284285#undef RETRO_INPUTDEVICE_RAWINPUT286#define RETRO_INPUTDEVICE_RAWINPUT (1)287288#elif defined(RSDK_USE_OGL)289#undef RETRO_RENDERDEVICE_GLFW290#define RETRO_RENDERDEVICE_GLFW (1)291292#undef RETRO_INPUTDEVICE_GLFW293#define RETRO_INPUTDEVICE_GLFW (1)294295#elif defined(RSDK_USE_VK)296#undef RETRO_RENDERDEVICE_VK297#define RETRO_RENDERDEVICE_VK (1)298299#if defined(VULKAN_USE_GLFW)300#undef RETRO_INPUTDEVICE_GLFW301#define RETRO_INPUTDEVICE_GLFW (1)302#endif303304#else305#error One of RSDK_USE_DX9, RSDK_USE_DX11, RSDK_USE_SDL2, or RSDK_USE_OGL must be defined.306#endif307308#if !RETRO_AUDIODEVICE_MINI309#if !RSDK_USE_SDL2310#undef RETRO_AUDIODEVICE_XAUDIO311#define RETRO_AUDIODEVICE_XAUDIO (1)312#else313#undef RETRO_AUDIODEVICE_SDL2314#define RETRO_AUDIODEVICE_SDL2 (1)315#endif316#endif317318#elif RETRO_PLATFORM == RETRO_XB1319320#undef RETRO_RENDERDEVICE_DIRECTX11321#define RETRO_RENDERDEVICE_DIRECTX11 (1)322323#undef RETRO_AUDIODEVICE_XAUDIO324#define RETRO_AUDIODEVICE_XAUDIO (1)325326#undef RETRO_INPUTDEVICE_XINPUT327#define RETRO_INPUTDEVICE_XINPUT (1)328329#elif RETRO_PLATFORM == RETRO_LINUX330331#if !RETRO_AUDIODEVICE_SDL2332#undef RETRO_AUDIODEVICE_MINI333#define RETRO_AUDIODEVICE_MINI (1)334#endif335336#ifdef RSDK_USE_SDL2337#undef RETRO_RENDERDEVICE_SDL2338#define RETRO_RENDERDEVICE_SDL2 (1)339#undef RETRO_INPUTDEVICE_SDL2340#define RETRO_INPUTDEVICE_SDL2 (1)341342#undef RETRO_AUDIODEVICE_MINI343#define RETRO_AUDIODEVICE_MINI (0)344#undef RETRO_AUDIODEVICE_SDL2345#define RETRO_AUDIODEVICE_SDL2 (1)346347#elif defined(RSDK_USE_OGL)348#undef RETRO_RENDERDEVICE_GLFW349#define RETRO_RENDERDEVICE_GLFW (1)350#undef RETRO_INPUTDEVICE_GLFW351#define RETRO_INPUTDEVICE_GLFW (1)352353#elif defined(RSDK_USE_VK)354#undef RETRO_RENDERDEVICE_VK355#define RETRO_RENDERDEVICE_VK (1)356357#if defined(VULKAN_USE_GLFW)358#undef RETRO_INPUTDEVICE_GLFW359#define RETRO_INPUTDEVICE_GLFW (1)360#endif361362#else363#error RSDK_USE_SDL2, RSDK_USE_OGL or RSDK_USE_VK must be defined.364#endif //! RSDK_USE_SDL2365366#elif RETRO_PLATFORM == RETRO_SWITCH367// #undef RETRO_USERCORE_ID368// #define RETRO_USERCORE_ID (4)369// #define RETRO_USERCORE_ID (4 | 0x80)370371#ifdef RSDK_USE_SDL2372#undef RETRO_RENDERDEVICE_SDL2373#define RETRO_RENDERDEVICE_SDL2 (1)374#undef RETRO_AUDIODEVICE_SDL2375#define RETRO_AUDIODEVICE_SDL2 (1)376#undef RETRO_INPUTDEVICE_SDL2377#define RETRO_INPUTDEVICE_SDL2 (1)378379#elif defined(RSDK_USE_OGL)380#undef RETRO_RENDERDEVICE_EGL381#define RETRO_RENDERDEVICE_EGL (1)382#undef RETRO_INPUTDEVICE_NX383#define RETRO_INPUTDEVICE_NX (1)384#undef RETRO_AUDIODEVICE_SDL2385#define RETRO_AUDIODEVICE_SDL2 (1)386387#else388#error RSDK_USE_SDL2 or RSDK_USE_OGL must be defined.389#endif //! RSDK_USE_SDL2390391#undef RETRO_INPUTDEVICE_KEYBOARD392#define RETRO_INPUTDEVICE_KEYBOARD (0)393#undef RETRO_USING_MOUSE394395#elif RETRO_PLATFORM == RETRO_ANDROID396397#if defined RSDK_USE_OGL398#undef RETRO_RENDERDEVICE_EGL399#define RETRO_RENDERDEVICE_EGL (1)400#undef RETRO_INPUTDEVICE_PDBOAT401#define RETRO_INPUTDEVICE_PDBOAT (1)402#undef RETRO_AUDIODEVICE_OBOE403#define RETRO_AUDIODEVICE_OBOE (1)404#else405#error RSDK_USE_OGL must be defined.406#endif407408#elif RETRO_PLATFORM == RETRO_OSX || RETRO_PLATFORM == RETRO_iOS409410#undef RETRO_RENDERDEVICE_SDL2411#define RETRO_RENDERDEVICE_SDL2 (1)412413#undef RETRO_AUDIODEVICE_SDL2414#define RETRO_AUDIODEVICE_SDL2 (1)415416#undef RETRO_INPUTDEVICE_SDL2417#define RETRO_INPUTDEVICE_SDL2 (1)418419#endif420421#if RETRO_PLATFORM == RETRO_WIN || RETRO_PLATFORM == RETRO_UWP422423// All windows systems need windows API for LoadLibrary()424#define WIN32_LEAN_AND_MEAN425#include <windows.h>426427#if RETRO_AUDIODEVICE_XAUDIO428#include <XAudio2.h>429#elif RETRO_AUDIODEVICE_PORT430#include <portaudio.h>431#elif RETRO_AUDIODEVICE_MINI432#define MA_NO_DECODING433#define MA_NO_ENCODING434#define MA_NO_RESOURCE_MANAGER435#define MA_NO_ENGINE436#include <miniaudio/miniaudio.h>437#endif438439#if RETRO_INPUTDEVICE_XINPUT440#include <Xinput.h>441#endif442443#if RETRO_RENDERDEVICE_DIRECTX9 || RETRO_RENDERDEVICE_DIRECTX11444#include <timeapi.h>445#include <commctrl.h>446#include <dbt.h>447448#include <string>449450#if RETRO_RENDERDEVICE_DIRECTX9451#include <d3d9.h>452#elif RETRO_RENDERDEVICE_DIRECTX11453#include <d3d11_1.h>454#endif455456#undef LoadImage457#elif RETRO_RENDERDEVICE_GLFW458#include <GL/glew.h>459#include <GLFW/glfw3.h>460461#elif RETRO_RENDERDEVICE_VK462463#ifdef VULKAN_USE_GLFW464#define GLFW_INCLUDE_VULKAN465#include <GLFW/glfw3.h>466#endif467468#endif469470#endif // ! RETRO_WIN471472#if RETRO_PLATFORM == RETRO_OSX473474#include "cocoaHelpers.hpp"475#elif RETRO_PLATFORM == RETRO_iOS476477#include "cocoaHelpers.hpp"478#elif RETRO_PLATFORM == RETRO_LINUX || RETRO_PLATFORM == RETRO_SWITCH479480#if RETRO_AUDIODEVICE_PORT481#include <portaudio.h>482#elif RETRO_AUDIODEVICE_MINI483#define MA_NO_DECODING484#define MA_NO_ENCODING485#define MA_NO_RESOURCE_MANAGER486#define MA_NO_ENGINE487#include <miniaudio/miniaudio.h>488#endif489490#if RETRO_RENDERDEVICE_GLFW491#include <GL/glew.h>492#include <GLFW/glfw3.h>493#elif RETRO_RENDERDEVICE_EGL494#include <glad/glad.h>495#include <EGL/egl.h> // EGL library496#include <EGL/eglext.h> // EGL extensions497498#elif RETRO_RENDERDEVICE_VK499#if RETRO_PLATFORM == RETRO_LINUX500501#ifdef VULKAN_USE_GLFW502#define GLFW_INCLUDE_VULKAN503#include <GLFW/glfw3.h>504#endif505506#endif507#endif508509#if RETRO_PLATFORM == RETRO_SWITCH510#define PrintConsole _PrintConsole511#include <switch.h>512extern "C" {513#include <dyn.h>514}515#undef PrintConsole516#endif517518#elif RETRO_PLATFORM == RETRO_ANDROID519520#if RETRO_RENDERDEVICE_EGL521#include <EGL/egl.h> // EGL library522#include <GLES2/gl2.h>523#endif524525#include <androidHelpers.hpp>526527#undef RETRO_USING_MOUSE528#endif529530#if RETRO_RENDERDEVICE_SDL2 || RETRO_INPUTDEVICE_SDL2 || RETRO_AUDIODEVICE_SDL2531#if RETRO_PLATFORM == RETRO_OSX532// yeah, I dunno how you're meant to do the below with macOS frameworks so leaving this as is for rn :P533#include <SDL2/SDL.h>534#else535// This is the way of including SDL that is recommended by the devs themselves:536// https://wiki.libsdl.org/FAQDevelopment#do_i_include_sdl.h_or_sdlsdl.h537#include "SDL.h"538#endif539#endif540541#include <theora/theoradec.h>542543// ============================544// ENGINE INCLUDES545// ============================546547#include "RSDK/Storage/Storage.hpp"548#include "RSDK/Core/Math.hpp"549#include "RSDK/Storage/Text.hpp"550#include "RSDK/Core/Reader.hpp"551#include "RSDK/Graphics/Animation.hpp"552#include "RSDK/Audio/Audio.hpp"553#include "RSDK/Input/Input.hpp"554#include "RSDK/Scene/Object.hpp"555#include "RSDK/Graphics/Palette.hpp"556#include "RSDK/Graphics/Drawing.hpp"557#include "RSDK/Graphics/Scene3D.hpp"558#include "RSDK/Scene/Scene.hpp"559#include "RSDK/Scene/Collision.hpp"560#include "RSDK/Graphics/Sprite.hpp"561#include "RSDK/Graphics/Video.hpp"562#include "RSDK/Dev/Debug.hpp"563#include "RSDK/User/Core/UserCore.hpp"564#include "RSDK/User/Core/UserAchievements.hpp"565#include "RSDK/User/Core/UserLeaderboards.hpp"566#include "RSDK/User/Core/UserStats.hpp"567#include "RSDK/User/Core/UserPresence.hpp"568#include "RSDK/User/Core/UserStorage.hpp"569#include "RSDK/Core/Link.hpp"570#if RETRO_USE_MOD_LOADER571#include "RSDK/Core/ModAPI.hpp"572#endif573574// Default Objects575#include "RSDK/Scene/Objects/DefaultObject.hpp"576#if RETRO_REV02577#include "RSDK/Scene/Objects/DevOutput.hpp"578#endif579580#if !RETRO_REV0U581#define ENGINE_VERSION (5)582#define ENGINE_V_NAME "v5"583#else584#define ENGINE_VERSION (engine.version)585#define ENGINE_V_NAME "v5U"586#endif587588namespace RSDK589{590591struct RetroEngine {592RetroEngine() {}593594#if RETRO_STANDALONE595bool32 useExternalCode = true;596#else597bool32 useExternalCode = false;598#endif599600bool32 devMenu = false;601bool32 consoleEnabled = false;602603bool32 confirmFlip = false; // swaps A/B, used for nintendo and etc controllers604bool32 XYFlip = false; // swaps X/Y, used for nintendo and etc controllers605606uint8 focusState = 0;607uint8 inFocus = 0;608#if !RETRO_USE_ORIGINAL_CODE609uint8 focusPausedChannel[CHANNEL_COUNT];610#endif611612bool32 initialized = false;613bool32 hardPause = false;614615#if RETRO_REV0U616uint8 version = 5; // determines what RSDK version to use, default to RSDKv5 since thats the "core" version617618const char *gamePlatform;619const char *gameRenderType;620const char *gameHapticSetting;621622#if !RETRO_USE_ORIGINAL_CODE623int32 gameReleaseID = 0;624const char *releaseType = "USE_STANDALONE";625#endif626#endif627628int32 storedShaderID = SHADER_NONE;629int32 storedState = ENGINESTATE_LOAD;630int32 gameSpeed = 1;631int32 fastForwardSpeed = 8;632bool32 frameStep = false;633bool32 showPaletteOverlay = false;634uint8 showUpdateRanges = 0;635uint8 showEntityInfo = 0;636bool32 drawGroupVisible[DRAWGROUP_COUNT];637638// Image/Video support639double displayTime = 0.0;640double videoStartDelay = 0.0;641double imageFadeSpeed = 0.0;642bool32 (*skipCallback)() = NULL;643644bool32 streamsEnabled = true;645float streamVolume = 1.0f;646float soundFXVolume = 1.0f;647};648649extern RetroEngine engine;650651#if RETRO_REV02652typedef void (*LogicLinkHandle)(EngineInfo *info);653#else654typedef void (*LogicLinkHandle)(EngineInfo info);655#endif656657extern LogicLinkHandle linkGameLogic;658659// ============================660// CORE ENGINE FUNCTIONS661// ============================662663int32 RunRetroEngine(int32 argc, char *argv[]);664void ProcessEngine();665666void ParseArguments(int32 argc, char *argv[]);667668void InitEngine();669void StartGameObjects();670671#if RETRO_USE_MOD_LOADER672void LoadGameXML(bool pal = false);673void LoadXMLWindowText(const tinyxml2::XMLElement *gameElement);674void LoadXMLPalettes(const tinyxml2::XMLElement *gameElement);675void LoadXMLObjects(const tinyxml2::XMLElement* gameElement);676void LoadXMLSoundFX(const tinyxml2::XMLElement* gameElement);677void LoadXMLStages(const tinyxml2::XMLElement* gameElement);678#endif679680void LoadGameConfig();681void InitGameLink();682683void ProcessDebugCommands();684685inline void SetEngineState(uint8 state)686{687bool32 stepOver = (sceneInfo.state & ENGINESTATE_STEPOVER) == ENGINESTATE_STEPOVER;688sceneInfo.state = state;689if (stepOver)690sceneInfo.state |= ENGINESTATE_STEPOVER;691}692693#if RETRO_REV0U694inline void SetGameFinished() { sceneInfo.state = ENGINESTATE_GAME_FINISHED; }695#endif696697extern int32 *globalVarsPtr;698699#if RETRO_REV0U700extern void (*globalVarsInitCB)(void *globals);701702inline void RegisterGlobalVariables(void **globals, int32 size, void (*initCB)(void *globals))703{704AllocateStorage(globals, size, DATASET_STG, true);705globalVarsPtr = (int32 *)*globals;706globalVarsInitCB = initCB;707}708#else709inline void RegisterGlobalVariables(void **globals, int32 size)710{711AllocateStorage(globals, size, DATASET_STG, true);712globalVarsPtr = (int32 *)*globals;713}714#endif715716// Some misc API stuff that needs a home717718// Used to Init API stuff that should be done regardless of Render/Audio/Input device APIs719void InitCoreAPI();720void ReleaseCoreAPI();721722void InitConsole();723void ReleaseConsole();724725void SendQuitMsg();726727#if RETRO_REV0U728#include "Legacy/RetroEngineLegacy.hpp"729#endif730731} // namespace RSDK732733#include "Link.hpp"734735#endif //! RETROENGINE_H736737738