#pragma once

// Help text string literals for all ImGui panels.
// Extracted from the HelpPanel*() functions in the Guisan Panel*.cpp files.

static const char* help_text_about =
	"This panel contains information about the version of Amiberry, when it was changed,\n"
	"which version of SDL3 it was compiled against and currently using.\n"
	"\n"
	"Furthermore, you can also find the GPLv3 license notice here, and if you scroll down\n"
	"all the credits to the people behind the development of this emulator as well.\n"
	"\n"
	"At the bottom of the screen, there are a few buttons available regardless of which\n"
	"panel you have selected. Those are:\n"
	"\n"
	"\"Shutdown\": allows you to shutdown the whole system Amiberry is running on. This\n"
	" option can be disabled if you wish, by setting 'disable_shutdown_button=yes' in\n"
	" in your amiberry.conf file.\n"
	"\n"
	"\"Quit\": This quits Amiberry, as you'd expect.\n"
	"\n"
	"\"Reload\": This button will stop emulation (if running), reload Amiberry and reset\n"
	" the currently loaded configuration. This has a similar effect as if you Quit and start\n"
	" Amiberry again.\n"
	" It can be useful if you want to change a setting that cannot be changed on-the-fly,\n"
	" and you don't want to quit and start the Amiberry again to do that.\n"
	"\n"
	"\"Help\": This will display some on-screen help/documentation, relating to the Panel\n"
	" you are currently in.\n"
	"\n"
	"\"Reboot\": This button will trigger a hard reset of the emulation, which will reboot\n"
	" with the current settings.\n"
	"\n"
	"\"Start\": This button starts the emulation, using the current settings you have set.\n";

static const char* help_text_paths =
	"Here you can configure the various paths for Amiberry resources. In normal usage,\n"
	"the default paths should work fine, however if you wish to change any path, you\n"
	"can use the \"...\" button, to select the folder/path of your choosing. Details\n"
	"for each path resource appear below.\n"
	"\n"
	"You can enable/disable logging and specify the location of the logfile by using\n"
	"the relevant options. A logfile is useful when trying to troubleshoot something,\n"
	"but otherwise this option should be off, as it will incur some extra overhead.\n"
	"You can also redirect the log output to console, by enabling that logging option.\n"
	"You can alternatively enable log output to console if you pass the --log option\n"
	"to Amiberry on startup.\n"
	"\n"
	"The \"Rescan Paths\" button will rescan the paths specified above and refresh the\n"
	"local cache. This should be done if you added kickstart ROMs for example, in order\n"
	"for Amiberry to pick them up. This button will regenerate the amiberry.conf file\n"
	"if it's missing, and will be populated with the default values.\n"
	"\n"
	"The \"Update WHDBooter files\" button will attempt to download the latest XML used for\n"
	"the WHDLoad-booter functionality of Amiberry, along with all related files in the\n"
	"configured WHDBoot directory. It requires an internet connection and write permissions in the\n"
	"destination directory. The downloaded game database will be stored under that path\n"
	"(game-data/whdload_db.json). Once the file is successfully downloaded, you\n"
	"will also get a dialog box informing you about the details. A backup copy of the\n"
	"existing database is made (game-data/whdload_db.bak), to preserve any\n"
	"custom edits that may have been made. The rest of the files will be updated with the\n"
	"latest version from the repository.\n"
	"\n"
	"The \"Update Controllers DB\" button will attempt to download the latest version of\n"
	"the bundled gamecontrollerdb.txt file, to be stored in the Controllers files path.\n"
	"The file contains the \"official\" mappings for recognized controllers by SDL3 itself.\n"
	"Please note that this is separate from the user-configurable gamecontrollerdb_user.txt\n"
	"file, which is contained in the Controllers path. That file is never overwritten, and\n"
	"it will be loaded after the official one, so any entries contained there will take a\n"
	"higher priority. Once the file is successfully downloaded, you will also get a dialog\n"
	"box informing you about the details. A backup copy of the existing gamecontrollerdb.txt\n"
	"(in the Controllers path as gamecontrollerdb.bak) is created, to preserve any custom edits it may contain.\n"
	"\n"
	"The paths for Amiberry resources include;\n"
	"\n"
	"- System ROMs: The Amiga Kickstart files are located under the System ROMs path.\n"
	"  After changing the location of the Kickstart ROMs, or adding any additional ROMs,\n"
	"  click on the \"Rescan\" button to refresh the list of the available ROMs. Please\n"
	"  note that MT-32 ROM files may also reside here, or in a \"mt32-roms\" directory\n"
	"  at this location, if you wish to use the MT-32 MIDI emulation feature in Amiberry.\n"
	"\n"
	"- Configuration files: These are located under \"Configurations\" by default. This is where your\n"
	"  .uae machine configurations will be stored. Amiberry's global amiberry.conf and\n"
	"  amiberry.ini files are kept in the platform settings directory instead, while visual\n"
	"  assets such as Themes, Shaders, and Bezels live in a separate \"Visuals\" folder.\n"
	"  The bundled gamecontrollerdb.txt file lives in the Controllers path.\n"
	"\n"
	"- NVRAM files: the location where CDTV/CD32 modes will store their NVRAM files.\n"
	"\n"
	"- Plugins path: the location where external plugins (such as the CAPSimg or the\n"
	"  floppybridge plugin) are stored.\n"
	"\n"
	"- Screenshots: any screenshots you take will be saved by default in this location.\n"
	"\n"
	"- Save state files: if you use them, they will be saved in the specified location.\n"
	"\n"
	"- Controller files: any custom (user-generated) controller mapping files will be saved\n"
	"  in this location. This location is also used in RetroArch environments (ie; such as\n"
	"  RetroPie) to point to the directory containing the controller mappings.\n"
	"\n"
	"- RetroArch configuration file (retroarch.cfg): only useful if you are using RetroArch\n"
	"  (ie; in RetroPie). Amiberry can pick-up the configuration file from the path specified\n"
	"  here, and load it automatically, applying any mappings it contains. You can ignore this\n"
	"  path if you're not using RetroArch.\n"
	"\n"
	"- WHDboot files: This directory contains the files required by the whd-booter process\n"
	"  to launch WHDLoad game archives. In normal usage you should not need to change this.\n"
	"\n"
	"- Below that are 4 additional paths, that can be used to better organize your various\n"
	"  Amiga files, and streamline GUI operations when it comes to selecting the different\n"
	"  types of Amiga media. The file selector buttons in Amiberry associated with each of\n"
	"  the media types, will open these path locations. The defaults are shown, but these\n"
	"  can be changed to better suit your requirements.\n"
	"\n"
	"These settings are saved automatically when you click Rescan, or exit the emulator.\n";

