// ===================================================================================================== // Stella DSi - Improved Version by Dave Bernazzani (wavemotion) // // See readme.txt for a list of everything that has changed in the baseline 1.0 code. // ===================================================================================================== #include #include #include #include #include #include "config.h" #include "bgBottom.h" #include "bgFileSel.h" struct AllConfig_t allConfigs; extern int bg0, bg0b, bg1b; static int display_options_list(bool bFullDisplay); #define CONFIG_INSTRUCTION_STR "B=EXIT START=SAVE SELECT=DEFAULT" #define WAITVBL swiWaitForVBlank(); swiWaitForVBlank(); swiWaitForVBlank(); swiWaitForVBlank(); swiWaitForVBlank(); extern void dsPrintValue(int x, int y, unsigned int isSelect, char *pchStr); extern void dsShowScreenMain(bool); // --------------------------------------------------------------------------- // Write out the A7800DS.DAT configuration file to capture the settings for // each game. We can store more than 350 game settings! // --------------------------------------------------------------------------- void SaveConfig(bool bShow) { FILE *fp; int slot = 0; if (bShow) dsPrintValue(0,23,0, (char*)" SAVING CONFIGURATION "); // Set the global configuration version number... allConfigs.config_ver = CONFIG_VER; // Find the slot we should save into... for (slot=0; slot 0) optionHighlighted--; else optionHighlighted=(idx-1); display_line(optionHighlighted, 1); } if (keysCurrent() & KEY_DOWN) // Next option { display_line(optionHighlighted, 0); if (optionHighlighted < (idx-1)) optionHighlighted++; else optionHighlighted=0; display_line(optionHighlighted, 1); } if (keysCurrent() & KEY_RIGHT) // Toggle option clockwise { if (Game_Option_Table[optionHighlighted].isNumeric == 1) { if (*(Game_Option_Table[optionHighlighted].option_val) < atoi(Game_Option_Table[optionHighlighted].option[1])) { *(Game_Option_Table[optionHighlighted].option_val) += 1; } } else if (Game_Option_Table[optionHighlighted].isNumeric == 2) { if (*((s16*)Game_Option_Table[optionHighlighted].option_val) < atoi(Game_Option_Table[optionHighlighted].option[1])) { *((s16*)Game_Option_Table[optionHighlighted].option_val) += 1; } } else { *(Game_Option_Table[optionHighlighted].option_val) = (*(Game_Option_Table[optionHighlighted].option_val) + 1) % Game_Option_Table[optionHighlighted].option_max; } display_line(optionHighlighted, 1); ApplyOptions(); } if (keysCurrent() & KEY_LEFT) // Toggle option counterclockwise { if (Game_Option_Table[optionHighlighted].isNumeric == 1) { if (*(Game_Option_Table[optionHighlighted].option_val) > atoi(Game_Option_Table[optionHighlighted].option[0])) { *(Game_Option_Table[optionHighlighted].option_val) -= 1; } } else if (Game_Option_Table[optionHighlighted].isNumeric == 2) { if (*((s16*)Game_Option_Table[optionHighlighted].option_val) > atoi(Game_Option_Table[optionHighlighted].option[0])) { *((s16*)Game_Option_Table[optionHighlighted].option_val) -= 1; } } else { if ((*(Game_Option_Table[optionHighlighted].option_val)) == 0) *(Game_Option_Table[optionHighlighted].option_val) = Game_Option_Table[optionHighlighted].option_max -1; else *(Game_Option_Table[optionHighlighted].option_val) = (*(Game_Option_Table[optionHighlighted].option_val) - 1) % Game_Option_Table[optionHighlighted].option_max; } display_line(optionHighlighted, 1); ApplyOptions(); } if (keysCurrent() & KEY_START) // Save Options { SaveConfig(TRUE); } if (keysCurrent() & KEY_SELECT) // Restore Defaults { //extern void CartSetDefaultFromInternalDatabase(void); //CartSetDefaultFromInternalDatabase(); display_options_list(true); optionHighlighted = 0; } if ((keysCurrent() & KEY_B) || (keysCurrent() & KEY_A)) // Exit options { break; } } swiWaitForVBlank(); } // Restore original bottom graphic dsShowScreenMain(false); // Give a third of a second time delay... for (int i=0; i<20; i++) { swiWaitForVBlank(); } return; } // End of Line