Merge pull request #421 from ineedhelpbad/Text-save-cannon-fix

BUGFIX:  Text Saves aren't saving cannon flags. #397
This commit is contained in:
fgsfds 2020-09-29 19:28:50 +03:00 committed by GitHub
commit 5b66d3faff
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 14 additions and 5 deletions

View File

@ -615,6 +615,12 @@ u32 save_file_get_star_flags(s32 fileIndex, s32 courseIndex) {
return starFlags;
}
u32 save_file_get_cannon_flags(s32 fileIndex, s32 courseIndex) {
if (gSaveBuffer.files[fileIndex][0].courseStars[courseIndex+1] & 0x80){return 1;}
return 0;
}
/**
* Add to the bitset of obtained stars in the specified course.

View File

@ -135,6 +135,7 @@ void save_file_set_flags(u32 flags);
void save_file_clear_flags(u32 flags);
u32 save_file_get_flags(void);
u32 save_file_get_star_flags(s32 fileIndex, s32 courseIndex);
u32 save_file_get_cannon_flags(s32 fileIndex, s32 courseIndex);
void save_file_set_star_flags(s32 fileIndex, s32 courseIndex, u32 starFlags);
s32 save_file_get_course_coin_score(s32 fileIndex, s32 courseIndex);
s32 save_file_is_cannon_unlocked(void);

View File

@ -81,7 +81,7 @@ static s32 write_text_save(s32 fileIndex) {
struct MainMenuSaveData *menudata;
char filename[SYS_MAX_PATH] = { 0 };
char value[64];
u32 i, bit, flags, coins, stars, starFlags;
u32 i, bit, flags, coins, stars, starFlags, cannonFlag;
if (snprintf(filename, sizeof(filename), FILENAME_FORMAT, fs_writepath, fileIndex) < 0)
return -1;
@ -133,9 +133,10 @@ static s32 write_text_save(s32 fileIndex) {
for (i = 0; i < NUM_COURSES; i++) {
stars = save_file_get_star_flags(fileIndex, i);
coins = save_file_get_course_coin_score(fileIndex, i);
cannonFlag = save_file_get_cannon_flags(fileIndex, i);
starFlags = int_to_bin(stars); // 63 -> 111111
fprintf(file, "%s = \"%d, %07d\"\n", sav_courses[i], coins, starFlags);
fprintf(file, "%s = \"%d, %07d, %d\"\n", sav_courses[i], coins, starFlags,cannonFlag);
}
fprintf(file, "\n[bonus]\n");
@ -208,7 +209,7 @@ static s32 read_text_save(s32 fileIndex) {
const char *value;
ini_t *savedata;
u32 i, flag, coins, stars, starFlags;
u32 i, flag, coins, stars, starFlags, cannonFlag;
u32 capArea;
if (snprintf(filename, sizeof(filename), FILENAME_FORMAT, fs_writepath, fileIndex) < 0)
@ -255,9 +256,10 @@ static s32 read_text_save(s32 fileIndex) {
for (i = 0; i < NUM_COURSES; i++) {
value = ini_get(savedata, "courses", sav_courses[i]);
if (value) {
sscanf(value, "%d, %d", &coins, &stars);
sscanf(value, "%d, %d, %d", &coins, &stars, &cannonFlag);
starFlags = bin_to_int(stars); // 111111 -> 63
cannonFlag <<= 7; //Shifts the bit to the most significant bit.
save_file_set_star_flags(fileIndex, i+1, cannonFlag); //
save_file_set_star_flags(fileIndex, i, starFlags);
gSaveBuffer.files[fileIndex][0].courseCoinScores[i] = coins;
}