static const char* help_text_quickstart =
	"Simplified start of emulation by just selecting the Amiga model and the disk/CD\n"
	"you want to use.\n"
	"\n"
	"After selecting the Amiga model, you can choose from a small list of standard\n"
	"configurations for this model to start with. Depending on the model selected,\n"
	"the floppy or CD drive options will be enabled for you, which you can use to\n"
	"insert any floppy disk or CD images, accordingly.\n"
	"If you need more advanced control over the hardware you want to emulate, you\n"
	"can always use the rest of the GUI for that.\n"
	"\n"
	"You can reset the current configuration to your selected model, by clicking the\n"
	"Set Configuration button.\n"
	"\n"
	"When you activate \"Start in Quickstart mode\", the next time you run the emulator,\n"
	"it will start with the QuickStart panel. Otherwise you start in the configurations panel.\n"
	"\n"
	"You can optionally select a WHDLoad LHA title, and have Amiberry auto-configure\n"
	"all settings, based on the WHDLoad XML (assuming the title is found there).\n"
	"Then you can just click on Start to begin!\n";

static const char* help_text_configurations =
	"In this panel, you can see a list of all your previously saved configurations. The\n"
	"Configuration file (.uae) contains all the emulator settings available in it. Loading\n"
	"such a file, will apply those settings to Amiberry immediately. Accordingly, you can\n"
	"Save your current settings in a file here, for future use.\n"
	"\n"
	"Please note the \"default\" config name is special for Amiberry, since if it exists,\n"
	"it will be loaded automatically on startup. This will override the emulator options\n"
	"Amiberry sets internally at startup, and this may impact on compatibility when using\n"
	"the Quickstart panel.\n"
	"\n"
	"To load a configuration, select the entry in the list, and then click on the \"Load\"\n"
	"button. Note that if you double-click on an entry in the list, the emulation starts\n"
	"immediately using that configuration.\n"
	"\n"
	"To create/save a new configuration, set all emulator options as required, then enter\n"
	"a new \"Name\", optionally provide a short description, and then click on the \"Save\"\n"
	"button. When trying to Save a configuration, if the supplied filename already exists,\n"
	"a copy of the previous version is automatically kept as \"configuration.backup\".\n"
	"\n"
	"Please note a special case exists when creating/saving a configuration file for use\n"
	"with floppy disk images and whdload archives. The auto-config logic in Amiberry will\n"
	"scan for a configuration file of the same \"Name\" as the disk image or .lha archive\n"
	"being loaded. After you load a floppy disk image or whdload archive, and Start the\n"
	"emulation, you can use the \"F12\" key to show the GUI, and in this panel the \"Name\"\n"
	"field for the configuration will be filled correctly. Do not change this, as it will\n"
	"stop auto-config from working. You may change the description if you desire.\n"
	"\n"
	"To delete the currently selected configuration file from the disk (and the list),\n"
	"click on the \"Delete\" button.\n";

static const char* help_text_cpu =
	"Select the required Amiga CPU (68000 - 68060). If you select 68020, you can choose\n"
	"between 24-bit (68EC020) or 32-bit (68020) addressing.\n"
	"\n"
	"The option \"More compatible\" will emulate prefetch (68000) or prefetch and\n"
	"instruction cache. It's more compatible but slower, but not required\n"
	"for most games and demos.\n"
	"\n"
	"JIT/JIT FPU enables the Just-in-time compiler. This may break compatibility in some games.\n"
	"Note: Not available in all platforms currently\n"
	"\n"
	"The available FPU models depend on the selected CPU type. The option \"More compatible\"\n"
	"activates a more accurate rounding method and compare of two floats.\n"
	"\n"
	"The CPU Speed slider allows you to set the CPU speed. The fastest possible setting\n"
	"will run the CPU as fast as possible. The A500/A1200 setting will run the CPU at\n"
	"the speed of an A500 or A1200. The slider allows you to set the CPU speed in\n"
	"percentages of the maximum speed.\n"
	"\n"
	"The CPU Idle slider allows you to set how much the CPU should sleep when idle.\n"
	"This is useful to keep the system temperature down.\n"
	"\n"
	"The MMU option allows you to enable the Memory Management Unit. This is only available\n"
	"for the 68030, 68040 and 68060 CPUs.\n"
	"\n"
	"The FPU option allows you to enable the FPU. This is only available for the 68020, 68030,\n"
	"68040 and 68060 CPUs.\n"
	"\n"
	"The PPC emulation option enables CyberStorm PPC and Blizzard PPC accelerator support.\n"
	"QEMU-based PPC emulation requires a compatible qemu-uae plugin in the configured plugins path.\n"
	"Amiberry currently requires qemu-uae API 3.8 or newer.\n";

static const char* help_text_chipset =
	"If you want to emulate an Amiga 1200, select AGA. For most Amiga 500 games,\n"
	"select \"Full ECS\" instead. Some older Amiga games require \"OCS\" or \"ECS Agnus\".\n"
	"You have to play with these options if a game won't work as expected. By selecting\n"
	"an entry in \"Extra\", all internal Chipset settings will change to the required values\n"
	"for the specified Amiga model. For some games, you have to switch to \"NTSC\"\n"
	"(60 Hz instead of 50 Hz) for correct timing.\n"
	"\n"
	"The \"Multithreaded drawing\" option, will enable some Amiberry optimizations\n"
	"that will help the performance when drawing lines on native screen modes.\n"
	"In some cases, this might cause screen tearing artifacts, so you can choose to\n"
	"disable this option when needed. Note that it cannot be changed once emulation has\n"
	"started.\n"
	"\n"
	"If you see graphic issues in a game, try the \"Immediate\" or \"Wait for blitter\"\n"
	"Blitter options.\n"
	"\n"
	"For \"Collision Level\", select \"Sprites and Sprites vs. Playfield\" which is fine\n"
	"for nearly all games.\n";

