48 lines
1015 B
C
48 lines
1015 B
C
#include "save_data.h"
|
|
#include "constants.h"
|
|
|
|
// Bit flags for level completion.
|
|
// Expect 30 levels.
|
|
// Could use a 32bit integer though.
|
|
// Using array to allow arbitrary length of flags.
|
|
|
|
#define NUMBER_OF_BYTES 4
|
|
static uint8_t completion_flags[NUMBER_OF_BYTES] = {0};
|
|
|
|
int load_savedata(uint8_t* bytes, size_t len)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
int writeout_savedata(uint8_t* bytes, size_t len)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
bool is_level_completed(uint32_t level_num)
|
|
{
|
|
// 0-indexed
|
|
|
|
uint32_t byte_num = level_num >> 3;
|
|
if (byte_num >= NUMBER_OF_BYTES) return false;
|
|
|
|
uint32_t bit_num = level_num % 8;
|
|
return ((completion_flags[byte_num] >> bit_num) & 1) > 0;
|
|
}
|
|
|
|
void set_level_completed(uint32_t level_num, bool complete)
|
|
{
|
|
uint32_t byte_num = level_num >> 3;
|
|
if (byte_num >= NUMBER_OF_BYTES) return;
|
|
|
|
uint32_t bit_num = level_num % 8;
|
|
if (complete)
|
|
{
|
|
completion_flags[byte_num] |= (1 <<bit_num);
|
|
}
|
|
else
|
|
{
|
|
completion_flags[byte_num] &= ~(1 << bit_num);
|
|
}
|
|
}
|