Add internal colour palettes from TheWolfBunny (https://www.deviantart.com/thewolfbunny/gallery/69987002/game-boy-palettes) + update libretro_core_options to v1.3

This commit is contained in:
jdgleaver 2019-10-10 16:40:27 +01:00
parent 4d9ad7b299
commit d4b6fb2021
4 changed files with 795 additions and 99 deletions

View File

@ -1117,7 +1117,7 @@ enum retro_mod
* This may be still be done regardless of the core options
* interface version.
*
* If version is 1 however, core options may instead be set by
* If version is >= 1 however, core options may instead be set by
* passing an array of retro_core_option_definition structs to
* RETRO_ENVIRONMENT_SET_CORE_OPTIONS, or a 2D array of
* retro_core_option_definition structs to RETRO_ENVIRONMENT_SET_CORE_OPTIONS_INTL.
@ -1132,8 +1132,8 @@ enum retro_mod
* GET_VARIABLE.
* This allows the frontend to present these variables to
* a user dynamically.
* This should only be called if RETRO_ENVIRONMENT_GET_ENHANCED_CORE_OPTIONS
* returns an API version of 1.
* This should only be called if RETRO_ENVIRONMENT_GET_CORE_OPTIONS_VERSION
* returns an API version of >= 1.
* This should be called instead of RETRO_ENVIRONMENT_SET_VARIABLES.
* This should be called the first time as early as
* possible (ideally in retro_set_environment).
@ -1169,8 +1169,6 @@ enum retro_mod
* i.e. it should be feasible to cycle through options
* without a keyboard.
*
* First entry should be treated as a default.
*
* Example entry:
* {
* "foo_option",
@ -1196,8 +1194,8 @@ enum retro_mod
* GET_VARIABLE.
* This allows the frontend to present these variables to
* a user dynamically.
* This should only be called if RETRO_ENVIRONMENT_GET_ENHANCED_CORE_OPTIONS
* returns an API version of 1.
* This should only be called if RETRO_ENVIRONMENT_GET_CORE_OPTIONS_VERSION
* returns an API version of >= 1.
* This should be called instead of RETRO_ENVIRONMENT_SET_VARIABLES.
* This should be called the first time as early as
* possible (ideally in retro_set_environment).
@ -2504,8 +2502,20 @@ struct retro_core_option_display
};
/* Maximum number of values permitted for a core option
* NOTE: This may be increased on a core-by-core basis
* if required (doing so has no effect on the frontend) */
* > Note: We have to set a maximum value due the limitations
* of the C language - i.e. it is not possible to create an
* array of structs each containing a variable sized array,
* so the retro_core_option_definition values array must
* have a fixed size. The size limit of 128 is a balancing
* act - it needs to be large enough to support all 'sane'
* core options, but setting it too large may impact low memory
* platforms. In practise, if a core option has more than
* 128 values then the implementation is likely flawed.
* To quote the above API reference:
* "The number of possible options should be very limited
* i.e. it should be feasible to cycle through options
* without a keyboard."
*/
#define RETRO_NUM_CORE_OPTION_VALUES_MAX 128
struct retro_core_option_value

View File

@ -571,12 +571,473 @@ static const unsigned short sgb4H[] = {
PACK15_4(0xF8F8C8, 0xB8C058, 0x808840, 0x405028)
};
//
// Palettes by TheWolfBunny
// https://www.deviantart.com/thewolfbunny/gallery/69987002/game-boy-palettes
//
static const unsigned short twb_756_production[] = {
PACK15_4(0xBBC4E4, 0x82899F, 0x4A4E5B, 0x121316),
PACK15_4(0xBBC4E4, 0x82899F, 0x4A4E5B, 0x121316),
PACK15_4(0xBBC4E4, 0x82899F, 0x4A4E5B, 0x121316)
};
static const unsigned short twb_akb48_pink[] = {
PACK15_4(0xF596B4, 0xAB697D, 0x623C48, 0x180F12),
PACK15_4(0xF596B4, 0xAB697D, 0x623C48, 0x180F12),
PACK15_4(0xF596B4, 0xAB697D, 0x623C48, 0x180F12)
};
static const unsigned short twb_angry_volcano[] = {
PACK15_4(0xF8B800, 0xF83800, 0xA81000, 0x1C0000),
PACK15_4(0xF8B800, 0xF83800, 0xA81000, 0x1C0000),
PACK15_4(0xF8B800, 0xF83800, 0xA81000, 0x1C0000)
};
static const unsigned short twb_anime_expo[] = {
PACK15_4(0xE5EAEB, 0x9BA3A6, 0x656E72, 0x242A2D),
PACK15_4(0xE5EAEB, 0x9BA3A6, 0x656E72, 0x242A2D),
PACK15_4(0xE5EAEB, 0x9BA3A6, 0x656E72, 0x242A2D)
};
static const unsigned short twb_aqours_blue[] = {
PACK15_4(0x009FE8, 0x006FA2, 0x003F5C, 0x000F17),
PACK15_4(0x009FE8, 0x006FA2, 0x003F5C, 0x000F17),
PACK15_4(0x009FE8, 0x006FA2, 0x003F5C, 0x000F17)
};
static const unsigned short twb_aquatic_iro[] = {
PACK15_4(0xA0D8EF, 0x2CA9E1, 0x3E62AD, 0x192F60),
PACK15_4(0xA0D8EF, 0x2CA9E1, 0x3E62AD, 0x192F60),
PACK15_4(0xA0D8EF, 0x2CA9E1, 0x3E62AD, 0x192F60)
};
static const unsigned short twb_bandai_namco[] = {
PACK15_4(0xFFBF00, 0xFF5C00, 0xE60000, 0x000000),
PACK15_4(0xFFBF00, 0xFF5C00, 0xE60000, 0x000000),
PACK15_4(0xFFBF00, 0xFF5C00, 0xE60000, 0x000000)
};
static const unsigned short twb_blossom_pink[] = {
PACK15_4(0xF09898, 0xA86A6A, 0x603C3C, 0x180F0F),
PACK15_4(0xF09898, 0xA86A6A, 0x603C3C, 0x180F0F),
PACK15_4(0xF09898, 0xA86A6A, 0x603C3C, 0x180F0F)
};
static const unsigned short twb_bubbles_blue[] = {
PACK15_4(0x88D0F0, 0x5F91A8, 0x365360, 0x0D1418),
PACK15_4(0x88D0F0, 0x5F91A8, 0x365360, 0x0D1418),
PACK15_4(0x88D0F0, 0x5F91A8, 0x365360, 0x0D1418)
};
static const unsigned short twb_builder_yellow[] = {
PACK15_4(0xFACD00, 0xAF8F00, 0x645200, 0x191400),
PACK15_4(0xFACD00, 0xAF8F00, 0x645200, 0x191400),
PACK15_4(0xFACD00, 0xAF8F00, 0x645200, 0x191400)
};
static const unsigned short twb_buttercup_green[] = {
PACK15_4(0xB8E088, 0x809C5F, 0x495936, 0x12160D),
PACK15_4(0xB8E088, 0x809C5F, 0x495936, 0x12160D),
PACK15_4(0xB8E088, 0x809C5F, 0x495936, 0x12160D)
};
static const unsigned short twb_camouflage[] = {
PACK15_4(0xBCAB90, 0xAC7E54, 0x79533D, 0x373538),
PACK15_4(0xBCAB90, 0xAC7E54, 0x79533D, 0x373538),
PACK15_4(0xBCAB90, 0xAC7E54, 0x79533D, 0x373538)
};
static const unsigned short twb_cardcaptor_pink[] = {
PACK15_4(0xF2F4F7, 0xEAC3D6, 0xE10E82, 0x460428),
PACK15_4(0xF2F4F7, 0xEAC3D6, 0xE10E82, 0x460428),
PACK15_4(0xF2F4F7, 0xEAC3D6, 0xE10E82, 0x460428)
};
static const unsigned short twb_christmas[] = {
PACK15_4(0xCBB96A, 0x20A465, 0xA03232, 0x100505),
PACK15_4(0xCBB96A, 0x20A465, 0xA03232, 0x100505),
PACK15_4(0xCBB96A, 0x20A465, 0xA03232, 0x100505)
};
static const unsigned short twb_crunchyroll_orange[] = {
PACK15_4(0xF78C25, 0xAC6219, 0x62380E, 0x180E03),
PACK15_4(0xF78C25, 0xAC6219, 0x62380E, 0x180E03),
PACK15_4(0xF78C25, 0xAC6219, 0x62380E, 0x180E03)
};
static const unsigned short twb_digivice[] = {
PACK15_4(0x8C8C73, 0x646453, 0x38382E, 0x000000),
PACK15_4(0x8C8C73, 0x646453, 0x38382E, 0x000000),
PACK15_4(0x8C8C73, 0x646453, 0x38382E, 0x000000)
};
static const unsigned short twb_do_the_dew[] = {
PACK15_4(0xFFFFFF, 0xA1D23F, 0xD82A34, 0x29673C),
PACK15_4(0xFFFFFF, 0xA1D23F, 0xD82A34, 0x29673C),
PACK15_4(0xFFFFFF, 0xA1D23F, 0xD82A34, 0x29673C)
};
static const unsigned short twb_eevee_brown[] = {
PACK15_4(0xC88D32, 0x8C6223, 0x503814, 0x140E05),
PACK15_4(0xC88D32, 0x8C6223, 0x503814, 0x140E05),
PACK15_4(0xC88D32, 0x8C6223, 0x503814, 0x140E05)
};
static const unsigned short twb_fruity_orange[] = {
PACK15_4(0xF3BF88, 0xF08300, 0x9F563A, 0x241A08),
PACK15_4(0xF3BF88, 0xF08300, 0x9F563A, 0x241A08),
PACK15_4(0xF3BF88, 0xF08300, 0x9F563A, 0x241A08)
};
static const unsigned short twb_game_com[] = {
PACK15_4(0xA7BF6B, 0x6F8F4F, 0x0F4F2F, 0x000000),
PACK15_4(0xA7BF6B, 0x6F8F4F, 0x0F4F2F, 0x000000),
PACK15_4(0xA7BF6B, 0x6F8F4F, 0x0F4F2F, 0x000000)
};
static const unsigned short twb_game_grump_orange[] = {
PACK15_4(0xE9762F, 0xA35220, 0x5D2F12, 0x170B04),
PACK15_4(0xE9762F, 0xA35220, 0x5D2F12, 0x170B04),
PACK15_4(0xE9762F, 0xA35220, 0x5D2F12, 0x170B04)
};
static const unsigned short twb_gameking[] = {
PACK15_4(0x8CCE94, 0x6B9C63, 0x506541, 0x184221),
PACK15_4(0x8CCE94, 0x6B9C63, 0x506541, 0x184221),
PACK15_4(0x8CCE94, 0x6B9C63, 0x506541, 0x184221)
};
static const unsigned short twb_game_master[] = {
PACK15_4(0x829FA6, 0x5A787E, 0x384A50, 0x2D2D2B),
PACK15_4(0x829FA6, 0x5A787E, 0x384A50, 0x2D2D2B),
PACK15_4(0x829FA6, 0x5A787E, 0x384A50, 0x2D2D2B)
};
static const unsigned short twb_ghostly_aoi[] = {
PACK15_4(0x84A2D4, 0x5A79BA, 0x19448E, 0x0F2350),
PACK15_4(0x84A2D4, 0x5A79BA, 0x19448E, 0x0F2350),
PACK15_4(0x84A2D4, 0x5A79BA, 0x19448E, 0x0F2350)
};
static const unsigned short twb_golden_wild[] = {
PACK15_4(0xB99F65, 0x816F46, 0x4A3F28, 0x120F0A),
PACK15_4(0xB99F65, 0x816F46, 0x4A3F28, 0x120F0A),
PACK15_4(0xB99F65, 0x816F46, 0x4A3F28, 0x120F0A)
};
static const unsigned short twb_green_banana[] = {
PACK15_4(0x60D808, 0x489800, 0x386838, 0x204800),
PACK15_4(0x60D808, 0x489800, 0x386838, 0x204800),
PACK15_4(0x60D808, 0x489800, 0x386838, 0x204800)
};
static const unsigned short twb_greenscale[] = {
PACK15_4(0x9CBE0C, 0x6E870A, 0x2C6234, 0x0C360C),
PACK15_4(0x9CBE0C, 0x6E870A, 0x2C6234, 0x0C360C),
PACK15_4(0x9CBE0C, 0x6E870A, 0x2C6234, 0x0C360C)
};
static const unsigned short twb_halloween[] = {
PACK15_4(0xFFCC00, 0xF68C00, 0x9540A5, 0x0E0610),
PACK15_4(0xFFCC00, 0xF68C00, 0x9540A5, 0x0E0610),
PACK15_4(0xFFCC00, 0xF68C00, 0x9540A5, 0x0E0610)
};
static const unsigned short twb_hero_yellow[] = {
PACK15_4(0xFFF100, 0xB2A800, 0x666000, 0x191800),
PACK15_4(0xFFF100, 0xB2A800, 0x666000, 0x191800),
PACK15_4(0xFFF100, 0xB2A800, 0x666000, 0x191800)
};
static const unsigned short twb_hokage_orange[] = {
PACK15_4(0xEA8352, 0xA35B39, 0x5D3420, 0x170D08),
PACK15_4(0xEA8352, 0xA35B39, 0x5D3420, 0x170D08),
PACK15_4(0xEA8352, 0xA35B39, 0x5D3420, 0x170D08)
};
static const unsigned short twb_labo_fawn[] = {
PACK15_4(0xD7AA73, 0x967650, 0x56442E, 0x15110B),
PACK15_4(0xD7AA73, 0x967650, 0x56442E, 0x15110B),
PACK15_4(0xD7AA73, 0x967650, 0x56442E, 0x15110B)
};
static const unsigned short twb_legendary_super_saiyan[] = {
PACK15_4(0xA5DB5A, 0x73993E, 0x425724, 0x101509),
PACK15_4(0xA5DB5A, 0x73993E, 0x425724, 0x101509),
PACK15_4(0xA5DB5A, 0x73993E, 0x425724, 0x101509)
};
static const unsigned short twb_lemon_lime_green[] = {
PACK15_4(0xF1C545, 0x51A631, 0x336632, 0x142813),
PACK15_4(0xF1C545, 0x51A631, 0x336632, 0x142813),
PACK15_4(0xF1C545, 0x51A631, 0x336632, 0x142813)
};
static const unsigned short twb_lime_midori[] = {
PACK15_4(0xE0EBAF, 0xAACF53, 0x7B8D42, 0x475950),
PACK15_4(0xE0EBAF, 0xAACF53, 0x7B8D42, 0x475950),
PACK15_4(0xE0EBAF, 0xAACF53, 0x7B8D42, 0x475950)
};
static const unsigned short twb_mania_plus_green[] = {
PACK15_4(0x79C14E, 0x548736, 0x304D1F, 0x0C1307),
PACK15_4(0x79C14E, 0x548736, 0x304D1F, 0x0C1307),
PACK15_4(0x79C14E, 0x548736, 0x304D1F, 0x0C1307)
};
static const unsigned short twb_microvision[] = {
PACK15_4(0xA0A0A0, 0x787878, 0x505050, 0x303030),
PACK15_4(0xA0A0A0, 0x787878, 0x505050, 0x303030),
PACK15_4(0xA0A0A0, 0x787878, 0x505050, 0x303030)
};
static const unsigned short twb_million_live_gold[] = {
PACK15_4(0xCDB261, 0x8F7C43, 0x524726, 0x141109),
PACK15_4(0xCDB261, 0x8F7C43, 0x524726, 0x141109),
PACK15_4(0xCDB261, 0x8F7C43, 0x524726, 0x141109)
};
static const unsigned short twb_miraitowa_blue[] = {
PACK15_4(0x25BDEF, 0x1984A7, 0x0E4B5F, 0x031217),
PACK15_4(0x25BDEF, 0x1984A7, 0x0E4B5F, 0x031217),
PACK15_4(0x25BDEF, 0x1984A7, 0x0E4B5F, 0x031217)
};
static const unsigned short twb_nascar[] = {
PACK15_4(0xFFD659, 0xE4002B, 0x007AC2, 0x000000),
PACK15_4(0xFFD659, 0xE4002B, 0x007AC2, 0x000000),
PACK15_4(0xFFD659, 0xE4002B, 0x007AC2, 0x000000)
};
static const unsigned short twb_neo_geo_pocket[] = {
PACK15_4(0xF0F0F0, 0xB0B0B0, 0x707070, 0x101010),
PACK15_4(0xF0F0F0, 0xB0B0B0, 0x707070, 0x101010),
PACK15_4(0xF0F0F0, 0xB0B0B0, 0x707070, 0x101010)
};
static const unsigned short twb_neon_blue[] = {
PACK15_4(0x0AB9E6, 0x0781A1, 0x044A5C, 0x011217),
PACK15_4(0x0AB9E6, 0x0781A1, 0x044A5C, 0x011217),
PACK15_4(0x0AB9E6, 0x0781A1, 0x044A5C, 0x011217)
};
static const unsigned short twb_neon_green[] = {
PACK15_4(0x1EDC00, 0x159A00, 0x0C5800, 0x031600),
PACK15_4(0x1EDC00, 0x159A00, 0x0C5800, 0x031600),
PACK15_4(0x1EDC00, 0x159A00, 0x0C5800, 0x031600)
};
static const unsigned short twb_neon_pink[] = {
PACK15_4(0xFF3278, 0xB22354, 0x661430, 0x19050C),
PACK15_4(0xFF3278, 0xB22354, 0x661430, 0x19050C),
PACK15_4(0xFF3278, 0xB22354, 0x661430, 0x19050C)
};
static const unsigned short twb_neon_red[] = {
PACK15_4(0xFF3C28, 0xB22A1C, 0x661810, 0x190604),
PACK15_4(0xFF3C28, 0xB22A1C, 0x661810, 0x190604),
PACK15_4(0xFF3C28, 0xB22A1C, 0x661810, 0x190604)
};
static const unsigned short twb_neon_yellow[] = {
PACK15_4(0xE6FF00, 0xA1B200, 0x5C6600, 0x171900),
PACK15_4(0xE6FF00, 0xA1B200, 0x5C6600, 0x171900),
PACK15_4(0xE6FF00, 0xA1B200, 0x5C6600, 0x171900)
};
static const unsigned short twb_nick_orange[] = {
PACK15_4(0xFF6700, 0xB24800, 0x662900, 0x190A00),
PACK15_4(0xFF6700, 0xB24800, 0x662900, 0x190A00),
PACK15_4(0xFF6700, 0xB24800, 0x662900, 0x190A00)
};
static const unsigned short twb_nijigasaki_orange[] = {
PACK15_4(0xFAB920, 0xAF8116, 0x644A0C, 0x191203),
PACK15_4(0xFAB920, 0xAF8116, 0x644A0C, 0x191203),
PACK15_4(0xFAB920, 0xAF8116, 0x644A0C, 0x191203)
};
static const unsigned short twb_odyssey_gold[] = {
PACK15_4(0xC2A000, 0x877000, 0x4D4000, 0x131000),
PACK15_4(0xC2A000, 0x877000, 0x4D4000, 0x131000),
PACK15_4(0xC2A000, 0x877000, 0x4D4000, 0x131000)
};
static const unsigned short twb_patrick_star_pink[] = {
PACK15_4(0xFF7F8C, 0xB25862, 0x663238, 0x190C0E),
PACK15_4(0xFF7F8C, 0xB25862, 0x663238, 0x190C0E),
PACK15_4(0xFF7F8C, 0xB25862, 0x663238, 0x190C0E)
};
static const unsigned short twb_pikachu_yellow[] = {
PACK15_4(0xFFDC00, 0xB29A00, 0x665800, 0x191600),
PACK15_4(0xFFDC00, 0xB29A00, 0x665800, 0x191600),
PACK15_4(0xFFDC00, 0xB29A00, 0x665800, 0x191600)
};
static const unsigned short twb_pocket_tales[] = {
PACK15_4(0xD0D860, 0x88A000, 0x385000, 0x000000),
PACK15_4(0xD0D860, 0x88A000, 0x385000, 0x000000),
PACK15_4(0xD0D860, 0x88A000, 0x385000, 0x000000)
};
static const unsigned short twb_pokemon_mini[] = {
PACK15_4(0xA9BDA9, 0x788F78, 0x505F50, 0x243724),
PACK15_4(0xA9BDA9, 0x788F78, 0x505F50, 0x243724),
PACK15_4(0xA9BDA9, 0x788F78, 0x505F50, 0x243724)
};
static const unsigned short twb_pretty_guardian_gold[] = {
PACK15_4(0xB4AA82, 0x7D765B, 0x484434, 0x12110D),
PACK15_4(0xB4AA82, 0x7D765B, 0x484434, 0x12110D),
PACK15_4(0xB4AA82, 0x7D765B, 0x484434, 0x12110D)
};
static const unsigned short twb_sees_blue[] = {
PACK15_4(0x009AFF, 0x006BB2, 0x003D66, 0x000F19),
PACK15_4(0x009AFF, 0x006BB2, 0x003D66, 0x000F19),
PACK15_4(0x009AFF, 0x006BB2, 0x003D66, 0x000F19)
};
static const unsigned short twb_saint_snow_red[] = {
PACK15_4(0xCA3935, 0x8D2725, 0x501615, 0x140505),
PACK15_4(0xCA3935, 0x8D2725, 0x501615, 0x140505),
PACK15_4(0xCA3935, 0x8D2725, 0x501615, 0x140505)
};
static const unsigned short twb_scooby_doo_mystery[] = {
PACK15_4(0xC7DE31, 0xF79321, 0x73308F, 0x263232),
PACK15_4(0xC7DE31, 0xF79321, 0x73308F, 0x263232),
PACK15_4(0xC7DE31, 0xF79321, 0x73308F, 0x263232)
};
static const unsigned short twb_shiny_sky_blue[] = {
PACK15_4(0x8CB6DF, 0x627F9C, 0x384859, 0x0E1216),
PACK15_4(0x8CB6DF, 0x627F9C, 0x384859, 0x0E1216),
PACK15_4(0x8CB6DF, 0x627F9C, 0x384859, 0x0E1216)
};
static const unsigned short twb_sidem_green[] = {
PACK15_4(0x02AC71, 0x01784F, 0x00442D, 0x00110B),
PACK15_4(0x02AC71, 0x01784F, 0x00442D, 0x00110B),
PACK15_4(0x02AC71, 0x01784F, 0x00442D, 0x00110B)
};
static const unsigned short twb_slime_blue[] = {
PACK15_4(0x2F8CCC, 0x20628E, 0x123851, 0x040E14),
PACK15_4(0x2F8CCC, 0x20628E, 0x123851, 0x040E14),
PACK15_4(0x2F8CCC, 0x20628E, 0x123851, 0x040E14)
};
static const unsigned short twb_spongebob_yellow[] = {
PACK15_4(0xF8E867, 0xADA248, 0x635C29, 0x18170A),
PACK15_4(0xF8E867, 0xADA248, 0x635C29, 0x18170A),
PACK15_4(0xF8E867, 0xADA248, 0x635C29, 0x18170A)
};
static const unsigned short twb_stone_orange[] = {
PACK15_4(0xF6821E, 0xAC5B15, 0x62340C, 0x180D03),
PACK15_4(0xF6821E, 0xAC5B15, 0x62340C, 0x180D03),
PACK15_4(0xF6821E, 0xAC5B15, 0x62340C, 0x180D03)
};
static const unsigned short twb_straw_hat_red[] = {
PACK15_4(0xF8523C, 0xAD392A, 0x632018, 0x180806),
PACK15_4(0xF8523C, 0xAD392A, 0x632018, 0x180806),
PACK15_4(0xF8523C, 0xAD392A, 0x632018, 0x180806)
};
static const unsigned short twb_superball_ivory[] = {
PACK15_4(0xEEF0BC, 0xBCBC8A, 0x828250, 0x646432),
PACK15_4(0xEEF0BC, 0xBCBC8A, 0x828250, 0x646432),
PACK15_4(0xEEF0BC, 0xBCBC8A, 0x828250, 0x646432)
};
static const unsigned short twb_super_saiyan_blue[] = {
PACK15_4(0x05BCCC, 0x03838E, 0x024B51, 0x001214),
PACK15_4(0x05BCCC, 0x03838E, 0x024B51, 0x001214),
PACK15_4(0x05BCCC, 0x03838E, 0x024B51, 0x001214)
};
static const unsigned short twb_super_saiyan_rose[] = {
PACK15_4(0xF4AFB2, 0xAA7A7C, 0x614647, 0x181111),
PACK15_4(0xF4AFB2, 0xAA7A7C, 0x614647, 0x181111),
PACK15_4(0xF4AFB2, 0xAA7A7C, 0x614647, 0x181111)
};
static const unsigned short twb_supervision[] = {
PACK15_4(0x7CC67C, 0x54A68C, 0x2C6264, 0x0C322C),
PACK15_4(0x7CC67C, 0x54A68C, 0x2C6264, 0x0C322C),
PACK15_4(0x7CC67C, 0x54A68C, 0x2C6264, 0x0C322C)
};
static const unsigned short twb_survey_corps_brown[] = {
PACK15_4(0xAB7D57, 0x77573C, 0x443222, 0x110C08),
PACK15_4(0xAB7D57, 0x77573C, 0x443222, 0x110C08),
PACK15_4(0xAB7D57, 0x77573C, 0x443222, 0x110C08)
};
static const unsigned short twb_tea_midori[] = {
PACK15_4(0xD6E9CA, 0x88CB7F, 0x028760, 0x333631),
PACK15_4(0xD6E9CA, 0x88CB7F, 0x028760, 0x333631),
PACK15_4(0xD6E9CA, 0x88CB7F, 0x028760, 0x333631)
};
static const unsigned short twb_ti_83[] = {
PACK15_4(0x9CA684, 0x727C5A, 0x464A35, 0x181810),
PACK15_4(0x9CA684, 0x727C5A, 0x464A35, 0x181810),
PACK15_4(0x9CA684, 0x727C5A, 0x464A35, 0x181810)
};
static const unsigned short twb_tokyo_midtown[] = {
PACK15_4(0x8FAD15, 0x4B8C2B, 0x44693D, 0x000000),
PACK15_4(0x8FAD15, 0x4B8C2B, 0x44693D, 0x000000),
PACK15_4(0x8FAD15, 0x4B8C2B, 0x44693D, 0x000000)
};
static const unsigned short twb_travel_wood[] = {
PACK15_4(0xF8D8B0, 0xA08058, 0x705030, 0x482810),
PACK15_4(0xF8D8B0, 0xA08058, 0x705030, 0x482810),
PACK15_4(0xF8D8B0, 0xA08058, 0x705030, 0x482810)
};
static const unsigned short twb_virtual_boy[] = {
PACK15_4(0xE30000, 0x950000, 0x560000, 0x000000),
PACK15_4(0xE30000, 0x950000, 0x560000, 0x000000),
PACK15_4(0xE30000, 0x950000, 0x560000, 0x000000)
};
static const unsigned short twb_vmu[] = {
PACK15_4(0x88CCA8, 0x46A290, 0x286244, 0x081480),
PACK15_4(0x88CCA8, 0x46A290, 0x286244, 0x081480),
PACK15_4(0x88CCA8, 0x46A290, 0x286244, 0x081480)
};
static const unsigned short twb_wisteria_murasaki[] = {
PACK15_4(0xDBD0E6, 0xA59ACA, 0x7058A3, 0x2E2930),
PACK15_4(0xDBD0E6, 0xA59ACA, 0x7058A3, 0x2E2930),
PACK15_4(0xDBD0E6, 0xA59ACA, 0x7058A3, 0x2E2930)
};
static const unsigned short twb_wonderswan[] = {
PACK15_4(0xFEFEFE, 0xC2C2C2, 0x686868, 0x1D1D1D),
PACK15_4(0xFEFEFE, 0xC2C2C2, 0x686868, 0x1D1D1D),
PACK15_4(0xFEFEFE, 0xC2C2C2, 0x686868, 0x1D1D1D)
};
static const unsigned short twb_yellow_banana[] = {
PACK15_4(0xF8D808, 0xD89800, 0xA86838, 0x704800),
PACK15_4(0xF8D808, 0xD89800, 0xA86838, 0x704800),
PACK15_4(0xF8D808, 0xD89800, 0xA86838, 0x704800)
};
#undef PACK15_4
#undef PACK15_1
#undef TO5BIT
struct GbcPaletteEntry { const char *title; const unsigned short *p; };
// Note: These entries must be in alphabetical order
static const GbcPaletteEntry gbcDirPalettes[] = {
{ "GB - DMG", gbdmg }, // Pea green
{ "GB - Light", gblit }, // Aquamarine
@ -628,6 +1089,82 @@ static const GbcPaletteEntry gbcDirPalettes[] = {
{ "Special 1", pExt1 },
{ "Special 2", pExt2 },
{ "Special 3", pExt3 },
{ "TWB01 - 756 Production", twb_756_production },
{ "TWB02 - AKB48 Pink", twb_akb48_pink },
{ "TWB03 - Angry Volcano", twb_angry_volcano },
{ "TWB04 - Anime Expo", twb_anime_expo },
{ "TWB05 - Aqours Blue", twb_aqours_blue },
{ "TWB06 - Aquatic Iro", twb_aquatic_iro },
{ "TWB07 - Bandai Namco", twb_bandai_namco },
{ "TWB08 - Blossom Pink", twb_blossom_pink },
{ "TWB09 - Bubbles Blue", twb_bubbles_blue },
{ "TWB10 - Builder Yellow", twb_builder_yellow },
{ "TWB11 - Buttercup Green", twb_buttercup_green },
{ "TWB12 - Camouflage", twb_camouflage },
{ "TWB13 - Cardcaptor Pink", twb_cardcaptor_pink },
{ "TWB14 - Christmas", twb_christmas },
{ "TWB15 - Crunchyroll Orange", twb_crunchyroll_orange },
{ "TWB16 - Digivice", twb_digivice },
{ "TWB17 - Do The Dew", twb_do_the_dew },
{ "TWB18 - Eevee Brown", twb_eevee_brown },
{ "TWB19 - Fruity Orange", twb_fruity_orange },
{ "TWB20 - Game.com", twb_game_com },
{ "TWB21 - Game Grump Orange", twb_game_grump_orange },
{ "TWB22 - GameKing", twb_gameking },
{ "TWB23 - Game Master", twb_game_master },
{ "TWB24 - Ghostly Aoi", twb_ghostly_aoi },
{ "TWB25 - Golden Wild", twb_golden_wild },
{ "TWB26 - Green Banana", twb_green_banana },
{ "TWB27 - Greenscale", twb_greenscale },
{ "TWB28 - Halloween", twb_halloween },
{ "TWB29 - Hero Yellow", twb_hero_yellow },
{ "TWB30 - Hokage Orange", twb_hokage_orange },
{ "TWB31 - Labo Fawn", twb_labo_fawn },
{ "TWB32 - Legendary Super Saiyan", twb_legendary_super_saiyan },
{ "TWB33 - Lemon Lime Green", twb_lemon_lime_green },
{ "TWB34 - Lime Midori", twb_lime_midori },
{ "TWB35 - Mania Plus Green", twb_mania_plus_green },
{ "TWB36 - Microvision", twb_microvision },
{ "TWB37 - Million Live Gold", twb_million_live_gold },
{ "TWB38 - Miraitowa Blue", twb_miraitowa_blue },
{ "TWB39 - NASCAR", twb_nascar },
{ "TWB40 - Neo Geo Pocket", twb_neo_geo_pocket },
{ "TWB41 - Neon Blue", twb_neon_blue },
{ "TWB42 - Neon Green", twb_neon_green },
{ "TWB43 - Neon Pink", twb_neon_pink },
{ "TWB44 - Neon Red", twb_neon_red },
{ "TWB45 - Neon Yellow", twb_neon_yellow },
{ "TWB46 - Nick Orange", twb_nick_orange },
{ "TWB47 - Nijigasaki Orange", twb_nijigasaki_orange },
{ "TWB48 - Odyssey Gold", twb_odyssey_gold },
{ "TWB49 - Patrick Star Pink", twb_patrick_star_pink },
{ "TWB50 - Pikachu Yellow", twb_pikachu_yellow },
{ "TWB51 - Pocket Tales", twb_pocket_tales },
{ "TWB52 - Pokemon mini", twb_pokemon_mini },
{ "TWB53 - Pretty Guardian Gold", twb_pretty_guardian_gold },
{ "TWB54 - S.E.E.S. Blue", twb_sees_blue },
{ "TWB55 - Saint Snow Red", twb_saint_snow_red },
{ "TWB56 - Scooby-Doo Mystery", twb_scooby_doo_mystery },
{ "TWB57 - Shiny Sky Blue", twb_shiny_sky_blue },
{ "TWB58 - Sidem Green", twb_sidem_green },
{ "TWB59 - Slime Blue", twb_slime_blue },
{ "TWB60 - Spongebob Yellow", twb_spongebob_yellow },
{ "TWB61 - Stone Orange", twb_stone_orange },
{ "TWB62 - Straw Hat Red", twb_straw_hat_red },
{ "TWB63 - Superball Ivory", twb_superball_ivory },
{ "TWB64 - Super Saiyan Blue", twb_super_saiyan_blue },
{ "TWB65 - Super Saiyan Rose", twb_super_saiyan_rose },
{ "TWB66 - Supervision", twb_supervision },
{ "TWB67 - Survey Corps Brown", twb_survey_corps_brown },
{ "TWB68 - Tea Midori", twb_tea_midori },
{ "TWB69 - TI-83", twb_ti_83 },
{ "TWB70 - Tokyo Midtown", twb_tokyo_midtown },
{ "TWB71 - Travel Wood", twb_travel_wood },
{ "TWB72 - Virtual Boy", twb_virtual_boy },
{ "TWB73 - VMU", twb_vmu },
{ "TWB74 - Wisteria Murasaki", twb_wisteria_murasaki },
{ "TWB75 - WonderSwan", twb_wonderswan },
{ "TWB76 - Yellow Banana", twb_yellow_banana },
};
static const GbcPaletteEntry gbcTitlePalettes[] = {

View File

@ -7,6 +7,28 @@
#include <libretro.h>
#include <retro_inline.h>
#ifndef HAVE_NO_LANGEXTRA
#include "libretro_core_options_intl.h"
#endif
/*
********************************
* VERSION: 1.3
********************************
*
* - 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
*/
#ifdef __cplusplus
extern "C" {
#endif
@ -58,56 +80,132 @@ struct retro_core_option_definition option_defs_us[] = {
"Internal Palette",
"Selects palette used for colorizing Game Boy games when 'GB Colorization' is set to 'Internal', or when 'GB Colorization' is set to 'Auto' and game has no pre-defined SGB/GBC palette. 'GB' palettes mimic the display of original Game Boy hardware. 'GBC' palettes are identical to the built-in presets of the Game Boy Color. 'SGB' palettes are identical to the built-in presets of the Super Game Boy.",
{
{ "GB - DMG", NULL },
{ "GB - Pocket", NULL },
{ "GB - Light", NULL },
{ "GBC - Blue", NULL },
{ "GBC - Brown", NULL },
{ "GBC - Dark Blue", NULL },
{ "GBC - Dark Brown", NULL },
{ "GBC - Dark Green", NULL },
{ "GBC - Grayscale", NULL },
{ "GBC - Green", NULL },
{ "GBC - Inverted", NULL },
{ "GBC - Orange", NULL },
{ "GBC - Pastel Mix", NULL },
{ "GBC - Red", NULL },
{ "GBC - Yellow", NULL },
{ "SGB - 1A", NULL },
{ "SGB - 1B", NULL },
{ "SGB - 1C", NULL },
{ "SGB - 1D", NULL },
{ "SGB - 1E", NULL },
{ "SGB - 1F", NULL },
{ "SGB - 1G", NULL },
{ "SGB - 1H", NULL },
{ "SGB - 2A", NULL },
{ "SGB - 2B", NULL },
{ "SGB - 2C", NULL },
{ "SGB - 2D", NULL },
{ "SGB - 2E", NULL },
{ "SGB - 2F", NULL },
{ "SGB - 2G", NULL },
{ "SGB - 2H", NULL },
{ "SGB - 3A", NULL },
{ "SGB - 3B", NULL },
{ "SGB - 3C", NULL },
{ "SGB - 3D", NULL },
{ "SGB - 3E", NULL },
{ "SGB - 3F", NULL },
{ "SGB - 3G", NULL },
{ "SGB - 3H", NULL },
{ "SGB - 4A", NULL },
{ "SGB - 4B", NULL },
{ "SGB - 4C", NULL },
{ "SGB - 4D", NULL },
{ "SGB - 4E", NULL },
{ "SGB - 4F", NULL },
{ "SGB - 4G", NULL },
{ "SGB - 4H", NULL },
{ "Special 1", NULL },
{ "Special 2", NULL },
{ "Special 3", NULL },
{ "GB - DMG", NULL },
{ "GB - Pocket", NULL },
{ "GB - Light", NULL },
{ "GBC - Blue", NULL },
{ "GBC - Brown", NULL },
{ "GBC - Dark Blue", NULL },
{ "GBC - Dark Brown", NULL },
{ "GBC - Dark Green", NULL },
{ "GBC - Grayscale", NULL },
{ "GBC - Green", NULL },
{ "GBC - Inverted", NULL },
{ "GBC - Orange", NULL },
{ "GBC - Pastel Mix", NULL },
{ "GBC - Red", NULL },
{ "GBC - Yellow", NULL },
{ "SGB - 1A", NULL },
{ "SGB - 1B", NULL },
{ "SGB - 1C", NULL },
{ "SGB - 1D", NULL },
{ "SGB - 1E", NULL },
{ "SGB - 1F", NULL },
{ "SGB - 1G", NULL },
{ "SGB - 1H", NULL },
{ "SGB - 2A", NULL },
{ "SGB - 2B", NULL },
{ "SGB - 2C", NULL },
{ "SGB - 2D", NULL },
{ "SGB - 2E", NULL },
{ "SGB - 2F", NULL },
{ "SGB - 2G", NULL },
{ "SGB - 2H", NULL },
{ "SGB - 3A", NULL },
{ "SGB - 3B", NULL },
{ "SGB - 3C", NULL },
{ "SGB - 3D", NULL },
{ "SGB - 3E", NULL },
{ "SGB - 3F", NULL },
{ "SGB - 3G", NULL },
{ "SGB - 3H", NULL },
{ "SGB - 4A", NULL },
{ "SGB - 4B", NULL },
{ "SGB - 4C", NULL },
{ "SGB - 4D", NULL },
{ "SGB - 4E", NULL },
{ "SGB - 4F", NULL },
{ "SGB - 4G", NULL },
{ "SGB - 4H", NULL },
{ "Special 1", NULL },
{ "Special 2", NULL },
{ "Special 3", NULL },
{ "TWB01 - 756 Production", NULL },
{ "TWB02 - AKB48 Pink", NULL },
{ "TWB03 - Angry Volcano", NULL },
{ "TWB04 - Anime Expo", NULL },
{ "TWB05 - Aqours Blue", NULL },
{ "TWB06 - Aquatic Iro", NULL },
{ "TWB07 - Bandai Namco", NULL },
{ "TWB08 - Blossom Pink", NULL },
{ "TWB09 - Bubbles Blue", NULL },
{ "TWB10 - Builder Yellow", NULL },
{ "TWB11 - Buttercup Green", NULL },
{ "TWB12 - Camouflage", NULL },
{ "TWB13 - Cardcaptor Pink", NULL },
{ "TWB14 - Christmas", NULL },
{ "TWB15 - Crunchyroll Orange", NULL },
{ "TWB16 - Digivice", NULL },
{ "TWB17 - Do The Dew", NULL },
{ "TWB18 - Eevee Brown", NULL },
{ "TWB19 - Fruity Orange", NULL },
{ "TWB20 - Game.com", NULL },
{ "TWB21 - Game Grump Orange", NULL },
{ "TWB22 - GameKing", NULL },
{ "TWB23 - Game Master", NULL },
{ "TWB24 - Ghostly Aoi", NULL },
{ "TWB25 - Golden Wild", NULL },
{ "TWB26 - Green Banana", NULL },
{ "TWB27 - Greenscale", NULL },
{ "TWB28 - Halloween", NULL },
{ "TWB29 - Hero Yellow", NULL },
{ "TWB30 - Hokage Orange", NULL },
{ "TWB31 - Labo Fawn", NULL },
{ "TWB32 - Legendary Super Saiyan", NULL },
{ "TWB33 - Lemon Lime Green", NULL },
{ "TWB34 - Lime Midori", NULL },
{ "TWB35 - Mania Plus Green", NULL },
{ "TWB36 - Microvision", NULL },
{ "TWB37 - Million Live Gold", NULL },
{ "TWB38 - Miraitowa Blue", NULL },
{ "TWB39 - NASCAR", NULL },
{ "TWB40 - Neo Geo Pocket", NULL },
{ "TWB41 - Neon Blue", NULL },
{ "TWB42 - Neon Green", NULL },
{ "TWB43 - Neon Pink", NULL },
{ "TWB44 - Neon Red", NULL },
{ "TWB45 - Neon Yellow", NULL },
{ "TWB46 - Nick Orange", NULL },
{ "TWB47 - Nijigasaki Orange", NULL },
{ "TWB48 - Odyssey Gold", NULL },
{ "TWB49 - Patrick Star Pink", NULL },
{ "TWB50 - Pikachu Yellow", NULL },
{ "TWB51 - Pocket Tales", NULL },
{ "TWB52 - Pokemon mini", NULL },
{ "TWB53 - Pretty Guardian Gold", NULL },
{ "TWB54 - S.E.E.S. Blue", NULL },
{ "TWB55 - Saint Snow Red", NULL },
{ "TWB56 - Scooby-Doo Mystery", NULL },
{ "TWB57 - Shiny Sky Blue", NULL },
{ "TWB58 - Sidem Green", NULL },
{ "TWB59 - Slime Blue", NULL },
{ "TWB60 - Spongebob Yellow", NULL },
{ "TWB61 - Stone Orange", NULL },
{ "TWB62 - Straw Hat Red", NULL },
{ "TWB63 - Superball Ivory", NULL },
{ "TWB64 - Super Saiyan Blue", NULL },
{ "TWB65 - Super Saiyan Rose", NULL },
{ "TWB66 - Supervision", NULL },
{ "TWB67 - Survey Corps Brown", NULL },
{ "TWB68 - Tea Midori", NULL },
{ "TWB69 - TI-83", NULL },
{ "TWB70 - Tokyo Midtown", NULL },
{ "TWB71 - Travel Wood", NULL },
{ "TWB72 - Virtual Boy", NULL },
{ "TWB73 - VMU", NULL },
{ "TWB74 - Wisteria Murasaki", NULL },
{ "TWB75 - WonderSwan", NULL },
{ "TWB76 - Yellow Banana", NULL },
{ NULL, NULL },
},
"GB - DMG"
@ -489,48 +587,13 @@ struct retro_core_option_definition option_defs_us[] = {
{ NULL, NULL, NULL, {{0}}, NULL },
};
/* RETRO_LANGUAGE_JAPANESE */
/* RETRO_LANGUAGE_FRENCH */
/* RETRO_LANGUAGE_SPANISH */
/* RETRO_LANGUAGE_GERMAN */
/* RETRO_LANGUAGE_ITALIAN */
/* RETRO_LANGUAGE_DUTCH */
/* RETRO_LANGUAGE_PORTUGUESE_BRAZIL */
/* RETRO_LANGUAGE_PORTUGUESE_PORTUGAL */
/* RETRO_LANGUAGE_RUSSIAN */
/* RETRO_LANGUAGE_KOREAN */
/* RETRO_LANGUAGE_CHINESE_TRADITIONAL */
/* RETRO_LANGUAGE_CHINESE_SIMPLIFIED */
/* RETRO_LANGUAGE_ESPERANTO */
/* RETRO_LANGUAGE_POLISH */
/* RETRO_LANGUAGE_VIETNAMESE */
/* RETRO_LANGUAGE_ARABIC */
/* RETRO_LANGUAGE_GREEK */
/* RETRO_LANGUAGE_TURKISH */
/*
********************************
* Language Mapping
********************************
*/
#ifndef HAVE_NO_LANGEXTRA
struct retro_core_option_definition *option_defs_intl[RETRO_LANGUAGE_LAST] = {
option_defs_us, /* RETRO_LANGUAGE_ENGLISH */
NULL, /* RETRO_LANGUAGE_JAPANESE */
@ -552,6 +615,7 @@ struct retro_core_option_definition *option_defs_intl[RETRO_LANGUAGE_LAST] = {
NULL, /* RETRO_LANGUAGE_GREEK */
NULL, /* RETRO_LANGUAGE_TURKISH */
};
#endif
/*
********************************
@ -560,7 +624,8 @@ struct retro_core_option_definition *option_defs_intl[RETRO_LANGUAGE_LAST] = {
*/
/* Handles configuration/setting of core options.
* Should only be called inside retro_set_environment().
* Should be called as early as possible - ideally inside
* retro_set_environment(), and no later than retro_load_game()
* > We place the function body in the header to avoid the
* necessity of adding more .c files (i.e. want this to
* be as painless as possible for core devs)
@ -573,8 +638,9 @@ static INLINE void libretro_set_core_options(retro_environment_t environ_cb)
if (!environ_cb)
return;
if (environ_cb(RETRO_ENVIRONMENT_GET_CORE_OPTIONS_VERSION, &version) && (version == 1))
if (environ_cb(RETRO_ENVIRONMENT_GET_CORE_OPTIONS_VERSION, &version) && (version >= 1))
{
#ifndef HAVE_NO_LANGEXTRA
struct retro_core_options_intl core_options_intl;
unsigned language = 0;
@ -586,6 +652,9 @@ static INLINE void libretro_set_core_options(retro_environment_t environ_cb)
core_options_intl.local = option_defs_intl[language];
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_INTL, &core_options_intl);
#else
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS, &option_defs_us);
#endif
}
else
{
@ -655,7 +724,7 @@ static INLINE void libretro_set_core_options(retro_environment_t environ_cb)
}
/* Build values string */
if (num_values > 1)
if (num_values > 0)
{
size_t j;
@ -688,7 +757,7 @@ static INLINE void libretro_set_core_options(retro_environment_t environ_cb)
variables[option_index].value = values_buf[i];
option_index++;
}
/* Set variables */
environ_cb(RETRO_ENVIRONMENT_SET_VARIABLES, variables);

View File

@ -0,0 +1,80 @@
#ifndef LIBRETRO_CORE_OPTIONS_INTL_H__
#define LIBRETRO_CORE_OPTIONS_INTL_H__
#if defined(_MSC_VER) && (_MSC_VER >= 1500 && _MSC_VER < 1900)
/* https://support.microsoft.com/en-us/kb/980263 */
#pragma execution_character_set("utf-8")
#pragma warning(disable:4566)
#endif
#include <libretro.h>
/*
********************************
* VERSION: 1.3
********************************
*
* - 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
*/
#ifdef __cplusplus
extern "C" {
#endif
/*
********************************
* Core Option Definitions
********************************
*/
/* RETRO_LANGUAGE_JAPANESE */
/* RETRO_LANGUAGE_FRENCH */
/* RETRO_LANGUAGE_SPANISH */
/* RETRO_LANGUAGE_GERMAN */
/* RETRO_LANGUAGE_ITALIAN */
/* RETRO_LANGUAGE_DUTCH */
/* RETRO_LANGUAGE_PORTUGUESE_BRAZIL */
/* RETRO_LANGUAGE_PORTUGUESE_PORTUGAL */
/* RETRO_LANGUAGE_RUSSIAN */
/* RETRO_LANGUAGE_KOREAN */
/* RETRO_LANGUAGE_CHINESE_TRADITIONAL */
/* RETRO_LANGUAGE_CHINESE_SIMPLIFIED */
/* RETRO_LANGUAGE_ESPERANTO */
/* RETRO_LANGUAGE_POLISH */
/* RETRO_LANGUAGE_VIETNAMESE */
/* RETRO_LANGUAGE_ARABIC */
/* RETRO_LANGUAGE_GREEK */
/* RETRO_LANGUAGE_TURKISH */
#ifdef __cplusplus
}
#endif
#endif