static const char* help_text_adv_chipset = nullptr;

static const char* help_text_rom =
	"Select the required Kickstart ROM for the Amiga you want to emulate in \"Main ROM File\".\n"
	"\n"
	"In \"Extended ROM File\", you can only select the required ROM for CD32 emulation.\n"
	"\n"
	"You can use the ShapeShifter support checkbox to patch the system ROM for ShapeShifter\n"
	"compatibility. You do not need to run PrepareEmul on startup with this enabled.\n"
	"\n"
	"In \"Cartridge ROM File\", you can select the CD32 FMV module to activate video\n"
	"playback in CD32. There are also some Action Replay and Freezer cards and the built-in\n"
	"HRTMon available.\n"
	"\n"
	"The Advanced UAE Expansion/Boot ROM option allows you to set the following:\n"
	"Rom Disabled: All UAE expansions are disabled. Only needed if you want to force it.\n"
	"Original UAE: Autoconfig board + F0 ROM.\n"
	"New UAE: 64k + F0 ROM - not very useful (per Toni Wilen).\n";

static const char* help_text_ram =
	"Select the amount of RAM for each type you want to emulate in your Amiga.\n"
	"\n"
	"\"Slow\" is the simple memory extension of an Amiga 500.\n"
	"\"Z2 Fast\" is real fast memory in 24 bit address space.\n"
	"\"Z3 Fast\" is real fast memory in 32 bit address space and only available if\n"
	"a 32 bit CPU is selected.\n"
	"\n"
	"Motherboard and processor board memory is only detected by the Amiga if\n"
	"you choose the correct Kickstart ROM (A3000/A4000).\n";

static const char* help_text_floppy =
	"You can enable/disable each drive by clicking the checkbox next to DFx or by selecting\n"
	"the drive type in the dropdown control. The 3.5\" DD drive type is the right choice\n"
	"for nearly all ADF and ADZ floppy image files.\n"
	"\n"
	"The option \"Write-protected\" indicates if the emulator can write to the ADF or not.\n"
	"Changing the write protection of the disk file may fail because of missing rights\n"
	"on the host filesystem.\n"
	"\n"
	"The \"...\" button opens a dialog to select the desired floppy disk file to load.\n"
	"With the dropdown control, you can select one of the disk files most recently used.\n"
	"Details of the currently loaded floppy file can be displayed with the \"?\" button.\n"
	"\n"
	"You can reduce the loading time for lot of games by increasing the floppy drive\n"
	"emulation speed. A few games will not load with higher drive speed and you have\n"
	"to select 100%.\n"
	"\n"
	"If you select an \"FB\" floppy type as one of the drives, that will activate the\n"
	"DrawBridge-related options below. You can use these options to select which DrawBridge\n"
	"driver to use, as well as optionally enable some of the extra features the driver offers.\n"
	"\n"
	"You can also use the \"Create 3.5\" DD disk\" and \"Create 3.5\" HD disk\" buttons, to make\n"
	"a new and empty disk image, for use with the emulator.\n"
	"\n"
	"The \"Save config for disk\" button will save the current configuration to a file with\n"
	"the same name as the disk image file.\n";

static const char* help_text_hd =
	"Hard Drives and CD/DVD drives\n"
	"\n"
	"This panel allows you to add and configure virtual hard drives and CD/DVD drives.\n"
	"\n"
	"Use \"Add Directory/Archive\" to add a folder or Archive as a virtual Amiga drive.\n"
	"Use \"Add Hardfile\" to add an HDD image (hdf) as a hard disk.\n"
	"Use \"Add Hard Drive\" to add a physical hard drive as a hard disk.\n"
	"Use \"Add Tape Drive\" to add a tape drive (directory or file only).\n"
	"\n"
	"With \"Create Hardfile\", you can create a new formatted HDF file up to 2 GB.\n"
	"For large files, it will take some time to create the new hard disk. You have to\n"
	"format the new HDD in the Amiga via the Workbench.\n"
	"\n"
	"You can use the \"...\" button to edit the selected drive. You can change the\n"
	"name, volume label, path, read/write mode, size and boot priority.\n"
	"\n"
	"Use the \"Delete\" button to remove the selected drive.\n"
	"\n"
	"CD/DVD drives:\n"
	"\n"
	"Use \"CD drive/image\" to connect a CD drive. You can select an iso/cue file\n"
	"or use the \"Eject\" button to remove the CD from the drive.\n"
	"\n"
	"You can enable the \"CDTV/CDTV-CR/CD32 turbo CD read speed\" option to speed up\n"
	"the CD read speed.\n"
	"\n"
	"You can enable the \"CDFS automount CD/DVD drives\" option to automatically mount\n"
	"CD/DVD drives on Workbench, when a CD/DVD is inserted.\n";

static const char* help_text_expansions =
	"Some of these expansions will be set automatically for you, depending on the model of\n"
	"Amiga you chose to emulate (ie; the internal IDE for A1200 models).\n"
	"\n"
	"Here you can enable a few expansion options that are commonly used:\n"
	"\n"
	"\"bsdsocket.library\" enables network functions (ie; for web browsers in OS3.9).\n"
	"When this option is enabled, you do not need to use a native Amiga TCP stack (ie;\n"
	"AmiTCP/Genesis/Roadshow), as the Amiga applications you run will see your emulated\n"
	"Amiga as being connected to the network Amiberry is running on.\n"
	"\n"
	"\"uaescsi.device\" enables the uaescsi.device, which can be used to connect to hard\n"
	"drives inside the emulation. This is required for CDFS automounting to work.\n"
	"\n"
	"\"CD32 Full Motion Video cartridge\" enables the FMV module for the CD32, which is\n"
	"only useful if you're emulating a CD32 of course.\n"
	"\n"
	"\"uaenet.device\" enables direct network device emulation using the host network\n"
	"interface (libpcap or TAP). This allows Amiga software to send and receive raw\n"
	"Ethernet frames on the host network.\n";

