Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
rubberduckycooly
GitHub Repository: rubberduckycooly/Sonic-Mania-Decompilation
Path: blob/master/SonicMania/GameLink.h
338 views
1
#ifndef GAMELINK_H
2
#define GAMELINK_H
3
4
// -------------------------
5
// STANDARD LIBS
6
// -------------------------
7
8
#include <stddef.h>
9
#include <stdio.h>
10
#include <string.h>
11
#include <stdlib.h>
12
#include <stdarg.h>
13
14
#define sprintf_s(x, _, ...) sprintf(x, __VA_ARGS__)
15
16
#if defined _WIN32
17
#undef sprintf_s
18
#endif
19
20
// -------------------------
21
// STANDARD TYPES
22
// -------------------------
23
24
typedef signed char int8;
25
typedef unsigned char uint8;
26
typedef signed short int16;
27
typedef unsigned short uint16;
28
typedef signed int int32;
29
typedef unsigned int uint32;
30
31
typedef uint32 bool32;
32
#define true 1
33
#define false 0
34
35
typedef uint32 color;
36
37
// -------------------------
38
// CONSTANTS
39
// -------------------------
40
41
#ifndef SCREEN_XMAX
42
#define SCREEN_XMAX (1280)
43
#endif
44
45
#ifndef SCREEN_YSIZE
46
#define SCREEN_YSIZE (240)
47
#endif
48
49
#define SCREEN_YCENTER (SCREEN_YSIZE / 2)
50
51
#define LAYER_COUNT (8)
52
#define DRAWGROUP_COUNT (16)
53
54
#ifndef SCREEN_COUNT
55
#if RETRO_REV02
56
#define SCREEN_COUNT (4)
57
#else
58
#define SCREEN_COUNT (2)
59
#endif
60
#endif
61
62
#define PLAYER_COUNT (4)
63
#define CAMERA_COUNT (4)
64
65
// 0x800 scene objects, 0x40 reserved ones, and 0x100 spare slots for creation
66
#define RESERVE_ENTITY_COUNT (0x40)
67
#define TEMPENTITY_COUNT (0x100)
68
#define SCENEENTITY_COUNT (0x800)
69
#define ENTITY_COUNT (RESERVE_ENTITY_COUNT + SCENEENTITY_COUNT + TEMPENTITY_COUNT)
70
#define TEMPENTITY_START (ENTITY_COUNT - TEMPENTITY_COUNT)
71
72
#define TYPE_COUNT (0x100)
73
#define TYPEGROUP_COUNT (0x104)
74
75
#define CHANNEL_COUNT (0x10)
76
77
#define TILE_SIZE (16)
78
79
// -------------------------
80
// MACROS
81
// -------------------------
82
83
#define MIN(a, b) ((a) < (b) ? (a) : (b))
84
#define MAX(a, b) ((a) > (b) ? (a) : (b))
85
#define CLAMP(value, minimum, maximum) (((value) < (minimum)) ? (minimum) : (((value) > (maximum)) ? (maximum) : (value)))
86
#define FABS(a) ((a) > 0 ? (a) : -(a))
87
88
#define SET_BIT(value, set, pos) ((value) ^= (-(int32)(set) ^ (value)) & (1 << (pos)))
89
#define GET_BIT(b, pos) ((b) >> (pos)&1)
90
91
#define INT_TO_VOID(x) (void *)(size_t)(x)
92
#define FLOAT_TO_VOID(x) INT_TO_VOID(*(int32 *)&(x))
93
#define VOID_TO_INT(x) (int32)(size_t)(x)
94
#define VOID_TO_FLOAT(x) *(float *)&(x)
95
96
#define UNUSED(x) (void)x
97
98
#define TO_FIXED(x) ((x) << 16)
99
#define FROM_FIXED(x) ((x) >> 16)
100
101
// floating point variants
102
#define TO_FIXED_F(x) ((x)*65536.0)
103
#define FROM_FIXED_F(x) ((x) / 65536.0)
104
105
// -------------------------
106
// STRUCTS
107
// -------------------------
108
109
typedef struct {
110
int32 x;
111
int32 y;
112
} Vector2;
113
114
typedef struct {
115
#if RETRO_REV0U
116
// used for languages such as beeflang that always have vfTables in classes
117
void *vfTable;
118
#endif
119
Vector2 position;
120
Vector2 scale;
121
Vector2 velocity;
122
Vector2 updateRange;
123
int32 angle;
124
int32 alpha;
125
int32 rotation;
126
int32 groundVel;
127
int32 zdepth;
128
uint16 group;
129
uint16 classID;
130
bool32 inRange;
131
bool32 isPermanent;
132
int32 tileCollisions;
133
bool32 interaction;
134
bool32 onGround;
135
uint8 active;
136
#if RETRO_REV02
137
uint8 filter;
138
#endif
139
uint8 direction;
140
uint8 drawGroup;
141
uint8 collisionLayers;
142
uint8 collisionPlane;
143
uint8 collisionMode;
144
uint8 drawFX;
145
uint8 inkEffect;
146
uint8 visible;
147
uint8 onScreen;
148
} Entity;
149
150
typedef struct {
151
uint16 classID;
152
uint8 active;
153
} Object;
154
155
#define RSDK_OBJECT \
156
uint16 classID; \
157
uint8 active;
158
159
#if RETRO_REV0U
160
#define RSDK_ENTITY \
161
void *vfTable; \
162
Vector2 position; \
163
Vector2 scale; \
164
Vector2 velocity; \
165
Vector2 updateRange; \
166
int32 angle; \
167
int32 alpha; \
168
int32 rotation; \
169
int32 groundVel; \
170
int32 zdepth; \
171
uint16 group; \
172
uint16 classID; \
173
bool32 inRange; \
174
bool32 isPermanent; \
175
bool32 tileCollisions; \
176
bool32 interaction; \
177
bool32 onGround; \
178
uint8 active; \
179
uint8 filter; \
180
uint8 direction; \
181
uint8 drawGroup; \
182
uint8 collisionLayers; \
183
uint8 collisionPlane; \
184
uint8 collisionMode; \
185
uint8 drawFX; \
186
uint8 inkEffect; \
187
uint8 visible; \
188
uint8 onScreen;
189
#elif RETRO_REV02
190
#define RSDK_ENTITY \
191
Vector2 position; \
192
Vector2 scale; \
193
Vector2 velocity; \
194
Vector2 updateRange; \
195
int32 angle; \
196
int32 alpha; \
197
int32 rotation; \
198
int32 groundVel; \
199
int32 zdepth; \
200
uint16 group; \
201
uint16 classID; \
202
bool32 inRange; \
203
bool32 isPermanent; \
204
bool32 tileCollisions; \
205
bool32 interaction; \
206
bool32 onGround; \
207
uint8 active; \
208
uint8 filter; \
209
uint8 direction; \
210
uint8 drawGroup; \
211
uint8 collisionLayers; \
212
uint8 collisionPlane; \
213
uint8 collisionMode; \
214
uint8 drawFX; \
215
uint8 inkEffect; \
216
uint8 visible; \
217
uint8 onScreen;
218
#else
219
#define RSDK_ENTITY \
220
Vector2 position; \
221
Vector2 scale; \
222
Vector2 velocity; \
223
Vector2 updateRange; \
224
int32 angle; \
225
int32 alpha; \
226
int32 rotation; \
227
int32 groundVel; \
228
int32 zdepth; \
229
uint16 group; \
230
uint16 classID; \
231
bool32 inRange; \
232
bool32 isPermanent; \
233
bool32 tileCollisions; \
234
bool32 interaction; \
235
bool32 onGround; \
236
uint8 active; \
237
uint8 direction; \
238
uint8 drawGroup; \
239
uint8 collisionLayers; \
240
uint8 collisionPlane; \
241
uint8 collisionMode; \
242
uint8 drawFX; \
243
uint8 inkEffect; \
244
uint8 visible; \
245
uint8 onScreen;
246
#endif
247
248
typedef struct {
249
RSDK_ENTITY
250
void *data[0x100];
251
#if RETRO_REV0U
252
void *unknown;
253
#endif
254
} EntityBase;
255
256
#if RETRO_REV02
257
#define Unknown_pausePress UnknownInfo->pausePress
258
#define Unknown_anyKeyPress UnknownInfo->anyKeyPress
259
260
typedef struct {
261
int32 platform;
262
int32 language;
263
int32 region;
264
} RSDKSKUInfo;
265
266
// None of these besides the named 2 are even used
267
// and even then they're not even set in plus
268
typedef struct {
269
int32 unknown1;
270
int32 unknown2;
271
int32 unknown3;
272
int32 unknown4;
273
bool32 pausePress;
274
int32 unknown5;
275
int32 unknown6;
276
int32 unknown7;
277
int32 unknown8;
278
int32 unknown9;
279
bool32 anyKeyPress;
280
int32 unknown10;
281
} RSDKUnknownInfo;
282
#else
283
#define Unknown_pausePress TouchInfo->pausePress
284
#define Unknown_anyKeyPress TouchInfo->anyKeyPress
285
#endif
286
287
typedef struct {
288
char gameTitle[0x40];
289
char gameSubtitle[0x100];
290
char version[0x10];
291
#if !RETRO_REV02
292
uint8 platform;
293
uint8 language;
294
uint8 region;
295
#endif
296
} RSDKGameInfo;
297
298
typedef struct {
299
Entity *entity;
300
void *listData;
301
void *listCategory;
302
int32 timeCounter;
303
int32 currentDrawGroup;
304
int32 currentScreenID;
305
uint16 listPos;
306
uint16 entitySlot;
307
uint16 createSlot;
308
uint16 classCount;
309
bool32 inEditor;
310
bool32 effectGizmo;
311
bool32 debugMode;
312
bool32 useGlobalScripts;
313
bool32 timeEnabled;
314
uint8 activeCategory;
315
uint8 categoryCount;
316
uint8 state;
317
#if RETRO_REV02
318
uint8 filter;
319
#endif
320
uint8 milliseconds;
321
uint8 seconds;
322
uint8 minutes;
323
} RSDKSceneInfo;
324
325
typedef struct {
326
bool32 down;
327
bool32 press;
328
int32 keyMap;
329
} InputState;
330
331
typedef struct {
332
InputState keyUp;
333
InputState keyDown;
334
InputState keyLeft;
335
InputState keyRight;
336
InputState keyA;
337
InputState keyB;
338
InputState keyC;
339
InputState keyX;
340
InputState keyY;
341
InputState keyZ;
342
InputState keyStart;
343
InputState keySelect;
344
345
// Rev01 hasn't split these into different structs yet
346
#if RETRO_REV01
347
InputState keyBumperL;
348
InputState keyBumperR;
349
InputState keyTriggerL;
350
InputState keyTriggerR;
351
InputState keyStickL;
352
InputState keyStickR;
353
#endif
354
} RSDKControllerState;
355
356
typedef struct {
357
InputState keyUp;
358
InputState keyDown;
359
InputState keyLeft;
360
InputState keyRight;
361
#if RETRO_REV02
362
InputState keyStick;
363
float deadzone;
364
float hDelta;
365
float vDelta;
366
#else
367
float deadzone;
368
float triggerDeltaL;
369
float triggerDeltaR;
370
float hDeltaL;
371
float vDeltaL;
372
float hDeltaR;
373
float vDeltaR;
374
#endif
375
} RSDKAnalogState;
376
377
#if RETRO_REV02
378
typedef struct {
379
InputState keyBumper;
380
InputState keyTrigger;
381
float bumperDelta;
382
float triggerDelta;
383
} RSDKTriggerState;
384
#endif
385
386
typedef struct {
387
float x[0x10];
388
float y[0x10];
389
bool32 down[0x10];
390
uint8 count;
391
#if !RETRO_REV02
392
bool32 pauseHold;
393
bool32 pausePress;
394
bool32 unknown1;
395
bool32 anyKeyHold;
396
bool32 anyKeyPress;
397
bool32 unknown2;
398
#endif
399
} RSDKTouchInfo;
400
401
typedef struct {
402
// uint16 *frameBuffer;
403
uint16 frameBuffer[SCREEN_XMAX * SCREEN_YSIZE];
404
Vector2 position;
405
Vector2 size;
406
Vector2 center;
407
int32 pitch;
408
int32 clipBound_X1;
409
int32 clipBound_Y1;
410
int32 clipBound_X2;
411
int32 clipBound_Y2;
412
int32 waterDrawPos;
413
} RSDKScreenInfo;
414
415
#if RETRO_REV02
416
typedef struct {
417
void *functionTable;
418
void *APITable;
419
420
RSDKGameInfo *gameInfo;
421
RSDKSKUInfo *currentSKU;
422
RSDKSceneInfo *sceneInfo;
423
424
RSDKControllerState *controllerInfo;
425
RSDKAnalogState *stickInfoL;
426
RSDKAnalogState *stickInfoR;
427
RSDKTriggerState *triggerInfoL;
428
RSDKTriggerState *triggerInfoR;
429
RSDKTouchInfo *touchInfo;
430
431
RSDKUnknownInfo *unknownInfo;
432
433
RSDKScreenInfo *screenInfo;
434
435
#if RETRO_REV0U
436
// only for origins, not technically needed for v5U if standalone I think
437
void *hedgehogLink;
438
#endif
439
440
#if RETRO_USE_MOD_LOADER
441
void *modTable;
442
#endif
443
} EngineInfo;
444
#else
445
typedef struct {
446
void *functionTable;
447
448
RSDKGameInfo *gameInfo;
449
RSDKSceneInfo *sceneInfo;
450
451
RSDKControllerState *controllerInfo;
452
RSDKAnalogState *stickInfoL;
453
454
RSDKTouchInfo *touchInfo;
455
456
RSDKScreenInfo *screenInfo;
457
458
#if RETRO_USE_MOD_LOADER
459
void *modTable;
460
#endif
461
} EngineInfo;
462
#endif
463
464
#if RETRO_USE_MOD_LOADER
465
typedef struct {
466
uint8 engineVer;
467
uint8 gameVer;
468
uint8 modLoaderVer;
469
} ModVersionInfo;
470
#endif
471
472
typedef struct {
473
int32 values[4][4];
474
} Matrix;
475
476
typedef struct {
477
uint16 *chars;
478
uint16 length;
479
uint16 size;
480
} String;
481
482
typedef struct {
483
int16 left;
484
int16 top;
485
int16 right;
486
int16 bottom;
487
} Hitbox;
488
489
typedef struct {
490
int16 sprX;
491
int16 sprY;
492
int16 width;
493
int16 height;
494
int16 pivotX;
495
int16 pivotY;
496
uint16 delay;
497
int16 id;
498
uint8 sheetID;
499
} SpriteFrame;
500
501
typedef struct {
502
void *frames;
503
int32 frameID;
504
int16 animationID;
505
int16 prevAnimationID;
506
int16 speed;
507
int16 timer;
508
int16 frameDuration;
509
int16 frameCount;
510
uint8 loopIndex;
511
uint8 rotationStyle;
512
} Animator;
513
514
typedef struct {
515
int32 tilePos;
516
int32 parallaxFactor;
517
int32 scrollSpeed;
518
int32 scrollPos;
519
uint8 deform;
520
uint8 unknown;
521
} ScrollInfo;
522
523
typedef struct {
524
Vector2 position;
525
Vector2 deform;
526
} ScanlineInfo;
527
528
typedef struct {
529
uint8 type;
530
uint8 drawGroup[4];
531
uint8 widthShift;
532
uint8 heightShift;
533
uint16 width;
534
uint16 height;
535
Vector2 position;
536
int32 parallaxFactor;
537
int32 scrollSpeed;
538
int32 scrollPos;
539
int32 deformationOffset;
540
int32 deformationOffsetW;
541
int32 deformationData[0x400];
542
int32 deformationDataW[0x400];
543
void (*scanlineCallback)(ScanlineInfo *);
544
uint16 scrollInfoCount;
545
ScrollInfo scrollInfo[0x100];
546
uint32 name[4];
547
uint16 *layout;
548
uint8 *lineScroll;
549
} TileLayer;
550
551
#if RETRO_REV0U || RETRO_USE_MOD_LOADER
552
typedef struct {
553
Vector2 position;
554
bool32 collided;
555
uint8 angle;
556
} CollisionSensor;
557
558
typedef struct {
559
uint8 floorMasks[TILE_SIZE];
560
uint8 lWallMasks[TILE_SIZE];
561
uint8 rWallMasks[TILE_SIZE];
562
uint8 roofMasks[TILE_SIZE];
563
} CollisionMask;
564
565
typedef struct {
566
uint8 floorAngle;
567
uint8 lWallAngle;
568
uint8 rWallAngle;
569
uint8 roofAngle;
570
uint8 flag;
571
} TileInfo;
572
#endif
573
574
#if RETRO_REV02
575
typedef enum {
576
LEADERBOARD_LOAD_INIT,
577
LEADERBOARD_LOAD_PREV,
578
LEADERBOARD_LOAD_NEXT,
579
} LeaderboardLoadTypes;
580
581
typedef struct {
582
int32 start;
583
int32 length;
584
} LeaderboardAvail;
585
586
typedef struct {
587
uint8 statID;
588
const char *name;
589
void *data[64];
590
} StatInfo;
591
#endif
592
593
typedef struct {
594
uint8 idPS4; // achievement ID (PS4)
595
int32 idUnknown; // achievement ID (unknown platform)
596
const char *id; // achievement ID (as a string, used for most platforms)
597
} AchievementID;
598
599
typedef struct {
600
int32 idPS4; // leaderboard id (PS4)
601
int32 idUnknown; // leaderboard id (unknown platform)
602
int32 idSwitch; // leaderboard id (switch)
603
const char *idXbox; // Xbox One Leaderboard id (making an assumption based on the MS docs)
604
const char *idPC; // Leaderboard id (as a string, used for PC platforms)
605
} LeaderboardID;
606
607
typedef struct {
608
String username;
609
#if RETRO_REV02
610
String userID;
611
#endif
612
int32 globalRank;
613
int32 score;
614
bool32 isUser;
615
int32 status;
616
} LeaderboardEntry;
617
618
// -------------------------
619
// ENUMS
620
// -------------------------
621
622
typedef enum {
623
PLATFORM_PC,
624
PLATFORM_PS4,
625
PLATFORM_XB1,
626
PLATFORM_SWITCH,
627
628
PLATFORM_DEV = 0xFF,
629
} GamePlatforms;
630
631
typedef enum {
632
SCOPE_NONE,
633
SCOPE_GLOBAL,
634
SCOPE_STAGE,
635
} Scopes;
636
637
typedef enum {
638
INK_NONE,
639
INK_BLEND,
640
INK_ALPHA,
641
INK_ADD,
642
INK_SUB,
643
INK_TINT,
644
INK_MASKED,
645
INK_UNMASKED,
646
} InkEffects;
647
648
typedef enum { FX_NONE = 0, FX_FLIP = 1, FX_ROTATE = 2, FX_SCALE = 4 } DrawFX;
649
650
typedef enum { FLIP_NONE, FLIP_X, FLIP_Y, FLIP_XY } FlipFlags;
651
652
typedef enum {
653
TYPE_BLANK,
654
#if RETRO_REV02
655
TYPE_DEVOUTPUT,
656
#endif
657
} DefaultObjTypes;
658
659
typedef enum {
660
INPUT_UNASSIGNED = -2,
661
INPUT_AUTOASSIGN = -1,
662
INPUT_NONE = 0,
663
} InputIDs;
664
665
typedef enum {
666
CONT_ANY,
667
CONT_P1,
668
CONT_P2,
669
CONT_P3,
670
CONT_P4,
671
} InputSlotIDs;
672
673
typedef enum {
674
DEVICE_TYPE_NONE,
675
DEVICE_TYPE_KEYBOARD,
676
DEVICE_TYPE_CONTROLLER,
677
DEVICE_TYPE_UNKNOWN,
678
DEVICE_TYPE_STEAMOVERLAY,
679
} InputDeviceTypes;
680
681
typedef enum {
682
DEVICE_KEYBOARD,
683
DEVICE_XBOX,
684
DEVICE_PS4,
685
DEVICE_SATURN,
686
DEVICE_SWITCH_HANDHELD,
687
DEVICE_SWITCH_JOY_GRIP,
688
DEVICE_SWITCH_JOY_L,
689
DEVICE_SWITCH_JOY_R,
690
DEVICE_SWITCH_PRO,
691
} InputDeviceIDs;
692
693
typedef enum {
694
DEVICE_API_NONE,
695
DEVICE_API_KEYBOARD,
696
DEVICE_API_XINPUT,
697
DEVICE_API_RAWINPUT,
698
DEVICE_API_STEAM,
699
} InputDeviceAPIs;
700
701
typedef enum {
702
ALIGN_LEFT,
703
ALIGN_RIGHT,
704
ALIGN_CENTER,
705
} Alignments;
706
707
#if RETRO_REV02
708
typedef enum {
709
PRINT_NORMAL,
710
PRINT_POPUP,
711
PRINT_ERROR,
712
PRINT_FATAL,
713
} PrintModes;
714
#else
715
typedef enum {
716
MESSAGE_STRING,
717
MESSAGE_INT32,
718
MESSAGE_UINT32,
719
MESSAGE_FLOAT,
720
} PrintMessageTypes;
721
#endif
722
723
typedef enum {
724
VAR_UINT8,
725
VAR_UINT16,
726
VAR_UINT32,
727
VAR_INT8,
728
VAR_INT16,
729
VAR_INT32,
730
VAR_ENUM,
731
VAR_BOOL,
732
VAR_STRING,
733
VAR_VECTOR2,
734
VAR_FLOAT,
735
VAR_COLOR,
736
} VarTypes;
737
738
#if RETRO_REV02
739
typedef enum {
740
DBVAR_UNKNOWN,
741
DBVAR_BOOL,
742
DBVAR_UINT8,
743
DBVAR_UINT16,
744
DBVAR_UINT32,
745
DBVAR_UINT64, // unimplemented in RSDKv5
746
DBVAR_INT8,
747
DBVAR_INT16,
748
DBVAR_INT32,
749
DBVAR_INT64, // unimplemented in RSDKv5
750
DBVAR_FLOAT,
751
DBVAR_DOUBLE, // unimplemented in RSDKv5
752
DBVAR_VECTOR2, // unimplemented in RSDKv5
753
DBVAR_VECTOR3, // unimplemented in RSDKv5
754
DBVAR_VECTOR4, // unimplemented in RSDKv5
755
DBVAR_COLOR,
756
DBVAR_STRING,
757
DBVAR_HASHMD5, // unimplemented in RSDKv5
758
} DBVarTypes;
759
760
typedef enum {
761
VIEWVAR_INVALID,
762
VIEWVAR_BOOL,
763
VIEWVAR_UINT8,
764
VIEWVAR_UINT16,
765
VIEWVAR_UINT32,
766
VIEWVAR_INT8,
767
VIEWVAR_INT16,
768
VIEWVAR_INT32,
769
} ViewableVarTypes;
770
#endif
771
772
typedef enum {
773
ACTIVE_NEVER,
774
ACTIVE_ALWAYS,
775
ACTIVE_NORMAL,
776
ACTIVE_PAUSED,
777
ACTIVE_BOUNDS,
778
ACTIVE_XBOUNDS,
779
ACTIVE_YBOUNDS,
780
ACTIVE_RBOUNDS,
781
782
// Not really even a real active value, but some objects set their active states to this so here it is I suppose
783
ACTIVE_DISABLED = 0xFF,
784
} ActiveFlags;
785
786
typedef enum { ROTSTYLE_NONE, ROTSTYLE_FULL, ROTSTYLE_45DEG, ROTSTYLE_90DEG, ROTSTYLE_180DEG, ROTSTYLE_STATICFRAMES } RotationSyles;
787
788
typedef enum {
789
LAYER_HSCROLL,
790
LAYER_VSCROLL,
791
LAYER_ROTOZOOM,
792
LAYER_BASIC,
793
} LayerTypes;
794
795
typedef enum {
796
CMODE_FLOOR,
797
CMODE_LWALL,
798
CMODE_ROOF,
799
CMODE_RWALL,
800
} CModes;
801
802
typedef enum {
803
C_NONE,
804
C_TOP,
805
C_LEFT,
806
C_RIGHT,
807
C_BOTTOM,
808
} CSides;
809
810
typedef enum {
811
TILECOLLISION_NONE, // no tile collisions
812
TILECOLLISION_DOWN, // downwards tile collisions
813
#if RETRO_REV0U
814
TILECOLLISION_UP, // upwards tile collisions
815
#endif
816
} TileCollisionModes;
817
818
typedef enum {
819
S3D_WIREFRAME,
820
S3D_SOLIDCOLOR,
821
822
S3D_UNUSED_1,
823
S3D_UNUSED_2,
824
825
S3D_WIREFRAME_SHADED,
826
S3D_SOLIDCOLOR_SHADED,
827
828
S3D_SOLIDCOLOR_SHADED_BLENDED,
829
830
S3D_WIREFRAME_SCREEN,
831
S3D_SOLIDCOLOR_SCREEN,
832
833
S3D_WIREFRAME_SHADED_SCREEN,
834
S3D_SOLIDCOLOR_SHADED_SCREEN,
835
836
S3D_SOLIDCOLOR_SHADED_BLENDED_SCREEN,
837
} Scene3DDrawTypes;
838
839
typedef enum {
840
VIDEOSETTING_WINDOWED,
841
VIDEOSETTING_BORDERED,
842
VIDEOSETTING_EXCLUSIVEFS,
843
VIDEOSETTING_VSYNC,
844
VIDEOSETTING_TRIPLEBUFFERED,
845
VIDEOSETTING_WINDOW_WIDTH,
846
VIDEOSETTING_WINDOW_HEIGHT,
847
VIDEOSETTING_FSWIDTH,
848
VIDEOSETTING_FSHEIGHT,
849
VIDEOSETTING_REFRESHRATE,
850
VIDEOSETTING_SHADERSUPPORT,
851
VIDEOSETTING_SHADERID,
852
VIDEOSETTING_SCREENCOUNT,
853
#if RETRO_REV02
854
VIDEOSETTING_DIMTIMER,
855
#endif
856
VIDEOSETTING_STREAMSENABLED,
857
VIDEOSETTING_STREAM_VOL,
858
VIDEOSETTING_SFX_VOL,
859
VIDEOSETTING_LANGUAGE,
860
VIDEOSETTING_STORE,
861
VIDEOSETTING_RELOAD,
862
VIDEOSETTING_CHANGED,
863
VIDEOSETTING_WRITE,
864
} VideoSettingsValues;
865
866
typedef enum {
867
GROUP_ALL = 0,
868
869
GROUP_CUSTOM0 = TYPE_COUNT,
870
GROUP_CUSTOM1,
871
GROUP_CUSTOM2,
872
GROUP_CUSTOM3,
873
} TypeGroups;
874
875
typedef enum {
876
STATUS_NONE = 0,
877
STATUS_CONTINUE = 100,
878
STATUS_OK = 200,
879
STATUS_FORBIDDEN = 403,
880
STATUS_NOTFOUND = 404,
881
STATUS_ERROR = 500,
882
STATUS_NOWIFI = 503,
883
STATUS_TIMEOUT = 504,
884
STATUS_CORRUPT = 505,
885
STATUS_NOSPACE = 506,
886
} StatusCodes;
887
888
typedef enum {
889
REGION_US,
890
REGION_JP,
891
REGION_EU,
892
} GameRegions;
893
894
typedef enum {
895
LANGUAGE_EN,
896
LANGUAGE_FR,
897
LANGUAGE_IT,
898
LANGUAGE_GE,
899
LANGUAGE_SP,
900
LANGUAGE_JP,
901
#if GAME_VERSION != VER_100
902
LANGUAGE_KO,
903
LANGUAGE_SC,
904
LANGUAGE_TC,
905
#endif
906
} GameLanguages;
907
908
typedef enum {
909
ENGINESTATE_LOAD,
910
ENGINESTATE_REGULAR,
911
ENGINESTATE_PAUSED,
912
ENGINESTATE_FROZEN,
913
ENGINESTATE_STEPOVER = 4,
914
ENGINESTATE_DEVMENU = 8,
915
ENGINESTATE_VIDEOPLAYBACK,
916
ENGINESTATE_SHOWIMAGE,
917
#if RETRO_REV02
918
ENGINESTATE_ERRORMSG,
919
ENGINESTATE_ERRORMSG_FATAL,
920
#endif
921
ENGINESTATE_NONE,
922
} EngineStates;
923
924
// see: https://docs.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes
925
// for value list & descriptions
926
typedef enum {
927
KEYMAP_AUTO_MAPPING = -1,
928
KEYMAP_NO_MAPPING = 0,
929
KEYMAP_LBUTTON = 0x01,
930
KEYMAP_RBUTTON = 0x02,
931
KEYMAP_CANCEL = 0x03,
932
KEYMAP_MBUTTON = 0x04,
933
KEYMAP_XBUTTON1 = 0x05,
934
KEYMAP_XBUTTON2 = 0x06,
935
KEYMAP_BACK = 0x08,
936
KEYMAP_TAB = 0x09,
937
KEYMAP_CLEAR = 0x0C,
938
KEYMAP_RETURN = 0x0D,
939
KEYMAP_SHIFT = 0x10,
940
KEYMAP_CONTROL = 0x11,
941
KEYMAP_MENU = 0x12,
942
KEYMAP_PAUSE = 0x13,
943
KEYMAP_CAPITAL = 0x14,
944
KEYMAP_KANA = 0x15,
945
KEYMAP_HANGEUL = 0x15,
946
KEYMAP_HANGUL = 0x15,
947
KEYMAP_JUNJA = 0x17,
948
KEYMAP_FINAL = 0x18,
949
KEYMAP_HANJA = 0x19,
950
KEYMAP_KANJI = 0x19,
951
KEYMAP_ESCAPE = 0x1B,
952
KEYMAP_CONVERT = 0x1C,
953
KEYMAP_NONCONVERT = 0x1D,
954
KEYMAP_ACCEPT = 0x1E,
955
KEYMAP_MODECHANGE = 0x1F,
956
KEYMAP_SPACE = 0x20,
957
KEYMAP_PRIOR = 0x21,
958
KEYMAP_NEXT = 0x22,
959
KEYMAP_END = 0x23,
960
KEYMAP_HOME = 0x24,
961
KEYMAP_LEFT = 0x25,
962
KEYMAP_UP = 0x26,
963
KEYMAP_RIGHT = 0x27,
964
KEYMAP_DOWN = 0x28,
965
KEYMAP_SELECT = 0x29,
966
KEYMAP_PRINT = 0x2A,
967
KEYMAP_EXECUTE = 0x2B,
968
KEYMAP_SNAPSHOT = 0x2C,
969
KEYMAP_INSERT = 0x2D,
970
KEYMAP_DELETE = 0x2E,
971
KEYMAP_HELP = 0x2F,
972
KEYMAP_0 = 0x30,
973
KEYMAP_1 = 0x31,
974
KEYMAP_2 = 0x32,
975
KEYMAP_3 = 0x33,
976
KEYMAP_4 = 0x34,
977
KEYMAP_5 = 0x35,
978
KEYMAP_6 = 0x36,
979
KEYMAP_7 = 0x37,
980
KEYMAP_8 = 0x38,
981
KEYMAP_9 = 0x39,
982
KEYMAP_A = 0x41,
983
KEYMAP_B = 0x42,
984
KEYMAP_C = 0x43,
985
KEYMAP_D = 0x44,
986
KEYMAP_E = 0x45,
987
KEYMAP_F = 0x46,
988
KEYMAP_G = 0x47,
989
KEYMAP_H = 0x48,
990
KEYMAP_I = 0x49,
991
KEYMAP_J = 0x4A,
992
KEYMAP_K = 0x4B,
993
KEYMAP_L = 0x4C,
994
KEYMAP_M = 0x4D,
995
KEYMAP_N = 0x4E,
996
KEYMAP_O = 0x4F,
997
KEYMAP_P = 0x50,
998
KEYMAP_Q = 0x51,
999
KEYMAP_R = 0x52,
1000
KEYMAP_S = 0x53,
1001
KEYMAP_T = 0x54,
1002
KEYMAP_U = 0x55,
1003
KEYMAP_V = 0x56,
1004
KEYMAP_W = 0x57,
1005
KEYMAP_X = 0x58,
1006
KEYMAP_Y = 0x59,
1007
KEYMAP_Z = 0x5A,
1008
KEYMAP_LWIN = 0x5B,
1009
KEYMAP_RWIN = 0x5C,
1010
KEYMAP_APPS = 0x5D,
1011
KEYMAP_SLEEP = 0x5F,
1012
KEYMAP_NUMPAD0 = 0x60,
1013
KEYMAP_NUMPAD1 = 0x61,
1014
KEYMAP_NUMPAD2 = 0x62,
1015
KEYMAP_NUMPAD3 = 0x63,
1016
KEYMAP_NUMPAD4 = 0x64,
1017
KEYMAP_NUMPAD5 = 0x65,
1018
KEYMAP_NUMPAD6 = 0x66,
1019
KEYMAP_NUMPAD7 = 0x67,
1020
KEYMAP_NUMPAD8 = 0x68,
1021
KEYMAP_NUMPAD9 = 0x69,
1022
KEYMAP_MULTIPLY = 0x6A,
1023
KEYMAP_ADD = 0x6B,
1024
KEYMAP_SEPARATOR = 0x6C,
1025
KEYMAP_SUBTRACT = 0x6D,
1026
KEYMAP_DECIMAL = 0x6E,
1027
KEYMAP_DIVIDE = 0x6F,
1028
KEYMAP_F1 = 0x70,
1029
KEYMAP_F2 = 0x71,
1030
KEYMAP_F3 = 0x72,
1031
KEYMAP_F4 = 0x73,
1032
KEYMAP_F5 = 0x74,
1033
KEYMAP_F6 = 0x75,
1034
KEYMAP_F7 = 0x76,
1035
KEYMAP_F8 = 0x77,
1036
KEYMAP_F9 = 0x78,
1037
KEYMAP_F10 = 0x79,
1038
KEYMAP_F11 = 0x7A,
1039
KEYMAP_F12 = 0x7B,
1040
KEYMAP_F13 = 0x7C,
1041
KEYMAP_F14 = 0x7D,
1042
KEYMAP_F15 = 0x7E,
1043
KEYMAP_F16 = 0x7F,
1044
KEYMAP_F17 = 0x80,
1045
KEYMAP_F18 = 0x81,
1046
KEYMAP_F19 = 0x82,
1047
KEYMAP_F20 = 0x83,
1048
KEYMAP_F21 = 0x84,
1049
KEYMAP_F22 = 0x85,
1050
KEYMAP_F23 = 0x86,
1051
KEYMAP_F24 = 0x87,
1052
KEYMAP_NAVIGATION_VIEW = 0x88,
1053
KEYMAP_NAVIGATION_MENU = 0x89,
1054
KEYMAP_NAVIGATION_UP = 0x8A,
1055
KEYMAP_NAVIGATION_DOWN = 0x8B,
1056
KEYMAP_NAVIGATION_LEFT = 0x8C,
1057
KEYMAP_NAVIGATION_RIGHT = 0x8D,
1058
KEYMAP_NAVIGATION_ACCEPT = 0x8E,
1059
KEYMAP_NAVIGATION_CANCEL = 0x8F,
1060
KEYMAP_NUMLOCK = 0x90,
1061
KEYMAP_SCROLL = 0x91,
1062
KEYMAP_OEM_NEC_EQUAL = 0x92,
1063
KEYMAP_OEM_FJ_JISHO = 0x92,
1064
KEYMAP_OEM_FJ_MASSHOU = 0x93,
1065
KEYMAP_OEM_FJ_TOUROKU = 0x94,
1066
KEYMAP_OEM_FJ_LOYA = 0x95,
1067
KEYMAP_OEM_FJ_ROYA = 0x96,
1068
KEYMAP_LSHIFT = 0xA0,
1069
KEYMAP_RSHIFT = 0xA1,
1070
KEYMAP_LCONTROL = 0xA2,
1071
KEYMAP_RCONTROL = 0xA3,
1072
KEYMAP_LMENU = 0xA4,
1073
KEYMAP_RMENU = 0xA5,
1074
KEYMAP_BROWSER_BACK = 0xA6,
1075
KEYMAP_BROWSER_FORWARD = 0xA7,
1076
KEYMAP_BROWSER_REFRESH = 0xA8,
1077
KEYMAP_BROWSER_STOP = 0xA9,
1078
KEYMAP_BROWSER_SEARCH = 0xAA,
1079
KEYMAP_BROWSER_FAVORITES = 0xAB,
1080
KEYMAP_BROWSER_HOME = 0xAC,
1081
KEYMAP_VOLUME_MUTE = 0xAD,
1082
KEYMAP_VOLUME_DOWN = 0xAE,
1083
KEYMAP_VOLUME_UP = 0xAF,
1084
KEYMAP_MEDIA_NEXT_TRACK = 0xB0,
1085
KEYMAP_MEDIA_PREV_TRACK = 0xB1,
1086
KEYMAP_MEDIA_STOP = 0xB2,
1087
KEYMAP_MEDIA_PLAY_PAUSE = 0xB3,
1088
KEYMAP_LAUNCH_MAIL = 0xB4,
1089
KEYMAP_LAUNCH_MEDIA_SELECT = 0xB5,
1090
KEYMAP_LAUNCH_APP1 = 0xB6,
1091
KEYMAP_LAUNCH_APP2 = 0xB7,
1092
KEYMAP_OEM_1 = 0xBA,
1093
KEYMAP_OEM_PLUS = 0xBB,
1094
KEYMAP_OEM_COMMA = 0xBC,
1095
KEYMAP_OEM_MINUS = 0xBD,
1096
KEYMAP_OEM_PERIOD = 0xBE,
1097
KEYMAP_OEM_2 = 0xBF,
1098
KEYMAP_OEM_3 = 0xC0,
1099
KEYMAP_GAMEPAD_A = 0xC3,
1100
KEYMAP_GAMEPAD_B = 0xC4,
1101
KEYMAP_GAMEPAD_X = 0xC5,
1102
KEYMAP_GAMEPAD_Y = 0xC6,
1103
KEYMAP_GAMEPAD_RIGHT_SHOULDER = 0xC7,
1104
KEYMAP_GAMEPAD_LEFT_SHOULDER = 0xC8,
1105
KEYMAP_GAMEPAD_LEFT_TRIGGER = 0xC9,
1106
KEYMAP_GAMEPAD_RIGHT_TRIGGER = 0xCA,
1107
KEYMAP_GAMEPAD_DPAD_UP = 0xCB,
1108
KEYMAP_GAMEPAD_DPAD_DOWN = 0xCC,
1109
KEYMAP_GAMEPAD_DPAD_LEFT = 0xCD,
1110
KEYMAP_GAMEPAD_DPAD_RIGHT = 0xCE,
1111
KEYMAP_GAMEPAD_MENU = 0xCF,
1112
KEYMAP_GAMEPAD_VIEW = 0xD0,
1113
KEYMAP_GAMEPAD_LEFT_THUMBSTICK_BUTTON = 0xD1,
1114
KEYMAP_GAMEPAD_RIGHT_THUMBSTICK_BUTTON = 0xD2,
1115
KEYMAP_GAMEPAD_LEFT_THUMBSTICK_UP = 0xD3,
1116
KEYMAP_GAMEPAD_LEFT_THUMBSTICK_DOWN = 0xD4,
1117
KEYMAP_GAMEPAD_LEFT_THUMBSTICK_RIGHT = 0xD5,
1118
KEYMAP_GAMEPAD_LEFT_THUMBSTICK_LEFT = 0xD6,
1119
KEYMAP_GAMEPAD_RIGHT_THUMBSTICK_UP = 0xD7,
1120
KEYMAP_GAMEPAD_RIGHT_THUMBSTICK_DOWN = 0xD8,
1121
KEYMAP_GAMEPAD_RIGHT_THUMBSTICK_RIGHT = 0xD9,
1122
KEYMAP_GAMEPAD_RIGHT_THUMBSTICK_LEFT = 0xDA,
1123
KEYMAP_OEM_4 = 0xDB,
1124
KEYMAP_OEM_5 = 0xDC,
1125
KEYMAP_OEM_6 = 0xDD,
1126
KEYMAP_OEM_7 = 0xDE,
1127
KEYMAP_OEM_8 = 0xDF,
1128
KEYMAP_OEM_AX = 0xE1,
1129
KEYMAP_OEM_102 = 0xE2,
1130
KEYMAP_ICO_HELP = 0xE3,
1131
KEYMAP_ICO_00 = 0xE4,
1132
KEYMAP_PROCESSKEY = 0xE5,
1133
KEYMAP_ICO_CLEAR = 0xE6,
1134
KEYMAP_PACKET = 0xE7,
1135
KEYMAP_OEM_RESET = 0xE9,
1136
KEYMAP_OEM_JUMP = 0xEA,
1137
KEYMAP_OEM_PA1 = 0xEB,
1138
KEYMAP_OEM_PA2 = 0xEC,
1139
KEYMAP_OEM_PA3 = 0xED,
1140
KEYMAP_OEM_WSCTRL = 0xEE,
1141
KEYMAP_OEM_CUSEL = 0xEF,
1142
KEYMAP_OEM_ATTN = 0xF0,
1143
KEYMAP_OEM_FINISH = 0xF1,
1144
KEYMAP_OEM_COPY = 0xF2,
1145
KEYMAP_OEM_AUTO = 0xF3,
1146
KEYMAP_OEM_ENLW = 0xF4,
1147
KEYMAP_OEM_BACKTAB = 0xF5,
1148
KEYMAP_ATTN = 0xF6,
1149
KEYMAP_CRSEL = 0xF7,
1150
KEYMAP_EXSEL = 0xF8,
1151
KEYMAP_EREOF = 0xF9,
1152
KEYMAP_PLAY = 0xFA,
1153
KEYMAP_ZOOM = 0xFB,
1154
KEYMAP_NONAME = 0xFC,
1155
KEYMAP_PA1 = 0xFD,
1156
KEYMAP_OEM_CLEAR = 0xFE,
1157
} KeyMappings;
1158
1159
#if RETRO_USE_MOD_LOADER
1160
typedef enum {
1161
MODCB_ONGAMESTARTUP,
1162
MODCB_ONSTATICLOAD,
1163
MODCB_ONSTAGELOAD,
1164
MODCB_ONUPDATE,
1165
MODCB_ONLATEUPDATE,
1166
MODCB_ONSTATICUPDATE,
1167
MODCB_ONDRAW,
1168
MODCB_ONSTAGEUNLOAD,
1169
MODCB_ONSHADERLOAD,
1170
MODCB_ONVIDEOSKIPCB,
1171
MODCB_ONSCANLINECB,
1172
} ModCallbackEvents;
1173
1174
typedef enum {
1175
SUPER_UPDATE,
1176
SUPER_LATEUPDATE,
1177
SUPER_STATICUPDATE,
1178
SUPER_DRAW,
1179
SUPER_CREATE,
1180
SUPER_STAGELOAD,
1181
SUPER_EDITORLOAD,
1182
SUPER_EDITORDRAW,
1183
SUPER_SERIALIZE
1184
} ModSuper;
1185
#endif
1186
1187
// -------------------------
1188
// FUNCTION TABLES
1189
// -------------------------
1190
1191
#if RETRO_USE_MOD_LOADER
1192
// Mod Table
1193
typedef struct {
1194
// Registration & Core
1195
#if RETRO_REV0U
1196
void (*RegisterGlobals)(const char *globalsPath, void **globals, uint32 size, void (*initCB)(void *globals));
1197
void (*RegisterObject)(void **staticVars, void **modStaticVars, const char *name, uint32 entityClassSize, uint32 staticClassSize,
1198
uint32 modClassSize, void (*update)(void), void (*lateUpdate)(void), void (*staticUpdate)(void), void (*draw)(void),
1199
void (*create)(void *), void (*stageLoad)(void), void (*editorLoad)(void), void (*editorDraw)(void),
1200
void (*serialize)(void), void (*staticLoad)(void *staticVars), const char *inherited);
1201
#else
1202
void (*RegisterGlobals)(const char *globalsPath, void **globals, uint32 size);
1203
void (*RegisterObject)(void **staticVars, void **modStaticVars, const char *name, uint32 entityClassSize, uint32 staticClassSize,
1204
uint32 modClassSize, void (*update)(void), void (*lateUpdate)(void), void (*staticUpdate)(void), void (*draw)(void),
1205
void (*create)(void *), void (*stageLoad)(void), void (*editorLoad)(void), void (*editorDraw)(void),
1206
void (*serialize)(void), const char *inherited);
1207
#endif
1208
void *RegisterObject_STD;
1209
void (*RegisterObjectHook)(void **staticVars, const char *staticName);
1210
void *(*FindObject)(const char *name);
1211
void *(*GetGlobals)(void);
1212
void (*Super)(int32 classID, int32 callback, void *data);
1213
1214
// Mod Info
1215
bool32 (*LoadModInfo)(const char *id, String *name, String *description, String *version, bool32 *active);
1216
void (*GetModPath)(const char *id, String *result);
1217
int32 (*GetModCount)(bool32 active);
1218
const char *(*GetModIDByIndex)(uint32 index);
1219
bool32 (*ForeachModID)(String *id);
1220
1221
// Mod Callbacks & Public Functions
1222
void (*AddModCallback)(int32 callbackID, void (*callback)(void *));
1223
void *AddModCallback_STD;
1224
void (*AddPublicFunction)(const char *functionName, void *functionPtr);
1225
void *(*GetPublicFunction)(const char *id, const char *functionName);
1226
1227
// Mod Settings
1228
bool32 (*GetSettingsBool)(const char *id, const char *key, bool32 fallback);
1229
int32 (*GetSettingsInteger)(const char *id, const char *key, int32 fallback);
1230
float (*GetSettingsFloat)(const char *id, const char *key, float fallback);
1231
void (*GetSettingsString)(const char *id, const char *key, String *result, const char *fallback);
1232
void (*SetSettingsBool)(const char *key, bool32 val);
1233
void (*SetSettingsInteger)(const char *key, int32 val);
1234
void (*SetSettingsFloat)(const char *key, float val);
1235
void (*SetSettingsString)(const char *key, String *val);
1236
void (*SaveSettings)(void);
1237
1238
// Config
1239
bool32 (*GetConfigBool)(const char *key, bool32 fallback);
1240
int32 (*GetConfigInteger)(const char *key, int32 fallback);
1241
float (*GetConfigFloat)(const char *key, float fallback);
1242
void (*GetConfigString)(const char *key, String *result, const char *fallback);
1243
bool32 (*ForeachConfig)(String *config);
1244
bool32 (*ForeachConfigCategory)(String *category);
1245
1246
// Achievements
1247
void (*RegisterAchievement)(const char *identifier, const char *name, const char *desc);
1248
void (*GetAchievementInfo)(uint32 id, String *name, String *description, String *identifier, bool32 *achieved);
1249
int32 (*GetAchievementIndexByID)(const char *identifier);
1250
int32 (*GetAchievementCount)(void);
1251
1252
// Shaders
1253
void (*LoadShader)(const char *shaderName, bool32 linear);
1254
1255
// StateMachine
1256
void (*StateMachineRun)(void (*state)(void));
1257
void (*RegisterStateHook)(void (*state)(void), bool32 (*hook)(bool32 skippedState), bool32 priority);
1258
// runs all high priority state hooks hooked to the address of 'state', returns if the main state should be skipped or not
1259
bool32 (*HandleRunState_HighPriority)(void (*state)(void));
1260
// runs all low priority state hooks hooked to the address of 'state'
1261
void (*HandleRunState_LowPriority)(void (*state)(void), bool32 skipState);
1262
1263
#if RETRO_MOD_LOADER_VER >= 2
1264
// Mod Settings (Part 2)
1265
bool32 (*ForeachSetting)(const char *id, String *setting);
1266
bool32 (*ForeachSettingCategory)(const char *id, String *category);
1267
1268
// Files
1269
bool32 (*ExcludeFile)(const char *id, const char *path);
1270
bool32 (*ExcludeAllFiles)(const char *id);
1271
bool32 (*ReloadFile)(const char *id, const char *path);
1272
bool32 (*ReloadAllFiles)(const char *id);
1273
1274
// Graphics
1275
void *(*GetSpriteAnimation)(uint16 id);
1276
void *(*GetSpriteSurface)(uint16 id);
1277
uint16 *(*GetPaletteBank)(uint8 id);
1278
uint8 *(*GetActivePaletteBuffer)(void);
1279
void (*GetRGB32To16Buffer)(uint16 **rgb32To16_R, uint16 **rgb32To16_G, uint16 **rgb32To16_B);
1280
uint16 *(*GetBlendLookupTable)(void);
1281
uint16 *(*GetSubtractLookupTable)(void);
1282
uint16 *(*GetTintLookupTable)(void);
1283
color (*GetMaskColor)(void);
1284
void *(*GetScanEdgeBuffer)(void);
1285
void *(*GetCamera)(uint8 id);
1286
void *(*GetShader)(uint8 id);
1287
void *(*GetModel)(uint16 id);
1288
void *(*GetScene3D)(uint16 id);
1289
void (*DrawDynamicAniTiles)(Animator *animator, uint16 tileIndex);
1290
1291
// Audio
1292
void *(*GetSfx)(uint16 id);
1293
void *(*GetChannel)(uint8 id);
1294
1295
// Objects/Entities
1296
bool32 (*GetGroupEntities)(uint16 group, void **entity);
1297
1298
// Collision
1299
void (*SetPathGripSensors)(CollisionSensor *sensors); // expects 5 sensors
1300
void (*FindFloorPosition)(CollisionSensor *sensor);
1301
void (*FindLWallPosition)(CollisionSensor *sensor);
1302
void (*FindRoofPosition)(CollisionSensor *sensor);
1303
void (*FindRWallPosition)(CollisionSensor *sensor);
1304
void (*FloorCollision)(CollisionSensor *sensor);
1305
void (*LWallCollision)(CollisionSensor *sensor);
1306
void (*RoofCollision)(CollisionSensor *sensor);
1307
void (*RWallCollision)(CollisionSensor *sensor);
1308
void (*CopyCollisionMask)(uint16 dst, uint16 src, uint8 cPlane, uint8 cMode);
1309
void (*GetCollisionInfo)(CollisionMask **masks, TileInfo **tileInfo);
1310
#endif
1311
} ModFunctionTable;
1312
#endif
1313
1314
#if RETRO_REV02
1315
// API Table
1316
typedef struct {
1317
// API Core
1318
int32 (*GetUserLanguage)(void);
1319
bool32 (*GetConfirmButtonFlip)(void);
1320
void (*ExitGame)(void);
1321
void (*LaunchManual)(void);
1322
#if RETRO_REV0U
1323
int32 (*GetDefaultGamepadType)(void);
1324
#endif
1325
bool32 (*IsOverlayEnabled)(uint32 deviceID);
1326
bool32 (*CheckDLC)(int32 dlc);
1327
#if MANIA_USE_EGS
1328
bool32 (*SetupExtensionOverlay)(void);
1329
bool32 (*CanShowExtensionOverlay)(int32 overlay);
1330
#endif
1331
bool32 (*ShowExtensionOverlay)(int32 overlay);
1332
#if MANIA_USE_EGS
1333
bool32 (*CanShowAltExtensionOverlay)(int32 overlay);
1334
bool32 (*ShowAltExtensionOverlay)(int32 overlay);
1335
int32 (*GetConnectingStringID)(void);
1336
void (*ShowLimitedVideoOptions)(int32 id);
1337
#endif
1338
1339
// Achievements
1340
void (*TryUnlockAchievement)(AchievementID *id);
1341
bool32 (*GetAchievementsEnabled)(void);
1342
void (*SetAchievementsEnabled)(bool32 enabled);
1343
#if MANIA_USE_EGS
1344
bool32 (*CheckAchievementsEnabled)(void);
1345
void (*SetAchievementNames)(String **names, int32 count);
1346
#endif
1347
1348
// Leaderboards
1349
#if MANIA_USE_EGS
1350
bool32 (*CheckLeaderboardsEnabled)(void);
1351
#endif
1352
void (*InitLeaderboards)(void);
1353
void (*FetchLeaderboard)(LeaderboardID *leaderboard, bool32 isUser);
1354
void (*TrackScore)(LeaderboardID *leaderboard, int32 score, void (*callback)(bool32 success, int32 rank));
1355
int32 (*GetLeaderboardsStatus)(void);
1356
LeaderboardAvail (*LeaderboardEntryViewSize)(void);
1357
LeaderboardAvail (*LeaderboardEntryLoadSize)(void);
1358
void (*LoadLeaderboardEntries)(int32 start, uint32 end, int32 type);
1359
void (*ResetLeaderboardInfo)(void);
1360
LeaderboardEntry *(*ReadLeaderboardEntry)(uint32 entryID);
1361
1362
// Rich Presence
1363
void (*SetRichPresence)(int32 id, String *text);
1364
1365
// Stats
1366
void (*TryTrackStat)(StatInfo *stat);
1367
bool32 (*GetStatsEnabled)(void);
1368
void (*SetStatsEnabled)(bool32 enabled);
1369
1370
// Authorization
1371
void (*ClearPrerollErrors)(void);
1372
void (*TryAuth)(void);
1373
int32 (*GetUserAuthStatus)(void);
1374
bool32 (*GetUsername)(String *userName);
1375
1376
// Storage
1377
void (*TryInitStorage)(void);
1378
int32 (*GetStorageStatus)(void);
1379
int32 (*GetSaveStatus)(void);
1380
void (*ClearSaveStatus)(void);
1381
void (*SetSaveStatusContinue)(void);
1382
void (*SetSaveStatusOK)(void);
1383
void (*SetSaveStatusForbidden)(void);
1384
void (*SetSaveStatusError)(void);
1385
void (*SetNoSave)(bool32 noSave);
1386
bool32 (*GetNoSave)(void);
1387
1388
// User File Management
1389
void (*LoadUserFile)(const char *name, void *buffer, uint32 size, void (*callback)(int32 status)); // load user file from game dir
1390
void (*SaveUserFile)(const char *name, void *buffer, uint32 size, void (*callback)(int32 status), bool32 compressed); // save user file to game dir
1391
void (*DeleteUserFile)(const char *name, void (*callback)(int32 status)); // delete user file from game dir
1392
1393
// User DBs
1394
uint16 (*InitUserDB)(const char *name, ...);
1395
uint16 (*LoadUserDB)(const char *filename, void (*callback)(int32 status));
1396
bool32 (*SaveUserDB)(uint16 tableID, void (*callback)(int32 status));
1397
void (*ClearUserDB)(uint16 tableID);
1398
void (*ClearAllUserDBs)(void);
1399
uint16 (*SetupUserDBRowSorting)(uint16 tableID);
1400
bool32 (*GetUserDBRowsChanged)(uint16 tableID);
1401
int32 (*AddRowSortFilter)(uint16 tableID, int32 type, const char *name, void *value);
1402
int32 (*SortDBRows)(uint16 tableID, int32 type, const char *name, bool32 sortAscending);
1403
int32 (*GetSortedUserDBRowCount)(uint16 tableID);
1404
int32 (*GetSortedUserDBRowID)(uint16 tableID, uint16 row);
1405
int32 (*AddUserDBRow)(uint16 tableID);
1406
bool32 (*SetUserDBValue)(uint16 tableID, uint32 row, int32 type, const char *name, void *value);
1407
bool32 (*GetUserDBValue)(uint16 tableID, uint32 row, int32 type, const char *name, void *value);
1408
uint32 (*GetUserDBRowUUID)(uint16 tableID, uint16 row);
1409
uint16 (*GetUserDBRowByID)(uint16 tableID, uint32 uuid);
1410
void (*GetUserDBRowCreationTime)(uint16 tableID, uint16 row, char *buffer, size_t bufferSize, const char *format);
1411
bool32 (*RemoveDBRow)(uint16 tableID, uint16 row);
1412
bool32 (*RemoveAllDBRows)(uint16 tableID);
1413
} APIFunctionTable;
1414
#endif
1415
1416
// Function Table
1417
typedef struct {
1418
// Registration
1419
#if RETRO_REV0U
1420
void (*RegisterGlobalVariables)(void **globals, int32 size, void (*initCB)(void *globals));
1421
void (*RegisterObject)(void **staticVars, const char *name, uint32 entityClassSize, uint32 staticClassSize, void (*update)(void),
1422
void (*lateUpdate)(void), void (*staticUpdate)(void), void (*draw)(void), void (*create)(void *), void (*stageLoad)(void),
1423
void (*editorLoad)(void), void (*editorDraw)(void), void (*serialize)(void), void (*staticLoad)(void *staticVars));
1424
#else
1425
void (*RegisterGlobalVariables)(void **globals, int32 size);
1426
void (*RegisterObject)(void **staticVars, const char *name, uint32 entityClassSize, uint32 staticClassSize, void (*update)(void),
1427
void (*lateUpdate)(void), void (*staticUpdate)(void), void (*draw)(void), void (*create)(void *), void (*stageLoad)(void),
1428
void (*editorLoad)(void), void (*editorDraw)(void), void (*serialize)(void));
1429
#endif
1430
#if RETRO_REV02
1431
void (*RegisterStaticVariables)(void **varClass, const char *name, uint32 classSize);
1432
#endif
1433
1434
// Entities & Objects
1435
bool32 (*GetActiveEntities)(uint16 group, void **entity);
1436
bool32 (*GetAllEntities)(uint16 classID, void **entity);
1437
void (*BreakForeachLoop)(void);
1438
void (*SetEditableVar)(uint8 type, const char *name, uint8 classID, int32 offset);
1439
void *(*GetEntity)(uint16 slot);
1440
int32 (*GetEntitySlot)(void *entity);
1441
int32 (*GetEntityCount)(uint16 classID, bool32 isActive);
1442
int32 (*GetDrawListRefSlot)(uint8 drawGroup, uint16 listPos);
1443
void *(*GetDrawListRef)(uint8 drawGroup, uint16 listPos);
1444
void (*ResetEntity)(void *entity, uint16 classID, void *data);
1445
void (*ResetEntitySlot)(uint16 slot, uint16 classID, void *data);
1446
Entity *(*CreateEntity)(uint16 classID, void *data, int32 x, int32 y);
1447
void (*CopyEntity)(void *destEntity, void *srcEntity, bool32 clearSrcEntity);
1448
bool32 (*CheckOnScreen)(void *entity, Vector2 *range);
1449
bool32 (*CheckPosOnScreen)(Vector2 *position, Vector2 *range);
1450
void (*AddDrawListRef)(uint8 drawGroup, uint16 entitySlot);
1451
void (*SwapDrawListEntries)(uint8 drawGroup, uint16 slot1, uint16 slot2, uint16 count);
1452
void (*SetDrawGroupProperties)(uint8 drawGroup, bool32 sorted, void (*hookCB)(void));
1453
1454
// Scene Management
1455
void (*SetScene)(const char *categoryName, const char *sceneName);
1456
void (*SetEngineState)(uint8 state);
1457
#if RETRO_REV02
1458
void (*ForceHardReset)(bool32 shouldHardReset);
1459
#endif
1460
bool32 (*CheckValidScene)(void);
1461
bool32 (*CheckSceneFolder)(const char *folderName);
1462
void (*LoadScene)(void);
1463
int32 (*FindObject)(const char *name);
1464
1465
// Cameras
1466
void (*ClearCameras)(void);
1467
void (*AddCamera)(Vector2 *targetPos, int32 offsetX, int32 offsetY, bool32 worldRelative);
1468
1469
// API (Rev01 only)
1470
#if !RETRO_REV02
1471
void *(*GetAPIFunction)(const char *funcName);
1472
#endif
1473
1474
// Window/Video Settings
1475
int32 (*GetVideoSetting)(int32 id);
1476
void (*SetVideoSetting)(int32 id, int32 value);
1477
void (*UpdateWindow)(void);
1478
1479
// Math
1480
int32 (*Sin1024)(int32 angle);
1481
int32 (*Cos1024)(int32 angle);
1482
int32 (*Tan1024)(int32 angle);
1483
int32 (*ASin1024)(int32 angle);
1484
int32 (*ACos1024)(int32 angle);
1485
int32 (*Sin512)(int32 angle);
1486
int32 (*Cos512)(int32 angle);
1487
int32 (*Tan512)(int32 angle);
1488
int32 (*ASin512)(int32 angle);
1489
int32 (*ACos512)(int32 angle);
1490
int32 (*Sin256)(int32 angle);
1491
int32 (*Cos256)(int32 angle);
1492
int32 (*Tan256)(int32 angle);
1493
int32 (*ASin256)(int32 angle);
1494
int32 (*ACos256)(int32 angle);
1495
int32 (*Rand)(int32 min, int32 max);
1496
int32 (*RandSeeded)(int32 min, int32 max, int32 *seed);
1497
void (*SetRandSeed)(int32 seed);
1498
uint8 (*ATan2)(int32 x, int32 y);
1499
1500
// Matrices
1501
void (*SetIdentityMatrix)(Matrix *matrix);
1502
void (*MatrixMultiply)(Matrix *dest, Matrix *matrixA, Matrix *matrixB);
1503
void (*MatrixTranslateXYZ)(Matrix *matrix, int32 x, int32 y, int32 z, bool32 setIdentity);
1504
void (*MatrixScaleXYZ)(Matrix *matrix, int32 x, int32 y, int32 z);
1505
void (*MatrixRotateX)(Matrix *matrix, int16 angle);
1506
void (*MatrixRotateY)(Matrix *matrix, int16 angle);
1507
void (*MatrixRotateZ)(Matrix *matrix, int16 angle);
1508
void (*MatrixRotateXYZ)(Matrix *matrix, int16 x, int16 y, int16 z);
1509
void (*MatrixInverse)(Matrix *dest, Matrix *matrix);
1510
void (*MatrixCopy)(Matrix *matDest, Matrix *matSrc);
1511
1512
// Strings
1513
void (*InitString)(String *string, const char *text, uint32 textLength);
1514
void (*CopyString)(String *dst, String *src);
1515
void (*SetString)(String *string, const char *text);
1516
void (*AppendString)(String *string, String *appendString);
1517
void (*AppendText)(String *string, const char *appendText);
1518
void (*LoadStringList)(String *stringList, const char *filePath, uint32 charSize);
1519
bool32 (*SplitStringList)(String *splitStrings, String *stringList, int32 startStringID, int32 stringCount);
1520
void (*GetCString)(char *destChars, String *string);
1521
bool32 (*CompareStrings)(String *string1, String *string2, bool32 exactMatch);
1522
1523
// Screens & Displays
1524
void (*GetDisplayInfo)(int32 *displayID, int32 *width, int32 *height, int32 *refreshRate, char *text);
1525
void (*GetWindowSize)(int32 *width, int32 *height);
1526
int32 (*SetScreenSize)(uint8 screenID, uint16 width, uint16 height);
1527
void (*SetClipBounds)(uint8 screenID, int32 x1, int32 y1, int32 x2, int32 y2);
1528
#if RETRO_REV02
1529
void (*SetScreenVertices)(uint8 startVert2P_S1, uint8 startVert2P_S2, uint8 startVert3P_S1, uint8 startVert3P_S2, uint8 startVert3P_S3);
1530
#endif
1531
1532
// Spritesheets
1533
uint16 (*LoadSpriteSheet)(const char *filePath, uint8 scope);
1534
1535
// Palettes & Colors
1536
#if RETRO_REV02
1537
void (*SetTintLookupTable)(uint16 *lookupTable);
1538
#else
1539
uint16 *(*GetTintLookupTable)(void);
1540
#endif
1541
void (*SetPaletteMask)(color maskColor);
1542
void (*SetPaletteEntry)(uint8 bankID, uint8 index, uint32 color);
1543
color (*GetPaletteEntry)(uint8 bankID, uint8 index);
1544
void (*SetActivePalette)(uint8 newActiveBank, int32 startLine, int32 endLine);
1545
void (*CopyPalette)(uint8 sourceBank, uint8 srcBankStart, uint8 destinationBank, uint8 destBankStart, uint8 count);
1546
#if RETRO_REV02
1547
void (*LoadPalette)(uint8 bankID, const char *path, uint16 disabledRows);
1548
#endif
1549
void (*RotatePalette)(uint8 bankID, uint8 startIndex, uint8 endIndex, bool32 right);
1550
void (*SetLimitedFade)(uint8 destBankID, uint8 srcBankA, uint8 srcBankB, int16 blendAmount, int32 startIndex, int32 endIndex);
1551
#if RETRO_REV02
1552
void (*BlendColors)(uint8 destBankID, color *srcColorsA, color *srcColorsB, int32 blendAmount, int32 startIndex, int32 count);
1553
#endif
1554
1555
// Drawing
1556
void (*DrawRect)(int32 x, int32 y, int32 width, int32 height, uint32 color, int32 alpha, int32 inkEffect, bool32 screenRelative);
1557
void (*DrawLine)(int32 x1, int32 y1, int32 x2, int32 y2, uint32 color, int32 alpha, int32 inkEffect, bool32 screenRelative);
1558
void (*DrawCircle)(int32 x, int32 y, int32 radius, uint32 color, int32 alpha, int32 inkEffect, bool32 screenRelative);
1559
void (*DrawCircleOutline)(int32 x, int32 y, int32 innerRadius, int32 outerRadius, uint32 color, int32 alpha, int32 inkEffect,
1560
bool32 screenRelative);
1561
void (*DrawFace)(Vector2 *vertices, int32 vertCount, int32 r, int32 g, int32 b, int32 alpha, int32 inkEffect);
1562
void (*DrawBlendedFace)(Vector2 *vertices, color *vertColors, int32 vertCount, int32 alpha, int32 inkEffect);
1563
void (*DrawSprite)(Animator *animator, Vector2 *position, bool32 screenRelative);
1564
void (*DrawDeformedSprite)(uint16 sheetID, int32 inkEffect, bool32 screenRelative);
1565
void (*DrawText)(Animator *animator, Vector2 *position, String *string, int32 endFrame, int32 textLength, int32 align, int32 spacing, void *unused,
1566
Vector2 *charOffsets, bool32 screenRelative);
1567
void (*DrawTile)(uint16 *tiles, int32 countX, int32 countY, Vector2 *position, Vector2 *offset, bool32 screenRelative);
1568
void (*CopyTile)(uint16 dest, uint16 src, uint16 count);
1569
void (*DrawAniTiles)(uint16 sheetID, uint16 tileIndex, uint16 srcX, uint16 srcY, uint16 width, uint16 height);
1570
#if RETRO_REV0U
1571
void (*DrawDynamicAniTiles)(Animator *animator, uint16 tileIndex);
1572
#endif
1573
void (*FillScreen)(uint32 color, int32 alphaR, int32 alphaG, int32 alphaB);
1574
1575
// Meshes & 3D Scenes
1576
uint16 (*LoadMesh)(const char *filename, uint8 scope);
1577
uint16 (*Create3DScene)(const char *identifier, uint16 faceCount, uint8 scope);
1578
void (*Prepare3DScene)(uint16 sceneIndex);
1579
void (*SetDiffuseColor)(uint16 sceneIndex, uint8 x, uint8 y, uint8 z);
1580
void (*SetDiffuseIntensity)(uint16 sceneIndex, uint8 x, uint8 y, uint8 z);
1581
void (*SetSpecularIntensity)(uint16 sceneIndex, uint8 x, uint8 y, uint8 z);
1582
void (*AddModelTo3DScene)(uint16 modelFrames, uint16 sceneIndex, uint8 drawMode, Matrix *matWorld, Matrix *matView, color color);
1583
void (*SetModelAnimation)(uint16 modelFrames, Animator *animator, int16 speed, uint8 loopIndex, bool32 forceApply, int16 frameID);
1584
void (*AddMeshFrameTo3DScene)(uint16 modelFrames, uint16 sceneIndex, Animator *animator, uint8 drawMode, Matrix *matWorld, Matrix *matView,
1585
color color);
1586
void (*Draw3DScene)(uint16 sceneIndex);
1587
1588
// Sprite Animations & Frames
1589
uint16 (*LoadSpriteAnimation)(const char *filePath, uint8 scope);
1590
uint16 (*CreateSpriteAnimation)(const char *filePath, uint32 frameCount, uint32 listCount, uint8 scope);
1591
void (*SetSpriteAnimation)(uint16 aniFrames, uint16 listID, Animator *animator, bool32 forceApply, int32 frameID);
1592
void (*EditSpriteAnimation)(uint16 aniFrames, uint16 listID, const char *name, int32 frameOffset, uint16 frameCount, int16 speed, uint8 loopIndex,
1593
uint8 rotationStyle);
1594
void (*SetSpriteString)(uint16 aniFrames, uint16 listID, String *string);
1595
uint16 (*FindSpriteAnimation)(uint16 aniFrames, const char *name);
1596
SpriteFrame *(*GetFrame)(uint16 aniFrames, uint16 listID, int32 frameID);
1597
Hitbox *(*GetHitbox)(Animator *animator, uint8 hitboxID);
1598
int16 (*GetFrameID)(Animator *animator);
1599
int32 (*GetStringWidth)(uint16 aniFrames, uint16 listID, String *string, int32 startIndex, int32 length, int32 spacing);
1600
void (*ProcessAnimation)(Animator *animator);
1601
1602
// Tile Layers
1603
uint16 (*GetTileLayerID)(const char *name);
1604
TileLayer *(*GetTileLayer)(uint16 layerID);
1605
void (*GetLayerSize)(uint16 layer, Vector2 *size, bool32 usePixelUnits);
1606
uint16 (*GetTile)(uint16 layer, int32 x, int32 y);
1607
void (*SetTile)(uint16 layer, int32 x, int32 y, uint16 tile);
1608
void (*CopyTileLayer)(uint16 dstLayerID, int32 dstStartX, int32 dstStartY, uint16 srcLayerID, int32 srcStartX, int32 srcStartY, int32 countX,
1609
int32 countY);
1610
void (*ProcessParallax)(TileLayer *tileLayer);
1611
ScanlineInfo *(*GetScanlines)(void);
1612
1613
// Object & Tile Collisions
1614
bool32 (*CheckObjectCollisionTouchBox)(void *thisEntity, Hitbox *thisHitbox, void *otherEntity, Hitbox *otherHitbox);
1615
bool32 (*CheckObjectCollisionTouchCircle)(void *thisEntity, int32 thisRadius, void *otherEntity, int32 otherRadius);
1616
uint8 (*CheckObjectCollisionBox)(void *thisEntity, Hitbox *thisHitbox, void *otherEntity, Hitbox *otherHitbox, bool32 setPos);
1617
bool32 (*CheckObjectCollisionPlatform)(void *thisEntity, Hitbox *thisHitbox, void *otherEntity, Hitbox *otherHitbox, bool32 setPos);
1618
bool32 (*ObjectTileCollision)(void *entity, uint16 collisionLayers, uint8 collisionMode, uint8 collisionPlane, int32 xOffset, int32 yOffset,
1619
bool32 setPos);
1620
bool32 (*ObjectTileGrip)(void *entity, uint16 collisionLayers, uint8 collisionMode, uint8 collisionPlane, int32 xOffset, int32 yOffset,
1621
int32 tolerance);
1622
void (*ProcessObjectMovement)(void *entity, Hitbox *outer, Hitbox *inner);
1623
#if RETRO_REV0U
1624
void (*SetupCollisionConfig)(int32 minDistance, uint8 lowTolerance, uint8 highTolerance, uint8 floorAngleTolerance, uint8 wallAngleTolerance,
1625
uint8 roofAngleTolerance);
1626
void (*SetPathGripSensors)(CollisionSensor *sensors); // expects 5 sensors
1627
void (*FindFloorPosition)(CollisionSensor *sensor);
1628
void (*FindLWallPosition)(CollisionSensor *sensor);
1629
void (*FindRoofPosition)(CollisionSensor *sensor);
1630
void (*FindRWallPosition)(CollisionSensor *sensor);
1631
void (*FloorCollision)(CollisionSensor *sensor);
1632
void (*LWallCollision)(CollisionSensor *sensor);
1633
void (*RoofCollision)(CollisionSensor *sensor);
1634
void (*RWallCollision)(CollisionSensor *sensor);
1635
#endif
1636
int32 (*GetTileAngle)(uint16 tile, uint8 cPlane, uint8 cMode);
1637
void (*SetTileAngle)(uint16 tile, uint8 cPlane, uint8 cMode, uint8 angle);
1638
uint8 (*GetTileFlags)(uint16 tile, uint8 cPlane);
1639
void (*SetTileFlags)(uint16 tile, uint8 cPlane, uint8 flag);
1640
#if RETRO_REV0U
1641
void (*CopyCollisionMask)(uint16 dst, uint16 src, uint8 cPlane, uint8 cMode);
1642
void (*GetCollisionInfo)(CollisionMask **masks, TileInfo **tileInfo);
1643
#endif
1644
1645
// Audio
1646
uint16 (*GetSfx)(const char *path);
1647
int32 (*PlaySfx)(uint16 sfx, int32 loopPoint, int32 priority);
1648
void (*StopSfx)(uint16 sfx);
1649
int32 (*PlayStream)(const char *filename, uint32 channel, uint32 startPos, uint32 loopPoint, bool32 loadASync);
1650
void (*SetChannelAttributes)(uint8 channel, float volume, float pan, float speed);
1651
void (*StopChannel)(uint32 channel);
1652
void (*PauseChannel)(uint32 channel);
1653
void (*ResumeChannel)(uint32 channel);
1654
bool32 (*IsSfxPlaying)(uint16 sfx);
1655
bool32 (*ChannelActive)(uint32 channel);
1656
uint32 (*GetChannelPos)(uint32 channel);
1657
1658
// Videos & "HD Images"
1659
bool32 (*LoadVideo)(const char *filename, double startDelay, bool32 (*skipCallback)(void));
1660
bool32 (*LoadImage)(const char *filename, double displayLength, double fadeSpeed, bool32 (*skipCallback)(void));
1661
1662
// Input
1663
#if RETRO_REV02
1664
uint32 (*GetInputDeviceID)(uint8 inputSlot);
1665
uint32 (*GetFilteredInputDeviceID)(bool32 confirmOnly, bool32 unassignedOnly, uint32 maxInactiveTimer);
1666
int32 (*GetInputDeviceType)(uint32 deviceID);
1667
bool32 (*IsInputDeviceAssigned)(uint32 deviceID);
1668
int32 (*GetInputDeviceUnknown)(uint32 deviceID);
1669
int32 (*InputDeviceUnknown1)(uint32 deviceID, int32 unknown1, int32 unknown2);
1670
int32 (*InputDeviceUnknown2)(uint32 deviceID, int32 unknown1, int32 unknown2);
1671
int32 (*GetInputSlotUnknown)(uint8 inputSlot);
1672
int32 (*InputSlotUnknown1)(uint8 inputSlot, int32 unknown1, int32 unknown2);
1673
int32 (*InputSlotUnknown2)(uint8 inputSlot, int32 unknown1, int32 unknown2);
1674
void (*AssignInputSlotToDevice)(uint8 inputSlot, uint32 deviceID);
1675
bool32 (*IsInputSlotAssigned)(uint8 inputSlot);
1676
void (*ResetInputSlotAssignments)(void);
1677
#endif
1678
#if !RETRO_REV02
1679
void (*GetUnknownInputValue)(int32 inputSlot, int32 type, int32 *value);
1680
#endif
1681
1682
// User File Management
1683
bool32 (*LoadUserFile)(const char *fileName, void *buffer, uint32 size); // load user file from exe dir
1684
bool32 (*SaveUserFile)(const char *fileName, void *buffer, uint32 size); // save user file to exe dir
1685
1686
// Printing (Rev02)
1687
#if RETRO_REV02
1688
void (*PrintLog)(int32 mode, const char *message, ...);
1689
void (*PrintText)(int32 mode, const char *message);
1690
void (*PrintString)(int32 mode, String *message);
1691
void (*PrintUInt32)(int32 mode, const char *message, uint32 i);
1692
void (*PrintInt32)(int32 mode, const char *message, int32 i);
1693
void (*PrintFloat)(int32 mode, const char *message, float f);
1694
void (*PrintVector2)(int32 mode, const char *message, Vector2 vec);
1695
void (*PrintHitbox)(int32 mode, const char *message, Hitbox hitbox);
1696
#endif
1697
1698
// Editor
1699
void (*SetActiveVariable)(int32 classID, const char *name);
1700
void (*AddVarEnumValue)(const char *name);
1701
1702
// Printing (Rev01)
1703
#if !RETRO_REV02
1704
void (*PrintMessage)(void *message, uint8 type);
1705
#endif
1706
1707
// Debugging
1708
#if RETRO_REV02
1709
void (*ClearViewableVariables)(void);
1710
void (*AddViewableVariable)(const char *name, void *value, int32 type, int32 min, int32 max);
1711
#endif
1712
1713
#if RETRO_REV0U
1714
// Origins Extras
1715
void (*NotifyCallback)(int32 callbackID, int32 param1, int32 param2, int32 param3);
1716
void (*SetGameFinished)(void);
1717
void (*StopAllSfx)(void);
1718
#endif
1719
} RSDKFunctionTable;
1720
1721
// -------------------------
1722
// HELPERS
1723
// -------------------------
1724
1725
// used for casts and etc
1726
#define Type_StateMachine void (*)(void)
1727
// used for variable decl
1728
#define StateMachine(name) void (*name)(void)
1729
#if RETRO_USE_MOD_LOADER
1730
#define StateMachine_Run(state) Mod.StateMachineRun(state)
1731
#else
1732
#define StateMachine_Run(state) \
1733
if (state) { \
1734
state(); \
1735
}
1736
#endif
1737
#define StateMachine_None NULL
1738
1739
// Fancy macro + build magic to make tables & static vars
1740
#define TABLE(var, ...) var
1741
#define STATIC(var, val) var
1742
1743
#define RSDK_EDITABLE_VAR(object, type, var) RSDK.SetEditableVar(type, #var, (uint8)object->classID, offsetof(Entity##object, var))
1744
#define RSDK_EDITABLE_ARRAY(object, type, var, count, arrType) \
1745
for (int i = 0; i < (count); ++i) { \
1746
char buffer[0x40]; \
1747
sprintf_s(buffer, (int32)sizeof(buffer), "%s%d", #var, i); \
1748
RSDK.SetEditableVar(type, buffer, (uint8)object->classID, offsetof(Entity##object, var) + sizeof(arrType) * i); \
1749
}
1750
1751
// Some extra precaution to prevent crashes in editor
1752
#define RSDK_ACTIVE_VAR(object, var) \
1753
if (object) { \
1754
RSDK.SetActiveVariable(object->classID, #var); \
1755
} \
1756
else { \
1757
RSDK.SetActiveVariable(-1, #var); \
1758
}
1759
#define RSDK_ENUM_VAR(name, var) RSDK.AddVarEnumValue(name)
1760
1761
#if GAME_INCLUDE_EDITOR
1762
#define RSDK_DRAWING_OVERLAY(isDrawingOverlay) SceneInfo->debugMode = isDrawingOverlay
1763
1764
#if RETRO_REV0U
1765
#define RSDK_REGISTER_OBJECT(object) \
1766
RSDK.RegisterObject((void **)&object, #object, sizeof(Entity##object), sizeof(Object##object), object##_Update, object##_LateUpdate, \
1767
object##_StaticUpdate, object##_Draw, object##_Create, object##_StageLoad, object##_EditorLoad, object##_EditorDraw, \
1768
object##_Serialize, NULL)
1769
1770
#define RSDK_REGISTER_OBJECT_STATICLOAD(object) \
1771
RSDK.RegisterObject((void **)&object, #object, sizeof(Entity##object), sizeof(Object##object), object##_Update, object##_LateUpdate, \
1772
object##_StaticUpdate, object##_Draw, object##_Create, object##_StageLoad, object##_EditorLoad, object##_EditorDraw, \
1773
object##_Serialize, object##_StaticLoad)
1774
#else
1775
#define RSDK_REGISTER_OBJECT(object) \
1776
RSDK.RegisterObject((void **)&object, #object, sizeof(Entity##object), sizeof(Object##object), object##_Update, object##_LateUpdate, \
1777
object##_StaticUpdate, object##_Draw, object##_Create, object##_StageLoad, object##_EditorLoad, object##_EditorDraw, \
1778
object##_Serialize)
1779
#endif
1780
1781
#else
1782
1783
#if RETRO_REV0U
1784
#define RSDK_REGISTER_OBJECT(object) \
1785
RSDK.RegisterObject((void **)&object, #object, sizeof(Entity##object), sizeof(Object##object), object##_Update, object##_LateUpdate, \
1786
object##_StaticUpdate, object##_Draw, object##_Create, object##_StageLoad, NULL, NULL, object##_Serialize, NULL)
1787
1788
#define RSDK_REGISTER_OBJECT_STATICLOAD(object) \
1789
RSDK.RegisterObject((void **)&object, #object, sizeof(Entity##object), sizeof(Object##object), object##_Update, object##_LateUpdate, \
1790
object##_StaticUpdate, object##_Draw, object##_Create, object##_StageLoad, NULL, NULL, object##_Serialize, \
1791
object##_StaticLoad)
1792
#else
1793
#define RSDK_REGISTER_OBJECT(object) \
1794
RSDK.RegisterObject((void **)&object, #object, sizeof(Entity##object), sizeof(Object##object), object##_Update, object##_LateUpdate, \
1795
object##_StaticUpdate, object##_Draw, object##_Create, object##_StageLoad, NULL, NULL, object##_Serialize)
1796
#endif
1797
1798
#endif
1799
1800
#if RETRO_USE_MOD_LOADER
1801
1802
// dear god.
1803
1804
#if RETRO_REV0U
1805
1806
// Excludes StaticLoad (Parity With REV01 & REV02)
1807
#define MOD_REGISTER_OBJECT(object, inherit, update, lateUpdate, staticUpdate, draw, create, stageLoad, editorLoad, editorDraw, serialize) \
1808
Mod.RegisterObject((void **)&object, NULL, #object, sizeof(Entity##object), sizeof(Object##object), 0, update, lateUpdate, staticUpdate, draw, \
1809
create, stageLoad, editorLoad, editorDraw, serialize, NULL, inherit)
1810
1811
#define MOD_REGISTER_OBJ_OVERLOAD(object, update, lateUpdate, staticUpdate, draw, create, stageLoad, editorLoad, editorDraw, serialize) \
1812
MOD_REGISTER_OBJECT(object, #object, update, lateUpdate, staticUpdate, draw, create, stageLoad, editorLoad, editorDraw, serialize, NULL)
1813
1814
#define MOD_REGISTER_OBJ_OVERLOAD_NOCLASS(object, update, lateUpdate, staticUpdate, draw, create, stageLoad, editorLoad, editorDraw, serialize) \
1815
Mod.RegisterObject(NULL, NULL, #object, sizeof(Entity##object), 0, 0, update, lateUpdate, staticUpdate, draw, create, stageLoad, editorLoad, \
1816
editorDraw, serialize, NULL, NULL)
1817
1818
#define MOD_REGISTER_OBJ_OVERLOAD_MSV(object, modSVars, update, lateUpdate, staticUpdate, draw, create, stageLoad, editorLoad, editorDraw, \
1819
serialize) \
1820
Mod.RegisterObject((void **)&object, (void **)&modSVars, #object, sizeof(Entity##object), sizeof(Object##object), sizeof(ModObject##object), \
1821
update, lateUpdate, staticUpdate, draw, create, stageLoad, editorLoad, editorDraw, serialize, NULL, NULL)
1822
1823
#define MOD_REGISTER_OBJ_OVERLOAD_MSV_NOCLASS(object, modSVars, update, lateUpdate, staticUpdate, draw, create, stageLoad, editorLoad, editorDraw, \
1824
serialize) \
1825
Mod.RegisterObject(NULL, (void **)&modSVars, #object, sizeof(Entity##object), 0, sizeof(ModObject##object), update, lateUpdate, staticUpdate, \
1826
draw, create, stageLoad, editorLoad, editorDraw, serialize, NULL, NULL)
1827
1828
// Includes StaticLoad
1829
#define MOD_REGISTER_OBJECT_STATIC(object, inherit, update, lateUpdate, staticUpdate, draw, create, stageLoad, editorLoad, editorDraw, serialize, \
1830
staticLoad) \
1831
Mod.RegisterObject((void **)&object, NULL, #object, sizeof(Entity##object), sizeof(Object##object), 0, update, lateUpdate, staticUpdate, draw, \
1832
create, stageLoad, editorLoad, editorDraw, serialize, staticLoad, inherit)
1833
1834
#define MOD_REGISTER_OBJ_OVERLOAD_STATIC(object, update, lateUpdate, staticUpdate, draw, create, stageLoad, editorLoad, editorDraw, serialize, \
1835
staticLoad) \
1836
MOD_REGISTER_OBJECT(object, #object, update, lateUpdate, staticUpdate, draw, create, stageLoad, editorLoad, editorDraw, serialize, staticLoad)
1837
1838
#define MOD_REGISTER_OBJ_OVERLOAD_NOCLASS_STATIC(object, update, lateUpdate, staticUpdate, draw, create, stageLoad, editorLoad, editorDraw, \
1839
serialize, staticLoad) \
1840
Mod.RegisterObject(NULL, NULL, #object, sizeof(Entity##object), 0, 0, update, lateUpdate, staticUpdate, draw, create, stageLoad, editorLoad, \
1841
editorDraw, serialize, staticLoad, NULL)
1842
1843
#define MOD_REGISTER_OBJ_OVERLOAD_MSV_STATIC(object, modSVars, update, lateUpdate, staticUpdate, draw, create, stageLoad, editorLoad, editorDraw, \
1844
serialize, staticLoad) \
1845
Mod.RegisterObject((void **)&object, (void **)&modSVars, #object, sizeof(Entity##object), sizeof(Object##object), sizeof(ModObject##object), \
1846
update, lateUpdate, staticUpdate, draw, create, stageLoad, editorLoad, editorDraw, serialize, staticLoad, NULL)
1847
1848
#define MOD_REGISTER_OBJ_OVERLOAD_MSV_NOCLASS_STATIC(object, modSVars, update, lateUpdate, staticUpdate, draw, create, stageLoad, editorLoad, \
1849
editorDraw, serialize, staticLoad) \
1850
Mod.RegisterObject(NULL, (void **)&modSVars, #object, sizeof(Entity##object), 0, sizeof(ModObject##object), update, lateUpdate, staticUpdate, \
1851
draw, create, stageLoad, editorLoad, editorDraw, serialize, staticLoad, NULL)
1852
1853
#else
1854
1855
#define MOD_REGISTER_OBJECT(object, inherit, update, lateUpdate, staticUpdate, draw, create, stageLoad, editorLoad, editorDraw, serialize) \
1856
Mod.RegisterObject((void **)&object, NULL, #object, sizeof(Entity##object), sizeof(Object##object), 0, update, lateUpdate, staticUpdate, draw, \
1857
create, stageLoad, editorLoad, editorDraw, serialize, inherit)
1858
1859
#define MOD_REGISTER_OBJ_OVERLOAD(object, update, lateUpdate, staticUpdate, draw, create, stageLoad, editorLoad, editorDraw, serialize) \
1860
MOD_REGISTER_OBJECT(object, #object, update, lateUpdate, staticUpdate, draw, create, stageLoad, editorLoad, editorDraw, serialize)
1861
1862
#define MOD_REGISTER_OBJ_OVERLOAD_NOCLASS(object, update, lateUpdate, staticUpdate, draw, create, stageLoad, editorLoad, editorDraw, serialize) \
1863
Mod.RegisterObject(NULL, NULL, #object, sizeof(Entity##object), 0, 0, update, lateUpdate, staticUpdate, draw, create, stageLoad, editorLoad, \
1864
editorDraw, serialize, NULL)
1865
1866
#define MOD_REGISTER_OBJ_OVERLOAD_MSV(object, modSVars, update, lateUpdate, staticUpdate, draw, create, stageLoad, editorLoad, editorDraw, \
1867
serialize) \
1868
Mod.RegisterObject((void **)&object, (void **)&modSVars, #object, sizeof(Entity##object), sizeof(Object##object), sizeof(ModObject##object), \
1869
update, lateUpdate, staticUpdate, draw, create, stageLoad, editorLoad, editorDraw, serialize, NULL)
1870
1871
#define MOD_REGISTER_OBJ_OVERLOAD_MSV_NOCLASS(object, modSVars, update, lateUpdate, staticUpdate, draw, create, stageLoad, editorLoad, editorDraw, \
1872
serialize) \
1873
Mod.RegisterObject(NULL, (void **)&modSVars, #object, sizeof(Entity##object), 0, sizeof(ModObject##object), update, lateUpdate, staticUpdate, \
1874
draw, create, stageLoad, editorLoad, editorDraw, serialize, NULL)
1875
#endif
1876
1877
1878
#define MOD_REGISTER_OBJECT_HOOK(object) Mod.RegisterObjectHook((void **)&object, #object)
1879
1880
#define GET_PUBLIC_FUNC(modID, name, returnType, ...) returnType (*name)(__VA_ARGS__) = Mod.GetPublicFunction(modID, #name)
1881
#endif
1882
1883
#if RETRO_REV02
1884
#define RSDK_REGISTER_STATIC_VARIABLES(variables) RSDK.RegisterStaticVariables((void **)&variables, #variables, sizeof(Object##variables))
1885
#endif
1886
1887
#define RSDK_THIS(class) Entity##class *self = (Entity##class *)SceneInfo->entity
1888
#define RSDK_THIS_GEN() Entity *self = SceneInfo->entity
1889
#define RSDK_GET_ENTITY(slot, class) ((Entity##class *)RSDK.GetEntity(slot))
1890
#define RSDK_GET_ENTITY_GEN(slot) ((Entity *)RSDK.GetEntity(slot))
1891
#define CREATE_ENTITY(object, data, x, y) ((Entity##object *)RSDK.CreateEntity(object->classID, data, x, y))
1892
1893
#define INIT_STRING(string) \
1894
string.chars = NULL; \
1895
string.length = 0; \
1896
string.size = 0
1897
1898
// Initializes entity values to the defaults
1899
#define INIT_ENTITY(entity) \
1900
(entity)->active = ACTIVE_BOUNDS; \
1901
(entity)->visible = false; \
1902
(entity)->updateRange.x = TO_FIXED(128); \
1903
(entity)->updateRange.y = TO_FIXED(128);
1904
1905
#define foreach_active(type, entityOut) \
1906
Entity##type *entityOut = NULL; \
1907
while (RSDK.GetActiveEntities(type->classID, (void **)&entityOut))
1908
#define foreach_all(type, entityOut) \
1909
Entity##type *entityOut = NULL; \
1910
while (RSDK.GetAllEntities(type->classID, (void **)&entityOut))
1911
1912
#define foreach_active_type(type, entityOut) \
1913
Entity *entityOut = NULL; \
1914
while (RSDK.GetActiveEntities(type, (void **)&entityOut))
1915
1916
#define foreach_all_type(type, entityOut) \
1917
Entity *entityOut = NULL; \
1918
while (RSDK.GetAllEntities(type, (void **)&entityOut))
1919
1920
#if RETRO_USE_MOD_LOADER
1921
1922
#if RETRO_MOD_LOADER_VER >= 2
1923
#define foreach_active_group(group, entityOut) \
1924
Entity *entityOut = NULL; \
1925
while (Mod.GetGroupEntities(group, (void **)&entityOut))
1926
#endif
1927
1928
#define foreach_config(text) \
1929
String *text = NULL; \
1930
while (Mod.ForeachConfig(&text))
1931
#define foreach_configCategory(text) \
1932
String *text = NULL; \
1933
while (Mod.ForeachConfigCategory(&text))
1934
1935
#if RETRO_MOD_LOADER_VER >= 2
1936
1937
#define foreach_setting(id, text) \
1938
String *text = NULL; \
1939
while (Mod.ForeachSetting(id, &text))
1940
#define foreach_settingCategory(id, text) \
1941
String *text = NULL; \
1942
while (Mod.ForeachSettingCategory(id, &text))
1943
#endif
1944
1945
#endif
1946
1947
#define foreach_break \
1948
RSDK.BreakForeachLoop(); \
1949
break
1950
#define foreach_return \
1951
RSDK.BreakForeachLoop(); \
1952
return
1953
1954
#define destroyEntity(entity) RSDK.ResetEntity(entity, TYPE_BLANK, NULL)
1955
#define destroyEntitySlot(slot) RSDK.ResetEntitySlot(slot, TYPE_BLANK, NULL)
1956
1957
#if GAME_INCLUDE_EDITOR
1958
#define showGizmos() (SceneInfo->listPos == SceneInfo->entitySlot || SceneInfo->effectGizmo)
1959
#endif
1960
1961
// -------------------------
1962
// ENGINE VARIABLES
1963
// -------------------------
1964
1965
extern RSDKFunctionTable RSDK;
1966
#if RETRO_REV02
1967
extern APIFunctionTable API;
1968
#endif
1969
#if RETRO_USE_MOD_LOADER
1970
extern ModFunctionTable Mod;
1971
1972
extern const char *modID;
1973
#endif
1974
1975
extern RSDKSceneInfo *SceneInfo;
1976
extern RSDKGameInfo *GameInfo;
1977
#if MANIA_USE_PLUS
1978
extern RSDKSKUInfo *SKU;
1979
#endif
1980
extern RSDKControllerState *ControllerInfo;
1981
extern RSDKAnalogState *AnalogStickInfoL;
1982
#if MANIA_USE_PLUS
1983
extern RSDKAnalogState *AnalogStickInfoR;
1984
extern RSDKTriggerState *TriggerInfoL;
1985
extern RSDKTriggerState *TriggerInfoR;
1986
#endif
1987
extern RSDKTouchInfo *TouchInfo;
1988
#if MANIA_USE_PLUS
1989
extern RSDKUnknownInfo *UnknownInfo;
1990
#endif
1991
extern RSDKScreenInfo *ScreenInfo;
1992
1993
#endif /* GAMELINK_H */
1994
1995