Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Rubberduckycooly
GitHub Repository: Rubberduckycooly/RSDKv5-Decompilation
Path: blob/master/RSDKv5/RSDK/Core/RetroEngine.hpp
1163 views
1
#ifndef RETROENGINE_H
2
#define RETROENGINE_H
3
4
// ================
5
// STANDARD LIBS
6
// ================
7
#include <stdio.h>
8
#include <string.h>
9
#include <cmath>
10
#include <ctime>
11
12
// ================
13
// STANDARD TYPES
14
// ================
15
typedef signed char int8;
16
typedef unsigned char uint8;
17
typedef signed short int16;
18
typedef unsigned short uint16;
19
typedef signed int int32;
20
typedef unsigned int uint32;
21
typedef signed long long int64;
22
typedef unsigned long long uint64;
23
24
typedef uint32 bool32;
25
typedef uint32 color;
26
27
namespace RSDK
28
{
29
30
enum GamePlatforms {
31
PLATFORM_PC,
32
PLATFORM_PS4,
33
PLATFORM_XB1,
34
PLATFORM_SWITCH,
35
36
PLATFORM_DEV = 0xFF,
37
};
38
39
enum GameLanguages {
40
LANGUAGE_EN,
41
LANGUAGE_FR,
42
LANGUAGE_IT,
43
LANGUAGE_GE,
44
LANGUAGE_SP,
45
LANGUAGE_JP,
46
LANGUAGE_KO,
47
LANGUAGE_SC,
48
LANGUAGE_TC,
49
};
50
51
enum GameRegions {
52
REGION_US,
53
REGION_JP,
54
REGION_EU,
55
};
56
57
} // namespace RSDK
58
59
// =================
60
// INTELLISENSE HACKS (hopefully rdc doesn't kill me)
61
// =================
62
63
#ifdef _INTELLISENSE_NX
64
#undef __unix__
65
#undef __linux__
66
#endif
67
68
#ifdef _INTELLISENSE_ANDROID
69
#undef _WIN32
70
#undef _LIBCPP_MSVCRT_LIKE
71
#endif
72
73
#ifndef RETRO_USE_ORIGINAL_CODE
74
#define RETRO_USE_ORIGINAL_CODE (0)
75
#endif
76
77
#ifndef RETRO_STANDALONE
78
#define RETRO_STANDALONE (1)
79
#endif
80
81
// ============================
82
// PLATFORMS
83
// ============================
84
#define RETRO_WIN (0)
85
#define RETRO_PS4 (1)
86
#define RETRO_XB1 (2)
87
#define RETRO_SWITCH (3)
88
// CUSTOM
89
#define RETRO_OSX (4)
90
#define RETRO_LINUX (5)
91
#define RETRO_iOS (6)
92
#define RETRO_ANDROID (7)
93
#define RETRO_UWP (8)
94
95
// ============================
96
// PLATFORMS (used mostly in legacy but could come in handy here)
97
// ============================
98
#define RETRO_STANDARD (0)
99
#define RETRO_MOBILE (1)
100
101
#define sprintf_s(x, _, ...) snprintf(x, _, __VA_ARGS__)
102
103
#if defined _WIN32
104
#undef sprintf_s
105
106
#if defined WINAPI_FAMILY
107
#if WINAPI_FAMILY != WINAPI_FAMILY_APP
108
#define RETRO_PLATFORM (RETRO_WIN)
109
#define RETRO_DEVICETYPE (RETRO_STANDARD)
110
#else
111
#define RETRO_PLATFORM (RETRO_UWP)
112
#define RETRO_DEVICETYPE (RETRO_STANDARD)
113
#endif
114
#else
115
#define RETRO_PLATFORM (RETRO_WIN)
116
#define RETRO_DEVICETYPE (RETRO_STANDARD)
117
#endif
118
119
#elif defined __APPLE__
120
#define RETRO_USING_MOUSE
121
#define RETRO_USING_TOUCH
122
#include <TargetConditionals.h>
123
124
#if TARGET_IPHONE_SIMULATOR
125
#define RETRO_PLATFORM (RETRO_iOS)
126
#define RETRO_DEVICETYPE (RETRO_MOBILE)
127
#elif TARGET_OS_IPHONE
128
#define RETRO_PLATFORM (RETRO_iOS)
129
#define RETRO_DEVICETYPE (RETRO_MOBILE)
130
#elif TARGET_OS_MAC
131
#define RETRO_PLATFORM (RETRO_OSX)
132
#define RETRO_DEVICETYPE (RETRO_STANDARD)
133
#else
134
#error "Unknown Apple platform"
135
#endif
136
#elif defined __ANDROID__
137
#define RETRO_PLATFORM (RETRO_ANDROID)
138
#define RETRO_DEVICETYPE (RETRO_MOBILE)
139
#elif defined __SWITCH__
140
#define RETRO_PLATFORM (RETRO_SWITCH)
141
#define RETRO_DEVICETYPE (RETRO_STANDARD)
142
#elif defined __linux__
143
#define RETRO_PLATFORM (RETRO_LINUX)
144
#define RETRO_DEVICETYPE (RETRO_STANDARD)
145
#else
146
#define RETRO_PLATFORM (RETRO_WIN)
147
#define RETRO_DEVICETYPE (RETRO_STANDARD)
148
#endif
149
150
#ifndef SCREEN_XMAX
151
#define SCREEN_XMAX (1280)
152
#endif
153
154
#ifndef SCREEN_YSIZE
155
#define SCREEN_YSIZE (240)
156
#endif
157
158
#define SCREEN_CENTERY (SCREEN_YSIZE / 2)
159
160
// ============================
161
// RENDER DEVICE BACKENDS
162
// ============================
163
#define RETRO_RENDERDEVICE_DIRECTX9 (0)
164
#define RETRO_RENDERDEVICE_DIRECTX11 (0)
165
// CUSTOM
166
#define RETRO_RENDERDEVICE_SDL2 (0)
167
#define RETRO_RENDERDEVICE_GLFW (0)
168
#define RETRO_RENDERDEVICE_VK (0)
169
#define RETRO_RENDERDEVICE_EGL (0)
170
171
// ============================
172
// AUDIO DEVICE BACKENDS
173
// ============================
174
#define RETRO_AUDIODEVICE_XAUDIO (0)
175
// CUSTOM
176
#ifndef RETRO_AUDIODEVICE_SDL2
177
#define RETRO_AUDIODEVICE_SDL2 (0)
178
#endif
179
#define RETRO_AUDIODEVICE_OBOE (0)
180
#ifndef RETRO_AUDIODEVICE_PORT
181
#define RETRO_AUDIODEVICE_PORT (0)
182
#endif
183
#ifndef RETRO_AUDIODEVICE_MINI
184
#define RETRO_AUDIODEVICE_MINI (0)
185
#endif
186
187
// ============================
188
// INPUT DEVICE BACKENDS
189
// ============================
190
#define RETRO_INPUTDEVICE_KEYBOARD (1)
191
#define RETRO_INPUTDEVICE_XINPUT (0)
192
#define RETRO_INPUTDEVICE_RAWINPUT (0)
193
#define RETRO_INPUTDEVICE_STEAM (0)
194
#define RETRO_INPUTDEVICE_NX (0)
195
// CUSTOM
196
#define RETRO_INPUTDEVICE_SDL2 (0)
197
#define RETRO_INPUTDEVICE_GLFW (0)
198
#define RETRO_INPUTDEVICE_PDBOAT (0)
199
200
// ============================
201
// USER CORE BACKENDS
202
// ============================
203
#define RETRO_USERCORE_ID (0)
204
205
#define RETRO_USERCORE_DUMMY (!(RETRO_USERCORE_ID & 0x80)) // bit 7 disables the dummy core stuff if you ever need that for some odd reason
206
#define RETRO_USERCORE_STEAM (RETRO_USERCORE_ID == 1)
207
#define RETRO_USERCORE_PS4 (RETRO_USERCORE_ID == 2)
208
#define RETRO_USERCORE_XB1 (RETRO_USERCORE_ID == 3)
209
#define RETRO_USERCORE_NX (RETRO_USERCORE_ID == 4)
210
#define RETRO_USERCORE_EOS (RETRO_USERCORE_ID == 5)
211
212
// ============================
213
// ENGINE CONFIG
214
// ============================
215
216
// Determines if the engine is RSDKv5 rev01 (all versions of mania pre-plus), rev02 (all versions of mania post-plus) or RSDKv5U (sonic origins)
217
#ifndef RETRO_REVISION
218
#define RETRO_REVISION (3)
219
#endif
220
221
// RSDKv5 Rev02 (Used prior to Sonic Mania Plus)
222
#define RETRO_REV01 (RETRO_REVISION >= 1)
223
224
// RSDKv5 Rev02 (Used in Sonic Mania Plus)
225
#define RETRO_REV02 (RETRO_REVISION >= 2)
226
227
// RSDKv5U (Used in Sonic Origins)
228
#define RETRO_REV0U (RETRO_REVISION >= 3)
229
230
// Determines if the engine should use EGS features like achievements or not (must be rev02)
231
#define RETRO_VER_EGS (RETRO_REV02 && 0)
232
233
// Enables only EGS's ingame achievements popup without enabling anything else
234
#define RETRO_USE_DUMMY_ACHIEVEMENTS (RETRO_REV02 && 1)
235
236
// Forces all DLC flags to be disabled, this should be enabled in any public releases
237
#ifndef RSDK_AUTOBUILD
238
#define RSDK_AUTOBUILD (0)
239
#endif
240
241
// Enables the use of the mod loader
242
#ifndef RETRO_USE_MOD_LOADER
243
#define RETRO_USE_MOD_LOADER (!RETRO_USE_ORIGINAL_CODE && 1)
244
#endif
245
246
// Defines the version of the mod loader, this should be changed ONLY if the ModFunctionTable is updated in any way
247
#ifndef RETRO_MOD_LOADER_VER
248
#define RETRO_MOD_LOADER_VER (2)
249
#endif
250
251
// Disables the log, not recommended unless it impacts performance
252
#ifndef RETRO_DISABLE_LOG
253
#define RETRO_DISABLE_LOG (0)
254
#endif
255
256
// ============================
257
// PLATFORM INIT
258
// ============================
259
260
#if RETRO_PLATFORM == RETRO_WIN
261
262
#ifdef RSDK_USE_SDL2
263
#undef RETRO_RENDERDEVICE_SDL2
264
#define RETRO_RENDERDEVICE_SDL2 (1)
265
266
#undef RETRO_INPUTDEVICE_SDL2
267
#define RETRO_INPUTDEVICE_SDL2 (1)
268
269
#elif defined(RSDK_USE_DX9)
270
#undef RETRO_RENDERDEVICE_DIRECTX9
271
#define RETRO_RENDERDEVICE_DIRECTX9 (1)
272
273
#undef RETRO_INPUTDEVICE_XINPUT
274
#define RETRO_INPUTDEVICE_XINPUT (1)
275
276
#undef RETRO_INPUTDEVICE_RAWINPUT
277
#define RETRO_INPUTDEVICE_RAWINPUT (1)
278
279
#elif defined(RSDK_USE_DX11)
280
#undef RETRO_RENDERDEVICE_DIRECTX11
281
#define RETRO_RENDERDEVICE_DIRECTX11 (1)
282
283
#undef RETRO_INPUTDEVICE_XINPUT
284
#define RETRO_INPUTDEVICE_XINPUT (1)
285
286
#undef RETRO_INPUTDEVICE_RAWINPUT
287
#define RETRO_INPUTDEVICE_RAWINPUT (1)
288
289
#elif defined(RSDK_USE_OGL)
290
#undef RETRO_RENDERDEVICE_GLFW
291
#define RETRO_RENDERDEVICE_GLFW (1)
292
293
#undef RETRO_INPUTDEVICE_GLFW
294
#define RETRO_INPUTDEVICE_GLFW (1)
295
296
#elif defined(RSDK_USE_VK)
297
#undef RETRO_RENDERDEVICE_VK
298
#define RETRO_RENDERDEVICE_VK (1)
299
300
#if defined(VULKAN_USE_GLFW)
301
#undef RETRO_INPUTDEVICE_GLFW
302
#define RETRO_INPUTDEVICE_GLFW (1)
303
#endif
304
305
#else
306
#error One of RSDK_USE_DX9, RSDK_USE_DX11, RSDK_USE_SDL2, or RSDK_USE_OGL must be defined.
307
#endif
308
309
#if !RETRO_AUDIODEVICE_MINI
310
#if !RSDK_USE_SDL2
311
#undef RETRO_AUDIODEVICE_XAUDIO
312
#define RETRO_AUDIODEVICE_XAUDIO (1)
313
#else
314
#undef RETRO_AUDIODEVICE_SDL2
315
#define RETRO_AUDIODEVICE_SDL2 (1)
316
#endif
317
#endif
318
319
#elif RETRO_PLATFORM == RETRO_XB1
320
321
#undef RETRO_RENDERDEVICE_DIRECTX11
322
#define RETRO_RENDERDEVICE_DIRECTX11 (1)
323
324
#undef RETRO_AUDIODEVICE_XAUDIO
325
#define RETRO_AUDIODEVICE_XAUDIO (1)
326
327
#undef RETRO_INPUTDEVICE_XINPUT
328
#define RETRO_INPUTDEVICE_XINPUT (1)
329
330
#elif RETRO_PLATFORM == RETRO_LINUX
331
332
#if !RETRO_AUDIODEVICE_SDL2
333
#undef RETRO_AUDIODEVICE_MINI
334
#define RETRO_AUDIODEVICE_MINI (1)
335
#endif
336
337
#ifdef RSDK_USE_SDL2
338
#undef RETRO_RENDERDEVICE_SDL2
339
#define RETRO_RENDERDEVICE_SDL2 (1)
340
#undef RETRO_INPUTDEVICE_SDL2
341
#define RETRO_INPUTDEVICE_SDL2 (1)
342
343
#undef RETRO_AUDIODEVICE_MINI
344
#define RETRO_AUDIODEVICE_MINI (0)
345
#undef RETRO_AUDIODEVICE_SDL2
346
#define RETRO_AUDIODEVICE_SDL2 (1)
347
348
#elif defined(RSDK_USE_OGL)
349
#undef RETRO_RENDERDEVICE_GLFW
350
#define RETRO_RENDERDEVICE_GLFW (1)
351
#undef RETRO_INPUTDEVICE_GLFW
352
#define RETRO_INPUTDEVICE_GLFW (1)
353
354
#elif defined(RSDK_USE_VK)
355
#undef RETRO_RENDERDEVICE_VK
356
#define RETRO_RENDERDEVICE_VK (1)
357
358
#if defined(VULKAN_USE_GLFW)
359
#undef RETRO_INPUTDEVICE_GLFW
360
#define RETRO_INPUTDEVICE_GLFW (1)
361
#endif
362
363
#else
364
#error RSDK_USE_SDL2, RSDK_USE_OGL or RSDK_USE_VK must be defined.
365
#endif //! RSDK_USE_SDL2
366
367
#elif RETRO_PLATFORM == RETRO_SWITCH
368
// #undef RETRO_USERCORE_ID
369
// #define RETRO_USERCORE_ID (4)
370
// #define RETRO_USERCORE_ID (4 | 0x80)
371
372
#ifdef RSDK_USE_SDL2
373
#undef RETRO_RENDERDEVICE_SDL2
374
#define RETRO_RENDERDEVICE_SDL2 (1)
375
#undef RETRO_AUDIODEVICE_SDL2
376
#define RETRO_AUDIODEVICE_SDL2 (1)
377
#undef RETRO_INPUTDEVICE_SDL2
378
#define RETRO_INPUTDEVICE_SDL2 (1)
379
380
#elif defined(RSDK_USE_OGL)
381
#undef RETRO_RENDERDEVICE_EGL
382
#define RETRO_RENDERDEVICE_EGL (1)
383
#undef RETRO_INPUTDEVICE_NX
384
#define RETRO_INPUTDEVICE_NX (1)
385
#undef RETRO_AUDIODEVICE_SDL2
386
#define RETRO_AUDIODEVICE_SDL2 (1)
387
388
#else
389
#error RSDK_USE_SDL2 or RSDK_USE_OGL must be defined.
390
#endif //! RSDK_USE_SDL2
391
392
#undef RETRO_INPUTDEVICE_KEYBOARD
393
#define RETRO_INPUTDEVICE_KEYBOARD (0)
394
#undef RETRO_USING_MOUSE
395
396
#elif RETRO_PLATFORM == RETRO_ANDROID
397
398
#if defined RSDK_USE_OGL
399
#undef RETRO_RENDERDEVICE_EGL
400
#define RETRO_RENDERDEVICE_EGL (1)
401
#undef RETRO_INPUTDEVICE_PDBOAT
402
#define RETRO_INPUTDEVICE_PDBOAT (1)
403
#undef RETRO_AUDIODEVICE_OBOE
404
#define RETRO_AUDIODEVICE_OBOE (1)
405
#else
406
#error RSDK_USE_OGL must be defined.
407
#endif
408
409
#elif RETRO_PLATFORM == RETRO_OSX || RETRO_PLATFORM == RETRO_iOS
410
411
#undef RETRO_RENDERDEVICE_SDL2
412
#define RETRO_RENDERDEVICE_SDL2 (1)
413
414
#undef RETRO_AUDIODEVICE_SDL2
415
#define RETRO_AUDIODEVICE_SDL2 (1)
416
417
#undef RETRO_INPUTDEVICE_SDL2
418
#define RETRO_INPUTDEVICE_SDL2 (1)
419
420
#endif
421
422
#if RETRO_PLATFORM == RETRO_WIN || RETRO_PLATFORM == RETRO_UWP
423
424
// All windows systems need windows API for LoadLibrary()
425
#define WIN32_LEAN_AND_MEAN
426
#include <windows.h>
427
428
#if RETRO_AUDIODEVICE_XAUDIO
429
#include <XAudio2.h>
430
#elif RETRO_AUDIODEVICE_PORT
431
#include <portaudio.h>
432
#elif RETRO_AUDIODEVICE_MINI
433
#define MA_NO_DECODING
434
#define MA_NO_ENCODING
435
#define MA_NO_RESOURCE_MANAGER
436
#define MA_NO_ENGINE
437
#include <miniaudio/miniaudio.h>
438
#endif
439
440
#if RETRO_INPUTDEVICE_XINPUT
441
#include <Xinput.h>
442
#endif
443
444
#if RETRO_RENDERDEVICE_DIRECTX9 || RETRO_RENDERDEVICE_DIRECTX11
445
#include <timeapi.h>
446
#include <commctrl.h>
447
#include <dbt.h>
448
449
#include <string>
450
451
#if RETRO_RENDERDEVICE_DIRECTX9
452
#include <d3d9.h>
453
#elif RETRO_RENDERDEVICE_DIRECTX11
454
#include <d3d11_1.h>
455
#endif
456
457
#undef LoadImage
458
#elif RETRO_RENDERDEVICE_GLFW
459
#include <GL/glew.h>
460
#include <GLFW/glfw3.h>
461
462
#elif RETRO_RENDERDEVICE_VK
463
464
#ifdef VULKAN_USE_GLFW
465
#define GLFW_INCLUDE_VULKAN
466
#include <GLFW/glfw3.h>
467
#endif
468
469
#endif
470
471
#endif // ! RETRO_WIN
472
473
#if RETRO_PLATFORM == RETRO_OSX
474
475
#include "cocoaHelpers.hpp"
476
#elif RETRO_PLATFORM == RETRO_iOS
477
478
#include "cocoaHelpers.hpp"
479
#elif RETRO_PLATFORM == RETRO_LINUX || RETRO_PLATFORM == RETRO_SWITCH
480
481
#if RETRO_AUDIODEVICE_PORT
482
#include <portaudio.h>
483
#elif RETRO_AUDIODEVICE_MINI
484
#define MA_NO_DECODING
485
#define MA_NO_ENCODING
486
#define MA_NO_RESOURCE_MANAGER
487
#define MA_NO_ENGINE
488
#include <miniaudio/miniaudio.h>
489
#endif
490
491
#if RETRO_RENDERDEVICE_GLFW
492
#include <GL/glew.h>
493
#include <GLFW/glfw3.h>
494
#elif RETRO_RENDERDEVICE_EGL
495
#include <glad/glad.h>
496
#include <EGL/egl.h> // EGL library
497
#include <EGL/eglext.h> // EGL extensions
498
499
#elif RETRO_RENDERDEVICE_VK
500
#if RETRO_PLATFORM == RETRO_LINUX
501
502
#ifdef VULKAN_USE_GLFW
503
#define GLFW_INCLUDE_VULKAN
504
#include <GLFW/glfw3.h>
505
#endif
506
507
#endif
508
#endif
509
510
#if RETRO_PLATFORM == RETRO_SWITCH
511
#define PrintConsole _PrintConsole
512
#include <switch.h>
513
extern "C" {
514
#include <dyn.h>
515
}
516
#undef PrintConsole
517
#endif
518
519
#elif RETRO_PLATFORM == RETRO_ANDROID
520
521
#if RETRO_RENDERDEVICE_EGL
522
#include <EGL/egl.h> // EGL library
523
#include <GLES2/gl2.h>
524
#endif
525
526
#include <androidHelpers.hpp>
527
528
#undef RETRO_USING_MOUSE
529
#endif
530
531
#if RETRO_RENDERDEVICE_SDL2 || RETRO_INPUTDEVICE_SDL2 || RETRO_AUDIODEVICE_SDL2
532
#if RETRO_PLATFORM == RETRO_OSX
533
// yeah, I dunno how you're meant to do the below with macOS frameworks so leaving this as is for rn :P
534
#include <SDL2/SDL.h>
535
#else
536
// This is the way of including SDL that is recommended by the devs themselves:
537
// https://wiki.libsdl.org/FAQDevelopment#do_i_include_sdl.h_or_sdlsdl.h
538
#include "SDL.h"
539
#endif
540
#endif
541
542
#include <theora/theoradec.h>
543
544
// ============================
545
// ENGINE INCLUDES
546
// ============================
547
548
#include "RSDK/Storage/Storage.hpp"
549
#include "RSDK/Core/Math.hpp"
550
#include "RSDK/Storage/Text.hpp"
551
#include "RSDK/Core/Reader.hpp"
552
#include "RSDK/Graphics/Animation.hpp"
553
#include "RSDK/Audio/Audio.hpp"
554
#include "RSDK/Input/Input.hpp"
555
#include "RSDK/Scene/Object.hpp"
556
#include "RSDK/Graphics/Palette.hpp"
557
#include "RSDK/Graphics/Drawing.hpp"
558
#include "RSDK/Graphics/Scene3D.hpp"
559
#include "RSDK/Scene/Scene.hpp"
560
#include "RSDK/Scene/Collision.hpp"
561
#include "RSDK/Graphics/Sprite.hpp"
562
#include "RSDK/Graphics/Video.hpp"
563
#include "RSDK/Dev/Debug.hpp"
564
#include "RSDK/User/Core/UserCore.hpp"
565
#include "RSDK/User/Core/UserAchievements.hpp"
566
#include "RSDK/User/Core/UserLeaderboards.hpp"
567
#include "RSDK/User/Core/UserStats.hpp"
568
#include "RSDK/User/Core/UserPresence.hpp"
569
#include "RSDK/User/Core/UserStorage.hpp"
570
#include "RSDK/Core/Link.hpp"
571
#if RETRO_USE_MOD_LOADER
572
#include "RSDK/Core/ModAPI.hpp"
573
#endif
574
575
// Default Objects
576
#include "RSDK/Scene/Objects/DefaultObject.hpp"
577
#if RETRO_REV02
578
#include "RSDK/Scene/Objects/DevOutput.hpp"
579
#endif
580
581
#if !RETRO_REV0U
582
#define ENGINE_VERSION (5)
583
#define ENGINE_V_NAME "v5"
584
#else
585
#define ENGINE_VERSION (engine.version)
586
#define ENGINE_V_NAME "v5U"
587
#endif
588
589
namespace RSDK
590
{
591
592
struct RetroEngine {
593
RetroEngine() {}
594
595
#if RETRO_STANDALONE
596
bool32 useExternalCode = true;
597
#else
598
bool32 useExternalCode = false;
599
#endif
600
601
bool32 devMenu = false;
602
bool32 consoleEnabled = false;
603
604
bool32 confirmFlip = false; // swaps A/B, used for nintendo and etc controllers
605
bool32 XYFlip = false; // swaps X/Y, used for nintendo and etc controllers
606
607
uint8 focusState = 0;
608
uint8 inFocus = 0;
609
#if !RETRO_USE_ORIGINAL_CODE
610
uint8 focusPausedChannel[CHANNEL_COUNT];
611
#endif
612
613
bool32 initialized = false;
614
bool32 hardPause = false;
615
616
#if RETRO_REV0U
617
uint8 version = 5; // determines what RSDK version to use, default to RSDKv5 since thats the "core" version
618
619
const char *gamePlatform;
620
const char *gameRenderType;
621
const char *gameHapticSetting;
622
623
#if !RETRO_USE_ORIGINAL_CODE
624
int32 gameReleaseID = 0;
625
const char *releaseType = "USE_STANDALONE";
626
#endif
627
#endif
628
629
int32 storedShaderID = SHADER_NONE;
630
int32 storedState = ENGINESTATE_LOAD;
631
int32 gameSpeed = 1;
632
int32 fastForwardSpeed = 8;
633
bool32 frameStep = false;
634
bool32 showPaletteOverlay = false;
635
uint8 showUpdateRanges = 0;
636
uint8 showEntityInfo = 0;
637
bool32 drawGroupVisible[DRAWGROUP_COUNT];
638
639
// Image/Video support
640
double displayTime = 0.0;
641
double videoStartDelay = 0.0;
642
double imageFadeSpeed = 0.0;
643
bool32 (*skipCallback)() = NULL;
644
645
bool32 streamsEnabled = true;
646
float streamVolume = 1.0f;
647
float soundFXVolume = 1.0f;
648
};
649
650
extern RetroEngine engine;
651
652
#if RETRO_REV02
653
typedef void (*LogicLinkHandle)(EngineInfo *info);
654
#else
655
typedef void (*LogicLinkHandle)(EngineInfo info);
656
#endif
657
658
extern LogicLinkHandle linkGameLogic;
659
660
// ============================
661
// CORE ENGINE FUNCTIONS
662
// ============================
663
664
int32 RunRetroEngine(int32 argc, char *argv[]);
665
void ProcessEngine();
666
667
void ParseArguments(int32 argc, char *argv[]);
668
669
void InitEngine();
670
void StartGameObjects();
671
672
#if RETRO_USE_MOD_LOADER
673
void LoadGameXML(bool pal = false);
674
void LoadXMLWindowText(const tinyxml2::XMLElement *gameElement);
675
void LoadXMLPalettes(const tinyxml2::XMLElement *gameElement);
676
void LoadXMLObjects(const tinyxml2::XMLElement* gameElement);
677
void LoadXMLSoundFX(const tinyxml2::XMLElement* gameElement);
678
void LoadXMLStages(const tinyxml2::XMLElement* gameElement);
679
#endif
680
681
void LoadGameConfig();
682
void InitGameLink();
683
684
void ProcessDebugCommands();
685
686
inline void SetEngineState(uint8 state)
687
{
688
bool32 stepOver = (sceneInfo.state & ENGINESTATE_STEPOVER) == ENGINESTATE_STEPOVER;
689
sceneInfo.state = state;
690
if (stepOver)
691
sceneInfo.state |= ENGINESTATE_STEPOVER;
692
}
693
694
#if RETRO_REV0U
695
inline void SetGameFinished() { sceneInfo.state = ENGINESTATE_GAME_FINISHED; }
696
#endif
697
698
extern int32 *globalVarsPtr;
699
700
#if RETRO_REV0U
701
extern void (*globalVarsInitCB)(void *globals);
702
703
inline void RegisterGlobalVariables(void **globals, int32 size, void (*initCB)(void *globals))
704
{
705
AllocateStorage(globals, size, DATASET_STG, true);
706
globalVarsPtr = (int32 *)*globals;
707
globalVarsInitCB = initCB;
708
}
709
#else
710
inline void RegisterGlobalVariables(void **globals, int32 size)
711
{
712
AllocateStorage(globals, size, DATASET_STG, true);
713
globalVarsPtr = (int32 *)*globals;
714
}
715
#endif
716
717
// Some misc API stuff that needs a home
718
719
// Used to Init API stuff that should be done regardless of Render/Audio/Input device APIs
720
void InitCoreAPI();
721
void ReleaseCoreAPI();
722
723
void InitConsole();
724
void ReleaseConsole();
725
726
void SendQuitMsg();
727
728
#if RETRO_REV0U
729
#include "Legacy/RetroEngineLegacy.hpp"
730
#endif
731
732
} // namespace RSDK
733
734
#include "Link.hpp"
735
736
#endif //! RETROENGINE_H
737
738