static const char* help_text_rtg =
	"This panel allows you add a graphics card to your emulated Amiga\n"
	"(otherwise known as an RTG card). Currently on the UAE Zorro II\n"
	"and Zorro III options are available, as Board types.\n"
	"These correspond to the \"uaegfx\" driver, of the P96 package.\n"
	"You can either use the free Aminet version of P96 or the newer iComp\n"
	"versions, as both as supported.\n"
	"\n"
	"The color modes dropdowns allow you to choose which pixel format\n"
	"will be used inside the emulated graphics card. Amiberry currently\n"
	"presents RTG output through a 32-bit host surface for stability,\n"
	"including when the emulated RTG mode itself is 16-bit.\n"
	"\n"
	"Some options are not implemented, so they appear as disabled.\n"
	"\n"
	"     Hardware vertical blank interrupt: If this option is enabled,\n"
	"     an interrupt will be triggered in the emulated system on each\n"
	"     vsync event under RTG modes.\n"
	"\n"
	"     Hardware sprite emulation: This option will use the system\n"
	"     cursor as the Amiga cursor in RTG modes, if supported. Please\n"
	"     note that some systems do not support this, and you will only\n"
	"     get a blank cursor instead, if this option is enabled.\n"
	"     Due to SDL limitations, this currently only works well when\n"
	"     the \"Virtual Mouse driver\" option from the Input panel, is\n"
	"     enabled as well.\n"
	"\n"
	"     Multithreaded: This option will set the RTG rendering to be\n"
	"     done in a separate thread. This might improve the performance\n"
	"     in some cases, especially with higher resolutions.\n"
	"\n"
	"The Refresh rate option allows you to select how the refresh rate\n"
	"for the emulated graphics card should behave:\n"
	"\n"
	"     Chipset: (the default option) this will use the native chipset\n"
	"              selected, for the refresh rate - PAL will use 50 Hz\n"
	"              NTSC will use 60 Hz.\n"
	"\n"
	"     Default: this will use the default refresh rate for the selected\n"
	"              RTG card. Usually that's 60 Hz always.\n"
	"\n"
	"     50/60/70/75: Use the selected refresh rate.\n"
	"\n"
	" In most cases, leaving this to the default value (which is Chipset) should work fine.\n";

static const char* help_text_hwinfo =
	"This panel shows the information about the configured hardware being emulated.\n"
	"You can change the order of the autoconfig boards by enabling the 'Custom board order' checkbox.\n"
	"When enabled, you can use the 'Move up' and 'Move down' buttons to change the order of the boards.\n";

static const char* help_text_display =
	"Select the required width, height and other options of displayed the Amiga screen.\n"
	"\n"
	"Here you can select the screen mode to be used as well:\n"
	"\n"
	"- Windowed: the Amiga screen will be shown in a Window on your desktop\n"
	"- Full-window: the Amiga screen will be scaled to the current resolution.\n"
	"\n"
	"The \"Auto-Crop\" option will try to detect the width/height automatically,\n"
	"and scale it up to the full area of the screen, eliminating any black borders.\n"
	"When this option is disabled, the \"Centering\" options become active, and allow\n"
	"you to enable automatic centering, for Horizontal and Vertical axes individually.\n"
	"This can be useful but keep in mind that especially the vertical centering might\n"
	"cause issues in some games/demos. If that happens, try disabling it and adjust\n"
	"the Width/Height (in combination with H/V offset if you want), instead.\n"
	"\n"
	"\"Borderless\" is only useful in a graphical environment (ie; not when running in\n"
	"console). This will make the Amiberry window appear borderless, with no window\n"
	"controls/decorations around it.\n"
	"\n"
	"\"VSync\" - enabling VSync will use the refresh rate of your monitor to do screen\n"
	"updates. This might reduce tearing, but requires that your monitor supports the same\n"
	"refresh rate that's being emulated (e.g. 50Hz for PAL).\n"
	"\n"
	"Also, you can use the \"Offset\" options, to manually shift the image horizontally\n"
	"or vertically, to fine tune the image position.\n"
	"\n"
	"You can select the \"Scaling method\" used for the displayed Amiga screen.\n"
	"\n"
	" - Auto: will try to find the best looking scaling method depending on your\n"
	"monitor resolution. This is the default option.\n"
	"\n"
	" - Pixelated: will give you a more pixelated and crisp image, but it may cause\n"
	"some distortion if your resolution is not an exact multiple of what is displayed.\n"
	"\n"
	" - Linear: will give you a smoother scaling but some people might find it a bit\n"
	"blurry depending on the Amiga software being used.\n"
	"\n"
	"\n"
	"\"Blacker than black\" - when enabled, boosts the gamma for the black areas, which\n"
	"makes the border around them look darker.\n"
	"\n"
	"\"Filtered Low Res\" - This option enables filtering when LowRes is selected in the\n"
	"Resolution option above. It will make the output look smoother instead of pixelated\n"
	"when using the LowRes option.\n"
	"\n"
	"The \"Correct Aspect Ratio\" - This allows you to choose if you want the correct\n"
	"aspect ratio to be the default display method, or have the image stretched to fill\n"
	"the screen instead.\n"
	"\n"
	"The \"Remove interlace artifacts\" option enables a special feature internally, to\n"
	"eliminate the artifacts produced by Interlace modes. It might cause issues in some\n"
	"applications, so keep that in mind.\n"
	"\n"
	"\"Refresh\" - If this option is enabled, it allows you to modify the refresh rate of\n"
	"the emulation, from the full frame rate that it's normally running at. When this\n"
	"option is disabled, the value will be set to 1, which represents that every 1 frame\n"
	"will be drawn/shown. If you enable the option, the value will be changed to 2, which\n"
	"means that 1 out of every 2 frames will be drawn (essentially what is known as being\n"
	"'frame-skip'). Increasing this value further, will increase the frame-skipping to\n"
	"draw one frame out of X (where X = the value you set it to). This can be useful in\n"
	"situations where you are doing high computational work (like 3D-rendering) and you\n"
	"don't care about the redraw on the screen. This option can also be useful to get\n"
	"to get some more games playable.\n"
	"\n"
	"\"FPS Adj.\" - This option allows you to specify a custom frame rate, instead of\n"
	"the default ones (PAL or NTSC). This can be useful if your monitor does not handle\n"
	"the exact refresh rate required, and you want to have perfect VSync\n"
	"\n"
	"\"Brightness\" - Allows adjustment of the output image brightness, from -200 to 200.\n"
	"\n"
	"\"Line Mode\" - These options define how the Amiga screen is drawn.\n"
	"\n"
	" - Single: This will draw single lines only, which will be stretched vertically to\n"
	"fill the screen when necessary (ie; showing a 640x256 resolution in a 640x512 window)\n"
	"\n"
	" - Double: This option will draw every line twice, which will take up a little more\n"
	"resources, but looks better since they don't have to be stretched vertically. It also\n"
	"enables the options for the Interlace line mode, below.\n"
	"\n"
	" - Scanlines: This option will also draw double the lines, but try to replicate the\n"
	"scanlines effect shown in CRT monitors. Please note that this is not a shader, so the\n"
	"the screen output might not be perfect in all resolutions.\n"
	"\n"
	"\n"
	"\"Interlaced line mode\" - These options further define how the Amiga screen is drawn\n"
	"when using interlaced screenmodes.\n"
	"\n"
	" - Single: Draw single lines, interlace modes will flicker like the real hardware\n"
	"\n"
	" - Double, frames/fields/fields+: These options are only useful in Interlace modes.\n";

