1 #ifndef LIBRETRO_CORE_OPTIONS_H__
2 #define LIBRETRO_CORE_OPTIONS_H__
8 #include <retro_inline.h>
15 ********************************
16 * Core Option Definitions
17 ********************************
20 /* RETRO_LANGUAGE_ENGLISH */
23 * - All other languages must include the same keys and values
24 * - Will be used as a fallback in the event that frontend language
26 * - Will be used as a fallback for any missing entries in
27 * frontend language definition
31 #define PSX_CLOCK_DEFAULT "50"
32 #define PSX_CLOCK_LABEL "Overclock or underclock the PSX clock. Default is 50"
34 #define PSX_CLOCK_DEFAULT "57"
35 #define PSX_CLOCK_LABEL "Overclock or underclock the PSX clock. Default is 57"
38 struct retro_core_option_definition option_defs_us[] = {
40 "pcsx_rearmed_frameskip",
42 "Choose how much frames should be skipped to improve performance at the expense of visual smoothness.",
55 "Allows you to use real bios file (if available) or emulated bios (HLE). Its recommended to use official bios file for better compatibility.",
64 "pcsx_rearmed_region",
66 "Choose what region the system is from. 60 Hz for NTSC, 50 Hz for PAL.",
76 "pcsx_rearmed_memcard2",
77 "Enable Second Memory Card (Shared)",
78 "Enabled the memory card slot 2. This memory card is shared amongst all games.",
87 "pcsx_rearmed_pad1type",
89 "Pad type for player 1",
93 { "dualshock", NULL },
101 "pcsx_rearmed_pad2type",
103 "Pad type for player 2",
105 { "standard", NULL },
107 { "dualshock", NULL },
115 "pcsx_rearmed_pad3type",
117 "Pad type for player 3",
119 { "standard", NULL },
121 { "dualshock", NULL },
129 "pcsx_rearmed_pad4type",
131 "Pad type for player 4",
133 { "standard", NULL },
135 { "dualshock", NULL },
143 "pcsx_rearmed_pad5type",
145 "Pad type for player 5",
147 { "standard", NULL },
149 { "dualshock", NULL },
156 "pcsx_rearmed_pad6type",
158 "Pad type for player 6",
160 { "standard", NULL },
162 { "dualshock", NULL },
169 "pcsx_rearmed_pad7type",
171 "Pad type for player 7",
173 { "standard", NULL },
175 { "dualshock", NULL },
182 "pcsx_rearmed_pad8type",
184 "Pad type for player 8",
186 { "standard", NULL },
188 { "dualshock", NULL },
196 "pcsx_rearmed_multitap1",
198 "Enables/Disables multitap on port 1, allowing upto 5 players in games that permit it.",
201 { "disabled", NULL },
208 "pcsx_rearmed_multitap2",
210 "Enables/Disables multitap on port 2, allowing up to 8 players in games that permit it. Multitap 1 has to be enabled for this to work.",
213 { "disabled", NULL },
220 "pcsx_rearmed_negcon_deadzone",
221 "NegCon Twist Deadzone (Percent)",
222 "Sets the deadzone of the RetroPad left analog stick when simulating the 'twist' action of emulated neGcon Controllers. Used to eliminate drift/unwanted input.",
236 "pcsx_rearmed_negcon_response",
237 "NegCon Twist Response",
238 "Specifies the analog response when using a RetroPad left analog stick to simulate the 'twist' action of emulated neGcon Controllers.",
241 { "quadratic", NULL },
248 "pcsx_rearmed_vibration",
250 "Enables vibration feedback for controllers that supports vibration features.",
252 { "disabled", NULL },
259 "pcsx_rearmed_dithering",
261 "If Off, disables the dithering pattern the PSX applies to combat color banding.",
263 { "disabled", NULL },
273 "Dynamic Recompiler",
274 "Enables core to use dynamic recompiler or interpreter (slower) CPU instructions.",
276 { "disabled", NULL },
283 "pcsx_rearmed_psxclock",
362 #endif /* DRC_DISABLE */
366 "pcsx_rearmed_neon_interlace_enable",
367 "Enable Interlacing Mode",
368 "Enables fake scanlines effect.",
370 { "disabled", NULL },
377 "pcsx_rearmed_neon_enhancement_enable",
378 "Enhanced Resolution (Slow)",
379 "Renders in double resolution at the cost of lower performance.",
381 { "disabled", NULL },
388 "pcsx_rearmed_neon_enhancement_no_main",
389 "Enhanced Resolution (Speed Hack)",
390 "Speed hack for Enhanced resolution option (glitches some games).",
392 { "disabled", NULL },
398 #endif /* __ARM_NEON__ */
401 "pcsx_rearmed_duping_enable",
403 "A speedup, redraws/reuses the last frame if there was no new data.",
405 { "disabled", NULL },
412 "pcsx_rearmed_display_internal_fps",
413 "Display Internal FPS",
414 "Shows an on-screen frames per second counter when enabled.",
416 { "disabled", NULL },
423 /* GPU PEOPS OPTIONS */
426 "pcsx_rearmed_show_gpu_peops_settings",
427 "Advanced GPU P.E.Op.S. Settings",
428 "Shows or hides advanced GPU plugin settings. NOTE: Quick Menu must be toggled for this setting to take effect.",
430 { "disabled", NULL },
437 "pcsx_rearmed_gpu_peops_fix_0",
438 "(GPU) Odd/Even Bit Hack",
439 "Needed for Chrono Cross.",
441 { "disabled", NULL },
448 "pcsx_rearmed_gpu_peops_fix_1",
449 "(GPU) Expand Screen Width",
450 "Capcom fighting games",
452 { "disabled", NULL },
459 "pcsx_rearmed_gpu_peops_fix_2",
460 "(GPU) Ignore Brightness Color",
461 "Black screens in Lunar Silver Star Story games",
463 { "disabled", NULL },
470 "pcsx_rearmed_gpu_peops_fix_3",
471 "(GPU) Disable Coordinate Check",
472 "Compatibility mode",
474 { "disabled", NULL },
481 "pcsx_rearmed_gpu_peops_fix_6",
482 "(GPU) Lazy Screen Update",
485 { "disabled", NULL },
492 "pcsx_rearmed_gpu_peops_fix_7",
493 "(GPU) Old Frame Skipping",
494 "Skip every second frame",
496 { "disabled", NULL },
503 "pcsx_rearmed_gpu_peops_fix_8",
504 "(GPU) Repeated Flat Tex Triangles",
505 "Needed by Star Wars: Dark Forces",
507 { "disabled", NULL },
514 "pcsx_rearmed_gpu_peops_fix_9",
515 "(GPU) Draw Quads with Triangles",
516 "Better g-colors, worse textures",
518 { "disabled", NULL },
525 "pcsx_rearmed_gpu_peops_fix_10",
526 "(GPU) Fake 'Gpu Busy' States",
527 "Toggle busy flags after drawing",
529 { "disabled", NULL },
537 /* GPU UNAI Advanced Options */
540 "pcsx_rearmed_show_gpu_unai_settings",
541 "Advance GPU UNAI/PCSX4All Settings",
542 "Shows or hides advanced gpu settings. A core restart might be needed for settings to take effect. NOTE: Quick Menu must be toggled for this setting to take effect.",
544 { "disabled", NULL },
551 "pcsx_rearmed_gpu_unai_blending",
552 "(GPU) Enable Blending",
555 { "disabled", NULL },
562 "pcsx_rearmed_gpu_unai_lighting",
563 "(GPU) Enable Lighting",
566 { "disabled", NULL },
573 "pcsx_rearmed_gpu_unai_fast_lighting",
574 "(GPU) Enable Fast Lighting",
577 { "disabled", NULL },
584 "pcsx_rearmed_gpu_unai_ilace_force",
585 "(GPU) Enable Forced Interlace",
588 { "disabled", NULL },
595 "pcsx_rearmed_gpu_unai_pixel_skip",
596 "(GPU) Enable Pixel Skip",
599 { "disabled", NULL },
605 #endif /* GPU UNAI Advanced Settings */
608 "pcsx_rearmed_show_bios_bootlogo",
609 "Show Bios Bootlogo",
610 "When enabled, shows the PlayStation logo when starting or resetting. (Breaks some games).",
612 { "disabled", NULL },
619 "pcsx_rearmed_spu_reverb",
621 "Enables or disables audio reverb effect.",
623 { "disabled", NULL },
630 "pcsx_rearmed_spu_interpolation",
631 "Sound Interpolation",
635 { "gaussian", NULL },
643 "pcsx_rearmed_idiablofix",
647 { "disabled", NULL },
654 "pcsx_rearmed_pe2_fix",
655 "Parasite Eve 2/Vandal Hearts 1/2 Fix",
658 { "disabled", NULL },
665 "pcsx_rearmed_inuyasha_fix",
666 "InuYasha Sengoku Battle Fix",
669 { "disabled", NULL },
676 /* ADVANCED OPTIONS */
678 "pcsx_rearmed_noxadecoding",
682 { "disabled", NULL },
689 "pcsx_rearmed_nocdaudio",
693 { "disabled", NULL },
702 "pcsx_rearmed_nosmccheck",
703 "(Speed Hack) Disable SMC Checks",
704 "Will cause crashes when loading, break memcards.",
706 { "disabled", NULL },
713 "pcsx_rearmed_gteregsunneeded",
714 "(Speed Hack) Assume GTE Regs Unneeded",
715 "May cause graphical glitches.",
717 { "disabled", NULL },
724 "pcsx_rearmed_nogteflags",
725 "(Speed Hack) Disable GTE Flags",
726 "Will cause graphical glitches.",
728 { "disabled", NULL },
734 #endif /* DRC_DISABLE */
736 { NULL, NULL, NULL, { {0} }, NULL },
739 /* RETRO_LANGUAGE_JAPANESE */
741 /* RETRO_LANGUAGE_FRENCH */
743 /* RETRO_LANGUAGE_SPANISH */
745 /* RETRO_LANGUAGE_GERMAN */
747 /* RETRO_LANGUAGE_ITALIAN */
749 /* RETRO_LANGUAGE_DUTCH */
751 /* RETRO_LANGUAGE_PORTUGUESE_BRAZIL */
753 /* RETRO_LANGUAGE_PORTUGUESE_PORTUGAL */
755 /* RETRO_LANGUAGE_RUSSIAN */
757 /* RETRO_LANGUAGE_KOREAN */
759 /* RETRO_LANGUAGE_CHINESE_TRADITIONAL */
761 /* RETRO_LANGUAGE_CHINESE_SIMPLIFIED */
763 /* RETRO_LANGUAGE_ESPERANTO */
765 /* RETRO_LANGUAGE_POLISH */
767 /* RETRO_LANGUAGE_VIETNAMESE */
769 /* RETRO_LANGUAGE_ARABIC */
771 /* RETRO_LANGUAGE_GREEK */
773 /* RETRO_LANGUAGE_TURKISH */
775 struct retro_core_option_definition option_defs_tr[] = {
777 "pcsx_rearmed_frameskip",
779 "Görsel pürüzsüzlük pahasına performansı artırmak için ne kadar karenin atlanması gerektiğini seçin.",
788 "Gerçek bios dosyasını (varsa) veya öykünmüş bios'u (HLE) kullanmanızı sağlar. Daha iyi uyumluluk için resmi bios dosyasını kullanmanız önerilir.",
790 { "auto", "otomatik" },
797 "pcsx_rearmed_region",
799 "Sistemin hangi bölgeden olduğunu seçin. NTSC için 60 Hz, PAL için 50 Hz.",
801 { "auto", "otomatik" },
809 "pcsx_rearmed_memcard2",
810 "İkinci Bellek Kartını Etkinleştir (Paylaşılan)",
811 "2. Hafıza kartı yuvasını etkinleştirin. Bu hafıza kartı tüm oyunlar arasında paylaşılır.",
818 "pcsx_rearmed_pad1type",
820 "1. Oyuncu için kontrolör tipi",
822 { "standard", NULL },
824 { "dualshock", NULL },
826 { "none", "hiçbiri" },
832 "pcsx_rearmed_pad2type",
834 "2. Oyuncu için kontrolör tipi",
836 { "standard", NULL },
838 { "dualshock", NULL },
840 { "none", "hiçbiri" },
846 "pcsx_rearmed_pad3type",
848 "3. Oyuncu için kontrolör tipi",
850 { "standard", NULL },
852 { "dualshock", NULL },
854 { "none", "hiçbiri" },
860 "pcsx_rearmed_pad4type",
862 "4. Oyuncu için kontrolör tipi",
864 { "standard", NULL },
866 { "dualshock", NULL },
868 { "none", "hiçbiri" },
874 "pcsx_rearmed_pad5type",
876 "5. Oyuncu için kontrolör tipi",
878 { "standard", NULL },
880 { "dualshock", NULL },
882 { "none", "hiçbiri" },
887 "pcsx_rearmed_pad6type",
889 "6. Oyuncu için kontrolör tipi",
891 { "standard", NULL },
893 { "dualshock", NULL },
895 { "none", "hiçbiri" },
900 "pcsx_rearmed_pad7type",
902 "7. Oyuncu için kontrolör tipi",
904 { "standard", NULL },
906 { "dualshock", NULL },
908 { "none", "hiçbiri" },
913 "pcsx_rearmed_pad8type",
915 "8. Oyuncu için kontrolör tipi",
917 { "standard", NULL },
919 { "dualshock", NULL },
921 { "none", "hiçbiri" },
927 "pcsx_rearmed_multitap1",
929 "Bağlantı noktası 1'deki multitap'ı etkinleştirir / devre dışı bırakır ve izin veren oyunlarda 5 oyuncuya kadar izin verir.",
931 { "auto", "otomatik" },
932 { "disabled", NULL },
939 "pcsx_rearmed_multitap2",
941 "Bağlantı noktası 2'deki multitap'ı etkinleştirir/devre dışı bırakır ve izin veren oyunlarda 8 oyuncuya kadar izin verir. Bunun çalışması için Multitap 1'in etkinleştirilmesi gerekir.",
943 { "auto", "otomatik" },
944 { "disabled", NULL },
951 "pcsx_rearmed_negcon_deadzone",
952 "NegCon Twist Deadzone (Yüzdelik)",
953 "Öykünülmüş neGcon kontrolörünün 'büküm' eylemini simüle ederken RetroPad sol analog çubuğunun ölü bölgesini ayarlar. Sürüklenme/istenmeyen girişi ortadan kaldırmak için kullanılır.",
960 "pcsx_rearmed_negcon_response",
961 "NegCon Twist Response",
962 "Öykünülmüş neGcon kontrolörünün 'bükümünü' simule etmek için bir RetroPad sol analog çubuğu kullanırken analog cevabını belirtir.",
969 "pcsx_rearmed_vibration",
970 "Titreşimi Etkinleştir",
971 "Titreşim özelliklerini destekleyen kontrolörler için titreşim geri bildirimini etkinleştirir.",
978 "pcsx_rearmed_dithering",
979 "Dithering Etkinleştir",
980 "Kapalı ise, PSX'in renk bantlarıyla mücadele etmek için uyguladığı renk taklidi düzenini devre dışı bırakır.",
990 "Dinamik Yeniden Derleyici",
991 "Çekirdeğin dinamik yeniden derleyici veya tercüman(daha yavaş) CPU talimatlarını kullanmasını sağlar.",
998 "pcsx_rearmed_psxclock",
1006 #endif /* DRC_DISABLE */
1010 "pcsx_rearmed_neon_interlace_enable",
1011 "Interlacing Mode'u etkinleştir",
1012 "Sahte tarama çizgileri efektini etkinleştirir.",
1019 "pcsx_rearmed_neon_enhancement_enable",
1020 "Geliştirilmiş Çözünürlük (Yavaş)",
1021 "Düşük performans pahasına çift çözünürlükte işler.",
1028 "pcsx_rearmed_neon_enhancement_no_main",
1029 "Geliştirilmiş Çözünürlük (Speed Hack)",
1030 "Geliştirilmiş çözünürlük seçeneği için hız aşırtma(bazı oyunlarda sorun çıkartabilir).",
1036 #endif /* __ARM_NEON__ */
1039 "pcsx_rearmed_duping_enable",
1041 "Yeni bir veri yoksa, bir hızlandırma, son kareyi yeniden çizer/yeniden kullanır.",
1048 "pcsx_rearmed_display_internal_fps",
1049 "Dahili FPS'yi görüntüle",
1050 "Etkinleştirildiğinde ekranda saniye başına kareyi gösterir.",
1057 /* GPU PEOPS OPTIONS */
1060 "pcsx_rearmed_show_gpu_peops_settings",
1061 "Gelişmiş GPU Ayarlarını Göster",
1062 "Çeşitli GPU düzeltmelerini etkinleştirin veya devre dışı bırakın. Ayarların etkili olması için core'un yeniden başlatılması gerekebilir. NOT: Bu ayarın etkili olabilmesi için Hızlı Menü’nün değiştirilmesi gerekir.",
1069 "pcsx_rearmed_gpu_peops_fix_0",
1070 "(GPU) Odd/Even Bit Hack",
1071 "Chrono Cross için gerekli.",
1078 "pcsx_rearmed_gpu_peops_fix_1",
1079 "(GPU) Ekran Genişliğini Genişlet",
1080 "Capcom dövüş oyunları",
1087 "pcsx_rearmed_gpu_peops_fix_2",
1088 "(GPU) Parlaklık Rengini Yoksay",
1089 "Lunar Silver Star Story oyunlarında siyah ekran",
1096 "pcsx_rearmed_gpu_peops_fix_3",
1097 "(GPU) Koordinat Kontrolünü Devre Dışı Bırak",
1105 "pcsx_rearmed_gpu_peops_fix_6",
1106 "(GPU) Tembel Ekran Güncellemesi",
1114 "pcsx_rearmed_gpu_peops_fix_7",
1115 "(GPU) Eski Çerçeve Atlama",
1116 "Her ikinci kareyi atla",
1123 "pcsx_rearmed_gpu_peops_fix_8",
1124 "(GPU) Tekrarlanan Düz Doku Üçgenleri",
1125 "Star Wars: Dark Forces için gerekli",
1132 "pcsx_rearmed_gpu_peops_fix_9",
1133 "(GPU) Üçgenler ile Dörtlü Çiz",
1134 "Daha iyi g renkler, daha kötü dokular",
1141 "pcsx_rearmed_gpu_peops_fix_10",
1142 "(GPU) Sahte 'Gpu Meşgul' Konumları",
1143 "Çizimden sonra meşgul bayraklarını değiştir",
1152 "pcsx_rearmed_show_bios_bootlogo",
1153 "Bios Bootlogo'yu Göster",
1154 "Etkinleştirildiğinde, başlatırken veya sıfırlarken PlayStation logosunu gösterir. (Bazı oyunları bozabilir).",
1161 "pcsx_rearmed_spu_reverb",
1163 "Ses yankı efektini etkinleştirir veya devre dışı bırakır.",
1170 "pcsx_rearmed_spu_interpolation",
1171 "Ses Enterpolasyonu",
1179 "pcsx_rearmed_idiablofix",
1180 "Diablo Müzik Düzeltmesi",
1188 "pcsx_rearmed_pe2_fix",
1189 "Parasite Eve 2/Vandal Hearts 1/2 Düzeltmleri",
1197 "pcsx_rearmed_inuyasha_fix",
1198 "InuYasha Sengoku Battle Düzeltmesi",
1206 /* ADVANCED OPTIONS */
1208 "pcsx_rearmed_noxadecoding",
1217 "pcsx_rearmed_nocdaudio",
1228 "pcsx_rearmed_nosmccheck",
1229 "(Speed Hack) SMC Kontrollerini Devre Dışı Bırak",
1230 "Yükleme sırasında çökmelere neden olabilir, hafıza kartını bozabilir.",
1237 "pcsx_rearmed_gteregsunneeded",
1238 "(Speed Hack) GTE'nin Gereksiz Olduğunu Varsayın",
1239 "Grafiksel bozukluklara neden olabilir.",
1246 "pcsx_rearmed_nogteflags",
1247 "(Speed Hack) GTE Bayraklarını Devredışı Bırakın",
1248 "Grafiksel bozukluklara neden olur.",
1254 #endif /* DRC_DISABLE */
1256 { NULL, NULL, NULL, { {0} }, NULL },
1261 ********************************
1263 ********************************
1266 struct retro_core_option_definition *option_defs_intl[RETRO_LANGUAGE_LAST] = {
1267 option_defs_us, /* RETRO_LANGUAGE_ENGLISH */
1268 NULL, /* RETRO_LANGUAGE_JAPANESE */
1269 NULL, /* RETRO_LANGUAGE_FRENCH */
1270 NULL, /* RETRO_LANGUAGE_SPANISH */
1271 NULL, /* RETRO_LANGUAGE_GERMAN */
1272 NULL, /* RETRO_LANGUAGE_ITALIAN */
1273 NULL, /* RETRO_LANGUAGE_DUTCH */
1274 NULL, /* RETRO_LANGUAGE_PORTUGUESE_BRAZIL */
1275 NULL, /* RETRO_LANGUAGE_PORTUGUESE_PORTUGAL */
1276 NULL, /* RETRO_LANGUAGE_RUSSIAN */
1277 NULL, /* RETRO_LANGUAGE_KOREAN */
1278 NULL, /* RETRO_LANGUAGE_CHINESE_TRADITIONAL */
1279 NULL, /* RETRO_LANGUAGE_CHINESE_SIMPLIFIED */
1280 NULL, /* RETRO_LANGUAGE_ESPERANTO */
1281 NULL, /* RETRO_LANGUAGE_POLISH */
1282 NULL, /* RETRO_LANGUAGE_VIETNAMESE */
1283 NULL, /* RETRO_LANGUAGE_ARABIC */
1284 NULL, /* RETRO_LANGUAGE_GREEK */
1285 option_defs_tr, /* RETRO_LANGUAGE_TURKISH */
1289 ********************************
1291 ********************************
1294 /* Handles configuration/setting of core options.
1295 * Should only be called inside retro_set_environment().
1296 * > We place the function body in the header to avoid the
1297 * necessity of adding more .c files (i.e. want this to
1298 * be as painless as possible for core devs)
1301 static INLINE void libretro_set_core_options(retro_environment_t environ_cb)
1303 unsigned version = 0;
1308 if (environ_cb(RETRO_ENVIRONMENT_GET_CORE_OPTIONS_VERSION, &version) && (version == 1))
1310 struct retro_core_options_intl core_options_intl;
1311 unsigned language = 0;
1313 core_options_intl.us = option_defs_us;
1314 core_options_intl.local = NULL;
1316 if (environ_cb(RETRO_ENVIRONMENT_GET_LANGUAGE, &language) &&
1317 (language < RETRO_LANGUAGE_LAST) && (language != RETRO_LANGUAGE_ENGLISH))
1318 core_options_intl.local = option_defs_intl[language];
1320 environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_INTL, &core_options_intl);
1325 size_t option_index = 0;
1326 size_t num_options = 0;
1327 struct retro_variable *variables = NULL;
1328 char **values_buf = NULL;
1330 /* Determine number of options
1331 * > Note: We are going to skip a number of irrelevant
1332 * core options when building the retro_variable array,
1333 * but we'll allocate space for all of them. The difference
1334 * in resource usage is negligible, and this allows us to
1335 * keep the code 'cleaner' */
1338 if (option_defs_us[num_options].key)
1344 /* Allocate arrays */
1345 variables = (struct retro_variable *)calloc(num_options + 1, sizeof(struct retro_variable));
1346 values_buf = (char **)calloc(num_options, sizeof(char *));
1348 if (!variables || !values_buf)
1351 /* Copy parameters from option_defs_us array */
1352 for (i = 0; i < num_options; i++)
1354 const char *key = option_defs_us[i].key;
1355 const char *desc = option_defs_us[i].desc;
1356 const char *default_value = option_defs_us[i].default_value;
1357 struct retro_core_option_value *values = option_defs_us[i].values;
1359 size_t default_index = 0;
1361 values_buf[i] = NULL;
1363 /* Skip options that are irrelevant when using the
1364 * old style core options interface */
1365 if ((strcmp(key, "pcsx_rearmed_show_gpu_peops_settings") == 0))
1370 size_t num_values = 0;
1372 /* Determine number of values */
1375 if (values[num_values].value)
1377 /* Check if this is the default value */
1379 if (strcmp(values[num_values].value, default_value) == 0)
1380 default_index = num_values;
1382 buf_len += strlen(values[num_values].value);
1389 /* Build values string */
1394 buf_len += num_values - 1;
1395 buf_len += strlen(desc);
1397 values_buf[i] = (char *)calloc(buf_len, sizeof(char));
1401 strcpy(values_buf[i], desc);
1402 strcat(values_buf[i], "; ");
1404 /* Default value goes first */
1405 strcat(values_buf[i], values[default_index].value);
1407 /* Add remaining values */
1408 for (j = 0; j < num_values; j++)
1410 if (j != default_index)
1412 strcat(values_buf[i], "|");
1413 strcat(values_buf[i], values[j].value);
1419 variables[option_index].key = key;
1420 variables[option_index].value = values_buf[i];
1425 environ_cb(RETRO_ENVIRONMENT_SET_VARIABLES, variables);
1432 for (i = 0; i < num_options; i++)
1436 free(values_buf[i]);
1437 values_buf[i] = NULL;