// ===================================================================================== // Copyright (c) 2022-2024 Dave Bernazzani (wavemotion-dave) // // Copying and distribution of this emulator, it's source code and associated // readme files, with or without modification, are permitted in any medium without // royalty provided this copyright notice is used and wavemotion-dave (Phoenix-Edition), // Alekmaul (original port) and Greg Stanton (ProSystem Emulator) are thanked profusely. // // A7800DS emulator is offered as-is, without any warranty. // // The original GPL license: // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // ===================================================================================== #include #include #include #include #include #include "config.h" #include "Region.h" #include "bgBottom.h" #include "bgFileSel.h" #include "printf.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 " #define WAITVBL swiWaitForVBlank(); swiWaitForVBlank(); swiWaitForVBlank(); swiWaitForVBlank(); swiWaitForVBlank(); extern void dsPrintValue(int x, int y, unsigned int isSelect, char *pchStr); extern void dsShowScreenMain(bool); char strBuf[35]; // --------------------------------------------------------------------------- // 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