static const char* help_text_filter = nullptr;

static const char* help_text_sound =
	"In this panel you can configure the audio output options of Amiberry.\n"
	"\n"
	"The top dropdown, allows you to select the sound card Amiberry will use. The dropdown\n"
	"is populated automatically with every detected device capable of sound output found in\n"
	"your system, which can include USB cards or even some game controllers that include\n"
	"headset support.\n"
	"\n"
	"The System default checkbox, will instead use whatever audio output device is\n"
	"configured as the default in your system.\n"
	"\n"
	"Sound emulation\n"
	"Here you can select if Sound will be Disabled, Disabled but emulated or Enabled.\n"
	"If the selected sound card could not be initialized during startup, Amiberry will\n"
	"automatically disable the sound emulation. Autoswitching allows the emulator to switch\n"
	"between Enabled/Disabled, depending on whether the audio buffer has something or not.\n"
	"\n"
	"Volume\n"
	"Here you can select the output volume for the various emulated devices.\n"
	"\n"
	"Options\n"
	"You can adjust the options for the sound output below, to tune things to your liking:\n"
	"    - Channel mode: Mono, Stereo and other configurations are supported.\n"
	"    - Stereo separation: the default value is 70%, which sounds good in most cases.\n"
	"    - Interpolation: The default value is Anti. Different of interpolation have a\n"
	"      different impact on performance. You may need headphones to really hear the\n"
	"      difference.\n"
	"    - Frequency: The default frequency is 44100 Hz, which most sound cards support.\n"
	"    - Swap channels: Swap the left/right channels, for Paula, AHI or both.\n"
	"    - Stereo delay: By default, there is no stereo delay at all.\n"
	"    - Filter: Depending on the model you selected, the relevant filter option will be\n"
	"      set here by default.\n"
	"\n"
	"Floppy drive sound emulation\n"
	"This option allows you to enable the sound the floppy drive makes in a real Amiga,\n"
	"when reading/writing disks. If you enable this option, you can also adjust the volume\n"
	"for the sounds produced.\n"
	"\n"
	"Sound buffer size\n"
	"This setting controls the emulator-side audio buffer used for sound output. Smaller\n"
	"values usually reduce latency, but they also give the system less headroom and can\n"
	"cause glitches or dropouts on slower hardware. Larger values increase latency, but\n"
	"tend to be more robust when the host system is under load.\n"
	"\n"
	"The value shown in the panel is not the full end-to-end output latency by itself.\n"
	"Actual latency also depends on host audio queueing and the selected audio device.\n"
	"The panel shows an approximate milliseconds-per-buffer value to make this easier to\n"
	"judge while testing different settings.\n";

static const char* help_text_themes =
	"The Themes panel allows you to customize the look of the Amiberry GUI.\n"
	"\n"
	"Theme selection\n"
	"Use the Theme dropdown to select a preset. Default and Dark are built-in presets\n"
	"that are always available. You can also create and select custom themes.\n"
	"\n"
	"Font\n"
	"You can change the font used by the GUI by entering a font filename or selecting\n"
	"one using the \"...\" file browser button. The font size can also be adjusted.\n"
	"You can expand the \"System fonts\" section to browse and select from fonts\n"
	"installed on your system.\n"
	"Font size changes apply immediately using the +/- buttons.\n"
	"After changing the font name, click \"Apply font\" to load the new font.\n"

	"\n"
	"Colors\n"
	"You can customize the GUI colors, organized by category:\n"
	"- Window: Window background and input field backgrounds\n"
	"- Text: Normal and disabled text colors\n"
	"- Buttons: Button and button hover colors\n"
	"- Accent: Active/accent color (used for checkmarks, active tabs, sliders)\n"
	"  and selection highlight\n"
	"- Borders: Border and separator line colors\n"
	"- Tables: Table header background\n"
	"- Overlay: Modal dim color (darkens the screen behind popups)\n"
	"Color changes are previewed immediately in the GUI.\n"
	"\n"
	"Actions\n"
	"- Use: Apply the current theme as your active theme\n"
	"- Save: Overwrite the current custom theme file (disabled for built-in presets)\n"
	"- Save as...: Save the current colors and font under a new theme name\n"
	"- Reset: Reload the current theme from disk, discarding unsaved changes\n";

