New Super Mario Bros. U Headers
Loading...
Searching...
No Matches
SaveMgr.h
Go to the documentation of this file.
1#pragma once
2
3#include <heap/seadDisposer.h>
4#include <thread/seadDelegateThread.h>
5#include <nn/ffl.h>
6
7struct SaveData
8{
9 struct Header
10 {
16 u8 rdash_state; // 1 -> The game has notified you about the NSLU DLC.
17 u8 button_setup; // AB/XY & AX/BY setup
20 };
21 static_assert(sizeof(Header) == 0x10, "SaveData::Header size mismatch");
22
24 {
25 u8 world; // 0-indexed
26 u8 subworld; // Per-world worldmap sections. Used for W5 Haunted section, W8 and W9.
27 u8 node; // 0-indexed, does not follow the visible order of paths in-game at all.
28 };
29 static_assert(sizeof(CSLocation) == 0x3, "SaveData::CSLocation size mismatch");
30
45 static_assert(sizeof(WorldCompletionFlag) == 0x2, "SaveData::WorldCompletionFlag size mismatch");
46
55 static_assert(sizeof(GameCompletionFlag) == 0x1, "SaveData::GameCompletionFlag size mismatch");
56
65 static_assert(sizeof(ChibiYoshiAvailableFlag) == 0x1, "SaveData::ChibiYoshiAvailableFlag size mismatch");
66
75 static_assert(sizeof(ActiveChibiYoshi) == 0x1, "SaveData::ActiveChibiYoshi size mismatch");
76
87 static_assert(sizeof(LevelCompletionFlag) == 0x1, "SaveData::LevelCompletionFlag size mismatch");
88
94 static_assert(sizeof(LevelStatData) == 0xB9, "SaveData::LevelStatData size mismatch");
95
96 enum class LevelStarCoinFlag : u8 // TODO: More research, not all values are here
97 {
100 };
101 static_assert(sizeof(LevelStarCoinFlag) == 0x1, "SaveData::LevelStarCoinFlag size mismatch");
102
116 static_assert(sizeof(InventoryItem) == 0x1, "SaveData::InventoryItem size mismatch");
117
124 static_assert(sizeof(AmbushEnemy) == 0x5, "SaveData::AmbushEnemy size mismatch");
125
137 static_assert(sizeof(AmbushData) == 0x6D, "SaveData::AmbushData size mismatch");
138
156 static_assert(sizeof(Records) == 0x38, "SaveData::Statistics size mismatch");
157
158 struct SaveSlot
159 {
163 u8 cs_active_w6_switch; // 0: Red Active, 1: Blue Active
165 CSLocation cs_unknown_location; // TODO: Unknown purpose
168 u8 player_lives[4]; // Order: Mario, Luigi, Blue Toad, Yellow Toad
169 u8 player_character[4]; // TODO: Verify order
170 u8 player_powerup[4]; // Order: Mario, Luigi, Blue Toad, Yellow Toad. See PlayerBase::PlayerMode enum.
171 u8 player_game_over[4]; // Order: Mario, Luigi, Blue Toad, Yellow Toad
181 u8 _34[0x44 - 0x34];
188 u8 _4e; // chibiYoshiItem (?)
202 u8 ambush_item_reappear_counter[4]; // TODO: Map out order
203 u8 ambush_items[4]; // TODO: Figure out values, maybe PlayerMode but untested
210 u8 caught_nabbit_flags; // TODO: Figure out flags
213 };
214 static_assert(sizeof(SaveSlot) == 0x204, "SaveData::SaveSlot size mismatch");
215
217 {
220 };
221 static_assert(sizeof(SaveSlots) == 0xC18, "SaveData::SaveSlots size mismatch");
222
224 {
226 u8 completion_player; // TODO: Check which player each value is
231 };
232 static_assert(sizeof(ChallengeReplay) == 0x6C, "SaveData::ChallengeReplay size mismatch");
233
235 {
237 u8 num_category_medals[5]; // TODO: Figure out categories
241 u8 _21c8[0x3608 - 0x21c8];
243 };
244 static_assert(sizeof(ChallengeData) == 0x360C, "SaveData::ChallengeData size mismatch");
245
247 {
252 u32 high_scores[32]; // Stored in hundredths of a second
253 u8 _84[0xA4 - 0x84];
255 };
256 static_assert(sizeof(BoostRushData) == 0xA8, "SaveData::BoostRushData size mismatch");
257
259 {
262 bool exists;
264 struct
265 {
268 } pos;
269 };
270 static_assert(sizeof(CoinEditCoin) == 0x8, "SaveData::CoinEditCoin size mismatch");
271
273 {
276 u8 _2; // Possibly "bool exists;" like in CoinEditCoin?
279 };
280 static_assert(sizeof(CoinEditStarCoin) == 0xC, "SaveData::CoinEditStarCoin size mismatch");
281
287 static_assert(sizeof(CoinEditLevel) == 0x984, "SaveData::CoinEditLevel size mismatch");
288
295 static_assert(sizeof(CoinEditData) == 0x5F38, "SaveData::CoinEditData size mismatch");
296
345 static_assert(sizeof(Statistics) == 0x94, "SaveData::Statistics size mismatch");
346
347 struct [[gnu::packed, gnu::aligned(1)]] MiiData
348 {
353 };
354 static_assert(sizeof(MiiData) == 0x274, "SaveData::MiiData size mismatch");
355
364};
365static_assert(sizeof(SaveData) == 0xB134, "SaveData size mismatch");
366
367struct FFLStoreData;
368
370{
372
373public:
380 static_assert(sizeof(Status) == 4);
381
389 static_assert(sizeof(ReadError) == 4);
390
397 static_assert(sizeof(WriteError) == 4);
398
399public:
401 virtual ~SaveMgr();
402
403 bool isSaving() const
404 {
405 return mStatus == cStatus_Writing || _30 != -1;
406 }
407
408 bool isSavingDone() const
409 {
410 return mStatus != cStatus_Writing;
411 }
412
413 const FFLStoreData& getStoreData(s32 index) const;
414
415 void startSaveGame(u8 file);
416 void startQuickSaveGame(u8 file);
417
419 {
420 startSaveGame(mSavedata->header.last_file);
421 }
422
424 {
425 startQuickSaveGame(mSavedata->header.last_file);
426 }
427
428protected:
433 s32 _20; // enum ?
434 const SaveData* mSavedata; // rp_savedata
435 void* mPersonalSavedata; // rp_personal_savedata
441 s64 mInitTime; // sead::DateTime
442 s64 mStoryPlayInitTime; // sead::DateTime
443
444};
445static_assert(sizeof(SaveMgr) == 0x50);
struct FFLStoreData FFLStoreData
Definition SaveMgr.h:370
u8 _2e
Definition SaveMgr.h:438
s64 mStoryPlayInitTime
Definition SaveMgr.h:442
bool mButtonLayoutChanged
Definition SaveMgr.h:436
const FFLStoreData & getStoreData(s32 index) const
WriteError mWriteError
Definition SaveMgr.h:432
u8 _2d
Definition SaveMgr.h:437
sead::DelegateThread * mDelegateThread
Definition SaveMgr.h:429
void startQuickSaveGame(u8 file)
s32 _30
Definition SaveMgr.h:440
bool isSaving() const
Definition SaveMgr.h:403
void * mPersonalSavedata
Definition SaveMgr.h:435
WriteError
Definition SaveMgr.h:392
@ cWriteError_OK
Definition SaveMgr.h:393
@ cWriteError_FileDeviceUnavailable
Definition SaveMgr.h:394
@ cWriteError_FileWriteFailed
Definition SaveMgr.h:395
void startSaveGame(u8 file)
const SaveData * mSavedata
Definition SaveMgr.h:434
s64 mInitTime
Definition SaveMgr.h:441
Status mStatus
Definition SaveMgr.h:430
bool isSavingDone() const
Definition SaveMgr.h:408
ReadError
Definition SaveMgr.h:383
@ cReadError_FileInvalid
Definition SaveMgr.h:387
@ cReadError_FileDeviceUnavailable
Definition SaveMgr.h:385
@ cReadError_OK
Definition SaveMgr.h:384
@ cReadError_FileUnavailable
Definition SaveMgr.h:386
void startQuickSaveGame()
Definition SaveMgr.h:423
virtual ~SaveMgr()
void startSaveGame()
Definition SaveMgr.h:418
u8 _2f
Definition SaveMgr.h:439
s32 _20
Definition SaveMgr.h:433
ReadError mReadError
Definition SaveMgr.h:431
Definition SaveMgr.h:127
AmbushEnemy world_5[3]
Definition SaveMgr.h:132
u8 _6c
Definition SaveMgr.h:135
AmbushEnemy world_1[2]
Definition SaveMgr.h:128
AmbushEnemy world_3[2]
Definition SaveMgr.h:130
AmbushEnemy world_2[3]
Definition SaveMgr.h:129
AmbushEnemy world_4[5]
Definition SaveMgr.h:131
u8 _5a[18]
Definition SaveMgr.h:134
AmbushEnemy world_7[3]
Definition SaveMgr.h:133
Definition SaveMgr.h:119
u8 _3
Definition SaveMgr.h:121
u8 _4
Definition SaveMgr.h:122
CSLocation location
Definition SaveMgr.h:120
Definition SaveMgr.h:247
u32 high_scores[32]
Definition SaveMgr.h:252
u8 _2
Definition SaveMgr.h:250
u8 _84[0xA4 - 0x84]
Definition SaveMgr.h:253
u32 crc32
Definition SaveMgr.h:254
u8 _3
Definition SaveMgr.h:251
u8 _1
Definition SaveMgr.h:249
u8 _0
Definition SaveMgr.h:248
Definition SaveMgr.h:24
u8 node
Definition SaveMgr.h:27
u8 subworld
Definition SaveMgr.h:26
u8 world
Definition SaveMgr.h:25
Definition SaveMgr.h:235
bool is_valid
Definition SaveMgr.h:236
u32 crc32
Definition SaveMgr.h:242
u8 _7
Definition SaveMgr.h:239
u8 num_category_medals[5]
Definition SaveMgr.h:237
ChallengeReplay replays[80]
Definition SaveMgr.h:240
u8 _6
Definition SaveMgr.h:238
u8 _21c8[0x3608 - 0x21c8]
Definition SaveMgr.h:241
Definition SaveMgr.h:224
u8 completion_player
Definition SaveMgr.h:226
FFLStoreData completion_mii
Definition SaveMgr.h:228
u32 high_score
Definition SaveMgr.h:229
bool is_valid
Definition SaveMgr.h:225
u32 crc32
Definition SaveMgr.h:230
u16 _2
Definition SaveMgr.h:227
Definition SaveMgr.h:259
u8 area
Definition SaveMgr.h:261
bool exists
Definition SaveMgr.h:262
u8 file
Definition SaveMgr.h:260
u16 x
Definition SaveMgr.h:266
u16 y
Definition SaveMgr.h:267
u8 _3
Definition SaveMgr.h:263
Definition SaveMgr.h:290
u8 unlocked_levels[12]
Definition SaveMgr.h:292
CoinEditLevel levels[10]
Definition SaveMgr.h:291
u32 crc32
Definition SaveMgr.h:293
Definition SaveMgr.h:283
CoinEditStarCoin star_coins[3]
Definition SaveMgr.h:285
CoinEditCoin coins[300]
Definition SaveMgr.h:284
Definition SaveMgr.h:273
sead::Vector2f pos
Definition SaveMgr.h:278
u8 _3
Definition SaveMgr.h:277
u8 _2
Definition SaveMgr.h:276
u8 file
Definition SaveMgr.h:274
u8 area
Definition SaveMgr.h:275
Definition SaveMgr.h:10
u8 rdash_state
Definition SaveMgr.h:16
u8 last_file
Definition SaveMgr.h:15
u8 version_patch
Definition SaveMgr.h:14
u8 padding[2]
Definition SaveMgr.h:18
u8 button_setup
Definition SaveMgr.h:17
u32 magic
Definition SaveMgr.h:11
u32 crc32
Definition SaveMgr.h:19
u8 version_minor
Definition SaveMgr.h:13
u8 version_major
Definition SaveMgr.h:12
Definition SaveMgr.h:90
u8 death_counter[62]
Definition SaveMgr.h:92
LevelCompletionFlag completion_flag[123]
Definition SaveMgr.h:91
Definition SaveMgr.h:348
u32 crc32
Definition SaveMgr.h:352
u8 padding[3]
Definition SaveMgr.h:351
u8 entry_num
Definition SaveMgr.h:349
FFLCreateID mii_ids[62]
Definition SaveMgr.h:350
Definition SaveMgr.h:140
u32 goals_reached_with_chibi_yoshi
Definition SaveMgr.h:151
u32 boost_block_distance
Definition SaveMgr.h:145
u32 lives_earned_at_goal
Definition SaveMgr.h:152
u32 goals_reached_with_yoshi
Definition SaveMgr.h:150
u32 coins_collected
Definition SaveMgr.h:141
u32 times_applauded
Definition SaveMgr.h:144
u32 mini_boost_block_distance
Definition SaveMgr.h:146
u32 star_coins_collected
Definition SaveMgr.h:142
u32 goombas_stomped
Definition SaveMgr.h:148
u32 life_moons_collected
Definition SaveMgr.h:154
u32 items_collected
Definition SaveMgr.h:149
u32 goals_reached
Definition SaveMgr.h:143
u32 fireworks_at_goal
Definition SaveMgr.h:153
u32 nabbits_caught
Definition SaveMgr.h:147
Definition SaveMgr.h:159
u8 ambush_items[4]
Definition SaveMgr.h:203
u8 _51
Definition SaveMgr.h:191
u8 caught_nabbit_flags
Definition SaveMgr.h:210
u8 padding[3]
Definition SaveMgr.h:211
u8 balloon_chibi_yoshi_reappear_counter
Definition SaveMgr.h:200
bool is_nabbit_in_world[7]
Definition SaveMgr.h:204
u8 _58
Definition SaveMgr.h:198
CSLocation cs_airship_location
Definition SaveMgr.h:183
u8 _2f
Definition SaveMgr.h:179
u32 score
Definition SaveMgr.h:180
u16 credits_highscore
Definition SaveMgr.h:182
u8 _54
Definition SaveMgr.h:194
AmbushData ambush
Definition SaveMgr.h:208
u8 _57
Definition SaveMgr.h:197
Records records
Definition SaveMgr.h:209
u8 _a
Definition SaveMgr.h:166
u8 _4b
Definition SaveMgr.h:185
CSLocation cs_player_location
Definition SaveMgr.h:164
sead::Vector3f _20
Definition SaveMgr.h:175
u8 _4c
Definition SaveMgr.h:186
u8 ambush_item_reappear_counter[4]
Definition SaveMgr.h:202
u8 _4e
Definition SaveMgr.h:188
u8 _4f
Definition SaveMgr.h:189
u8 _1f
Definition SaveMgr.h:174
GameCompletionFlag game_completion_flag
Definition SaveMgr.h:173
bool is_valid
Definition SaveMgr.h:160
u8 player_lives[4]
Definition SaveMgr.h:168
u8 _4d
Definition SaveMgr.h:187
u8 nabbit_world_id[2]
Definition SaveMgr.h:184
ActiveChibiYoshi active_chibi_yoshi
Definition SaveMgr.h:196
ChibiYoshiAvailableFlag cs_chibi_yoshi_flag
Definition SaveMgr.h:195
WorldCompletionFlag world_completion_flag
Definition SaveMgr.h:172
CSLocation cs_unknown_location
Definition SaveMgr.h:165
u8 _59
Definition SaveMgr.h:199
u8 _2c
Definition SaveMgr.h:176
LevelStatData level_stat
Definition SaveMgr.h:205
u8 last_session_player_count
Definition SaveMgr.h:161
LevelStarCoinFlag level_star_coins[41]
Definition SaveMgr.h:206
u8 bubble_chibi_yoshi_reappear_counter
Definition SaveMgr.h:201
u8 _53
Definition SaveMgr.h:193
u8 _2e
Definition SaveMgr.h:178
u8 player_character[4]
Definition SaveMgr.h:169
u8 player_game_over[4]
Definition SaveMgr.h:171
u8 player_powerup[4]
Definition SaveMgr.h:170
u8 num_coins
Definition SaveMgr.h:162
InventoryItem inventory[10]
Definition SaveMgr.h:207
u8 _50
Definition SaveMgr.h:190
u8 _34[0x44 - 0x34]
Definition SaveMgr.h:181
u8 _b
Definition SaveMgr.h:167
u8 cs_active_w6_switch
Definition SaveMgr.h:163
u32 crc32
Definition SaveMgr.h:212
u8 _52
Definition SaveMgr.h:192
u8 _2d
Definition SaveMgr.h:177
Definition SaveMgr.h:217
SaveSlot nsmbu[3]
Definition SaveMgr.h:218
SaveSlot nslu[3]
Definition SaveMgr.h:219
Definition SaveMgr.h:298
u32 boost_rush_played_2p
Definition SaveMgr.h:311
u32 challenge_replays_watched
Definition SaveMgr.h:326
u32 levels_played_special
Definition SaveMgr.h:306
u32 coin_battles_played_mii
Definition SaveMgr.h:322
u32 boost_rush_played_special
Definition SaveMgr.h:314
u8 story_star_coins_collected
Definition SaveMgr.h:333
u8 nslu_star_coins_collected
Definition SaveMgr.h:336
u32 levels_played
Definition SaveMgr.h:301
u8 boost_mode_challenges_completed
Definition SaveMgr.h:341
u32 total_play_time
Definition SaveMgr.h:299
u32 coin_battles_played_1p
Definition SaveMgr.h:317
u32 coin_battles_played
Definition SaveMgr.h:316
bool _86
Definition SaveMgr.h:334
u8 nslu_reached_world
Definition SaveMgr.h:337
u32 coin_edit_battles_played
Definition SaveMgr.h:323
u8 challenge_silver_medals
Definition SaveMgr.h:339
bool _87
Definition SaveMgr.h:335
u32 _78
Definition SaveMgr.h:329
u32 coin_battles_played_2p
Definition SaveMgr.h:318
u32 boost_rush_played_3p
Definition SaveMgr.h:312
u32 story_play_time
Definition SaveMgr.h:300
u32 crc32
Definition SaveMgr.h:343
u32 challenges_retried
Definition SaveMgr.h:325
u32 coin_battles_played_3p
Definition SaveMgr.h:319
u32 boost_mode_challenges_played
Definition SaveMgr.h:327
u32 super_guides
Definition SaveMgr.h:308
u32 levels_played_2p
Definition SaveMgr.h:303
u32 levels_played_4p
Definition SaveMgr.h:305
u32 coin_battles_played_special
Definition SaveMgr.h:321
u32 boost_rush_played_4p
Definition SaveMgr.h:313
u32 levels_played_1p
Definition SaveMgr.h:302
u8 challenge_gold_medals
Definition SaveMgr.h:338
u8 padding[2]
Definition SaveMgr.h:342
u8 challenge_bronze_medals
Definition SaveMgr.h:340
u32 boost_rush_played
Definition SaveMgr.h:309
u32 _7c
Definition SaveMgr.h:330
u32 coin_battles_played_4p
Definition SaveMgr.h:320
u32 nabbits_chased
Definition SaveMgr.h:307
u32 nslu_levels_played
Definition SaveMgr.h:328
u32 boost_rush_played_1p
Definition SaveMgr.h:310
u32 levels_played_3p
Definition SaveMgr.h:304
u32 challenges_played
Definition SaveMgr.h:324
u8 story_reached_world
Definition SaveMgr.h:332
u32 inventory_powerups_used
Definition SaveMgr.h:331
u32 boost_rush_played_mii
Definition SaveMgr.h:315
Definition SaveMgr.h:8
InventoryItem
Definition SaveMgr.h:104
@ cInventoryItem_Propeller
Definition SaveMgr.h:109
@ cInventoryItem_None
Definition SaveMgr.h:114
@ cInventoryItem_SuperStar
Definition SaveMgr.h:107
@ cInventoryItem_Mushroom
Definition SaveMgr.h:105
@ cInventoryItem_IceFlower
Definition SaveMgr.h:108
@ cInventoryItem_Penguin
Definition SaveMgr.h:111
@ cInventoryItem_Acorn
Definition SaveMgr.h:112
@ cInventoryItem_FireFlower
Definition SaveMgr.h:106
@ cInventoryItem_PAcorn
Definition SaveMgr.h:113
@ cInventoryItem_Mini
Definition SaveMgr.h:110
SaveSlots quick_save_slots
Definition SaveMgr.h:358
ActiveChibiYoshi
Definition SaveMgr.h:68
@ cActiveChibiYoshi_World6
Definition SaveMgr.h:72
@ cActiveChibiYoshi_World3
Definition SaveMgr.h:70
@ cActiveChibiYoshi_World4
Definition SaveMgr.h:71
@ cActiveChibiYoshi_World1
Definition SaveMgr.h:69
@ cActiveChibiYoshi_None
Definition SaveMgr.h:73
Statistics statistics
Definition SaveMgr.h:362
CoinEditData coin_edit
Definition SaveMgr.h:361
LevelStarCoinFlag
Definition SaveMgr.h:97
@ cLevelStarCoinFlag_All
Definition SaveMgr.h:99
@ cLevelStarCoinFlag_None
Definition SaveMgr.h:98
LevelCompletionFlag
Definition SaveMgr.h:78
@ cLevelCompletionFlag_ClearedOrUsedToadHouse
Definition SaveMgr.h:84
@ cLevelCompletionFlag_ForeverUnlockedToadHouse
Definition SaveMgr.h:82
@ cLevelCompletionFlag_Locked
Definition SaveMgr.h:79
@ cLevelCompletionFlag_Unlocked
Definition SaveMgr.h:80
@ cLevelCompletionFlag_ClearedOrSecretExitCleared
Definition SaveMgr.h:85
@ cLevelCompletionFlag_PlayedOnce
Definition SaveMgr.h:81
@ cLevelCompletionFlag_AmbushCleared
Definition SaveMgr.h:83
ChallengeData challenge
Definition SaveMgr.h:359
BoostRushData boost_rush
Definition SaveMgr.h:360
ChibiYoshiAvailableFlag
Definition SaveMgr.h:58
@ cChibiYoshiAvailableFlag_All
Definition SaveMgr.h:63
@ cChibiYoshiAvailableFlag_World3
Definition SaveMgr.h:60
@ cChibiYoshiAvailableFlag_World6
Definition SaveMgr.h:62
@ cChibiYoshiAvailableFlag_World4
Definition SaveMgr.h:61
@ cChibiYoshiAvailableFlag_World1
Definition SaveMgr.h:59
Header header
Definition SaveMgr.h:356
SaveSlots main_slots
Definition SaveMgr.h:357
WorldCompletionFlag
Definition SaveMgr.h:32
@ cWorldCompletionFlag_1
Definition SaveMgr.h:34
@ cWorldCompletionFlag_Opening
Definition SaveMgr.h:33
@ cWorldCompletionFlag_4
Definition SaveMgr.h:37
@ cWorldCompletionFlag_6
Definition SaveMgr.h:39
@ cWorldCompletionFlag_7
Definition SaveMgr.h:40
@ cWorldCompletionFlag_8
Definition SaveMgr.h:41
@ cWorldCompletionFlag_All
Definition SaveMgr.h:43
@ cWorldCompletionFlag_5
Definition SaveMgr.h:38
@ cWorldCompletionFlag_3
Definition SaveMgr.h:36
@ cWorldCompletionFlag_2
Definition SaveMgr.h:35
MiiData mii
Definition SaveMgr.h:363
GameCompletionFlag
Definition SaveMgr.h:48
@ cGameCompletionFlag_AllStarCoins
Definition SaveMgr.h:52
@ cGameCompletionFlag_Unknown2
Definition SaveMgr.h:51
@ cGameCompletionFlag_AllLevels
Definition SaveMgr.h:50
@ cGameCompletionFlag_AllExits
Definition SaveMgr.h:53
@ cGameCompletionFlag_Unknown1
Definition SaveMgr.h:49