libretro_core_options.h 59.9 KB
Newer Older
1
2
3
4
5
6
7
8
9
#ifndef LIBRETRO_CORE_OPTIONS_H__
#define LIBRETRO_CORE_OPTIONS_H__

#include <stdlib.h>
#include <string.h>

#include <libretro.h>
#include <retro_inline.h>

jdgleaver's avatar
jdgleaver committed
10
11
12
13
14
15
16
17
#ifndef HAVE_NO_LANGEXTRA
#include "libretro_core_options_intl.h"
#endif

#include "libretro_options.h"

/*
 ********************************
18
 * VERSION: 2.0
jdgleaver's avatar
jdgleaver committed
19
20
 ********************************
 *
21
 * - 2.0: Add support for core options v2 interface
jdgleaver's avatar
jdgleaver committed
22
23
24
25
26
27
28
29
30
31
32
33
34
 * - 1.3: Move translations to libretro_core_options_intl.h
 *        - libretro_core_options_intl.h includes BOM and utf-8
 *          fix for MSVC 2010-2013
 *        - Added HAVE_NO_LANGEXTRA flag to disable translations
 *          on platforms/compilers without BOM support
 * - 1.2: Use core options v1 interface when
 *        RETRO_ENVIRONMENT_GET_CORE_OPTIONS_VERSION is >= 1
 *        (previously required RETRO_ENVIRONMENT_GET_CORE_OPTIONS_VERSION == 1)
 * - 1.1: Support generation of core options v0 retro_core_option_value
 *        arrays containing options with a single value
 * - 1.0: First commit
*/