static const char* help_text_input =
	"Here you can select the devices connected to the various input ports.\n"
	"Port 0 is normally used by a Mouse, while Port 1 is usually for a Joystick.\n"
	"Ports 2 and 3 are emulating the Parallel port adapter, and are only supported\n"
	"in some games.\n"
	"\n"
	"You can use the Swap Ports button to swap the devices between port 0 and 1.\n"
	"Auto-switching enables you to switch Port 0 between Mouse-Joystick based on\n"
	"which device is being used.\n"
	"\n"
	"Mouse Map: This allows you to use the Left analog stick on your controller\n"
	"to emulate a mouse in Port 0, with the Shoulder buttons acting as Mouse buttons.\n"
	"Useful if you don't have a real mouse connected and only a controller with\n"
	"analog sticks (e.g. PS4, XBox).\n"
	"Only works when type is set to something other than Default.\n"
	"\n"
	"You can set the Autofire Rate, and choose if a device should have Autofire\n"
	"as well as what kind of autofire (normal, toggle, always-on).\n"
	"\n"
	"If you enable Virtual Mouse driver, mouse input events will be read as absolute\n"
	"instead of relative. This may not work with all apps. Below that you can select\n"
	"which mouse pointer(s) will be visible during emulation.\n"
	"\n"
	"Magic Mouse untrap will free the mouse if it's moved outside the emulator window\n"
	"and re-capture it when it's moved back in. Only useful when running under a\n"
	"windowed environment.\n";

static const char* help_text_io =
	"In this panel, you can configure the various I/O Ports that Amiberry can emulate.\n"
	"Some of these options will depend on what hardware you have available in your system\n"
	"(e.g. serial ports).\n"
	"\n"
	"Sampler: This dropdown will be populated with any Recording devices detected in your\n"
	"         system. You can select such a device, to use it as a Sampler in the emulated\n"
	"         Amiga.\n"
	"\n"
	"Serial Port: If you have any physical serial ports connected to your computer,\n"
	"         they will be shown in this dropdown. You can select one, to use as the\n"
	"         emulated Amiga serial port. You can also use USB to Serial adapters for\n"
	"         this purpose. Only standard 7/8-bit serial protocols are supported, as the\n"
	"         9-bit serial protocol is not supported by PC hardware.\n"
	"\n"
	"         You can use the TCP: options to have Amiberry listen on that port and act as a\n"
	"         telnet server. Everything written to the serial port will be transmitted to the\n"
	"         connected client and vice versa. This is useful for debugging purposes.\n"
	"\n"
	"Shared: Share the port with the Host operating system\n"
	"RTS/CTS: If you require handshake signals, you can enable this checkbox. This is usually\n"
	"         required by certain hardware, like modems or other physical devices.\n"
	"\n"
	"Direct: If you are connecting directly to another instance of Amiberry, you can use\n"
	"        this option, to emulate a null-modem cable connection. Some games supported\n"
	"        this feature.\n"
	"\n"
	"CR/LF conversion: Translate serial line endings between Amiga and host conventions.\n"
	"\n"
	"uaeserial.device: You can use this option if you want to use multiple serial ports,\n"
	"         by mapping Amiga side unit X = host serial port X\n"
	"\n"
	"MIDI Out/In: Amiberry uses the PortMidi library to send and receive MIDI messages,\n"
	"         so if you have any MIDI devices connected, you can select them here. You\n"
	"         can also emulate a Roland MT-32 MIDI device using Amiberry, if you have\n"
	"         the required MT-32 ROM files installed. Please note that the path for\n"
	"         these ROM files must be in your System ROMs: directory as set in the\n"
	"         \"Paths\" panel, or inside a \"mt32-roms\" directory under that location.\n"
	"\n"
	"         If the required MT-32 ROMs are detected by Amiberry, you can then select\n"
	"         the emulated MT-32 device, using the MIDI \"Out:\" dropdown options. This\n"
	"         allows you to use any Amiga software that makes use of it (several Sierra\n"
	"         games for example). The audio output here is mixed with Paula's output.\n"
	"\n"
	"Route MIDI In to MIDI Out: This option will reroute the MIDI In to the MIDI Out port,\n"
	"         as the name implies.\n"
	"\n"
	"Protection Dongle: This option allows you to emulate such a dongle, which some\n"
	"         software required in order to work.\n";

static const char* help_text_custom =
	"In this panel you can customize the controls for your gamepad/joystick and assign any\n"
	"of the several available input events to each button. Of course, this panel requires\n"
	"a joystick or controller to be connected, in order for the dropdowns to be enabled.\n"
	"\n"
	"The available customization options include functions such as:\n"
	"\n"
	"- Standard joystick inputs\n"
	"- Parallel port Joystick inputs\n"
	"- CD32 gamepad inputs\n"
	"- All keyboard keys\n"
	"- Various emulator functions (i.e. Autocrop, Quit, Reset, Enter GUI)\n"
	"\n"
	"Furthermore, this panel will display different information depending on if you are using\n"
	"a RetroArch mapping (ie; like RetroPie) or not. If this is a RetroArch mapping, then a\n"
	"\"[R]\" indicator will appear next to the controller's name to show that.\n"
	"\n"
	"When Retroarch mapping is used, the already mapped/assigned buttons will be disabled and\n"
	"you cannot change them from this panel. On standard (non-Retroarch) mappings, a \"[N]\"\n"
	"indicator will appear, and you can change the mappings to any of the options available.\n"
	"\n"
	"To change a mapping option, select the port which you wish to re-map, and the functions\n"
	"of the individual buttons are selectable via the marked drop-down boxes.\n"
	"\n"
	"You can also assign a Hotkey which can be used in combination with the buttons, which\n"
	"provides an extra set of custom controls. The controls used while the Hotkey button is\n"
	"pressed can be seen if you switch from \"None\" to the \"Hotkey\" option. The Hotkey itself\n"
	"can also be assigned from here as well.\n"
	"\n"
	"You can also remap the game controller D-Pad to act like the Left Analog joystick.\n"
	"\n"
	"You can use the \"Save as default mapping\" button, which will save the current mapping\n"
	"as the default for the current controller. It will be automatically applied on startup\n"
	"for this controller. This option is only available in non-Retroarch environments.\n";

