Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
rubberduckycooly
GitHub Repository: rubberduckycooly/Sonic-Mania-Decompilation
Path: blob/master/SonicMania/Objects/Helpers/GameProgress.h
338 views
1
#ifndef OBJ_GAMEPROGRESS_H
2
#define OBJ_GAMEPROGRESS_H
3
4
#include "Game.h"
5
6
#define GAMEPROGRESS_MEDAL_COUNT (32)
7
#define GAMEPROGRESS_ZONE_COUNT (12)
8
#define GAMEPROGRESS_EMERALD_COUNT (7)
9
10
typedef enum {
11
GAMEPROGRESS_UNLOCK_TIMEATTACK,
12
GAMEPROGRESS_UNLOCK_COMPETITION,
13
GAMEPROGRESS_UNLOCK_PEELOUT,
14
GAMEPROGRESS_UNLOCK_INSTASHIELD,
15
GAMEPROGRESS_UNLOCK_ANDKNUX,
16
GAMEPROGRESS_UNLOCK_DEBUGMODE,
17
GAMEPROGRESS_UNLOCK_MEANBEAN,
18
GAMEPROGRESS_UNLOCK_DAGARDEN,
19
GAMEPROGRESS_UNLOCK_BLUESPHERES,
20
GAMEPROGRESS_UNLOCK_COUNT,
21
} GameProgressUnlockIDs;
22
23
typedef enum {
24
GAMEPROGRESS_ENDING_NONE,
25
GAMEPROGRESS_ENDING_BAD,
26
GAMEPROGRESS_ENDING_GOOD,
27
} GameProgressEndingIDs;
28
29
typedef enum {
30
GAMEPROGRESS_MEDAL_NONE,
31
GAMEPROGRESS_MEDAL_SILVER,
32
GAMEPROGRESS_MEDAL_GOLD,
33
} GameProgressMedalIDs;
34
35
typedef enum {
36
ACH_GOLD_MEDAL,
37
ACH_SILVER_MEDAL,
38
ACH_EMERALDS,
39
ACH_GAME_CLEARED,
40
ACH_STARPOST,
41
ACH_SIGNPOST,
42
ACH_GHZ,
43
ACH_CPZ,
44
ACH_SPZ,
45
ACH_FBZ,
46
ACH_PGZ,
47
ACH_SSZ,
48
ACH_HCZ,
49
ACH_MSZ,
50
ACH_OOZ,
51
ACH_LRZ,
52
ACH_MMZ,
53
ACH_TMZ,
54
} AchievementIDs;
55
56
extern AchievementID achievementList[];
57
58
// Using a seperate ProgressRAM struct
59
// Normally (and officially) the ObjectGameProgress struct was used here
60
// but due to v5U updating the entity (and thus the ProgressRAM "spec")
61
// ObjectGameProgress is no longer easily compatible across versions
62
// so I gave it dummy data and will be using this struct to interact with progressRAM
63
// this one was also broken with plus since medals[] were aligned by 1 byte
64
// so when "filter" was added, all medals were offset by 1 without this fix
65
typedef struct {
66
uint8 padding[0x56]; // aka sizeof(Entity) for pre-plus
67
68
uint8 medals[GAMEPROGRESS_MEDAL_COUNT];
69
bool32 allGoldMedals;
70
bool32 allSilverMedals;
71
bool32 zoneCleared[GAMEPROGRESS_ZONE_COUNT];
72
bool32 allZonesCleared;
73
bool32 emeraldObtained[GAMEPROGRESS_EMERALD_COUNT];
74
bool32 allEmeraldsObtained;
75
bool32 unreadNotifs[GAMEPROGRESS_UNLOCK_COUNT];
76
bool32 specialCleared[GAMEPROGRESS_EMERALD_COUNT];
77
bool32 allSpecialCleared;
78
bool32 unlockedEndingID;
79
int32 goldMedalCount;
80
int32 silverMedalCount;
81
} ProgressRAM;
82
83
// Object Class
84
struct ObjectGameProgress {
85
RSDK_OBJECT
86
};
87
88
// Entity Class
89
struct EntityGameProgress {
90
RSDK_ENTITY
91
// padding to match whatever it would be normally
92
// not required, but its for safety :)
93
uint8 padding[sizeof(ProgressRAM) - sizeof(Entity)];
94
};
95
96
// Object Struct
97
extern ObjectGameProgress *GameProgress;
98
99
// Standard Entity Events
100
void GameProgress_Update(void);
101
void GameProgress_LateUpdate(void);
102
void GameProgress_StaticUpdate(void);
103
void GameProgress_Draw(void);
104
void GameProgress_Create(void *data);
105
void GameProgress_StageLoad(void);
106
#if GAME_INCLUDE_EDITOR
107
void GameProgress_EditorDraw(void);
108
void GameProgress_EditorLoad(void);
109
#endif
110
void GameProgress_Serialize(void);
111
112
// Extra Entity Events
113
int32 GameProgress_GetNotifStringID(int32 type);
114
void GameProgress_ShuffleBSSID(void);
115
ProgressRAM *GameProgress_GetProgressRAM(void);
116
bool32 GameProgress_GetZoneUnlocked(int32 zoneID);
117
float GameProgress_GetCompletionPercent(ProgressRAM *progress);
118
#if MANIA_USE_PLUS
119
void GameProgress_TrackGameProgress(void (*callback)(bool32 success));
120
#else
121
void GameProgress_TrackGameProgress(void (*callback)(void));
122
#endif
123
void GameProgress_ClearBSSSave(void);
124
void GameProgress_UnlockAll(void);
125
void GameProgress_LockAllSpecialClear(void);
126
void GameProgress_ClearProgress(void);
127
void GameProgress_MarkZoneCompleted(int32 zoneID);
128
bool32 GameProgress_CheckZoneClear(void);
129
void GameProgress_GiveEmerald(int32 emeraldID);
130
void GameProgress_GiveMedal(uint8 medalID, uint8 type);
131
void GameProgress_GiveEnding(uint8 ending);
132
void GameProgress_PrintSaveProgress(void);
133
int32 GameProgress_CountUnreadNotifs(void);
134
int32 GameProgress_GetNextNotif(void);
135
bool32 GameProgress_CheckUnlock(uint8 id);
136
137
#endif //! OBJ_GAMEPROGRESS_H
138
139