35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#ifdef __cplusplus
extern "C" {
#endif

/*
 ********************************
 * Core Option Definitions
 ********************************
*/

/* RETRO_LANGUAGE_ENGLISH */

/* Default language:
 * - All other languages must include the same keys and values
 * - Will be used as a fallback in the event that frontend language
 *   is not available
 * - Will be used as a fallback for any missing entries in
 *   frontend language definition */

54
struct retro_core_option_v2_category option_cats_us[] = {
55
   {
56
57
58
      "video",
      "Video",
      "Configure aspect ratio / display cropping / video filter / frame skipping parameters."
59
60
   },
   {
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
      "osd",
      "Onscreen Notifications",
      "Configure onscreen notifications being shown onscreen."
   },
   {
      "input",
      "Input",
      "Configure lightgun / mouse / NegCon input."
   },
   {
      "memcards",
      "Memory Card",
      "This lets you modify settings related to the virtual Memory Card(s) used by the system."
   },
   {
      "pgxp",
      "PGXP (Precision Geometry Transform Pipeline)",
      "These options control enhancements which can improve graphics compared to the original console. PGXP can get rid of warping textures and Z-fighting issues."
79
   },
80
81
82
83
84
85
86
87
88
   {
      "hacks",
      "Emulation hacks",
      "Configure processor overclocking and emulation accuracy parameters affecting low-level performance and compatibility."
   },
   { NULL, NULL, NULL },
};

struct retro_core_option_v2_definition option_defs_us[] = {
89
90
91
   {
      BEETLE_OPT(internal_resolution),
      "Internal GPU Resolution",
92
      NULL,
ggdrt's avatar
ggdrt committed
93
      "Set internal resolution multiplier. Resolutions higher than '1x (Native)' improve fidelity of 3D models at the expense of increased performance requirements. 2D elements are generally unaffected by this setting.",
94
95
      NULL,
      "video",
96
97
98
99
100
101
102
103
      {
         { "1x(native)", "1x (Native)" },
         { "2x",         NULL },
         { "4x",         NULL },
         { "8x",         NULL },
         { "16x",        NULL },
         { NULL, NULL },
      },
Libretro-Admin's avatar
Libretro-Admin committed
104
      "1x(native)"
105
106
107
108
109
   },
#if defined(HAVE_OPENGL) || defined(HAVE_OPENGLES)
   {
      BEETLE_OPT(depth),
      "Internal Color Depth",
110
      NULL,
ggdrt's avatar
ggdrt committed
111
      "Set internal color depth. Higher color depth can reduce color banding effects without the use of dithering. 16 bpp emulates original hardware but may have visible banding if dithering is not enabled. 'Dithering Pattern' is recommended to be disabled when this option is set to 32 bpp.",
112
113
      NULL,
      "video",
114
115
116
117
118
      {
         { "16bpp(native)", "16 bpp (Native)" },
         { "32bpp",         "32 bpp" },
         { NULL, NULL },
      },
Libretro-Admin's avatar
Libretro-Admin committed
119
      "16bpp(native)"
120
   },
ggdrt's avatar
ggdrt committed
121
   // Sort of, it's more like 15-bit high color and 24-bit true color for visible output. The alpha channel is used for mask bit. Vulkan renderer uses ABGR1555_555 for 31 bits internal? FMVs are always 24-bit on all renderers like original hardware (BGR888, no alpha)
122
123
124
125
#endif
   {
      BEETLE_OPT(dither_mode),
      "Dithering Pattern",
126
      NULL,
ggdrt's avatar
ggdrt committed
127
      "Set dithering pattern configuration. '1x (Native)' emulates native low resolution dithering used by original hardware to smooth out color banding artefacts visible at native color depth. 'Internal Resolution' scales dithering granularity to the configured internal resolution for cleaner results. Recommended to be disabled when running at 32 bpp color depth. Note: On Vulkan, enabling this will force downsampling to native color depth while disabling will automatically enable output at higher color depth.",
128
129
      NULL,
      "video",
130
131
132
133
134
135
      {
         { "1x(native)",          "1x (Native)" },
         { "internal resolution", "Internal Resolution" },
         { "disabled",            NULL },
         { NULL, NULL },
      },
Libretro-Admin's avatar
Libretro-Admin committed
136
      "1x(native)"
137
   },
JS Deck's avatar
JS Deck committed
138
139
140
141
#ifdef HAVE_VULKAN
   {
      BEETLE_OPT(scaled_uv_offset),
      "Texture UV Offset",
142
      NULL,
JS Deck's avatar
JS Deck committed
143
      "Sample textures for 3D polygons at an offset for higher than 1x internal resolution. Reduce texture seams but may cause unintended graphical glitches.",
144
145
      NULL,
      "video",
JS Deck's avatar
JS Deck committed
146
147
148
149
150
      {
         { "enabled",  NULL },
         { "disabled", NULL },
         { NULL, NULL },
      },
Libretro-Admin's avatar
Libretro-Admin committed
151
      "enabled"
JS Deck's avatar
JS Deck committed
152
153
   },
#endif
154
155
156
157
#if defined(HAVE_OPENGL) || defined(HAVE_OPENGLES) || defined(HAVE_VULKAN)
   {
      BEETLE_OPT(filter),
      "Texture Filtering",
158
      NULL,
ggdrt's avatar
ggdrt committed
159
      "Select texture filtering method. 'Nearest' emulates original hardware. 'Bilinear' and '3-Point' are smoothing filters, which reduce pixelation via blurring. 'SABR', 'xBR', and 'JINC2' are upscaling filters that may improve texture fidelity/sharpness at the expense of increased performance requirements. Only supported by the hardware renderers.",
160
161
      NULL,
      "video",
162
163
164
165
166
167
168
169
170
      {
         { "nearest",  "Nearest" },
         { "SABR",     NULL },
         { "xBR",      NULL },
         { "bilinear", "Bilinear" },
         { "3-point",  "3-Point" },
         { "JINC2",    NULL },
         { NULL, NULL },
      },
Libretro-Admin's avatar
Libretro-Admin committed
171
      "nearest"
172
   },
173
174
175
176
#ifdef HAVE_VULKAN
   {
      BEETLE_OPT(filter_exclude_sprite),
      "Exclude Sprites from Filtering",
177
      NULL,
178
      "Do not apply texture filtering to sprites. Prevent seams in various games with 2D sprite-rendered backgrounds. Use together with Adaptive Smoothing or another post-processing filter for best effect.",
179
180
      NULL,
      "video",
181
182
183
184
185
186
      {
         { "disable", NULL },
         { "opaque", "Opaque Only" },
         { "all", "Opaque and Semi-Transparent" },
         { NULL, NULL },
      },
Libretro-Admin's avatar
Libretro-Admin committed
187
      "disable"
188
189
190
191
   },
   {
      BEETLE_OPT(filter_exclude_2d_polygon),
      "Exclude 2D Polygons from Filtering",
192
      NULL,
193
      "Do not apply texture filtering to 2D polygons. 2D polygons are detected with a heuristic and there may be glitches. Use together with Adaptive Smoothing or another post-processing filter for best effect.",
194
195
      NULL,
      "video",
196
197
198
199
200
201
      {
         { "disable", NULL },
         { "opaque", "Opaque Only" },
         { "all", "Opaque and Semi-Transparent" },
         { NULL, NULL },
      },
Libretro-Admin's avatar
Libretro-Admin committed
202
      "disable"
203
204
   },
#endif
205
206
207
208
#endif
#ifdef HAVE_VULKAN
   {
      BEETLE_OPT(adaptive_smoothing),
jdgleaver's avatar
jdgleaver committed
209
      "Adaptive Smoothing",
210
      NULL,
ggdrt's avatar
ggdrt committed
211
      "When enabled, smooths 2D artwork and UI elements without blurring 3D rendered objects. Only supported by the Vulkan renderer.",
212
213
      NULL,
      "video",
214
      {
jdgleaver's avatar
jdgleaver committed
215
         { "disabled", NULL },
216
         { "enabled",  NULL },
217
218
         { NULL, NULL },
      },
Libretro-Admin's avatar
Libretro-Admin committed
219
      "disabled"
220
221
222
   },
   {
      BEETLE_OPT(super_sampling),
ggdrt's avatar
ggdrt committed
223
      "Supersampling (Downsample to Native Resolution)",
224
      NULL,
ggdrt's avatar
ggdrt committed
225
      "When enabled, downsamples rendered content from upscaled internal resolution down to native resolution. Combining this with higher internal resolution multipliers allows for games to be displayed with anti-aliased 3D objects at native low resolution. Produces best results when applied to titles that mix 2D and 3D elements (e.g. 3D characters on pre-rendered backgrounds), and works well in conjunction with CRT shaders. Only supported by the Vulkan renderer. Note: 'Dithering Pattern' is recommended to be disabled when enabling this option.",
226
227
      NULL,
      "video",
228
      {
jdgleaver's avatar
jdgleaver committed
229
230
         { "disabled", NULL },
         { "enabled",  NULL },
231
232
233
234
235
236
237
         { NULL, NULL },
      },
      "disabled"
   },
   {
      BEETLE_OPT(msaa),
      "Multi-Sampled Anti Aliasing",
238
      NULL,
ggdrt's avatar
ggdrt committed
239
      "Set MSAA level for rendered content. Improves the appearance of 3D objects. Only supported by the Vulkan renderer.",
240
241
      NULL,
      "video",
242
      {
243
         { "1x",  "1x (Default)" },
jdgleaver's avatar
jdgleaver committed
244
245
246
247
         { "2x",  NULL },
         { "4x",  NULL },
         { "8x",  NULL },
         { "16x", NULL },
248
249
         { NULL, NULL },
      },
Libretro-Admin's avatar
Libretro-Admin committed
250
      "1x"
251
252
253
   },
   {
      BEETLE_OPT(mdec_yuv),
jdgleaver's avatar
jdgleaver committed
254
      "MDEC YUV Chroma Filter",
255
      NULL,
jdgleaver's avatar
jdgleaver committed
256
      "Improves the quality of FMV playback by reducing 'macroblocking' artefacts (squares/jagged edges). Only supported by the Vulkan renderer.",
257
258
      NULL,
      "video",
259
      {
jdgleaver's avatar
jdgleaver committed
260
261
         { "disabled", NULL },
         { "enabled",  NULL },
262
263
264
265
         { NULL, NULL },
      },
      "disabled"
   },
stoofin's avatar
stoofin committed
266
267
268
   {
      BEETLE_OPT(track_textures),
      "Track Textures",
269
      NULL,
stoofin's avatar
stoofin committed
270
      "Prerequisite for texture dumping and replacement.  Will probably crash in most games.",
271
272
      NULL,
      "video",
stoofin's avatar
stoofin committed
273
274
275
276
277
      {
         { "disabled", NULL },
         { "enabled",  NULL },
         { NULL, NULL },
      },
Libretro-Admin's avatar
Libretro-Admin committed
278
      "disabled"
stoofin's avatar
stoofin committed
279
   },
stoofin's avatar
stoofin committed
280
281
282
283
#ifdef TEXTURE_DUMPING_ENABLED
   {
      BEETLE_OPT(dump_textures),
      "Dump Textures",
284
      NULL,
stoofin's avatar
stoofin committed
285
      "Dumps used textures to <cd>-texture-dump/",
286
287
      NULL,
      "video",
stoofin's avatar
stoofin committed
288
289
290
291
292
      {
         { "disabled", NULL },
         { "enabled",  NULL },
         { NULL, NULL },
      },
Libretro-Admin's avatar
Libretro-Admin committed
293
      "disabled"
stoofin's avatar
stoofin committed
294
295
296
297
298
   },
#endif
   {
      BEETLE_OPT(replace_textures),
      "Replace Textures",
299
      NULL,
stoofin's avatar
stoofin committed
300
      "Replaces textures using hd versions from <cd>-texture-replacements/",
301
302
      NULL,
      "video",
stoofin's avatar
stoofin committed
303
304
305
306
307
      {
         { "disabled", NULL },
         { "enabled",  NULL },
         { NULL, NULL },
      },
Libretro-Admin's avatar
Libretro-Admin committed
308
      "disabled"
stoofin's avatar
stoofin committed
309
   },
310
311
312
313
#endif
#if defined(HAVE_OPENGL) || defined(HAVE_OPENGLES)
   {
      BEETLE_OPT(wireframe),
ggdrt's avatar
ggdrt committed
314
      "Wireframe Mode (Debug)",
315
      NULL,
ggdrt's avatar
ggdrt committed
316
      "When enabled, renders 3D models in outline form without textures or shading. Only supported by the OpenGL hardware renderer. Note: This is for debugging purposes, and should normally be disabled.",
317
318
      NULL,
      "video",
319
      {
jdgleaver's avatar
jdgleaver committed
320
         { "disabled", NULL },
321
322
323
         { "enabled",  NULL },
         { NULL, NULL },
      },
Libretro-Admin's avatar
Libretro-Admin committed
324
      "disabled"
325
   },
326
#endif
327
   {
328
329
330
331
332
333
      BEETLE_OPT(frame_duping),
      "Frame Duping (Speedup)",
      NULL,
      "When enabled and supported by the libretro frontend, provides a small performance increase by directing the frontend to repeat the previous frame if the core has nothing new to display.",
      NULL,
      "video",
334
      {
jdgleaver's avatar
jdgleaver committed
335
         { "disabled", NULL },
336
337
338
         { "enabled",  NULL },
         { NULL, NULL },
      },
Libretro-Admin's avatar
Libretro-Admin committed
339
      "disabled"
340
341
   },
   {
342
343
344
345
346
347
      BEETLE_OPT(display_internal_fps),
      "Display Internal FPS",
      NULL,
      "Display the internal frame rate at which the emulated PlayStation system is rendering content. Note: Requires onscreen notifications to be enabled in the libretro frontend.",
      NULL,
      "osd",
348
      {
349
350
         { "disabled", NULL },
         { "enabled",  NULL },
351
352
         { NULL, NULL },
      },
Libretro-Admin's avatar
Libretro-Admin committed
353
      "disabled"
354
   },
355
#if defined(HAVE_OPENGL) || defined(HAVE_OPENGLES) || defined(HAVE_VULKAN)
JS Deck's avatar
JS Deck committed
356
   {
357
358
359
360
361
362
      BEETLE_OPT(display_vram),
      "Display Full VRAM (Debug)",
      NULL,
      "When enabled, visualises the entire emulated console's VRAM. Only supported by the OpenGL and Vulkan hardware renderers. Note: This is for debugging purposes, and should normally be disabled.",
      NULL,
      "osd",
JS Deck's avatar
JS Deck committed
363
364
      {
         { "disabled", NULL },
365
         { "enabled",  NULL },
JS Deck's avatar
JS Deck committed
366
367
         { NULL, NULL },
      },
Libretro-Admin's avatar
Libretro-Admin committed
368
      "disabled"
JS Deck's avatar
JS Deck committed
369
   },
370
#endif
JS Deck's avatar
JS Deck committed
371
   {
372
373
374
375
376
377
      BEETLE_OPT(analog_calibration),
      "Analog Self-Calibration",
      NULL,
      "When the input device is set to DualShock, Analog Controller, Analog Joystick, or neGcon, this option allows dynamic calibration of analog inputs. Maximum registered input values are monitored in real time and used to scale analog coordinates passed to the emulator. This should be used for games such as Mega Man Legends 2 that expect larger values than what modern controllers provide. For best results, analog sticks should be rotated at full extent to tune the calibration algorithm each time content is loaded.",
      NULL,
      "input",
JS Deck's avatar
JS Deck committed
378
379
      {
         { "disabled", NULL },
380
         { "enabled",  NULL },
JS Deck's avatar
JS Deck committed
381
382
         { NULL, NULL },
      },
Libretro-Admin's avatar
Libretro-Admin committed
383
      "disabled"
JS Deck's avatar
JS Deck committed
384
   },
385
   {
386
387
388
389
390
391
      BEETLE_OPT(analog_toggle),
      "Enable DualShock Analog Mode Toggle",
      NULL,
      "When the input device type is DualShock, sets whether or not the emulated DualShock can be toggled between DIGITAL and ANALOG mode like original hardware. When this option is disabled, the DualShock is locked to ANALOG mode and when enabled, the DualShock can be toggled between DIGITAL and ANALOG mode by pressing and holding START+SELECT+L1+L2+R1+R2.",
      NULL,
      "input",
392
      {
jdgleaver's avatar
jdgleaver committed
393
394
         { "disabled", NULL },
         { "enabled",  NULL },
395
396
         { NULL, NULL },
      },
Libretro-Admin's avatar
Libretro-Admin committed
397
      "disabled"
398
399
   },
   {
400
401
402
403
404
405
      BEETLE_OPT(enable_multitap_port1),
      "Port 1: Multitap Enable",
      NULL,
      "Enables/Disables multitap functionality on port 1.",
      NULL,
      "input",
406
      {
jdgleaver's avatar
jdgleaver committed
407
408
         { "disabled", NULL },
         { "enabled",  NULL },
409
410
         { NULL, NULL },
      },
Libretro-Admin's avatar
Libretro-Admin committed
411
      "disabled"
412
   },
413
   {
414
415
416
417
418
419
      BEETLE_OPT(enable_multitap_port2),
      "Port 2: Multitap Enable",
      NULL,
      "Enables/Disables multitap functionality on port 2.",
      NULL,
      "input",
420
421
422
423
424
      {
         { "disabled", NULL },
         { "enabled",  NULL },
         { NULL, NULL },
      },
Libretro-Admin's avatar
Libretro-Admin committed
425
      "disabled"
426
   },
427
   {
428
429
430
431
432
433
      BEETLE_OPT(gun_input_mode),
      "Gun Input Mode",
      NULL,
      "Specify whether to use a mouse-controlled 'Light Gun' or a 'Touchscreen' input when device type is set to 'Guncon / G-Con 45' or 'Justifier'.",
      NULL,
      "input",
434
      {
435
436
         { "lightgun",    "Light Gun" },
         { "touchscreen", "Touchscreen" },
437
438
         { NULL, NULL },
      },
Libretro-Admin's avatar
Libretro-Admin committed
439
      "lightgun"
440
   },
441
   // Shouldn't the gun_input_mode just be Mouse vs. Touchscreen?
442
   {
443
444
445
446
447
448
      BEETLE_OPT(gun_cursor),
      "Gun Cursor",
      NULL,
      "Select the gun cursor to be displayed on screen while using the the 'Guncon / G-Con 45' and 'Justifier' input device types. When disabled, cross hairs are always hidden.",
      NULL,
      "input",
449
      {
450
451
452
         { "cross", "Cross" },
         { "dot",   "Dot" },
         { "off",   "disabled" },
453
454
         { NULL, NULL },
      },
Libretro-Admin's avatar
Libretro-Admin committed
455
      "cross"
456
   },
Zachary Cook's avatar
Zachary Cook committed
457
   {
458
459
460
461
462
463
      BEETLE_OPT(mouse_sensitivity),
      "Mouse Sensitivity",
      NULL,
      "Configure the response of the 'Mouse' input device type.",
      NULL,
      "input",
Zachary Cook's avatar
Zachary Cook committed
464
      {
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
         { "5%",   NULL },
         { "10%",  NULL },
         { "15%",  NULL },
         { "20%",  NULL },
         { "25%",  NULL },
         { "30%",  NULL },
         { "35%",  NULL },
         { "40%",  NULL },
         { "45%",  NULL },
         { "50%",  NULL },
         { "55%",  NULL },
         { "60%",  NULL },
         { "65%",  NULL },
         { "70%",  NULL },
         { "75%",  NULL },
         { "80%",  NULL },
         { "85%",  NULL },
         { "90%",  NULL },
         { "95%",  NULL },
         { "100%", NULL },
         { "105%", NULL },
         { "110%", NULL },
         { "115%", NULL },
         { "120%", NULL },
         { "125%", NULL },
         { "130%", NULL },
         { "135%", NULL },
         { "140%", NULL },
         { "145%", NULL },
         { "150%", NULL },
         { "155%", NULL },
         { "160%", NULL },
         { "165%", NULL },
         { "170%", NULL },
         { "175%", NULL },
         { "180%", NULL },
         { "185%", NULL },
         { "190%", NULL },
         { "195%", NULL },
         { "200%", NULL },
Zachary Cook's avatar
Zachary Cook committed
505
506
         { NULL, NULL },
      },
Libretro-Admin's avatar
Libretro-Admin committed
507
      "100%"
Zachary Cook's avatar
Zachary Cook committed
508
509
   },
   {
510
511
512
513
514
515
      BEETLE_OPT(negcon_response),
      "NegCon Twist Response",
      NULL,
      "Specifies the response of the RetroPad left analog stick when simulating the 'twist' action of emulated 'neGcon' input devices. Analog stick displacement may be mapped to negCon rotation angle either linearly, quadratically or cubically. 'Quadratic' allows for greater precision than 'Linear' when making small movements. 'Cubic' further increases small movement precision, but 'exaggerates' larger movements. Note: 'Linear' is only recommended when using racing wheel peripherals. Conventional gamepads implement analog input in a manner fundamentally different from the neGcon 'twist' mechanism, such that linear mapping over-amplifies small movements, impairing fine control. In most cases, 'Quadratic' provides the closest approximation of real hardware.",
      NULL,
      "input",
Zachary Cook's avatar
Zachary Cook committed
516
      {
517
518
519
         { "linear",    "Linear" },
         { "quadratic", "Quadratic" },
         { "cubic",     "Cubic" },
Zachary Cook's avatar
Zachary Cook committed
520
521
         { NULL, NULL },
      },
Libretro-Admin's avatar
Libretro-Admin committed
522
      "linear"
Zachary Cook's avatar
Zachary Cook committed
523
524
   },
   {
525
526
527
528
529
530
      BEETLE_OPT(negcon_deadzone),
      "NegCon Twist Deadzone",
      NULL,
      "Sets the deadzone of the RetroPad left analog stick when simulating the 'twist' action of emulated 'neGcon' input devices. Used to eliminate controller drift. Note: Most negCon-compatible titles provide in-game options for setting a 'twist' deadzone value. To avoid loss of precision, the in-game deadzone should *always* be set to zero. Any required adjustments should *only* be applied via this core option. This is particularly important when 'NegCon Twist Response' is set to 'Quadratic' or 'Cubic'.",
      NULL,
      "input",
Zachary Cook's avatar
Zachary Cook committed
531
      {
532
533
534
535
536
537
538
         { "0%",  NULL },
         { "5%",  NULL },
         { "10%", NULL },
         { "15%", NULL },
         { "20%", NULL },
         { "25%", NULL },
         { "30%", NULL },
Zachary Cook's avatar
Zachary Cook committed
539
540
         { NULL, NULL },
      },
Libretro-Admin's avatar
Libretro-Admin committed
541
      "0%"
Zachary Cook's avatar
Zachary Cook committed
542
   },
543
   {
544
545
546
547
548
549
      BEETLE_OPT(use_mednafen_memcard0_method),
      "Memory Card 0 Method (Restart)",
      NULL,
      "Choose the save data format used for memory card 0. 'Mednafen' may be used for compatibility with the stand-alone version of Mednafen. When used with Beetle PSX, Libretro (.srm) and Mednafen (.mcr) saves have internally identical formats and can be converted between one another via renaming.",
      NULL,
      "memcards",
550
      {
551
552
         { "libretro", "Libretro" },
         { "mednafen", "Mednafen" },
553
554
         { NULL, NULL },
      },
Libretro-Admin's avatar
Libretro-Admin committed
555
      "libretro"
556
557
   },
   {
558
559
560
561
562
563
      BEETLE_OPT(enable_memcard1),
      "Enable Memory Card 1 (Restart)",
      NULL,
      "Select whether to emulate a second memory card in slot 1. When disabled, games can only access the memory card in slot 0. Note: Some games require this option to be disabled for correct operation (e.g. Codename Tenka). Note: Memory Card 1 uses the Mednafen (.mcr) save format.",
      NULL,
      "memcards",
564
      {
jdgleaver's avatar
jdgleaver committed
565
         { "enabled",  NULL },
566
         { "disabled", NULL },
567
568
         { NULL, NULL },
      },
Libretro-Admin's avatar
Libretro-Admin committed
569
      "enabled"
570
571
   },
   {
572
573
574
575
576
577
      BEETLE_OPT(shared_memory_cards),
      "Shared Memory Cards (Restart)",
      NULL,
      "When enabled, all games will save to and load from the same memory card files. When disabled, separate memory card files will be generated for each item of loaded content. Note: if 'Memory Card 0 Method' is set to 'Libretro', only the right memory card will be affected.",
      NULL,
      "memcards",
578
      {
579
580
         { "disabled", NULL },
         { "enabled",  NULL },
581
582
         { NULL, NULL },
      },
Libretro-Admin's avatar
Libretro-Admin committed
583
      "disabled"
584
585
   },
   {
586
587
588
589
590
591
      BEETLE_OPT(memcard_left_index),
      "Memory Card Left Index",
      NULL,
      "Changes the memory card currently loaded in the left slot. This option will only work if Memory Card 0 method is set to Mednafen. The default card is index 0.",
      NULL,
      "memcards",
592
      {
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
         { "0",  NULL },
         { "1",  NULL },
         { "2",  NULL },
         { "3",  NULL },
         { "4",  NULL },
         { "5",  NULL },
         { "6",  NULL },
         { "7",  NULL },
         { "8",  NULL },
         { "9",  NULL },
         { "10",  NULL },
         { "11",  NULL },
         { "12",  NULL },
         { "13",  NULL },
         { "14",  NULL },
         { "15",  NULL },
         { "16",  NULL },
         { "17",  NULL },
         { "18",  NULL },
         { "19",  NULL },
         { "20",  NULL },
         { "21",  NULL },
         { "22",  NULL },
         { "23",  NULL },
         { "24",  NULL },
         { "25",  NULL },
         { "26",  NULL },
         { "27",  NULL },
         { "28",  NULL },
         { "29",  NULL },
         { "30",  NULL },
         { "31",  NULL },
         { "32",  NULL },
         { "33",  NULL },
         { "34",  NULL },
         { "35",  NULL },
         { "36",  NULL },
         { "37",  NULL },
         { "38",  NULL },
         { "39",  NULL },
         { "40",  NULL },
         { "41",  NULL },
         { "42",  NULL },
         { "43",  NULL },
         { "44",  NULL },
         { "45",  NULL },
         { "46",  NULL },
         { "47",  NULL },
         { "48",  NULL },
         { "49",  NULL },
         { "50",  NULL },
         { "51",  NULL },
         { "52",  NULL },
         { "53",  NULL },
         { "54",  NULL },
         { "55",  NULL },
         { "56",  NULL },
         { "57",  NULL },
         { "58",  NULL },
         { "59",  NULL },
         { "60",  NULL },
         { "61",  NULL },
         { "62",  NULL },
         { "63",  NULL },
657
658
         { NULL, NULL },
      },
Libretro-Admin's avatar
Libretro-Admin committed
659
      "0"
660
   },
661
   {
662
663
664
665
666
667
      BEETLE_OPT(memcard_right_index),
      "Memory Card Right Index",
      NULL,
      "Changes the memory card currently loaded in the right slot. This option will only work if Memory Card 1 is enabled. The default card is index 1.",
      NULL,
      "memcards",
668
      {
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
         { "0",  NULL },
         { "1",  NULL },
         { "2",  NULL },
         { "3",  NULL },
         { "4",  NULL },
         { "5",  NULL },
         { "6",  NULL },
         { "7",  NULL },
         { "8",  NULL },
         { "9",  NULL },
         { "10",  NULL },
         { "11",  NULL },
         { "12",  NULL },
         { "13",  NULL },
         { "14",  NULL },
         { "15",  NULL },
         { "16",  NULL },
         { "17",  NULL },
         { "18",  NULL },
         { "19",  NULL },
         { "20",  NULL },
         { "21",  NULL },
         { "22",  NULL },
         { "23",  NULL },
         { "24",  NULL },
         { "25",  NULL },
         { "26",  NULL },
         { "27",  NULL },
         { "28",  NULL },
         { "29",  NULL },
         { "30",  NULL },
         { "31",  NULL },
         { "32",  NULL },
         { "33",  NULL },
         { "34",  NULL },
         { "35",  NULL },
         { "36",  NULL },
         { "37",  NULL },
         { "38",  NULL },
         { "39",  NULL },
         { "40",  NULL },
         { "41",  NULL },
         { "42",  NULL },
         { "43",  NULL },
         { "44",  NULL },
         { "45",  NULL },
         { "46",  NULL },
         { "47",  NULL },
         { "48",  NULL },
         { "49",  NULL },
         { "50",  NULL },
         { "51",  NULL },
         { "52",  NULL },
         { "53",  NULL },
         { "54",  NULL },
         { "55",  NULL },
         { "56",  NULL },
         { "57",  NULL },
         { "58",  NULL },
         { "59",  NULL },
         { "60",  NULL },
         { "61",  NULL },
         { "62",  NULL },
         { "63",  NULL },
         { NULL, NULL },
734
      },
Libretro-Admin's avatar
Libretro-Admin committed
735
      "1"
736
   },
737
   {
738
739
740
741
742
743
      BEETLE_OPT(pgxp_mode),
      "PGXP Operation Mode",
      NULL,
      "Allows 3D objects to be rendered with subpixel precision, minimizing distortion and jitter of 3D objects seen on original hardware due to the usage of fixed point vertex coordinates. 'Memory Only' mode has minimal compatibility issues and is recommended for general use. 'Memory + CPU (Buggy)' mode can reduce jitter even further but has high performance requirements and may cause various geometry errors.",
      NULL,
      "pgxp",
744
      {
745
746
747
748
         { "disabled",     NULL },
         { "memory only",  "Memory Only" },
         { "memory + CPU", "Memory + CPU (Buggy)" },
         { NULL, NULL },
749
      },
Libretro-Admin's avatar
Libretro-Admin committed
750
      "disabled"
751
   },
752
   {
753
754
755
756
757
758
      BEETLE_OPT(pgxp_2d_tol),
      "PGXP 2D Geometry Tolerance",
      NULL,
      "Hide more glaring errors in PGXP operations: the value specifies the tolerance in which PGXP values will be kept in case of geometries without proper depth information.",
      NULL,
      "pgxp",
759
      {
jdgleaver's avatar
jdgleaver committed
760
         { "disabled", NULL },
761
762
763
764
765
766
767
768
769
         { "0px", NULL },
         { "1px", NULL },
         { "2px", NULL },
         { "3px", NULL },
         { "4px", NULL },
         { "5px", NULL },
         { "6px", NULL },
         { "7px", NULL },
         { "8px", NULL },
770
771
         { NULL, NULL },
      },
Libretro-Admin's avatar
Libretro-Admin committed
772
      "disabled"
773
   },
774
   {
775
776
777
778
779
780
781
782
783
784
785
      BEETLE_OPT(pgxp_nclip),
      "PGXP Primitive Culling",
      NULL,
      "Use PGXP's NCLIP implementation. Improves appearance by reducing holes in geometries with PGXP coordinates. Known to cause some games to lock up in various circumstances.",
      NULL,
      "pgxp",
      {
         { "disabled", NULL },
         { "enabled", NULL },
         { NULL, NULL },
      },
Libretro-Admin's avatar
Libretro-Admin committed
786
      "disabled"
787
788
789
790
791
792
793
794
795
796
797
798
799
800
   },
#if defined(HAVE_OPENGL) || defined(HAVE_OPENGLES) || defined(HAVE_VULKAN)
   {
      BEETLE_OPT(pgxp_vertex),
      "PGXP Vertex Cache",
      NULL,
      "Allows PGXP-enhanced vertex positions to be cached for re-use across polygon draws. Can potentially improve object alignment and reduce visible seams when rendering textures, but false positives when querying the cache may produce graphical glitches. It is currently recommended to leave this option disabled. This option is applied only when PGXP Operation Mode is enabled. Only supported by the hardware renderers.",
      NULL,
      "pgxp",
      {
         { "disabled", NULL },
         { "enabled",  NULL },
         { NULL, NULL },
      },
Libretro-Admin's avatar
Libretro-Admin committed
801
      "disabled"
802
803
804
805
806
807
808
809
810
811
812
813
814
   },
   {
      BEETLE_OPT(pgxp_texture),
      "PGXP Perspective Correct Texturing",
      NULL,
      "When enabled, replaces native PSX affine texture mapping with perspective correct texture mapping. Eliminates position-dependent distortion and warping of textures, resulting in properly aligned textures. This option is applied only when PGXP Operation Mode is enabled. Only supported by the hardware renderers.",
      NULL,
      "pgxp",
      {
         { "disabled", NULL },
         { "enabled",  NULL },
         { NULL, NULL },
      },
Libretro-Admin's avatar
Libretro-Admin committed
815
      "disabled"
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
   },
#endif
   {
      BEETLE_OPT(line_render),
      "Line-to-Quad Hack",
      NULL,
      "Choose line-to-quad hack method. Some games (e.g. Doom, Hexen, Soul Blade, etc) draw horizontal lines by stretching single-pixel-high triangles across the screen, which are rasterized as a row of pixels on original hardware. This hack detects these small triangles and converts them to quads as required, allowing them to be displayed properly on the hardware renderers and at upscaled internal resolutions. 'Aggressive' is required for some titles (e.g. Dark Forces, Duke Nukem) but may otherwise introduce graphical glitches. Leave at 'Default' if unsure.",
      NULL,
      "hacks",
      {
         { "default",    "Default" },
         { "aggressive", "Aggressive" },
         { "disabled",   NULL },
         { NULL, NULL },
      },
Libretro-Admin's avatar
Libretro-Admin committed
831
      "default"
832
833
834
835
836
837
838
839
840
841
842
843
844
   },
   {
      BEETLE_OPT(widescreen_hack),
      "Widescreen Mode Hack",
      NULL,
      "When enabled, renders 3D content anamorphically and outputs the emulated framebuffer at a widescreen aspect ratio. Produces best results with fully 3D games. 2D elements will be horizontally stretched and may be misaligned.",
      NULL,
      "hacks",
      {
         { "disabled", NULL },
         { "enabled",  NULL },
         { NULL, NULL },
      },
Libretro-Admin's avatar
Libretro-Admin committed
845
      "disabled"
846
847
848
849
850
851
852
853
854
855
   },
   {
      BEETLE_OPT(widescreen_hack_aspect_ratio),
      "Widescreen Mode Hack Aspect Ratio",
      NULL,
      "The aspect ratio that's used by the Widescreen Mode Hack.",
      NULL,
      "hacks",
      {
         { "16:10", NULL },
856
         { "16:9",  NULL },
857
858
859
         { "18:9",  NULL },
         { "19:9",  NULL },
         { "20:9",  NULL },
860
861
862
863
         { "21:9",  NULL }, // 64:27
         { "32:9",  NULL },
         { NULL,    NULL },
      },
Libretro-Admin's avatar
Libretro-Admin committed
864
      "16:9"
865
   },
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
   {
      BEETLE_OPT(cpu_freq_scale),
      "CPU Frequency Scaling (Overclock)",
      NULL,
      "Enable overclocking (or underclocking) of the emulated PSX CPU. Overclocking can eliminate slowdown and improve frame rates in certain games at the expense of increased performance requirements. Note that some games have an internal frame rate limiter and may not benefit from overclocking. May cause certain effects to animate faster than intended in some titles when overclocked.",
      NULL,
      "hacks",
      {
         { "50%",           NULL },
         { "60%",           NULL },
         { "70%",           NULL },
         { "80%",           NULL },
         { "90%",           NULL },
         { "100%(native)", "100% (Native)" },
         { "110%",          NULL },
         { "120%",          NULL },
         { "130%",          NULL },
         { "140%",          NULL },
         { "150%",          NULL },
         { "160%",          NULL },
         { "170%",          NULL },
         { "180%",          NULL },
         { "190%",          NULL },
         { "200%",          NULL },
         { "210%",          NULL },
         { "220%",          NULL },
         { "230%",          NULL },
         { "240%",          NULL },
         { "250%",          NULL },
         { "260%",          NULL },
         { "270%",          NULL },
         { "280%",          NULL },
         { "290%",          NULL },
         { "300%",          NULL },
         { "310%",          NULL },
         { "320%",          NULL },
         { "330%",          NULL },
         { "340%",          NULL },
         { "350%",          NULL },
         { "360%",          NULL },
         { "370%",          NULL },
         { "380%",          NULL },
         { "390%",          NULL },
         { "400%",          NULL },
         { "410%",          NULL },
         { "420%",          NULL },
         { "430%",          NULL },
         { "440%",          NULL },
         { "450%",          NULL },
         { "460%",          NULL },
         { "470%",          NULL },
         { "480%",          NULL },
         { "490%",          NULL },
         { "500%",          NULL },
         { "510%",          NULL },
         { "520%",          NULL },
         { "530%",          NULL },
         { "540%",          NULL },
         { "550%",          NULL },
         { "560%",          NULL },
         { "570%",          NULL },
         { "580%",          NULL },
         { "590%",          NULL },
         { "600%",          NULL },
         { "610%",          NULL },
         { "620%",          NULL },
         { "630%",          NULL },
         { "640%",          NULL },
         { "650%",          NULL },
         { "660%",          NULL },
         { "670%",          NULL },
         { "680%",          NULL },
         { "690%",          NULL },
         { "700%",          NULL },
         { "710%",          NULL },
         { "720%",          NULL },
         { "730%",          NULL },
         { "740%",          NULL },
         { "750%",          NULL },
         { NULL, NULL },
      },
Libretro-Admin's avatar
Libretro-Admin committed
947
      "100%(native)"
948
949
950
951
952
953
954
955
956
957
958
959
960
   },
   {
      BEETLE_OPT(gte_overclock),
      "GTE Overclock",
      NULL,
      "When enabled, lowers all emulated GTE (CPU coprocessor for 3D graphics) operations to a constant one-cycle latency. For games that make heavy use of the GTE, this can greatly improve frame rate and frame time stability.",
      NULL,
      "hacks",
      {
         { "disabled", NULL },
         { "enabled",  NULL },
         { NULL, NULL },
      },
Libretro-Admin's avatar
Libretro-Admin committed
961
      "disabled"
962
963
964
965
966
967
968
969
970
971
972
973
974
   },
   {
      BEETLE_OPT(skip_bios),
      "Skip BIOS",
      NULL,
      "Skips the PlayStation BIOS boot animation normally displayed when loading content. Note: Enabling this causes compatibility issues with a number of games (PAL copy protected games, Saga Frontier, etc).",
      NULL,
      "hacks",
      {
         { "disabled", NULL },
         { "enabled",  NULL },
         { NULL, NULL },
      },
Libretro-Admin's avatar
Libretro-Admin committed
975
      "disabled"
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
   },
#if defined(HAVE_OPENGL) || defined(HAVE_OPENGLES) || defined(HAVE_VULKAN)
   {
      BEETLE_OPT(renderer),
      "Renderer (Restart)",
      NULL,
      "Choose video renderer. The software renderer is the most accurate but has steep performance requirements when running at increased internal GPU resolutions. The hardware renderers, while less accurate, improve performance over the software renderer at increased internal resolutions and enable various graphical enhancements. 'Hardware (Auto)' automatically selects the Vulkan or OpenGL renderer depending upon the current libretro frontend video driver. If the provided video driver is not Vulkan or OpenGL 3.3-compatible then the core will fall back to the software renderer.",
      NULL,
      NULL,
      {
         { "hardware",    "Hardware (Auto)" },
#if defined(HAVE_OPENGL) || defined(HAVE_OPENGLES)
         { "hardware_gl", "Hardware (OpenGL)" },
#endif
#if defined(HAVE_VULKAN)
         { "hardware_vk", "Hardware (Vulkan)" },
#endif
         { "software",    "Software" },
         { NULL, NULL },
      },
Libretro-Admin's avatar
Libretro-Admin committed
996
      "hardware"
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
   },
   {
      BEETLE_OPT(renderer_software_fb),
      "Software Framebuffer",
      NULL,
      "Enable accurate emulation of framebuffer effects (e.g. motion blur, FF7 battle swirl) when using hardware renderers by running a copy of the software renderer at native resolution in the background. If disabled, these operations are omitted (OpenGL) or rendered on the GPU (Vulkan). Disabling can improve performance but may cause severe graphical errors. Leave enabled if unsure.",
      NULL,
      "video",
      {
         { "enabled",  NULL },
         { "disabled", NULL },
         { NULL, NULL },
      },
Libretro-Admin's avatar
Libretro-Admin committed
1010
      "enabled"
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
   },
#endif
#if defined(HAVE_LIGHTREC)
   {
      BEETLE_OPT(cpu_dynarec),
      "CPU Dynarec",
      NULL,
      "Dynamically recompile CPU instructions to native instructions. Much faster than interpreter, but CPU timing is less accurate, and may have bugs.",
      NULL,
      NULL,
      {
         { "disabled", "Disabled (Beetle Interpreter)" },
         { "execute",  "Max Performance" },
         { "execute_one",  "Cycle Timing Check" },
         { "run_interpreter", "Lightrec Interpreter" },
         { NULL, NULL },
      },
Libretro-Admin's avatar
Libretro-Admin committed
1028
      "disabled"
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
   },
   {
      BEETLE_OPT(dynarec_invalidate),
      "Dynarec Code Invalidation",
      NULL,
      "Some games require Full invalidation, some require DMA Only.",
      NULL,
      NULL,
      {
         { "full", "Full" },
         { "dma",  "DMA Only (Slightly Faster)" },
         { NULL, NULL },
      },
Libretro-Admin's avatar
Libretro-Admin committed
1042
      "full"
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
   },
   {
      BEETLE_OPT(dynarec_eventcycles),
      "Dynarec DMA/GPU Event Cycles",
      NULL,
      "Max cycles run by CPU before a GPU or DMA Update is checked, higher number will be faster, has much less impact on beetle interpreter than dynarec",
      NULL,
      NULL,
      {
         { "128", "128 (Default)" },
         { "256",  NULL },
         { "384",  NULL },
         { "512",  NULL },
         { "640",  NULL },
         { "768",  NULL },
         { "896",  NULL },
         { "1024",  NULL },
         { NULL, NULL },
      },
Libretro-Admin's avatar
Libretro-Admin committed
1062
      "128"
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
   },
#endif
   {
      BEETLE_OPT(core_timing_fps),
      "Core-Reported FPS Timing",
      NULL,
      "Sets FPS timing that the core will report to the frontend. Automatic toggling will allow the core to switch between reporting progressive and interlaced rates, but may cause frontend video/audio driver reinits.",
      NULL,
      NULL,
      {
         { "force_progressive", "Progressive Rate (Default)" },
         { "force_interlaced",  "Force Interlaced Rate" },
         { "auto_toggle", "Allow Automatic Toggling" },
      },
Libretro-Admin's avatar
Libretro-Admin committed
1077
      "force_progressive"
1078
   },
1079
   {
1080
1081
      BEETLE_OPT(pal_video_timing_override),
      "PAL (European) Video Timing Override",
1082
      NULL,
1083
      "Due to different standards PAL games often appear slowed down compared to the American or Japanese NTSC releases. This option can be used to override PAL timings in order to attempt to run these games with the NTSC framerate. This option has no effect when running NTSC content.",
1084
1085
      NULL,
      "video",
1086
      {
1087
1088
         { "disabled", NULL },
         { "enabled",  NULL },
1089
      },
Libretro-Admin's avatar
Libretro-Admin committed
1090
      "disabled"
1091
   },
1092
1093
   {
      BEETLE_OPT(crop_overscan),
ggdrt's avatar
ggdrt committed
1094
      "Crop Horizontal Overscan",
1095
      NULL,
ggdrt's avatar
ggdrt committed
1096
      "By default, the renderers add horizontal padding (pillarboxes on either side of the image) to emulate the same black bars generated in analog video output by real PSX hardware. Enabling this option removes horizontal padding.",
1097
1098
      NULL,
      "video",
1099
      {
jdgleaver's avatar
jdgleaver committed
1100
1101
         { "enabled",  NULL },
         { "disabled", NULL },
1102
1103
         { NULL, NULL },
      },
Libretro-Admin's avatar
Libretro-Admin committed
1104
      "enabled"
1105
1106
1107
1108
   },
   {
      BEETLE_OPT(image_crop),
      "Additional Cropping",
1109
      NULL,
1110
      "When 'Crop Horizontal Overscan' is enabled, this option further reduces the width of the cropped image by the specified number of pixels",
1111
1112
      NULL,
      "video",
1113
      {
jdgleaver's avatar
jdgleaver committed
1114
         { "disabled", NULL },
Tatsuya79's avatar
Tatsuya79 committed
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
         { "1px",      NULL },
         { "2px",      NULL },
         { "3px",      NULL },
         { "4px",      NULL },
         { "5px",      NULL },
         { "6px",      NULL },
         { "7px",      NULL },
         { "8px",      NULL },
         { "9px",      NULL },
         { "10px",     NULL },
         { "11px",     NULL },
         { "12px",     NULL },
         { "13px",     NULL },
         { "14px",     NULL },
         { "15px",     NULL },
         { "16px",     NULL },
         { "17px",     NULL },
         { "18px",     NULL },
         { "19px",     NULL },
         { "20px",     NULL },
1135
1136
         { NULL, NULL },
      },
Libretro-Admin's avatar
Libretro-Admin committed
1137
      "disabled"
1138
1139
1140
1141
   },
   {
      BEETLE_OPT(image_offset),
      "Offset Cropped Image",
1142
      NULL,
ggdrt's avatar
ggdrt committed
1143
      "When 'Crop Horizontal Overscan' is enabled, allows the resultant cropped image to be offset horizontally to the right (positive) or left (negative) by the specified number of pixels. May be used to correct alignment issues. Only supported by the software renderer.",
1144
1145
      NULL,
      "video",
1146
      {
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
         { "-12px",    NULL },
         { "-11px",    NULL },
         { "-10px",    NULL },
         { "-9px",     NULL },
         { "-8px",     NULL },
         { "-7px",     NULL },
         { "-6px",     NULL },
         { "-5px",     NULL },
         { "-4px",     NULL },
         { "-3px",     NULL },
         { "-2px",     NULL },
         { "-1px",     NULL },
Tatsuya79's avatar
Tatsuya79 committed
1159
         { "disabled", NULL },
1160
1161
1162
1163
         { "+1px",     NULL },
         { "+2px",     NULL },
         { "+3px",     NULL },
         { "+4px",     NULL },
1164
1165
1166
1167
1168
1169
1170
1171
         { "+5px",     NULL },
         { "+6px",     NULL },
         { "+7px",     NULL },
         { "+8px",     NULL },
         { "+9px",     NULL },
         { "+10px",    NULL },
         { "+11px",    NULL },
         { "+12px",    NULL },
1172
1173
         { NULL, NULL },
      },
Libretro-Admin's avatar
Libretro-Admin committed
1174
      "disabled"
1175
   },
1176
1177
1178
1179
#if defined(HAVE_OPENGL) || defined(HAVE_OPENGLES) || defined(HAVE_VULKAN)
   {
      BEETLE_OPT(image_offset_cycles),
      "Horizontal Image Offset (GPU Cycles)",
1180
      NULL,
ggdrt's avatar
ggdrt committed
1181
      "Specify number of GPU cycles to offset image by. Positive values move image to the right, negative values move image to the left. Only supported by the hardware renderers.",
1182
1183
      NULL,
      "video",
1184
      {
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
         { "-40",      NULL },
         { "-39",      NULL },
         { "-38",      NULL },
         { "-37",      NULL },
         { "-36",      NULL },
         { "-35",      NULL },
         { "-34",      NULL },
         { "-33",      NULL },
         { "-32",      NULL },
         { "-31",      NULL },
         { "-30",      NULL },
         { "-29",      NULL },
         { "-28",      NULL },
         { "-27",      NULL },
         { "-26",      NULL },
         { "-25",      NULL },
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
         { "-24",      NULL },
         { "-23",      NULL },
         { "-22",      NULL },
         { "-21",      NULL },
         { "-20",      NULL },
         { "-19",      NULL },
         { "-18",      NULL },
         { "-17",      NULL },
         { "-16",      NULL },
         { "-15",      NULL },
         { "-14",      NULL },
         { "-13",      NULL },
         { "-12",      NULL },
         { "-11",      NULL },
         { "-10",      NULL },
         { "-9",       NULL },
         { "-8",       NULL },
         { "-7",       NULL },
         { "-6",       NULL },
         { "-5",       NULL },
         { "-4",       NULL },
         { "-3",       NULL },
         { "-2",       NULL },
         { "-1",       NULL },
         { "0",        NULL },
         { "+1",       NULL },
         { "+2",       NULL },
         { "+3",       NULL },
         { "+4",       NULL },
         { "+5",       NULL },
         { "+6",       NULL },
         { "+7",       NULL },
         { "+8",       NULL },
         { "+9",       NULL },
         { "+10",      NULL },
         { "+11",      NULL },
         { "+12",      NULL },
         { "+13",      NULL },
         { "+14",      NULL },
         { "+15",      NULL },
         { "+16",      NULL },
         { "+17",      NULL },
         { "+18",      NULL },
         { "+19",      NULL },
         { "+20",      NULL },
         { "+21",      NULL },
         { "+22",      NULL },
         { "+23",      NULL },
         { "+24",      NULL },
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
         { "+25",      NULL },
         { "+26",      NULL },
         { "+27",      NULL },
         { "+28",      NULL },
         { "+29",      NULL },
         { "+30",      NULL },
         { "+31",      NULL },
         { "+32",      NULL },
         { "+33",      NULL },
         { "+34",      NULL },
         { "+35",      NULL },
         { "+36",      NULL },
         { "+37",      NULL },
         { "+38",      NULL },
         { "+39",      NULL },
         { "+40",      NULL },
1266
1267
         { NULL, NULL},
      },
Libretro-Admin's avatar
Libretro-Admin committed
1268
      "0"
1269
1270
   },
#endif
1271
   {
1272
1273
1274
1275
1276
1277
      BEETLE_OPT(gpu_overclock),
      "GPU Rasterizer Overclock",
      NULL,
      "Enable overclocking of the 2D rasterizer contained within the emulated PSX's GPU. Does not improve 3D rendering, and in general has little effect.",
      NULL,
      "video",
1278
      {
1279
1280
1281
1282
1283
1284
1285
1286
         { "1x(native)", "1x (Native)" },
         { "2x",         NULL },
         { "4x",         NULL },
         { "8x",         NULL },
         { "16x",        NULL },
         { "32x",        NULL },
         { NULL, NULL },
      },
Libretro-Admin's avatar
Libretro-Admin committed
1287
      "1x(native)"
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
   },
   {
      BEETLE_OPT(aspect_ratio),
      "Core Aspect Ratio",
      NULL,
      "Set core provided aspect ratio. This setting is ignored when the Widescreen Mode Hack or Display Full VRAM options are enabled.",
      NULL,
      "video",
      {
         { "corrected", "Corrected" },
         { "uncorrected", "Uncorrected" },
         { "4:3",  "Force 4:3" },
         { "ntsc", "Force NTSC" },
      },
Libretro-Admin's avatar
Libretro-Admin committed
1302
      "corrected"
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
   },
   {
      BEETLE_OPT(initial_scanline),
      "Initial Scanline - NTSC",
      NULL,
      "Select the first displayed scanline when running NTSC content. Setting a value greater than zero will reduce the height of output images by cropping pixels from the topmost edge. May be used to counteract letterboxing.",
      NULL,
      "video",
      {
         { "0",  NULL },
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
         { "1",  NULL },
         { "2",  NULL },
         { "3",  NULL },
         { "4",  NULL },
         { "5",  NULL },
         { "6",  NULL },
         { "7",  NULL },
         { "8",  NULL },
         { "9",  NULL },
         { "10", NULL },
         { "11", NULL },
         { "12", NULL },
         { "13", NULL },
         { "14", NULL },
         { "15", NULL },
         { "16", NULL },
         { "17", NULL },
         { "18", NULL },
         { "19", NULL },
         { "20", NULL },
         { "21", NULL },
         { "22", NULL },
         { "23", NULL },
         { "24", NULL },
         { "25", NULL },
         { "26", NULL },
         { "27", NULL },
         { "28", NULL },
         { "29", NULL },
         { "30", NULL },
         { "31", NULL },
         { "32", NULL },
         { "33", NULL },
         { "34", NULL },
         { "35", NULL },
         { "36", NULL },
         { "37", NULL },
         { "38", NULL },
         { "39", NULL },
         { "40", NULL },
1353
1354
         { NULL, NULL },
      },
Libretro-Admin's avatar
Libretro-Admin committed
1355
      "0"
1356
1357
   },
   {
1358
      BEETLE_OPT(last_scanline),
ggdrt's avatar
ggdrt committed
1359
      "Last Scanline - NTSC",
1360
      NULL,
1361
      "Select the last displayed scanline when running NTSC content. Setting a value less than 239 will reduce the height of output images by cropping pixels from the bottommost edge. May be used to counteract letterboxing.",
1362
1363
      NULL,
      "video",
1364
      {
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
         { "210", NULL },
         { "211", NULL },
         { "212", NULL },
         { "213", NULL },
         { "214", NULL },
         { "215", NULL },
         { "216", NULL },
         { "217", NULL },
         { "218", NULL },
         { "219", NULL },
         { "220", NULL },
         { "221", NULL },
         { "222", NULL },
         { "223", NULL },
         { "224", NULL },
         { "225", NULL },
         { "226", NULL },
         { "227", NULL },
         { "228", NULL },
         { "229", NULL },
         { "230", NULL },
         { "231", NULL },
         { "232", NULL },
         { "233", NULL },
         { "234", NULL },
         { "235", NULL },
Libretro-Admin's avatar