static const char* help_text_diskswapper =
	"The disk swapper mechanism is similar in concept to a playlist or a CD changer: A total\n"
	"of up to 20 disk images can be added to the slot list, for swapping them quickly using\n"
	"the hotkey combinations detailed below.\n"
	"\n"
	"You can insert or eject a disk image on each slot, by using the relevant buttons\n"
	"on the left side of the slot listing table.\n"
	"\n"
	"Use the \"Remove All\" button, to eject all disk images from all slots simultaneously.\n"
	"\n"
	"Clicking on the \"Drive\" button to the right of each entry, will cycle through\n"
	"all of the enabled floppy drives. Once the disk images have a drive name next\n"
	"to them, they will appear in the appropriate Floppy Drive slots.\n"
	"\n"
	"You can also use the following keyboard combinations to swap images on the fly:\n"
	"\n"
	"- To quickly swap a disk image into drive DF0:, use END + 1-0 (slots 1-10)\n"
	"\n"
	"- To insert a disk image into drives DF0:-DF3: then press END+F1 - END+F4\n"
	"\n"
	"- To eject a disk image from drives DF0:-DF3: then press Shift+END+F1 - Shift+END+F4\n"
	"\n"
	"Additionally, you can control disk swapper actions, by assigning a Custom Event to\n"
	"the required game-controller buttons, in the \"Custom controls\" configuration panel.\n"
	"\n"
	"The available custom events for disk swapper actions are:\n"
	"\n"
	"- Next slot in Disk Swapper\n"
	"- Previous slot in Disk Swapper\n"
	"- Insert next Disk Swapper slot in DF0:\n"
	"- Insert previous Disk Swapper slot in DF0:\n"
	"- Insert disk in current Disk Swapper slot in DF0:\n"
	"- Insert disk in current Disk Swapper slot in DF1:\n"
	"- Insert disk in current Disk Swapper slot in DF2:\n"
	"- Insert disk in current Disk Swapper slot in DF3:\n";

static const char* help_text_misc =
	"In this panel you can control various emulator options that aren't covered by any of\n"
	"the previous panels. Changes made here can be saved to a .uae config file and will\n"
	"override any defaults that may exist in the amiberry.conf file. The naming of these\n"
	"options makes their usage reasonably apparent, however they are detailed in full\n"
	"below for further clarity.\n"
	"\n"
	"On the right of this panel you can assign some common keys or buttons, for use with\n"
	"the emulation control:\n"
	"\n"
	"- Open GUI: The key to open the main Amiberry GUI. The F12 key is the default.\n"
	"- Quit Key: A key to quit Amiberry immediately. No default is set.\n"
	"- Action Replay: A key to open Action Replay/HRTmon. The Pause key is the default.\n"
	"- FullScreen: A key to toggle Fullscreen/Fullwindow/Windowed mode. No default is set.\n"
	"- Minimize: A key to minimize Amiberry. No default is set.\n"
	"- Screenshot: A key or controller button to take a screenshot. No default is set.\n"
	"- Debugger: A key or controller button to activate the built-in debugger. No default is set.\n"
	"\n"
	"Below that, you can assign your keyboard's LEDs to blink and indicate the activity\n"
	"and status of various functions within the emulation. The available functions are:\n"
	"\n"
	"- Power: Power LED (on/off)\n"
	"- DF0-DF3: drive activity (will blink when the drive is reading/writing)\n"
	"- HD: Hard Drive activity (will blink when the drive is reading/writing)\n"
	"- CD: CD Drive activity (will blink when the CD drive is reading)\n"
	"\n"
	"The descriptions of the various emulator options available here are;\n"
	"\n"
	"- Untrap = middle button: This option enables the use of the mouse middle button to\n"
	"  release control of the mouse pointer in Amiberry. If enabled, the middle mouse\n"
	"  button cannot be used under AmigaOS.\n"
	"\n"
	"- Show GUI on startup: This option controls if the GUI should be shown on startup,\n"
	"  when a configuration file is loaded. If you want to start emulating immediately\n"
	"  when loading a config file, you can disable this option.\n"
	"\n"
	"- Always on top: Set Amiberry window to be always on top of other windows.\n"
	"\n"
	"- GUI Always on top: Set Amiberry GUI window to be always on top of other windows.\n"
	"  When using Fullscreen mode in x11, enable this option to promote the GUI window.\n"
	"\n"
	"- Synchronize clock: Syncs the Amiga clock to the host time.\n"
	"\n"
	"- One second reboot pause: This option inserts a one-second delay, during reboots.\n"
	"  Useful if the emulation is too fast, and you want to enter the Early Startup Menu\n"
	"  by holding down both mouse buttons.\n"
	"\n"
	"- Faster RTG: This option will skip parts of the custom chipset emulation, when RTG\n"
	"  modes are active. This will help performance with RTG modes, and is the default.\n"
	"\n"
	"- Clipboard sharing: This option allows you to share the clipboard between AmigaOS\n"
	"  and the host OS, and you can copy/paste text between the two if this is enabled.\n"
	"\n"
	"- Allow native code: This option enables the support for using \"host-run\" and other\n"
	"  similar tools, to launch host commands from inside the emulated system. Since this\n"
	"  can also be a security risk, it's disabled by default.\n"
	"\n"
	"The Status Line displays information about the emulation activity like sound buffer\n"
	"and CPU usage, FPS, and disk activity, and on some platforms the temperature of the\n"
	"SoC/board. You can use the following two options to enable/disable this feature;\n"
	"\n"
	"- Status Line native: Shows the status line when native (PAL/NTSC) screens are open.\n"
	"- Status Line RTG: Same as the native option above, this will show the status line\n"
	"  in RTG modes. If you want it always visible, you can enable both options.\n"
	"\n"
	"- Log illegal memory accesses: If enabled, then illegal memory accesses from the\n"
	"  emulated environment will be logged in the logfile (if that is enabled).\n"
	"\n"
	"- Minimize when focus is lost: If enabled, when Amiberry loses focus it will then\n"
	"  automatically minimize it's window.\n"
	"\n"
	"- Master floppy write protection: This option allows you to centrally write-protect\n"
	"  all floppy images, to avoid accidentally writing something to them.\n"
	"\n"
	"- Master harddrive write protection: Same as the above option, but for hard drives.\n"
	"\n"
	"- Hide all UAE autoconfig boards: If enabled all UAE-specific boards will be hidden\n"
	"  from the system in emulation.\n"
	"\n"
	"- RCtrl = RAmiga: Use the RCtrl as the RAmiga key, in lieu of Right Windows key\n"
	"\n"
	"- Capture mouse when window is activated: If this option is enabled, the mouse will\n"
	"  be automatically captured if the Amiberry window is selected.\n"
	"\n"
	"- A600/A1200/A4000 IDE scsi.device disabled: This option will disable the internal\n"
	"  IDE scsi.device for those Amiga models, making it faster to boot up.\n"
	"\n"
	"- Alt-Tab releases control: When enabled, Alt-Tab is reserved for the host so\n"
	"  switching away from Amiberry releases capture on focus loss. That key combination\n"
	"  cannot be used under AmigaOS.\n"
	"\n"
	"- Warp mode reset: If enabled, \"Warp mode\" is used to speed-up the reset process.\n"
	"\n"
	"If a valid RetroArch config is found by Amiberry, the following options apply;\n"
	"\n"
	"- Use RetroArch Quit button: If enabled, a retroarch mapping for Quit will be valid.\n"
	"- Use RetroArch Menu button: Same as above for retroarch mapping for Opening the GUI\n"
	"- Use RetroArch Reset button: Same as above for the retroarch mapping for Resetting\n"
	"  the emulation.\n";

