diff --git a/My_settings.h b/My_settings.h index 8823b93..cf7eba5 100644 --- a/My_settings.h +++ b/My_settings.h @@ -1,6 +1,6 @@ // Pokitto config required by PokittoLib -#define PROJ_SHOW_FPS_COUNTER +//#define PROJ_SHOW_FPS_COUNTER #define PROJ_SCREENMODE 13 #define PROJ_MODE13 1 #define PROJ_ENABLE_SOUND 1 diff --git a/constants.h b/constants.h index f573d86..316bcc8 100644 --- a/constants.h +++ b/constants.h @@ -208,6 +208,11 @@ */ #define SFG_BASE_SPRITE_SIZE RCL_UNITS_PER_SQUARE +/** + Default value of the settings byte. +*/ +#define SFG_DEFAULT_SETTINGS 0x03 + // ----------------------------------------------------------------------------- // derived constants diff --git a/game.h b/game.h index c5d4591..5ee6434 100755 --- a/game.h +++ b/game.h @@ -391,7 +391,7 @@ struct saved position. The format is as follows: 0 4b (less signif.) highest level that has been reached - 0 4b (more signif.) level number of the saved position (15: no save) + 0 4b (more signif.) level number of the saved position (0: no save) 1 8b game settings (SFG_game.settings) 2 8b health at saved position 3 8b bullet ammo at saved position @@ -1641,6 +1641,14 @@ void SFG_setAndInitLevel(uint8_t levelNumber) SFG_processEvent(SFG_EVENT_LEVEL_STARTS,levelNumber); } +void SFG_createDefaultSaveData(uint8_t *memory) +{ + for (uint16_t i = 0; i < SFG_SAVE_SIZE; ++i) + SFG_game.save[i] = 0; + + SFG_game.save[1] = SFG_DEFAULT_SETTINGS; +} + void SFG_init() { SFG_LOG("initializing game") @@ -1708,16 +1716,10 @@ void SFG_init() SFG_currentLevel.levelPointer = 0; SFG_game.selectedMenuItem = 0; SFG_game.selectedLevel = 0; - SFG_game.settings = 0x03; + SFG_game.settings = SFG_DEFAULT_SETTINGS; SFG_game.saved = 0; - // create a default save data: - - for (uint16_t i = 0; i < SFG_SAVE_SIZE; ++i) - SFG_game.save[i] = 0; - - SFG_game.save[0] = 0xf0; - SFG_game.save[1] = SFG_game.settings; + SFG_createDefaultSaveData(SFG_game.save); SFG_gameLoad(); // attempt to load settings @@ -1729,7 +1731,7 @@ void SFG_init() else { SFG_LOG("saving/loading not possible"); - SFG_game.save[0] = (SFG_NUMBER_OF_LEVELS - 1) | 0xf0; // revealed all levels + SFG_game.save[0] = SFG_NUMBER_OF_LEVELS - 1; // revealed all levels } SFG_setMusic((SFG_game.settings & 0x02) ? @@ -3692,7 +3694,7 @@ uint8_t SFG_getMenuItem(uint8_t index) { if ( // skip non-legitimate items ((current <= SFG_MENU_ITEM_MAP) && (SFG_currentLevel.levelPointer == 0)) - || ((current == SFG_MENU_ITEM_LOAD) && ((SFG_game.save[0] >> 4) == 0x0f))) + || ((current == SFG_MENU_ITEM_LOAD) && ((SFG_game.save[0] >> 4) == 0))) { current++; continue; diff --git a/main_pokitto.cpp b/main_pokitto.cpp index caea5bd..240ebcf 100644 --- a/main_pokitto.cpp +++ b/main_pokitto.cpp @@ -81,12 +81,7 @@ void SFG_setPixel(uint16_t x, uint16_t y, uint8_t colorIndex) uint32_t SFG_getTimeMs() { - return -#if _OSCT == 2 - // overclock - (3 * pokitto.getTime()) / 2; -#endif - pokitto.getTime(); + return pokitto.getTime(); } void SFG_sleepMs(uint16_t timeMs) @@ -220,6 +215,21 @@ int main() timerInit(8000); + uint8_t allZeros = 1; + + for (uint8_t i = 0; i < SFG_SAVE_SIZE; ++i) + if (save.data[i] != 0) + { + allZeros = 0; + break; + } + + if (allZeros) // 1st time save + { + SFG_createDefaultSaveData(save.data); + save.saveCookie(); + } + for (uint16_t i = 0; i < SFG_SFX_SAMPLE_COUNT; ++i) audioBuff[i] = 127; @@ -238,6 +248,17 @@ int main() if (pokitto.update()) SFG_mainLoopBody(); + if (SFG_game.state == SFG_GAME_STATE_MENU && + SFG_game.keyStates[SFG_KEY_LEFT] == 255 && + SFG_game.keyStates[SFG_KEY_RIGHT] == 255 && + SFG_game.keyStates[SFG_KEY_B] == 255) + { + // holding L+R+B in menu will erase all saved data + + save.deleteCookie(); + pokitto.quit(); + } + #if 0 pokitto.display.setCursor(0,0); pokitto.display.print(pokitto.fps_counter);