1use crate::app::HelpText;
2
3pub const TIMING_MODE: HelpText = HelpText {
4    heading: "Timing Mode",
5    text: &[
6        "Set timing mode to NTSC (60Hz) or PAL (50Hz).",
7        "The Auto setting will choose automatically based on the region in the cartridge header, preferring NTSC if both NTSC and PAL are supported.",
8    ],
9};
10
11pub const REGION: HelpText = HelpText {
12    heading: "Region",
13    text: &[
14        "Configure the hardware region that the emulator will report to games.",
15        "The Auto setting will report the same region as the cartridge header. If multiple regions are supported, the preference order is US first then JP then EU.",
16    ],
17};
18
19pub const SCD_BIOS_PATH: HelpText = HelpText {
20    heading: "Sega CD BIOS Paths",
21    text: &[
22        "Path to a Sega CD BIOS ROM for each region. This is required for Sega CD emulation.",
23        "Can optionally use the US BIOS for all regions rather than using a different BIOS per region.",
24    ],
25};
26
27pub const SCD_RAM_CARTRIDGE: HelpText = HelpText {
28    heading: "Sega CD RAM Cartridge",
29    text: &[
30        "Configure whether the Sega CD's 128KB RAM cartridge is emulated.",
31        "If disabled, games can only save to the console's 8KB of builtin backup RAM.",
32    ],
33};
34
35pub const SCD_CDROM_IN_RAM: HelpText = HelpText {
36    heading: "Load CD-ROM Images into RAM",
37    text: &[
38        "If enabled, load CD-ROM images fully into host RAM when starting a game.",
39        "This increases RAM usage but removes the need for the emulator to read from disk during emulation.",
40    ],
41};
42
43pub const M68K_CLOCK_DIVIDER: HelpText = HelpText {
44    heading: "Genesis 68000 Clock Divider",
45    text: &[
46        "Optionally overclock the main Genesis CPU by reducing the master clock divider. Overclocking can reduce or eliminate slowdown, but it can also cause major glitches in some games. Use with caution.",
47        "Note that a clock divider lower than 3 or 4 will significantly increase the emulator's CPU usage.",
48        "This setting also affects the main Genesis CPU speed in Sega CD and 32X mode.",
49    ],
50};
51
52pub const SCD_SUB_CPU_DIVIDER: HelpText = HelpText {
53    heading: "Sega CD 68000 Clock Divider",
54    text: &[
55        "Optionally overclock the Sega CD sub CPU by reducing the master clock divider.",
56        "Overclocking can cause major glitches. Some games may additionally require overclocking the main CPU when the sub CPU is overclocked.",
57        "Note that a clock divider lower than 3 may significantly increase the emulator's CPU usage.",
58    ],
59};
60
61pub const SH2_CLOCK_MULTIPLIER: HelpText = HelpText {
62    heading: "32X SH-2 Clock Multiplier",
63    text: &[
64        "Optionally overclock the 32X SH-2s by increasing their master clock multiplier.",
65        "This may reduce slowdown in some games, but it may also cause major glitches.",
66        "Overclocking the SH-2s is extremely CPU-intensive and may cause the emulator to not run at full speed.",
67    ],
68};
69
70pub const SCD_DRIVE_SPEED: HelpText = HelpText {
71    heading: "Sega CD Disc Drive Speed",
72    text: &[
73        "Optionally increase the speed of the Sega CD's CD-ROM drive when reading data tracks. This may shorten loading times in some games.",
74        "Warning: Increasing the drive speed is VERY likely to cause major glitches, particularly in games that play FMVs or animated cutscenes. Overclocking the sub CPU may improve compatibility with some games.",
75    ],
76};
77
78pub const ASPECT_RATIO: HelpText = HelpText {
79    heading: "Aspect Ratio",
80    text: &[
81        "Configure aspect ratio.",
82        "NTSC - 8:7 pixel aspect ratio in H256px mode, 32:35 pixel aspect ratio in H320px mode",
83        "PAL - 11:8 pixel aspect ratio in H256px mode, 11:10 pixel aspect ratio in H320px mode",
84        "The Auto option will automatically select NTSC or PAL based on the timing/display mode.",
85    ],
86};
87
88pub const ANAMORPHIC_WIDESCREEN: HelpText = HelpText {
89    heading: "Anamorphic Widescreen",
90    text: &["Horizontally stretch the image to widescreen (16:9 screen aspect ratio)."],
91};
92
93pub const FORCE_SQUARE_PIXELS_H40: HelpText = HelpText {
94    heading: "Force Square Pixels in H320px",
95    text: &[
96        "If enabled, ignore the configured aspect ratio and always display square pixels when a game enables H320px mode.",
97    ],
98};
99
100pub const DEINTERLACING: HelpText = HelpText {
101    heading: "Deinterlacing",
102    text: &[
103        "If enabled and a game sets the VDP to an interlaced screen mode, render in progressive mode instead of interlaced.",
104        "In double-screen interlaced mode, this causes the VDP to render all 448 lines every frame (or 480 in V30 mode).",
105    ],
106};
107
108pub const NON_LINEAR_COLOR_SCALE: HelpText = HelpText {
109    heading: "Non-Linear Color Scale",
110    text: &[
111        "Emulate the VDP's non-linear color scale when converting from Genesis RGB333 colors to displayed colors. Enabling this is more accurate to actual hardware.",
112        "In practice, compared to a linear color scale, this slightly brightens darker colors and slightly darkens brighter colors.",
113    ],
114};
115
116pub const DOUBLE_SCREEN_INTERLACED_ASPECT: HelpText = HelpText {
117    heading: "Double-Screen Aspect Adjustment",
118    text: &[
119        "If enabled, automatically adjust the pixel aspect ratio appropriately if a game enables double-screen interlaced mode.",
120        "If disabled, the emulator will keep the same pixel aspect ratio, resulting in the screen size doubling vertically.",
121    ],
122};
123
124pub const REMOVE_SPRITE_LIMITS: HelpText = HelpText {
125    heading: "Remove Sprite Limits",
126    text: &[
127        "If enabled, ignore the hardware's sprite-per-scanline and sprite-pixel-per-scanline limits when rendering.",
128        "This typically reduces sprite flickering, but it may cause visual glitches in games that use the limits to intentionally hide sprites.",
129    ],
130};
131
132pub const RENDER_BORDERS: HelpText = HelpText {
133    heading: "Render Border",
134    text: &[
135        "If enabled, render the border area instead of cropping it.",
136        "The border area normally only contains the backdrop color, but some demos abuse hardware quirks to render graphics in the borders, namely Overdrive 2.",
137    ],
138};
139
140pub const ENABLED_LAYERS: HelpText =
141    HelpText { heading: "Enabled Layers", text: &["Control which layers are rendered."] };
142
143pub const S32X_DARKEN_GEN_COLORS: HelpText = HelpText {
144    heading: "Darken Genesis Colors",
145    text: &[
146        "On actual hardware, the brightest 32X colors are slightly brighter than the brightest Genesis colors.",
147        "This setting simulates that behavior by slightly darkening Genesis colors relative to 32X colors.",
148    ],
149};
150
151pub const S32X_COLOR_TINT: HelpText = HelpText {
152    heading: "32X Color Tint",
153    text: &[
154        "Most 32X consoles have been observed to have a slight yellow or purple tint in their video output, with yellow seemingly being more common.",
155        "Games were probably not designed around this, but a slight color tint is more accurate to actual hardware.",
156    ],
157};
158
159pub const S32X_VIDEO_OUT: HelpText = HelpText {
160    heading: "32X Video Output",
161    text: &[
162        "Configure 32X video frame composition, optionally displaying only the Genesis VDP output or only the 32X VDP output.",
163    ],
164};
165
166pub const S32X_PRIORITY_MASKING: HelpText = HelpText {
167    heading: "32X Priority Masking",
168    text: &[
169        "Optionally replace all 32X pixels of a given priority with a fixed color.",
170        "The fixed color can come from 32X palette RAM or it can be set to a specific RGBA5551 color value.",
171    ],
172};
173
174pub const QUANTIZE_YM2612_OUTPUT: HelpText = HelpText {
175    heading: "Quantize YM2612 Output",
176    text: &[
177        "If enabled, quantize YM2612 FM channel output from 14 bits to 9 bits by truncating the lowest bits. This makes audio output somewhat noisier.",
178        "Enabling this is more accurate to actual hardware. Some games have audio designed around quantization.",
179    ],
180};
181
182pub const YM2612_LADDER_EFFECT: HelpText = HelpText {
183    heading: "YM2612 Ladder Effect",
184    text: &[
185        "If enabled, emulate YM2612 DAC crossover distortion, commonly known as the ladder effect.",
186        "This effectively amplifies low-volume audio waves and has little effect on high-volume waves. Some games have audio designed around this effect.",
187        "This distortion is not present on later consoles that have a YM3438.",
188    ],
189};
190
191pub const OPN2_BUSY_BEHAVIOR: HelpText = HelpText {
192    heading: "OPN2 Busy Flag Behavior",
193    text: &[
194        "Control which FM chip busy flag behavior to emulate.",
195        "This has no effect on most games, but a few games have audio issues with one behavior or the other, such as Earthworm Jim (issues with YM2612 behavior) and Hellfire (issues with YM3438 behavior).",
196    ],
197};
198
199pub const GENESIS_LOW_PASS: HelpText = HelpText {
200    heading: "Genesis Low-Pass Filter",
201    text: &[
202        "If enabled, apply a first-order low-pass filter to Genesis audio output, both YM2612 and PSG.",
203        "Low-pass filtering makes the audio sound softer and somewhat muffled. Some game audio is designed around this effect.",
204    ],
205};
206
207pub const YM2612_2ND_LOW_PASS: HelpText = HelpText {
208    heading: "YM2612 2nd-Order Low-Pass Filter",
209    text: &[
210        "If enabled, apply a second-order low-pass filter only to YM2612 audio output, applied before the first-order Genesis low-pass filter.",
211        "This should be similar to the audio circuitry found in Model 2 consoles.",
212    ],
213};
214
215pub const PCM_LOW_PASS: HelpText = HelpText {
216    heading: "Sega CD PCM Low-Pass Filter",
217    text: &["If enabled, apply a second-order low-pass filter to PCM chip audio output."],
218};
219
220pub const SCD_GEN_LOW_PASS: HelpText = HelpText {
221    heading: "Apply Genesis LPF to Sega CD",
222    text: &[
223        "Choose whether to apply the Genesis low-pass filter to Sega CD audio output. This can be configured independently for the PCM chip and CD-DA.",
224        "In actual hardware, Sega CD audio output may or may not pass through the Genesis low-pass filter depending on where the Sega CD audio output is connected.",
225    ],
226};
227
228pub const S32X_GEN_LOW_PASS: HelpText = HelpText {
229    heading: "Apply Genesis LPF to 32X",
230    text: &[
231        "Choose whether to apply the Genesis low-pass filter to 32X PWM audio output.",
232        "Enabling this is more accurate to actual hardware but can make PWM audio sound somewhat muffled.",
233    ],
234};
235
236pub const SCD_PCM_INTERPOLATION: HelpText = HelpText {
237    heading: "Sega CD PCM interpolation",
238    text: &[
239        "Choose the method used to interpolate when a PCM sound chip channel is partway between samples.",
240        "Not interpolating is more accurate to hardware but tends to cause significant audio aliasing in PCM chip audio output.",
241        "In terms of quality, generally 6-point cubic is best and linear is worst, but higher-quality interpolation may sound more muffled at low sample rates.",
242    ],
243};
244
245pub const S32X_PWM_RESAMPLING: HelpText = HelpText {
246    heading: "32X PWM Resampling",
247    text: &[
248        "Choose the algorithm used to resample 32X PWM chip audio output.",
249        "Windowed sinc interpolation is higher-quality but more performance-intensive, and it may sound more muffled at low sample rates.",
250    ],
251};
252
253pub const ENABLED_YM2612_CHANNELS: HelpText = HelpText {
254    heading: "Enabled YM2612 Channels",
255    text: &["Enable or disable individual YM2612 audio channels."],
256};
257
258pub const SOUND_SOURCES: HelpText = HelpText {
259    heading: "Sound Sources",
260    text: &["Enable or disable specific sound sources in final audio mixing."],
261};
262
263pub const VOLUME_ADJUSTMENTS: HelpText = HelpText {
264    heading: "Volume Adjustments",
265    text: &[
266        "Adjust the volume of individual sound sources.",
267        "Values can be positive or negative. Positive values increase volume and negative values decrease volume.",
268    ],
269};