Skip to content

Commit a05f9b6

Browse files
committed
Add button remapping per-game menu and read/write button remap settings in nds-bootstrap.ini
1 parent 493c146 commit a05f9b6

File tree

18 files changed

+561
-6
lines changed

18 files changed

+561
-6
lines changed

quickmenu/arm9/source/main.cpp

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1927,6 +1927,18 @@ int dsClassicMenu(void) {
19271927
bootstrapini.SetInt("NDS-BOOTSTRAP", "DSI_MODE", 0);
19281928
bootstrapini.SetInt("NDS-BOOTSTRAP", "BOOST_CPU", 0);
19291929
bootstrapini.SetInt("NDS-BOOTSTRAP", "BOOST_VRAM", 0);
1930+
bootstrapini.SetInt("NDS-BOOTSTRAP", "REMAPPED_KEY_A", 0);
1931+
bootstrapini.SetInt("NDS-BOOTSTRAP", "REMAPPED_KEY_B", 1);
1932+
bootstrapini.SetInt("NDS-BOOTSTRAP", "REMAPPED_KEY_SELECT", 2);
1933+
bootstrapini.SetInt("NDS-BOOTSTRAP", "REMAPPED_KEY_START", 3);
1934+
bootstrapini.SetInt("NDS-BOOTSTRAP", "REMAPPED_KEY_RIGHT", 4);
1935+
bootstrapini.SetInt("NDS-BOOTSTRAP", "REMAPPED_KEY_LEFT", 5);
1936+
bootstrapini.SetInt("NDS-BOOTSTRAP", "REMAPPED_KEY_UP", 6);
1937+
bootstrapini.SetInt("NDS-BOOTSTRAP", "REMAPPED_KEY_DOWN", 7);
1938+
bootstrapini.SetInt("NDS-BOOTSTRAP", "REMAPPED_KEY_R", 8);
1939+
bootstrapini.SetInt("NDS-BOOTSTRAP", "REMAPPED_KEY_L", 9);
1940+
bootstrapini.SetInt("NDS-BOOTSTRAP", "REMAPPED_KEY_X", 10);
1941+
bootstrapini.SetInt("NDS-BOOTSTRAP", "REMAPPED_KEY_Y", 11);
19301942
bootstrapini.SaveIniFile(bootstrapinipath);
19311943
int err = runNdsFile(argarray[0], argarray.size(), (const char **)&argarray[0], sys().isRunFromSD(), true, true, false, true, true, false, -1);
19321944
char text[64];
@@ -2025,6 +2037,18 @@ int dsClassicMenu(void) {
20252037
bootstrapini.SetInt("NDS-BOOTSTRAP", "DSI_MODE", 0);
20262038
bootstrapini.SetInt("NDS-BOOTSTRAP", "BOOST_CPU", 0);
20272039
bootstrapini.SetInt("NDS-BOOTSTRAP", "BOOST_VRAM", 0);
2040+
bootstrapini.SetInt("NDS-BOOTSTRAP", "REMAPPED_KEY_A", 0);
2041+
bootstrapini.SetInt("NDS-BOOTSTRAP", "REMAPPED_KEY_B", 1);
2042+
bootstrapini.SetInt("NDS-BOOTSTRAP", "REMAPPED_KEY_SELECT", 2);
2043+
bootstrapini.SetInt("NDS-BOOTSTRAP", "REMAPPED_KEY_START", 3);
2044+
bootstrapini.SetInt("NDS-BOOTSTRAP", "REMAPPED_KEY_RIGHT", 4);
2045+
bootstrapini.SetInt("NDS-BOOTSTRAP", "REMAPPED_KEY_LEFT", 5);
2046+
bootstrapini.SetInt("NDS-BOOTSTRAP", "REMAPPED_KEY_UP", 6);
2047+
bootstrapini.SetInt("NDS-BOOTSTRAP", "REMAPPED_KEY_DOWN", 7);
2048+
bootstrapini.SetInt("NDS-BOOTSTRAP", "REMAPPED_KEY_R", 8);
2049+
bootstrapini.SetInt("NDS-BOOTSTRAP", "REMAPPED_KEY_L", 9);
2050+
bootstrapini.SetInt("NDS-BOOTSTRAP", "REMAPPED_KEY_X", 10);
2051+
bootstrapini.SetInt("NDS-BOOTSTRAP", "REMAPPED_KEY_Y", 11);
20282052
bootstrapini.SaveIniFile(bootstrapinipath);
20292053
int err = runNdsFile(argarray[0], argarray.size(), (const char **)&argarray[0], sys().isRunFromSD(), true, true, false, true, true, false, -1);
20302054
char text[64];
@@ -2474,6 +2498,20 @@ int dsClassicMenu(void) {
24742498
bootstrapini.SetInt("NDS-BOOTSTRAP", "PATCH_MPU_REGION", 0);
24752499
bootstrapini.SetInt("NDS-BOOTSTRAP", "PATCH_MPU_SIZE", 0);
24762500
bootstrapini.SetInt("NDS-BOOTSTRAP", "FORCE_SLEEP_PATCH", ms().forceSleepPatch);
2501+
2502+
bootstrapini.SetInt("NDS-BOOTSTRAP", "REMAPPED_KEY_A", perGameSettings_remappedKeys[0]);
2503+
bootstrapini.SetInt("NDS-BOOTSTRAP", "REMAPPED_KEY_B", perGameSettings_remappedKeys[1]);
2504+
bootstrapini.SetInt("NDS-BOOTSTRAP", "REMAPPED_KEY_SELECT", perGameSettings_remappedKeys[2]);
2505+
bootstrapini.SetInt("NDS-BOOTSTRAP", "REMAPPED_KEY_START", perGameSettings_remappedKeys[3]);
2506+
bootstrapini.SetInt("NDS-BOOTSTRAP", "REMAPPED_KEY_RIGHT", perGameSettings_remappedKeys[4]);
2507+
bootstrapini.SetInt("NDS-BOOTSTRAP", "REMAPPED_KEY_LEFT", perGameSettings_remappedKeys[5]);
2508+
bootstrapini.SetInt("NDS-BOOTSTRAP", "REMAPPED_KEY_UP", perGameSettings_remappedKeys[6]);
2509+
bootstrapini.SetInt("NDS-BOOTSTRAP", "REMAPPED_KEY_DOWN", perGameSettings_remappedKeys[7]);
2510+
bootstrapini.SetInt("NDS-BOOTSTRAP", "REMAPPED_KEY_R", perGameSettings_remappedKeys[8]);
2511+
bootstrapini.SetInt("NDS-BOOTSTRAP", "REMAPPED_KEY_L", perGameSettings_remappedKeys[9]);
2512+
bootstrapini.SetInt("NDS-BOOTSTRAP", "REMAPPED_KEY_X", perGameSettings_remappedKeys[10]);
2513+
bootstrapini.SetInt("NDS-BOOTSTRAP", "REMAPPED_KEY_Y", perGameSettings_remappedKeys[11]);
2514+
24772515
bootstrapini.SaveIniFile(bootstrapinipath);
24782516

24792517
while (!screenFadedOut()) {
@@ -2787,6 +2825,20 @@ int dsClassicMenu(void) {
27872825
bootstrapini.SetInt("NDS-BOOTSTRAP", "PATCH_MPU_SIZE", mpusize);
27882826
bootstrapini.SetInt("NDS-BOOTSTRAP", "FORCE_SLEEP_PATCH", ms().forceSleepPatch);
27892827
bootstrapini.SetInt("NDS-BOOTSTRAP", "SAVE_RELOCATION", perGameSettings_saveRelocation == -1 ? ms().saveRelocation : perGameSettings_saveRelocation);
2828+
2829+
bootstrapini.SetInt("NDS-BOOTSTRAP", "REMAPPED_KEY_A", perGameSettings_remappedKeys[0]);
2830+
bootstrapini.SetInt("NDS-BOOTSTRAP", "REMAPPED_KEY_B", perGameSettings_remappedKeys[1]);
2831+
bootstrapini.SetInt("NDS-BOOTSTRAP", "REMAPPED_KEY_SELECT", perGameSettings_remappedKeys[2]);
2832+
bootstrapini.SetInt("NDS-BOOTSTRAP", "REMAPPED_KEY_START", perGameSettings_remappedKeys[3]);
2833+
bootstrapini.SetInt("NDS-BOOTSTRAP", "REMAPPED_KEY_RIGHT", perGameSettings_remappedKeys[4]);
2834+
bootstrapini.SetInt("NDS-BOOTSTRAP", "REMAPPED_KEY_LEFT", perGameSettings_remappedKeys[5]);
2835+
bootstrapini.SetInt("NDS-BOOTSTRAP", "REMAPPED_KEY_UP", perGameSettings_remappedKeys[6]);
2836+
bootstrapini.SetInt("NDS-BOOTSTRAP", "REMAPPED_KEY_DOWN", perGameSettings_remappedKeys[7]);
2837+
bootstrapini.SetInt("NDS-BOOTSTRAP", "REMAPPED_KEY_R", perGameSettings_remappedKeys[8]);
2838+
bootstrapini.SetInt("NDS-BOOTSTRAP", "REMAPPED_KEY_L", perGameSettings_remappedKeys[9]);
2839+
bootstrapini.SetInt("NDS-BOOTSTRAP", "REMAPPED_KEY_X", perGameSettings_remappedKeys[10]);
2840+
bootstrapini.SetInt("NDS-BOOTSTRAP", "REMAPPED_KEY_Y", perGameSettings_remappedKeys[11]);
2841+
27902842
bootstrapini.SaveIniFile(bootstrapinipath);
27912843

27922844
if (dsiFeatures() && !isHomebrew[ms().secondaryDevice]) {

quickmenu/arm9/source/perGameSettings.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ int perGameSettings_dsiwareBooter = -1;
3434
int perGameSettings_useBootstrap = -1;
3535
int perGameSettings_fcGameLoader = -1;
3636
int perGameSettings_saveRelocation = -1;
37+
int perGameSettings_remappedKeys[12] = {0};
3738

3839
char pergamefilepath[256];
3940

@@ -62,6 +63,19 @@ void loadPerGameSettings (std::string filename) {
6263
perGameSettings_useBootstrap = pergameini.GetInt("GAMESETTINGS", "USE_BOOTSTRAP", -1);
6364
perGameSettings_fcGameLoader = pergameini.GetInt("GAMESETTINGS", "FC_GAME_LOADER", -1);
6465
perGameSettings_saveRelocation = pergameini.GetInt("GAMESETTINGS", "SAVE_RELOCATION", -1);
66+
67+
perGameSettings_remappedKeys[0] = pergameini.GetInt("GAMESETTINGS", "REMAPPED_KEY_A", 0);
68+
perGameSettings_remappedKeys[1] = pergameini.GetInt("GAMESETTINGS", "REMAPPED_KEY_B", 1);
69+
perGameSettings_remappedKeys[2] = pergameini.GetInt("GAMESETTINGS", "REMAPPED_KEY_SELECT", 2);
70+
perGameSettings_remappedKeys[3] = pergameini.GetInt("GAMESETTINGS", "REMAPPED_KEY_START", 3);
71+
perGameSettings_remappedKeys[4] = pergameini.GetInt("GAMESETTINGS", "REMAPPED_KEY_RIGHT", 4);
72+
perGameSettings_remappedKeys[5] = pergameini.GetInt("GAMESETTINGS", "REMAPPED_KEY_LEFT", 5);
73+
perGameSettings_remappedKeys[6] = pergameini.GetInt("GAMESETTINGS", "REMAPPED_KEY_UP", 6);
74+
perGameSettings_remappedKeys[7] = pergameini.GetInt("GAMESETTINGS", "REMAPPED_KEY_DOWN", 7);
75+
perGameSettings_remappedKeys[8] = pergameini.GetInt("GAMESETTINGS", "REMAPPED_KEY_R", 8);
76+
perGameSettings_remappedKeys[9] = pergameini.GetInt("GAMESETTINGS", "REMAPPED_KEY_L", 9);
77+
perGameSettings_remappedKeys[10] = pergameini.GetInt("GAMESETTINGS", "REMAPPED_KEY_X", 10);
78+
perGameSettings_remappedKeys[11] = pergameini.GetInt("GAMESETTINGS", "REMAPPED_KEY_Y", 11);
6579
}
6680

6781
std::string getSavExtension(void) {

quickmenu/arm9/source/perGameSettings.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ extern int perGameSettings_dsiwareBooter;
2222
extern int perGameSettings_useBootstrap;
2323
extern int perGameSettings_fcGameLoader;
2424
extern int perGameSettings_saveRelocation;
25+
extern int perGameSettings_remappedKeys[12];
2526

2627
void loadPerGameSettings(std::string filename);
2728
std::string getSavExtension(void);

romsel_aktheme/arm9/source/main.cpp

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1558,6 +1558,20 @@ int akTheme(void) {
15581558
bootstrapini.SetInt("NDS-BOOTSTRAP", "PATCH_MPU_REGION", 0);
15591559
bootstrapini.SetInt("NDS-BOOTSTRAP", "PATCH_MPU_SIZE", 0);
15601560
bootstrapini.SetInt("NDS-BOOTSTRAP", "FORCE_SLEEP_PATCH", ms().forceSleepPatch);
1561+
1562+
bootstrapini.SetInt("NDS-BOOTSTRAP", "REMAPPED_KEY_A", perGameSettings_remappedKeys[0]);
1563+
bootstrapini.SetInt("NDS-BOOTSTRAP", "REMAPPED_KEY_B", perGameSettings_remappedKeys[1]);
1564+
bootstrapini.SetInt("NDS-BOOTSTRAP", "REMAPPED_KEY_SELECT", perGameSettings_remappedKeys[2]);
1565+
bootstrapini.SetInt("NDS-BOOTSTRAP", "REMAPPED_KEY_START", perGameSettings_remappedKeys[3]);
1566+
bootstrapini.SetInt("NDS-BOOTSTRAP", "REMAPPED_KEY_RIGHT", perGameSettings_remappedKeys[4]);
1567+
bootstrapini.SetInt("NDS-BOOTSTRAP", "REMAPPED_KEY_LEFT", perGameSettings_remappedKeys[5]);
1568+
bootstrapini.SetInt("NDS-BOOTSTRAP", "REMAPPED_KEY_UP", perGameSettings_remappedKeys[6]);
1569+
bootstrapini.SetInt("NDS-BOOTSTRAP", "REMAPPED_KEY_DOWN", perGameSettings_remappedKeys[7]);
1570+
bootstrapini.SetInt("NDS-BOOTSTRAP", "REMAPPED_KEY_R", perGameSettings_remappedKeys[8]);
1571+
bootstrapini.SetInt("NDS-BOOTSTRAP", "REMAPPED_KEY_L", perGameSettings_remappedKeys[9]);
1572+
bootstrapini.SetInt("NDS-BOOTSTRAP", "REMAPPED_KEY_X", perGameSettings_remappedKeys[10]);
1573+
bootstrapini.SetInt("NDS-BOOTSTRAP", "REMAPPED_KEY_Y", perGameSettings_remappedKeys[11]);
1574+
15611575
displayDiskIcon(!sdFound());
15621576
bootstrapini.SaveIniFile(bootstrapinipath);
15631577
displayDiskIcon(false);
@@ -1868,6 +1882,20 @@ int akTheme(void) {
18681882
bootstrapini.SetInt("NDS-BOOTSTRAP", "LOGGING", bootstrapiniSD.GetInt("NDS-BOOTSTRAP", "LOGGING", 0));
18691883
}
18701884
bootstrapini.SetInt("NDS-BOOTSTRAP", "SAVE_RELOCATION", perGameSettings_saveRelocation == -1 ? ms().saveRelocation : perGameSettings_saveRelocation);
1885+
1886+
bootstrapini.SetInt("NDS-BOOTSTRAP", "REMAPPED_KEY_A", perGameSettings_remappedKeys[0]);
1887+
bootstrapini.SetInt("NDS-BOOTSTRAP", "REMAPPED_KEY_B", perGameSettings_remappedKeys[1]);
1888+
bootstrapini.SetInt("NDS-BOOTSTRAP", "REMAPPED_KEY_SELECT", perGameSettings_remappedKeys[2]);
1889+
bootstrapini.SetInt("NDS-BOOTSTRAP", "REMAPPED_KEY_START", perGameSettings_remappedKeys[3]);
1890+
bootstrapini.SetInt("NDS-BOOTSTRAP", "REMAPPED_KEY_RIGHT", perGameSettings_remappedKeys[4]);
1891+
bootstrapini.SetInt("NDS-BOOTSTRAP", "REMAPPED_KEY_LEFT", perGameSettings_remappedKeys[5]);
1892+
bootstrapini.SetInt("NDS-BOOTSTRAP", "REMAPPED_KEY_UP", perGameSettings_remappedKeys[6]);
1893+
bootstrapini.SetInt("NDS-BOOTSTRAP", "REMAPPED_KEY_DOWN", perGameSettings_remappedKeys[7]);
1894+
bootstrapini.SetInt("NDS-BOOTSTRAP", "REMAPPED_KEY_R", perGameSettings_remappedKeys[8]);
1895+
bootstrapini.SetInt("NDS-BOOTSTRAP", "REMAPPED_KEY_L", perGameSettings_remappedKeys[9]);
1896+
bootstrapini.SetInt("NDS-BOOTSTRAP", "REMAPPED_KEY_X", perGameSettings_remappedKeys[10]);
1897+
bootstrapini.SetInt("NDS-BOOTSTRAP", "REMAPPED_KEY_Y", perGameSettings_remappedKeys[11]);
1898+
18711899
displayDiskIcon(!sys().isRunFromSD());
18721900
bootstrapini.SaveIniFile( bootstrapinipath );
18731901
displayDiskIcon(false);

romsel_aktheme/arm9/source/perGameSettings.cpp

Lines changed: 108 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ int perGameSettings_useBootstrap = -1;
7171
int perGameSettings_fcGameLoader = -1;
7272
int perGameSettings_fcGameLoaderCheat = -1;
7373
int perGameSettings_saveRelocation = -1;
74+
int perGameSettings_remappedKeys[12] = {0};
7475

7576
static char SET_AS_DONOR_ROM[32];
7677

@@ -89,7 +90,7 @@ char gameTIDText[16];
8990

9091
static int firstPerGameOpShown = 0;
9192
static int perGameOps = -1;
92-
static int perGameOp[18] = {-1};
93+
static int perGameOp[19] = {-1};
9394

9495
bool blacklisted_colorLut = false;
9596
bool blacklisted_boostCpu = false;
@@ -122,6 +123,19 @@ void loadPerGameSettings (std::string filename) {
122123
perGameSettings_fcGameLoader = pergameini.GetInt("GAMESETTINGS", "FC_GAME_LOADER", -1);
123124
perGameSettings_fcGameLoaderCheat = perGameSettings_fcGameLoader;
124125
perGameSettings_saveRelocation = pergameini.GetInt("GAMESETTINGS", "SAVE_RELOCATION", -1);
126+
127+
perGameSettings_remappedKeys[0] = pergameini.GetInt("GAMESETTINGS", "REMAPPED_KEY_A", 0);
128+
perGameSettings_remappedKeys[1] = pergameini.GetInt("GAMESETTINGS", "REMAPPED_KEY_B", 1);
129+
perGameSettings_remappedKeys[2] = pergameini.GetInt("GAMESETTINGS", "REMAPPED_KEY_SELECT", 2);
130+
perGameSettings_remappedKeys[3] = pergameini.GetInt("GAMESETTINGS", "REMAPPED_KEY_START", 3);
131+
perGameSettings_remappedKeys[4] = pergameini.GetInt("GAMESETTINGS", "REMAPPED_KEY_RIGHT", 4);
132+
perGameSettings_remappedKeys[5] = pergameini.GetInt("GAMESETTINGS", "REMAPPED_KEY_LEFT", 5);
133+
perGameSettings_remappedKeys[6] = pergameini.GetInt("GAMESETTINGS", "REMAPPED_KEY_UP", 6);
134+
perGameSettings_remappedKeys[7] = pergameini.GetInt("GAMESETTINGS", "REMAPPED_KEY_DOWN", 7);
135+
perGameSettings_remappedKeys[8] = pergameini.GetInt("GAMESETTINGS", "REMAPPED_KEY_R", 8);
136+
perGameSettings_remappedKeys[9] = pergameini.GetInt("GAMESETTINGS", "REMAPPED_KEY_L", 9);
137+
perGameSettings_remappedKeys[10] = pergameini.GetInt("GAMESETTINGS", "REMAPPED_KEY_X", 10);
138+
perGameSettings_remappedKeys[11] = pergameini.GetInt("GAMESETTINGS", "REMAPPED_KEY_Y", 11);
125139
}
126140

127141
void savePerGameSettings (std::string filename) {
@@ -181,6 +195,19 @@ void savePerGameSettings (std::string filename) {
181195
pergameini.SetInt("GAMESETTINGS", "DSIWARE_BOOTER", perGameSettings_dsiwareBooter);
182196
}
183197
pergameini.SetInt("GAMESETTINGS", "SAVE_RELOCATION", perGameSettings_saveRelocation);
198+
199+
pergameini.SetInt("GAMESETTINGS", "REMAPPED_KEY_A", perGameSettings_remappedKeys[0]);
200+
pergameini.SetInt("GAMESETTINGS", "REMAPPED_KEY_B", perGameSettings_remappedKeys[1]);
201+
pergameini.SetInt("GAMESETTINGS", "REMAPPED_KEY_SELECT", perGameSettings_remappedKeys[2]);
202+
pergameini.SetInt("GAMESETTINGS", "REMAPPED_KEY_START", perGameSettings_remappedKeys[3]);
203+
pergameini.SetInt("GAMESETTINGS", "REMAPPED_KEY_RIGHT", perGameSettings_remappedKeys[4]);
204+
pergameini.SetInt("GAMESETTINGS", "REMAPPED_KEY_LEFT", perGameSettings_remappedKeys[5]);
205+
pergameini.SetInt("GAMESETTINGS", "REMAPPED_KEY_UP", perGameSettings_remappedKeys[6]);
206+
pergameini.SetInt("GAMESETTINGS", "REMAPPED_KEY_DOWN", perGameSettings_remappedKeys[7]);
207+
pergameini.SetInt("GAMESETTINGS", "REMAPPED_KEY_R", perGameSettings_remappedKeys[8]);
208+
pergameini.SetInt("GAMESETTINGS", "REMAPPED_KEY_L", perGameSettings_remappedKeys[9]);
209+
pergameini.SetInt("GAMESETTINGS", "REMAPPED_KEY_X", perGameSettings_remappedKeys[10]);
210+
pergameini.SetInt("GAMESETTINGS", "REMAPPED_KEY_Y", perGameSettings_remappedKeys[11]);
184211
}
185212
pergameini.SaveIniFile( pergamefilepath );
186213
}
@@ -354,6 +381,75 @@ const char* getRegionString(char region) {
354381
return "N/A";
355382
}
356383

384+
std::string keyText[12] = {"", "", "SELECT", "START", "Right", "Left", "Up", "Down", "", "", "", ""};
385+
386+
void remapButtons (void) {
387+
int pressed = 0, held = 0;
388+
int firstShown = 0;
389+
int remapButtons_cursorPosition = 0;
390+
int perGameOpXpos = 24;
391+
392+
int oldDialogboxHeight = dialogboxHeight;
393+
dialogboxHeight = 5;
394+
395+
while (1) {
396+
int perGameOpYpos = 90;
397+
398+
clearText(false);
399+
printSmall(false, 0, 74, "Remap Buttons", Alignment::center, FontPalette::formTitleText);
400+
printSmall(false, 0, 166, " Back", Alignment::center, FontPalette::formText);
401+
402+
for (int i = firstShown; i < firstShown+6; i++) {
403+
const FontPalette highlighted = (i == remapButtons_cursorPosition) ? FontPalette::user : FontPalette::formText;
404+
printSmall(false, perGameOpXpos, perGameOpYpos, keyText[i], Alignment::left, highlighted);
405+
printSmall(false, 0, perGameOpYpos, "->", Alignment::center, highlighted);
406+
printSmall(false, 256-perGameOpXpos, perGameOpYpos, keyText[perGameSettings_remappedKeys[i]], Alignment::right, highlighted);
407+
perGameOpYpos += 12;
408+
}
409+
410+
updateText(false);
411+
412+
do {
413+
scanKeys();
414+
pressed = keysDown();
415+
held = keysDownRepeat();
416+
bgOperations(true);
417+
} while (!held);
418+
419+
if (held & KEY_UP) {
420+
remapButtons_cursorPosition--;
421+
if (remapButtons_cursorPosition < 0) {
422+
remapButtons_cursorPosition = 11;
423+
firstShown = 11-5;
424+
} else if (remapButtons_cursorPosition < firstShown) {
425+
firstShown--;
426+
}
427+
}
428+
if (held & KEY_DOWN) {
429+
remapButtons_cursorPosition++;
430+
if (remapButtons_cursorPosition > 11) {
431+
remapButtons_cursorPosition = 0;
432+
firstShown = 0;
433+
} else if (remapButtons_cursorPosition > firstShown+5) {
434+
firstShown++;
435+
}
436+
}
437+
438+
if (held & KEY_LEFT) {
439+
perGameSettings_remappedKeys[remapButtons_cursorPosition]--;
440+
if (perGameSettings_remappedKeys[remapButtons_cursorPosition] < 0) perGameSettings_remappedKeys[remapButtons_cursorPosition] = 11;
441+
} else if ((pressed & KEY_A) || (held & KEY_RIGHT)) {
442+
perGameSettings_remappedKeys[remapButtons_cursorPosition]++;
443+
if (perGameSettings_remappedKeys[remapButtons_cursorPosition] > 11) perGameSettings_remappedKeys[remapButtons_cursorPosition] = 0;
444+
}
445+
if (pressed & KEY_B) {
446+
break;
447+
}
448+
}
449+
450+
dialogboxHeight = oldDialogboxHeight;
451+
}
452+
357453
void perGameSettings (std::string filename) {
358454
if (ms().macroMode) {
359455
lcdMainOnBottom();
@@ -526,7 +622,7 @@ void perGameSettings (std::string filename) {
526622

527623
firstPerGameOpShown = 0;
528624
perGameOps = -1;
529-
for (int i = 0; i < 17; i++) {
625+
for (int i = 0; i < 19; i++) {
530626
perGameOp[i] = -1;
531627
}
532628
if (isHomebrew[cursorPosOnScreen]) { // Per-game settings for homebrew
@@ -598,6 +694,8 @@ void perGameSettings (std::string filename) {
598694
}
599695
perGameOps++;
600696
perGameOp[perGameOps] = 7; // Bootstrap
697+
perGameOps++;
698+
perGameOp[perGameOps] = 18; // Remap Buttons
601699
if (((dsiFeatures() && sdFound()) || !ms().secondaryDevice) && ms().consoleModel >= 2 && (!isDSiMode() || !sys().arm7SCFGLocked()) && widescreenFound) {
602700
perGameOps++;
603701
perGameOp[perGameOps] = 8; // Screen Aspect Ratio
@@ -661,6 +759,8 @@ void perGameSettings (std::string filename) {
661759
}
662760
perGameOps++;
663761
perGameOp[perGameOps] = 7; // Bootstrap
762+
perGameOps++;
763+
perGameOp[perGameOps] = 18; // Remap Buttons
664764
if (((dsiFeatures() && sdFound()) || !ms().secondaryDevice) && widescreenFound) {
665765
perGameOps++;
666766
perGameOp[perGameOps] = 8; // Screen Aspect Ratio
@@ -958,6 +1058,9 @@ void perGameSettings (std::string filename) {
9581058
printSmall(false, 256-perGameOpXpos, perGameOpYpos, "Game Card", Alignment::right, highlighted);
9591059
}
9601060
break;
1061+
case 18:
1062+
printSmall(false, 0, perGameOpYpos, "Remap Buttons", Alignment::center, highlighted);
1063+
break;
9611064
}
9621065
perGameOpYpos += 12;
9631066
}
@@ -1221,6 +1324,9 @@ void perGameSettings (std::string filename) {
12211324
perGameSettings_saveRelocation--;
12221325
if (perGameSettings_saveRelocation < -1) perGameSettings_saveRelocation = 1;
12231326
break;
1327+
case 18:
1328+
if (pressed & KEY_A) remapButtons();
1329+
break;
12241330
}
12251331
perGameSettingsChanged = true;
12261332
}

romsel_aktheme/arm9/source/perGameSettings.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ extern int perGameSettings_useBootstrap;
2525
extern int perGameSettings_fcGameLoader;
2626
extern int perGameSettings_fcGameLoaderCheat;
2727
extern int perGameSettings_saveRelocation;
28+
extern int perGameSettings_remappedKeys[12];
2829

2930
void loadPerGameSettings(std::string filename);
3031
void savePerGameSettings(std::string filename);

0 commit comments

Comments
 (0)