static const char* help_text_prio =
	"In this panel you can configure the task priority for Amiberry, under different usage\n"
	"scenarios. In most cases, the default settings work fine here.\n"
	"\n"
	"\"When Active\" - Set the priority options for when Amiberry is currently active.\n"
	"     |\n"
	"  \"Mouse uncaptured\" - Set what Amiberry does when active and mouse capture is lost.\n"
	"\n"
	"\"When Inactive\" - Set the priority options for when Amiberry is currently inactive.\n"
	"\n"
	"\"When Minimized\" - Set the priority options for when Amiberry is minimized.\n";

static const char* help_text_savestates =
	"Savestates\n"
	"\n"
	"Savestates allow you to save the current state of the emulation to a file, and to\n"
	"restore it later. This can be useful to save your progress in a game, or to quickly\n"
	"load a specific configuration. A screenshot of the current state is saved along with\n"
	"the statefile.\n"
	"\n"
	"To save a state, click the 'Save to Slot' button. To load a state, click the 'Load from\n"
	"Slot' button. To delete a state, click the 'Delete Slot' button.\n"
	"\n"
	"You can also save and load states to and from files. Click the 'Save state...' button\n"
	"to save the current state to a file, and the 'Load state...' button to load a state\n"
	"from a file.\n"
	"\n"
	"Savestates are saved to the Save states path configured in the Paths panel.\n"
	"\n"
	"Note: Savestates will not work when emulating CD32/CDTV machine types, and will likely\n"
	"fail when the JIT/PPC/RTG emulation options are enabled.\n"
	"\n"
	"Savestates are stored in a .uss file, with the name being that of the currently loaded\n"
	"floppy disk image or whdload .lha file, or the name of the loaded HDD .uae config.\n";

static const char* help_text_virtual_keyboard =
	"In this panel you can configure the on-screen joystick and on-screen keyboard overlays.\n"
	"\n"
	"\"On-screen Joystick\": shows a virtual D-pad and fire buttons for touchscreen control.\n"
	"\n"
	"\"On-screen Keyboard enabled\": enables the Amiga-style on-screen keyboard overlay.\n"
	" The keyboard can be operated via touch or controller D-pad navigation.\n"
	" It works in both native (ECS/AGA) and RTG screen modes.\n"
	"\n"
	"\"Transparency\": the amount of transparency the on-screen keyboard will have when shown.\n"
	"\n"
	"\"Toggle button\": which controller button toggles the on-screen keyboard on/off.\n"
	"\n"
	"These options can be set as defaults in your amiberry.conf file.\n"
	"\n"
	"\"Use Retroarch Vkbd button\": use the RetroArch mapping of the \"vkbd\" button if found.\n"
	" This is only useful in RetroArch environments.\n";

static const char* help_text_whdload =
	"WHDLoad auto-config:\n"
	"Select a WHDLoad LHA file to auto-configure the emulator for game.\n"
	"The game name, UUID, default slave, and other options will be parsed from the XML.\n"
	"You can also select a slave from the list.\n"
	"The custom fields can be used to add custom options per slave.\n"
	"The global options are used for all games.\n"
	"\n"
	"Button Wait: Wait for button press before starting the game.\n"
	"Show Splash: Show the WHDLoad splash screen.\n"
	"Config Delay: Delay in seconds before starting the game.\n"
	"Write Cache: Enable Write cache before starting the game.\n"
	"Quit on Exit: Quit Amiberry when the game exits.\n"
	"\n"
	"Note: You must load the same WHDLoad .lha file, to be able to change\n"
	"the custom/global settings here, when an associated .uae config file\n"
	"is used. You cannot change these settings by loading the .uae config\n"
	"file alone - you must first load the .lha file itself, change any\n"
	"settings, and then save the .uae config file.\n";

static const char* help_text_update =
	"Check for and install Amiberry updates.\n"
	"\n"
	"Check for updates: Enable or disable automatic update checks on startup.\n"
	"\n"
	"Update channel:\n"
	"  Stable - Only released versions.\n"
	"  Preview - Includes pre-release versions (may contain bugs).\n"
	"\n"
	"Update method (determined by your installation type):\n"
	"  Self-update - Amiberry can download and apply updates directly.\n"
	"  Notify only - You will be notified, but must update manually.\n"
	"  Disabled - Updates are managed externally (Flatpak, Play Store, etc.).\n"
	"\n"
	"Use 'Check Now' to manually check for the latest version.\n";
