Update core options for compatibility with TheWolfBunny64's latest palettes + optimisations

This commit is contained in:
jdgleaver 2021-06-09 16:15:25 +01:00
parent 1c333bcea8
commit dfbf898897
4 changed files with 925 additions and 416 deletions

View File

@ -0,0 +1,296 @@
/* Copyright (C) 2010-2020 The RetroArch team
*
* ---------------------------------------------------------------------------------------
* The following license statement only applies to this file (rhmap.h).
* ---------------------------------------------------------------------------------------
*
* Permission is hereby granted, free of charge,
* to any person obtaining a copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation the rights to
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,
* and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#ifndef __LIBRETRO_SDK_ARRAY_RHMAP_H__
#define __LIBRETRO_SDK_ARRAY_RHMAP_H__
/*
* This file implements a hash map with 32-bit keys.
* Based on the implementation from the public domain Bitwise project
* by Per Vognsen - https://github.com/pervognsen/bitwise
*
* It's a super simple type safe hash map for C with no need
* to predeclare any type or anything.
* Will always allocate memory for twice the amount of max elements
* so larger structs should be stored as pointers or indices to an array.
* Can be used in C++ with POD types (without any constructor/destructor).
*
* Be careful not to supply modifying statements to the macro arguments.
* Something like RHMAP_FIT(map, i++); would have unintended results.
*
* Sample usage:
*
* -- Set 2 elements with string keys and mytype_t values:
* mytype_t* map = NULL;
* RHMAP_SET_STR(map, "foo", foo_element);
* RHMAP_SET_STR(map, "bar", bar_element);
* -- now RHMAP_LEN(map) == 2, RHMAP_GET_STR(map, "foo") == foo_element
*
* -- Check if keys exist:
* bool has_foo = RHMAP_HAS_STR(map, "foo");
* bool has_baz = RHMAP_HAS_STR(map, "baz");
* -- now has_foo == true, has_baz == false
*
* -- Removing a key:
* bool removed = RHMAP_DEL_STR(map, "bar");
* bool removed_again = RHMAP_DEL_STR(map, "bar");
* -- now RHMAP_LEN(map) == 1, removed == true, removed_again == false
*
* -- Add/modify via pointer:
* mytype_t* p_elem = RHMAP_PTR_STR(map, "qux");
* p_elem->a = 123;
* -- New keys initially have memory uninitialized
* -- Pointers can get invalidated when a key is added/removed
*
* -- Looking up the index for a given key:
* ptrdiff_t idx_foo = RHMAP_IDX_STR(map, "foo");
* ptrdiff_t idx_invalid = RHMAP_IDX_STR(map, "invalid");
* -- now idx_foo >= 0, idx_invalid == -1, map[idx_foo] == foo_element
* -- Indices can change when a key is added/removed
*
* -- Clear all elements (keep memory allocated):
* RHMAP_CLEAR(map);
* -- now RHMAP_LEN(map) == 0, RHMAP_CAP(map) == 16
*
* -- Reserve memory for at least N elements:
* RHMAP_FIT(map, 30);
* -- now RHMAP_LEN(map) == 0, RHMAP_CAP(map) == 64
*
* -- Add elements with custom hash keys:
* RHMAP_SET(map, my_uint32_hash(key1), some_element);
* RHMAP_SET(map, my_uint32_hash(key2), other_element);
* -- now RHMAP_LEN(map) == 2, _GET/_HAS/_DEL/_PTR/_IDX also exist
*
* -- Iterate elements (random order, order can change on insert):
* for (size_t i = 0, cap = RHMAP_CAP(map); i != cap, i++)
* if (RHMAP_KEY(map, i))
* ------ here map[i] is the value of key RHMAP_KEY(map, i)
*
* -- Set a custom null value (is zeroed by default):
* RHMAP_SETNULLVAL(map, map_null);
* -- now RHMAP_GET_STR(map, "invalid") == map_null
*
* -- Free allocated memory:
* RHMAP_FREE(map);
* -- now map == NULL, RHMAP_LEN(map) == 0, RHMAP_CAP(map) == 0
*
* -- To handle running out of memory:
* bool ran_out_of_memory = !RHMAP_TRYFIT(map, 1000);
* -- before setting an element (with SET, PTR or NULLVAL).
* -- When out of memory, map will stay unmodified.
*
*/
#include <stdlib.h> /* for malloc, realloc */
#include <string.h> /* for memcpy, memset */
#include <stddef.h> /* for ptrdiff_t, size_t */
#include <stdint.h> /* for uint32_t */
#define RHMAP_LEN(b) ((b) ? RHMAP__HDR(b)->len : 0)
#define RHMAP_MAX(b) ((b) ? RHMAP__HDR(b)->maxlen : 0)
#define RHMAP_CAP(b) ((b) ? RHMAP__HDR(b)->maxlen + 1 : 0)
#define RHMAP_KEY(b, idx) (RHMAP__HDR(b)->keys[idx])
#define RHMAP_KEY_STR(b, idx) (RHMAP__HDR(b)->key_strs[idx])
#define RHMAP_SETNULLVAL(b, val) (RHMAP__FIT1(b), b[-1] = (val))
#define RHMAP_CLEAR(b) ((b) ? (memset(RHMAP__HDR(b)->keys, 0, RHMAP_CAP(b) * sizeof(uint32_t)), RHMAP__HDR(b)->len = 0) : 0)
#define RHMAP_FREE(b) ((b) ? (rhmap__free(RHMAP__HDR(b)), (b) = NULL) : 0)
#define RHMAP_FIT(b, n) ((!(n) || ((b) && (size_t)(n) * 2 <= RHMAP_MAX(b))) ? 0 : RHMAP__GROW(b, n))
#define RHMAP_TRYFIT(b, n) (RHMAP_FIT((b), (n)), (!(n) || ((b) && (size_t)(n) * 2 <= RHMAP_MAX(b))))
#define RHMAP_SET(b, key, val) RHMAP_SET_FULL(b, key, NULL, val)
#define RHMAP_GET(b, key) RHMAP_GET_FULL(b, key, NULL)
#define RHMAP_HAS(b, key) RHMAP_HAS_FULL(b, key, NULL)
#define RHMAP_DEL(b, key) RHMAP_DEL_FULL(b, key, NULL)
#define RHMAP_PTR(b, key) RHMAP_PTR_FULL(b, key, NULL)
#define RHMAP_IDX(b, key) RHMAP_IDX_FULL(b, key, NULL)
#ifdef __GNUC__
#define RHMAP__UNUSED __attribute__((__unused__))
#else
#define RHMAP__UNUSED
#endif
#if defined(_MSC_VER)
#pragma warning(push)
#pragma warning(disable:4505) //unreferenced local function has been removed
#endif
#define RHMAP_SET_FULL(b, key, str, val) (RHMAP__FIT1(b), b[rhmap__idx(RHMAP__HDR(b), (key), (str), 1, 0)] = (val))
#define RHMAP_GET_FULL(b, key, str) (RHMAP__FIT1(b), b[rhmap__idx(RHMAP__HDR(b), (key), (str), 0, 0)])
#define RHMAP_HAS_FULL(b, key, str) ((b) ? rhmap__idx(RHMAP__HDR(b), (key), (str), 0, 0) != -1 : 0)
#define RHMAP_DEL_FULL(b, key, str) ((b) ? rhmap__idx(RHMAP__HDR(b), (key), (str), 0, sizeof(*(b))) != -1 : 0)
#define RHMAP_PTR_FULL(b, key, str) (RHMAP__FIT1(b), &b[rhmap__idx(RHMAP__HDR(b), (key), (str), 1, 0)])
#define RHMAP_IDX_FULL(b, key, str) ((b) ? rhmap__idx(RHMAP__HDR(b), (key), (str), 0, 0) : -1)
#define RHMAP_SET_STR(b, string_key, val) RHMAP_SET_FULL(b, rhmap_hash_string(string_key), string_key, val)
#define RHMAP_GET_STR(b, string_key) RHMAP_GET_FULL(b, rhmap_hash_string(string_key), string_key)
#define RHMAP_HAS_STR(b, string_key) RHMAP_HAS_FULL(b, rhmap_hash_string(string_key), string_key)
#define RHMAP_DEL_STR(b, string_key) RHMAP_DEL_FULL(b, rhmap_hash_string(string_key), string_key)
#define RHMAP_PTR_STR(b, string_key) RHMAP_PTR_FULL(b, rhmap_hash_string(string_key), string_key)
#define RHMAP_IDX_STR(b, string_key) RHMAP_IDX_FULL(b, rhmap_hash_string(string_key), string_key)
RHMAP__UNUSED static uint32_t rhmap_hash_string(const char* str)
{
unsigned char c;
uint32_t hash = (uint32_t)0x811c9dc5;
while ((c = (unsigned char)*(str++)) != '\0')
hash = ((hash * (uint32_t)0x01000193) ^ (uint32_t)c);
return (hash ? hash : 1);
}
struct rhmap__hdr { size_t len, maxlen; uint32_t *keys; char** key_strs; };
#define RHMAP__HDR(b) (((struct rhmap__hdr *)&(b)[-1])-1)
#define RHMAP__GROW(b, n) (*(void**)(&(b)) = rhmap__grow(RHMAP__HDR(b), (void*)(b), sizeof(*(b)), (size_t)(n)))
#define RHMAP__FIT1(b) ((b) && RHMAP_LEN(b) * 2 <= RHMAP_MAX(b) ? 0 : RHMAP__GROW(b, 0))
RHMAP__UNUSED static void* rhmap__grow(struct rhmap__hdr *old_hdr, void* old_ptr, size_t elem_size, size_t reserve)
{
struct rhmap__hdr *new_hdr;
char *new_vals;
size_t new_max = (old_ptr ? old_hdr->maxlen * 2 + 1 : 15);
while (new_max && new_max / 2 <= reserve)
if (!(new_max = new_max * 2 + 1))
return old_ptr; /* overflow */
new_hdr = (struct rhmap__hdr *)malloc(sizeof(struct rhmap__hdr) + (new_max + 2) * elem_size);
if (!new_hdr)
return old_ptr; /* out of memory */
new_hdr->maxlen = new_max;
new_hdr->keys = (uint32_t *)calloc(new_max + 1, sizeof(uint32_t));
if (!new_hdr->keys)
{
/* out of memory */
free(new_hdr);
return old_ptr;
}
new_hdr->key_strs = (char**)calloc(new_max + 1, sizeof(char*));
if (!new_hdr->key_strs)
{
/* out of memory */
free(new_hdr->keys);
free(new_hdr);
return old_ptr;
}
new_vals = ((char*)(new_hdr + 1)) + elem_size;
if (old_ptr)
{
size_t i;
char* old_vals = ((char*)(old_hdr + 1)) + elem_size;
for (i = 0; i <= old_hdr->maxlen; i++)
{
uint32_t key, j;
if (!old_hdr->keys[i])
continue;
for (key = old_hdr->keys[i], j = key;; j++)
{
if (!new_hdr->keys[j &= new_hdr->maxlen])
{
new_hdr->keys[j] = key;
new_hdr->key_strs[j] = old_hdr->key_strs[i];
memcpy(new_vals + j * elem_size, old_vals + i * elem_size, elem_size);
break;
}
}
}
memcpy(new_vals - elem_size, old_vals - elem_size, elem_size);
new_hdr->len = old_hdr->len;
free(old_hdr->keys);
free(old_hdr->key_strs);
free(old_hdr);
}
else
{
memset(new_vals - elem_size, 0, elem_size);
new_hdr->len = 0;
}
return new_vals;
}
RHMAP__UNUSED static char* rhmap__strdup(const char * str)
{
size_t full_len = strlen(str) + 1;
char *dup_str = (char *)malloc(full_len);
if (!dup_str)
return NULL;
memcpy(dup_str, str, full_len);
return dup_str;
}
RHMAP__UNUSED static ptrdiff_t rhmap__idx(struct rhmap__hdr* hdr, uint32_t key, const char * str, int add, size_t del)
{
uint32_t i;
if (!key)
return (ptrdiff_t)-1;
for (i = key;; i++)
{
if (hdr->keys[i &= hdr->maxlen] == key && (!hdr->key_strs[i] || !str || !strcmp(hdr->key_strs[i], str)))
{
if (del)
{
hdr->len--;
hdr->keys[i] = 0;
free(hdr->key_strs[i]);
hdr->key_strs[i] = NULL;
while ((key = hdr->keys[i = (i + 1) & hdr->maxlen]) != 0)
{
if ((key = (uint32_t)rhmap__idx(hdr, key, str, 1, 0)) == i) continue;
hdr->len--;
hdr->keys[i] = 0;
free(hdr->key_strs[i]);
hdr->key_strs[i] = NULL;
memcpy(((char*)(hdr + 1)) + (key + 1) * del,
((char*)(hdr + 1)) + (i + 1) * del, del);
}
}
return (ptrdiff_t)i;
}
if (!hdr->keys[i])
{
if (add) { hdr->len++; hdr->keys[i] = key; if (str) hdr->key_strs[i] = rhmap__strdup(str); return (ptrdiff_t)i; }
return (ptrdiff_t)-1;
}
}
}
RHMAP__UNUSED static void rhmap__free(struct rhmap__hdr* hdr)
{
size_t i;
for (i=0;i<hdr->maxlen+1;i++)
{
free(hdr->key_strs[i]);
}
free(hdr->key_strs);
free(hdr->keys);
free(hdr);
}
#if defined(_MSC_VER)
#pragma warning(pop)
#endif
#endif

View File

@ -17,8 +17,7 @@
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
#include <cstring>
#include <algorithm>
#include <array/rhmap.h>
namespace {
@ -234,7 +233,7 @@ static const unsigned short p405[] = {
static const unsigned short p406[] = {
PACK15_4(0xFFFFFF, 0xFF9C00, 0xFF0000, 0x000000),
PACK15_4(0xFFFFFF, 0xFF9C00, 0xFF0000, 0x000000),
PACK15_4(0xFFFFFF, 0x5ABDFF, 0xFF0000, 0x0000FF )
PACK15_4(0xFFFFFF, 0x5ABDFF, 0xFF0000, 0x0000FF)
};
static const unsigned short p407[] = {
@ -846,9 +845,9 @@ static const unsigned short twb64_045_pikachu_yellow[] = {
};
static const unsigned short twb64_046_eevee_brown[] = {
PACK15_4(0xE50A84, 0xAF0764, 0x6B043E, 0x280117),
PACK15_4(0xE50A84, 0xAF0764, 0x6B043E, 0x280117),
PACK15_4(0xE50A84, 0xAF0764, 0x6B043E, 0x280117)
PACK15_4(0xC88D32, 0x986B26, 0x5E4217, 0x231808),
PACK15_4(0xC88D32, 0x986B26, 0x5E4217, 0x231808),
PACK15_4(0xC88D32, 0x986B26, 0x5E4217, 0x231808)
};
static const unsigned short twb64_047_microvision_ver[] = {
@ -1781,7 +1780,6 @@ static const unsigned short twb64_200_tokyo_skytree_cloudy_blue[] = {
struct GbcPaletteEntry { const char *title; const unsigned short *p; };
// Note: These entries must be in alphabetical order
static const GbcPaletteEntry gbcDirPalettes[] = {
{ "GB - DMG", gbdmg }, // Original Game Boy
{ "GB - Light", gblit }, // Original Game Boy Light
@ -1836,203 +1834,203 @@ static const GbcPaletteEntry gbcDirPalettes[] = {
{ "TWB64 001 - Aqours Blue", twb64_001_aqours_blue },
{ "TWB64 002 - Anime Expo Ver.", twb64_002_anime_expo_ver },
{ "TWB64 003 - SpongeBob Yellow", twb64_003_spongebob_yellow },
{ "TWB64 004 - Patrick Star Pink", twb64_004_patrick_star_pink },
{ "TWB64 005 - Neon Red", twb64_005_neon_red },
{ "TWB64 006 - Neon Blue", twb64_006_neon_blue },
{ "TWB64 007 - Neon Yellow", twb64_007_neon_yellow },
{ "TWB64 008 - Neon Green", twb64_008_neon_green },
{ "TWB64 009 - Neon Pink", twb64_009_neon_pink },
{ "TWB64 010 - Mario Red", twb64_010_mario_red },
{ "TWB64 011 - Nick Orange", twb64_011_nick_orange },
{ "TWB64 012 - Virtual Boy Ver.", twb64_012_virtual_boy_ver },
{ "TWB64 013 - Golden Wild", twb64_013_golden_wild },
{ "TWB64 014 - Builder Yellow", twb64_014_builder_yellow },
{ "TWB64 015 - Classic Blurple", twb64_015_classic_blurple },
{ "TWB64 016 - 765 Production Ver.", twb64_016_765_production_ver },
{ "TWB64 017 - Superball Ivory", twb64_017_superball_ivory },
{ "TWB64 018 - Crunchyroll Orange", twb64_018_crunchyroll_orange },
{ "TWB64 019 - Muse Pink", twb64_019_muse_pink },
{ "TWB64 020 - Nijigasaki Yellow", twb64_020_nijigasaki_yellow },
{ "TWB64 021 - Gamate Ver.", twb64_021_gamate_ver },
{ "TWB64 022 - Greenscale Ver.", twb64_022_greenscale_ver },
{ "TWB64 023 - Odyssey Gold", twb64_023_odyssey_gold },
{ "TWB64 024 - Super Saiyan God", twb64_024_super_saiyan_god },
{ "TWB64 025 - Super Saiyan Blue", twb64_025_super_saiyan_blue },
{ "TWB64 026 - Bizarre Pink", twb64_026_bizarre_pink },
{ "TWB64 027 - Nintendo Switch Lite Ver.", twb64_027_nintendo_switch_lite_ver },
{ "TWB64 028 - Game.com Ver.", twb64_028_game_com_ver },
{ "TWB64 029 - Sanrio Pink", twb64_029_sanrio_pink },
{ "TWB64 030 - BANDAI NAMCO Ver.", twb64_030_bandai_namco_ver },
{ "TWB64 031 - Cosmo Green", twb64_031_cosmo_green },
{ "TWB64 032 - Wanda Pink", twb64_032_wanda_pink },
{ "TWB64 033 - Link's Awakening DX Ver.", twb64_033_links_awakening_dx_ver },
{ "TWB64 034 - Travel Wood", twb64_034_travel_wood },
{ "TWB64 035 - Pokemon Ver.", twb64_035_pokemon_ver },
{ "TWB64 036 - Game Grump Orange", twb64_036_game_grump_orange },
{ "TWB64 037 - Scooby-Doo Mystery Ver.", twb64_037_scooby_doo_mystery_ver },
{ "TWB64 038 - Pokemon mini Ver.", twb64_038_pokemon_mini_ver },
{ "TWB64 039 - Supervision Ver.", twb64_039_supervision_ver },
{ "TWB64 040 - DMG Ver.", twb64_040_dmg_ver },
{ "TWB64 041 - Pocket Ver.", twb64_041_pocket_ver },
{ "TWB64 042 - Light Ver.", twb64_042_light_ver },
{ "TWB64 043 - Miraitowa Blue", twb64_043_miraitowa_blue },
{ "TWB64 044 - Someity Pink", twb64_044_someity_pink },
{ "TWB64 045 - Pikachu Yellow", twb64_045_pikachu_yellow },
{ "TWB64 046 - Eevee Brown", twb64_046_eevee_brown },
{ "TWB64 047 - Microvision Ver.", twb64_047_microvision_ver },
{ "TWB64 048 - TI-83 Ver.", twb64_048_ti83_ver },
{ "TWB64 049 - Aegis Cherry", twb64_049_aegis_cherry },
{ "TWB64 050 - Labo Fawn", twb64_050_labo_fawn },
{ "TWB64 051 - MILLION LIVE GOLD!", twb64_051_million_live_gold },
{ "TWB64 052 - Tokyo Midtown Ver.", twb64_052_tokyo_midtown_ver },
{ "TWB64 053 - VMU Ver.", twb64_053_vmu_ver },
{ "TWB64 054 - Game Master Ver.", twb64_054_game_master_ver },
{ "TWB64 055 - Android Green", twb64_055_android_green },
{ "TWB64 056 - Ticketmaster Azure", twb64_056_ticketmaster_azure },
{ "TWB64 057 - Google Red", twb64_057_google_red },
{ "TWB64 058 - Google Blue", twb64_057_google_blue },
{ "TWB64 059 - Google Yellow", twb64_059_google_yellow },
{ "TWB64 060 - Google Green", twb64_060_google_green },
{ "TWB64 061 - WonderSwan Ver.", twb64_061_wonderswan_ver },
{ "TWB64 062 - Neo Geo Pocket Ver.", twb64_062_neo_geo_pocket_ver },
{ "TWB64 063 - Dew Green", twb64_063_dew_green },
{ "TWB64 064 - Coca-Cola Red", twb64_064_coca_cola_red },
{ "TWB64 065 - GameKing Ver.", twb64_065_gameking_ver },
{ "TWB64 066 - Do The Dew Ver.", twb64_066_do_the_dew_ver },
{ "TWB64 067 - Digivice Ver.", twb64_067_digivice_ver },
{ "TWB64 068 - Bikini Bottom Ver.", twb64_068_bikini_bottom_ver },
{ "TWB64 069 - Blossom Pink", twb64_069_blossom_pink },
{ "TWB64 070 - Bubbles Blue", twb64_070_bubbles_blue },
{ "TWB64 071 - Buttercup Green", twb64_071_buttercup_green },
{ "TWB64 072 - NASCAR Ver.", twb64_072_nascar_ver },
{ "TWB64 073 - Lemon-Lime Green", twb64_073_lemon_lime_green },
{ "TWB64 074 - Mega Man V Ver.", twb64_074_mega_man_v_ver },
{ "TWB64 075 - Tamagotchi Ver.", twb64_075_tamagotchi_ver },
{ "TWB64 076 - Phantom Red", twb64_076_phantom_red },
{ "TWB64 077 - Halloween Ver.", twb64_077_halloween_ver },
{ "TWB64 078 - Christmas Ver.", twb64_078_christmas_ver },
{ "TWB64 079 - Cardcaptor Pink", twb64_079_cardcaptor_pink },
{ "TWB64 080 - Pretty Guardian Gold", twb64_080_pretty_guardian_gold },
{ "TWB64 081 - Camoflauge Ver.", twb64_081_camoflauge_ver },
{ "TWB64 082 - Legendary Super Saiyan", twb64_082_legendary_super_saiyan },
{ "TWB64 083 - Super Saiyan Rose", twb64_083_super_saiyan_rose },
{ "TWB64 084 - Super Saiyan", twb64_084_super_saiyan },
{ "TWB64 085 - Mastered Ultra Instinct", twb64_085_mastered_ultra_instinct },
{ "TWB64 086 - Saint Snow Red", twb64_086_saint_snow_red },
{ "TWB64 087 - Yellow Banana", twb64_087_yellow_banana },
{ "TWB64 088 - Green Banana", twb64_088_green_banana },
{ "TWB64 089 - Super Saiyan 3", twb64_089_super_saiyan_3 },
{ "TWB64 090 - Super Saiyan Blue Evolved", twb64_090_super_saiyan_blue_evolved },
{ "TWB64 091 - Pocket Tales Ver.", twb64_091_pocket_tales_ver },
{ "TWB64 092 - Investigation Yellow", twb64_092_investigation_yellow },
{ "TWB64 093 - S.E.E.S. Blue", twb64_093_sees_blue },
{ "TWB64 094 - Game Awards Cyan", twb64_094_game_awards_cyan },
{ "TWB64 095 - Hokage Orange", twb64_095_hokage_orange },
{ "TWB64 096 - Straw Hat Red", twb64_096_straw_hat_red },
{ "TWB64 097 - Sword Art Cyan", twb64_097_sword_art_cyan },
{ "TWB64 098 - Deku Alpha Emerald", twb64_098_deku_alpha_emerald },
{ "TWB64 099 - Blue Stripes Ver.", twb64_099_blue_stripes_ver },
{ "TWB64 100 - Stone Orange", twb64_100_stone_orange },
{ "TWB64 101 - 765PRO Pink", twb64_101_765pro_pink },
{ "TWB64 102 - CINDERELLA Blue", twb64_102_cinderella_blue },
{ "TWB64 103 - MILLION Yellow!", twb64_103_million_yellow },
{ "TWB64 104 - SideM Green", twb64_104_sidem_green },
{ "TWB64 105 - SHINY Sky Blue", twb64_105_shiny_sky_blue },
{ "TWB64 106 - Angry Volcano Ver.", twb64_106_angry_volcano_ver },
{ "TWB64 107 - Yo-kai Pink", twb64_107_yokai_pink },
{ "TWB64 108 - Yo-kai Green", twb64_108_yokai_green },
{ "TWB64 109 - Yo-kai Blue", twb64_109_yokai_blue },
{ "TWB64 110 - Yo-kai Purple", twb64_110_yokai_purple },
{ "TWB64 111 - Aquatic Iro", twb64_111_aquatic_iro },
{ "TWB64 112 - Tea Midori", twb64_112_tea_midori },
{ "TWB64 113 - Sakura Pink", twb64_113_sakura_pink },
{ "TWB64 114 - Wisteria Murasaki", twb64_114_wisteria_murasaki },
{ "TWB64 115 - Oni Aka", twb64_115_oni_aka },
{ "TWB64 116 - Golden Kiiro", twb64_116_golden_kiiro },
{ "TWB64 117 - Silver Shiro", twb64_117_silver_shiro },
{ "TWB64 118 - Fruity Orange", twb64_118_fruity_orange },
{ "TWB64 119 - AKB48 Pink", twb64_119_akb48_pink },
{ "TWB64 120 - Miku Blue", twb64_120_miku_blue },
{ "TWB64 121 - Fairy Tail Red", twb64_121_fairy_tail_red },
{ "TWB64 122 - Survey Corps Brown", twb64_122_survey_corps_brown },
{ "TWB64 123 - Island Green", twb64_123_island_green },
{ "TWB64 124 - Mania Plus Green", twb64_124_mania_plus_green },
{ "TWB64 125 - Ninja Turtle Green", twb64_125_ninja_turtle_green },
{ "TWB64 126 - Slime Blue", twb64_126_slime_blue },
{ "TWB64 127 - Lime Midori", twb64_127_lime_midori },
{ "TWB64 128 - Ghostly Aoi", twb64_128_ghostly_aoi },
{ "TWB64 129 - Retro Bogeda", twb64_129_retro_bogeda },
{ "TWB64 130 - Royal Blue", twb64_130_royal_blue },
{ "TWB64 131 - Neon Purple", twb64_131_neon_purple },
{ "TWB64 132 - Neon Orange", twb64_132_neon_orange },
{ "TWB64 133 - Moonlight Vision", twb64_133_moonlight_vision },
{ "TWB64 134 - Tokyo Red", twb64_134_tokyo_red },
{ "TWB64 135 - Paris Gold", twb64_135_paris_gold },
{ "TWB64 136 - Beijing Blue", twb64_136_beijing_blue },
{ "TWB64 137 - Pac-Man Yellow", twb64_137_pacman_yellow },
{ "TWB64 138 - Irish Green", twb64_138_irish_green },
{ "TWB64 139 - Kakarot Orange", twb64_139_kakarot_orange },
{ "TWB64 140 - Dragon Ball Orange", twb64_140_dragon_ball_orange },
{ "TWB64 141 - Christmas Gold", twb64_141_christmas_gold },
{ "TWB64 142 - Pepsi Blue", twb64_142_pepsi_blue },
{ "TWB64 143 - Bubblun Green", twb64_143_bubblun_green },
{ "TWB64 144 - Bobblun Blue", twb64_144_bobblun_blue },
{ "TWB64 145 - Baja Blast Storm", twb64_145_baja_blast_storm },
{ "TWB64 146 - Olympic Gold", twb64_146_olympic_gold },
{ "TWB64 147 - Value Orange", twb64_147_value_orange },
{ "TWB64 148 - Liella Purple!", twb64_148_liella_purple },
{ "TWB64 149 - Olympic Silver", twb64_149_olympic_silver },
{ "TWB64 150 - Olympic Bronze", twb64_150_olympic_bronze },
{ "TWB64 151 - ANA Sky Blue", twb64_151_ana_sky_blue },
{ "TWB64 152 - Nijigasaki Orange", twb64_152_nijigasaki_orange },
{ "TWB64 153 - HoloBlue", twb64_153_holoblue },
{ "TWB64 154 - Wrestling Red", twb64_154_wrestling_red },
{ "TWB64 155 - Yoshi Egg Green", twb64_155_nijigasaki_orange },
{ "TWB64 156 - Pokedex Red", twb64_156_pokedex_red },
{ "TWB64 157 - Disney Dream Blue", twb64_157_disney_dream_blue },
{ "TWB64 158 - Xbox Green", twb64_158_xbox_green },
{ "TWB64 159 - Sonic Mega Blue", twb64_159_sonic_mega_blue },
{ "TWB64 160 - G4 Orange", twb64_160_g4_orange },
{ "TWB64 161 - Scarlett Green", twb64_161_scarlett_green },
{ "TWB64 162 - Glitchy Blue", twb64_162_glitchy_blue },
{ "TWB64 163 - Classic LCD", twb64_163_classic_lcd },
{ "TWB64 164 - 3DS Virtual Console Ver.", twb64_164_3ds_virtual_console_ver },
{ "TWB64 165 - PocketStation Ver.", twb64_165_pocketstation_ver },
{ "TWB64 166 - Game and Gold", twb64_166_game_and_gold },
{ "TWB64 167 - Smurfy Blue", twb64_167_smurfy_blue },
{ "TWB64 168 - Swampy Ogre Green", twb64_168_swampy_ogre_green },
{ "TWB64 169 - Sailor Spinach Green", twb64_169_sailor_spinach_green },
{ "TWB64 170 - Shenron Green", twb64_170_shenron_green },
{ "TWB64 171 - Berserk Blood", twb64_171_berserk_blood },
{ "TWB64 172 - Super Star Pink", twb64_172_super_star_pink },
{ "TWB64 173 - Gamebuino Classic Ver.", twb64_173_gamebuino_classic_ver },
{ "TWB64 174 - Barbie Pink", twb64_174_barbie_pink },
{ "TWB64 175 - Star Command Green", twb64_175_star_command_green },
{ "TWB64 176 - Nokia 3310 Ver.", twb64_176_nokia_3310_ver },
{ "TWB64 177 - Clover Green", twb64_177_clover_green },
{ "TWB64 178 - Crash Orange", twb64_178_crash_orange },
{ "TWB64 179 - Famicom Disk Yellow", twb64_179_famicom_disk_yellow },
{ "TWB64 180 - Team Rocket Red", twb64_180_team_rocket_red },
{ "TWB64 181 - SEIKO Timer Yellow", twb64_181_seiko_timer_yellow },
{ "TWB64 182 - PINK109", twb64_182_pink109 },
{ "TWB64 183 - Doraemon Blue", twb64_183_doraemon_blue },
{ "TWB64 184 - Fury Blue", twb64_184_fury_blue },
{ "TWB64 185 - Rockstar Orange", twb64_185_rockstar_orange },
{ "TWB64 186 - Puyo Puyo Green", twb64_186_puyo_puyo_green },
{ "TWB64 187 - Susan G. Pink", twb64_187_susan_g_pink },
{ "TWB64 188 - Pizza Hut Red", twb64_188_pizza_hut_red },
{ "TWB64 189 - Plumbob Green", twb64_189_plumbob_green },
{ "TWB64 190 - Grand Ivory", twb64_190_grand_ivory },
{ "TWB64 191 - Demon's Gold", twb64_191_demons_gold },
{ "TWB64 192 - SEGA Tokyo Blue", twb64_192_sega_tokyo_blue },
{ "TWB64 193 - Champion Blue", twb64_193_champion_blue },
{ "TWB64 194 - DK Barrel Brown", twb64_194_dk_barrel_brown },
{ "TWB64 195 - Evangelion Green", twb64_195_evangelion_green },
{ "TWB64 196 - Equestrian Purple", twb64_196_equestrian_purple },
{ "TWB64 197 - Autobot Red", twb64_197_autobot_red },
{ "TWB64 198 - niconico sea green", twb64_198_niconico_sea_green },
{ "TWB64 199 - Duracell Copper", twb64_199_duracell_copper },
{ "TWB64 200 - TOKYO SKYTREE CLOUDY BLUE", twb64_200_tokyo_skytree_cloudy_blue },
{ "TWB64 004 - Patrick Star Pink", twb64_004_patrick_star_pink },
{ "TWB64 005 - Neon Red", twb64_005_neon_red },
{ "TWB64 006 - Neon Blue", twb64_006_neon_blue },
{ "TWB64 007 - Neon Yellow", twb64_007_neon_yellow },
{ "TWB64 008 - Neon Green", twb64_008_neon_green },
{ "TWB64 009 - Neon Pink", twb64_009_neon_pink },
{ "TWB64 010 - Mario Red", twb64_010_mario_red },
{ "TWB64 011 - Nick Orange", twb64_011_nick_orange },
{ "TWB64 012 - Virtual Boy Ver.", twb64_012_virtual_boy_ver },
{ "TWB64 013 - Golden Wild", twb64_013_golden_wild },
{ "TWB64 014 - Builder Yellow", twb64_014_builder_yellow },
{ "TWB64 015 - Classic Blurple", twb64_015_classic_blurple },
{ "TWB64 016 - 765 Production Ver.", twb64_016_765_production_ver },
{ "TWB64 017 - Superball Ivory", twb64_017_superball_ivory },
{ "TWB64 018 - Crunchyroll Orange", twb64_018_crunchyroll_orange },
{ "TWB64 019 - Muse Pink", twb64_019_muse_pink },
{ "TWB64 020 - Nijigasaki Yellow", twb64_020_nijigasaki_yellow },
{ "TWB64 021 - Gamate Ver.", twb64_021_gamate_ver },
{ "TWB64 022 - Greenscale Ver.", twb64_022_greenscale_ver },
{ "TWB64 023 - Odyssey Gold", twb64_023_odyssey_gold },
{ "TWB64 024 - Super Saiyan God", twb64_024_super_saiyan_god },
{ "TWB64 025 - Super Saiyan Blue", twb64_025_super_saiyan_blue },
{ "TWB64 026 - Bizarre Pink", twb64_026_bizarre_pink },
{ "TWB64 027 - Nintendo Switch Lite Ver.", twb64_027_nintendo_switch_lite_ver },
{ "TWB64 028 - Game.com Ver.", twb64_028_game_com_ver },
{ "TWB64 029 - Sanrio Pink", twb64_029_sanrio_pink },
{ "TWB64 030 - BANDAI NAMCO Ver.", twb64_030_bandai_namco_ver },
{ "TWB64 031 - Cosmo Green", twb64_031_cosmo_green },
{ "TWB64 032 - Wanda Pink", twb64_032_wanda_pink },
{ "TWB64 033 - Link's Awakening DX Ver.", twb64_033_links_awakening_dx_ver },
{ "TWB64 034 - Travel Wood", twb64_034_travel_wood },
{ "TWB64 035 - Pokemon Ver.", twb64_035_pokemon_ver },
{ "TWB64 036 - Game Grump Orange", twb64_036_game_grump_orange },
{ "TWB64 037 - Scooby-Doo Mystery Ver.", twb64_037_scooby_doo_mystery_ver },
{ "TWB64 038 - Pokemon mini Ver.", twb64_038_pokemon_mini_ver },
{ "TWB64 039 - Supervision Ver.", twb64_039_supervision_ver },
{ "TWB64 040 - DMG Ver.", twb64_040_dmg_ver },
{ "TWB64 041 - Pocket Ver.", twb64_041_pocket_ver },
{ "TWB64 042 - Light Ver.", twb64_042_light_ver },
{ "TWB64 043 - Miraitowa Blue", twb64_043_miraitowa_blue },
{ "TWB64 044 - Someity Pink", twb64_044_someity_pink },
{ "TWB64 045 - Pikachu Yellow", twb64_045_pikachu_yellow },
{ "TWB64 046 - Eevee Brown", twb64_046_eevee_brown },
{ "TWB64 047 - Microvision Ver.", twb64_047_microvision_ver },
{ "TWB64 048 - TI-83 Ver.", twb64_048_ti83_ver },
{ "TWB64 049 - Aegis Cherry", twb64_049_aegis_cherry },
{ "TWB64 050 - Labo Fawn", twb64_050_labo_fawn },
{ "TWB64 051 - MILLION LIVE GOLD!", twb64_051_million_live_gold },
{ "TWB64 052 - Tokyo Midtown Ver.", twb64_052_tokyo_midtown_ver },
{ "TWB64 053 - VMU Ver.", twb64_053_vmu_ver },
{ "TWB64 054 - Game Master Ver.", twb64_054_game_master_ver },
{ "TWB64 055 - Android Green", twb64_055_android_green },
{ "TWB64 056 - Ticketmaster Azure", twb64_056_ticketmaster_azure },
{ "TWB64 057 - Google Red", twb64_057_google_red },
{ "TWB64 058 - Google Blue", twb64_058_google_blue },
{ "TWB64 059 - Google Yellow", twb64_059_google_yellow },
{ "TWB64 060 - Google Green", twb64_060_google_green },
{ "TWB64 061 - WonderSwan Ver.", twb64_061_wonderswan_ver },
{ "TWB64 062 - Neo Geo Pocket Ver.", twb64_062_neo_geo_pocket_ver },
{ "TWB64 063 - Dew Green", twb64_063_dew_green },
{ "TWB64 064 - Coca-Cola Red", twb64_064_coca_cola_red },
{ "TWB64 065 - GameKing Ver.", twb64_065_gameking_ver },
{ "TWB64 066 - Do The Dew Ver.", twb64_066_do_the_dew_ver },
{ "TWB64 067 - Digivice Ver.", twb64_067_digivice_ver },
{ "TWB64 068 - Bikini Bottom Ver.", twb64_068_bikini_bottom_ver },
{ "TWB64 069 - Blossom Pink", twb64_069_blossom_pink },
{ "TWB64 070 - Bubbles Blue", twb64_070_bubbles_blue },
{ "TWB64 071 - Buttercup Green", twb64_071_buttercup_green },
{ "TWB64 072 - NASCAR Ver.", twb64_072_nascar_ver },
{ "TWB64 073 - Lemon-Lime Green", twb64_073_lemon_lime_green },
{ "TWB64 074 - Mega Man V Ver.", twb64_074_mega_man_v_ver },
{ "TWB64 075 - Tamagotchi Ver.", twb64_075_tamagotchi_ver },
{ "TWB64 076 - Phantom Red", twb64_076_phantom_red },
{ "TWB64 077 - Halloween Ver.", twb64_077_halloween_ver },
{ "TWB64 078 - Christmas Ver.", twb64_078_christmas_ver },
{ "TWB64 079 - Cardcaptor Pink", twb64_079_cardcaptor_pink },
{ "TWB64 080 - Pretty Guardian Gold", twb64_080_pretty_guardian_gold },
{ "TWB64 081 - Camoflauge Ver.", twb64_081_camoflauge_ver },
{ "TWB64 082 - Legendary Super Saiyan", twb64_082_legendary_super_saiyan },
{ "TWB64 083 - Super Saiyan Rose", twb64_083_super_saiyan_rose },
{ "TWB64 084 - Super Saiyan", twb64_084_super_saiyan },
{ "TWB64 085 - Mastered Ultra Instinct", twb64_085_mastered_ultra_instinct },
{ "TWB64 086 - Saint Snow Red", twb64_086_saint_snow_red },
{ "TWB64 087 - Yellow Banana", twb64_087_yellow_banana },
{ "TWB64 088 - Green Banana", twb64_088_green_banana },
{ "TWB64 089 - Super Saiyan 3", twb64_089_super_saiyan_3 },
{ "TWB64 090 - Super Saiyan Blue Evolved", twb64_090_super_saiyan_blue_evolved },
{ "TWB64 091 - Pocket Tales Ver.", twb64_091_pocket_tales_ver },
{ "TWB64 092 - Investigation Yellow", twb64_092_investigation_yellow },
{ "TWB64 093 - S.E.E.S. Blue", twb64_093_sees_blue },
{ "TWB64 094 - Game Awards Cyan", twb64_094_game_awards_cyan },
{ "TWB64 095 - Hokage Orange", twb64_095_hokage_orange },
{ "TWB64 096 - Straw Hat Red", twb64_096_straw_hat_red },
{ "TWB64 097 - Sword Art Cyan", twb64_097_sword_art_cyan },
{ "TWB64 098 - Deku Alpha Emerald", twb64_098_deku_alpha_emerald },
{ "TWB64 099 - Blue Stripes Ver.", twb64_099_blue_stripes_ver },
{ "TWB64 100 - Stone Orange", twb64_100_stone_orange },
{ "TWB64 101 - 765PRO Pink", twb64_101_765pro_pink },
{ "TWB64 102 - CINDERELLA Blue", twb64_102_cinderella_blue },
{ "TWB64 103 - MILLION Yellow!", twb64_103_million_yellow },
{ "TWB64 104 - SideM Green", twb64_104_sidem_green },
{ "TWB64 105 - SHINY Sky Blue", twb64_105_shiny_sky_blue },
{ "TWB64 106 - Angry Volcano Ver.", twb64_106_angry_volcano_ver },
{ "TWB64 107 - Yo-kai Pink", twb64_107_yokai_pink },
{ "TWB64 108 - Yo-kai Green", twb64_108_yokai_green },
{ "TWB64 109 - Yo-kai Blue", twb64_109_yokai_blue },
{ "TWB64 110 - Yo-kai Purple", twb64_110_yokai_purple },
{ "TWB64 111 - Aquatic Iro", twb64_111_aquatic_iro },
{ "TWB64 112 - Tea Midori", twb64_112_tea_midori },
{ "TWB64 113 - Sakura Pink", twb64_113_sakura_pink },
{ "TWB64 114 - Wisteria Murasaki", twb64_114_wisteria_murasaki },
{ "TWB64 115 - Oni Aka", twb64_115_oni_aka },
{ "TWB64 116 - Golden Kiiro", twb64_116_golden_kiiro },
{ "TWB64 117 - Silver Shiro", twb64_117_silver_shiro },
{ "TWB64 118 - Fruity Orange", twb64_118_fruity_orange },
{ "TWB64 119 - AKB48 Pink", twb64_119_akb48_pink },
{ "TWB64 120 - Miku Blue", twb64_120_miku_blue },
{ "TWB64 121 - Fairy Tail Red", twb64_121_fairy_tail_red },
{ "TWB64 122 - Survey Corps Brown", twb64_122_survey_corps_brown },
{ "TWB64 123 - Island Green", twb64_123_island_green },
{ "TWB64 124 - Mania Plus Green", twb64_124_mania_plus_green },
{ "TWB64 125 - Ninja Turtle Green", twb64_125_ninja_turtle_green },
{ "TWB64 126 - Slime Blue", twb64_126_slime_blue },
{ "TWB64 127 - Lime Midori", twb64_127_lime_midori },
{ "TWB64 128 - Ghostly Aoi", twb64_128_ghostly_aoi },
{ "TWB64 129 - Retro Bogeda", twb64_129_retro_bogeda },
{ "TWB64 130 - Royal Blue", twb64_130_royal_blue },
{ "TWB64 131 - Neon Purple", twb64_131_neon_purple },
{ "TWB64 132 - Neon Orange", twb64_132_neon_orange },
{ "TWB64 133 - Moonlight Vision", twb64_133_moonlight_vision },
{ "TWB64 134 - Tokyo Red", twb64_134_tokyo_red },
{ "TWB64 135 - Paris Gold", twb64_135_paris_gold },
{ "TWB64 136 - Beijing Blue", twb64_136_beijing_blue },
{ "TWB64 137 - Pac-Man Yellow", twb64_137_pacman_yellow },
{ "TWB64 138 - Irish Green", twb64_138_irish_green },
{ "TWB64 139 - Kakarot Orange", twb64_139_kakarot_orange },
{ "TWB64 140 - Dragon Ball Orange", twb64_140_dragon_ball_orange },
{ "TWB64 141 - Christmas Gold", twb64_141_christmas_gold },
{ "TWB64 142 - Pepsi Blue", twb64_142_pepsi_blue },
{ "TWB64 143 - Bubblun Green", twb64_143_bubblun_green },
{ "TWB64 144 - Bobblun Blue", twb64_144_bobblun_blue },
{ "TWB64 145 - Baja Blast Storm", twb64_145_baja_blast_storm },
{ "TWB64 146 - Olympic Gold", twb64_146_olympic_gold },
{ "TWB64 147 - Value Orange", twb64_147_value_orange },
{ "TWB64 148 - Liella Purple!", twb64_148_liella_purple },
{ "TWB64 149 - Olympic Silver", twb64_149_olympic_silver },
{ "TWB64 150 - Olympic Bronze", twb64_150_olympic_bronze },
{ "TWB64 151 - ANA Sky Blue", twb64_151_ana_sky_blue },
{ "TWB64 152 - Nijigasaki Orange", twb64_152_nijigasaki_orange },
{ "TWB64 153 - HoloBlue", twb64_153_holoblue },
{ "TWB64 154 - Wrestling Red", twb64_154_wrestling_red },
{ "TWB64 155 - Yoshi Egg Green", twb64_155_yoshi_egg_green },
{ "TWB64 156 - Pokedex Red", twb64_156_pokedex_red },
{ "TWB64 157 - Disney Dream Blue", twb64_157_disney_dream_blue },
{ "TWB64 158 - Xbox Green", twb64_158_xbox_green },
{ "TWB64 159 - Sonic Mega Blue", twb64_159_sonic_mega_blue },
{ "TWB64 160 - G4 Orange", twb64_160_g4_orange },
{ "TWB64 161 - Scarlett Green", twb64_161_scarlett_green },
{ "TWB64 162 - Glitchy Blue", twb64_162_glitchy_blue },
{ "TWB64 163 - Classic LCD", twb64_163_classic_lcd },
{ "TWB64 164 - 3DS Virtual Console Ver.", twb64_164_3ds_virtual_console_ver },
{ "TWB64 165 - PocketStation Ver.", twb64_165_pocketstation_ver },
{ "TWB64 166 - Game and Gold", twb64_166_game_and_gold },
{ "TWB64 167 - Smurfy Blue", twb64_167_smurfy_blue },
{ "TWB64 168 - Swampy Ogre Green", twb64_168_swampy_ogre_green },
{ "TWB64 169 - Sailor Spinach Green", twb64_169_sailor_spinach_green },
{ "TWB64 170 - Shenron Green", twb64_170_shenron_green },
{ "TWB64 171 - Berserk Blood", twb64_171_berserk_blood },
{ "TWB64 172 - Super Star Pink", twb64_172_super_star_pink },
{ "TWB64 173 - Gamebuino Classic Ver.", twb64_173_gamebuino_classic_ver },
{ "TWB64 174 - Barbie Pink", twb64_174_barbie_pink },
{ "TWB64 175 - Star Command Green", twb64_175_star_command_green },
{ "TWB64 176 - Nokia 3310 Ver.", twb64_176_nokia_3310_ver },
{ "TWB64 177 - Clover Green", twb64_177_clover_green },
{ "TWB64 178 - Crash Orange", twb64_178_crash_orange },
{ "TWB64 179 - Famicom Disk Yellow", twb64_179_famicom_disk_yellow },
{ "TWB64 180 - Team Rocket Red", twb64_180_team_rocket_red },
{ "TWB64 181 - SEIKO Timer Yellow", twb64_181_seiko_timer_yellow },
{ "TWB64 182 - PINK109", twb64_182_pink109 },
{ "TWB64 183 - Doraemon Blue", twb64_183_doraemon_blue },
{ "TWB64 184 - Fury Blue", twb64_184_fury_blue },
{ "TWB64 185 - Rockstar Orange", twb64_185_rockstar_orange },
{ "TWB64 186 - Puyo Puyo Green", twb64_186_puyo_puyo_green },
{ "TWB64 187 - Susan G. Pink", twb64_187_susan_g_pink },
{ "TWB64 188 - Pizza Hut Red", twb64_188_pizza_hut_red },
{ "TWB64 189 - Plumbob Green", twb64_189_plumbob_green },
{ "TWB64 190 - Grand Ivory", twb64_190_grand_ivory },
{ "TWB64 191 - Demon's Gold", twb64_191_demons_gold },
{ "TWB64 192 - SEGA Tokyo Blue", twb64_192_sega_tokyo_blue },
{ "TWB64 193 - Champion Blue", twb64_193_champion_blue },
{ "TWB64 194 - DK Barrel Brown", twb64_194_dk_barrel_brown },
{ "TWB64 195 - Evangelion Green", twb64_195_evangelion_green },
{ "TWB64 196 - Equestrian Purple", twb64_196_equestrian_purple },
{ "TWB64 197 - Autobot Red", twb64_197_autobot_red },
{ "TWB64 198 - Niconico Sea Green", twb64_198_niconico_sea_green },
{ "TWB64 199 - Duracell Copper", twb64_199_duracell_copper },
{ "TWB64 200 - TOKYO SKYTREE CLOUDY BLUE", twb64_200_tokyo_skytree_cloudy_blue },
};
static const GbcPaletteEntry gbcTitlePalettes[] = {
@ -2226,36 +2224,54 @@ static const GbcPaletteEntry sgbTitlePalettes[] = {
{ "ZELDA", sgb1E },
};
static inline std::size_t gbcDirPalettesSize() { return (sizeof gbcDirPalettes) / (sizeof gbcDirPalettes[0]); }
static inline const struct GbcPaletteEntry * gbcDirPalettesEnd() { return gbcDirPalettes + gbcDirPalettesSize(); }
static inline std::size_t gbcTitlePalettesSize() { return (sizeof gbcTitlePalettes) / (sizeof gbcTitlePalettes[0]); }
static inline const struct GbcPaletteEntry * gbcTitlePalettesEnd() { return gbcTitlePalettes + gbcTitlePalettesSize(); }
static inline std::size_t sgbTitlePalettesSize() { return (sizeof sgbTitlePalettes) / (sizeof sgbTitlePalettes[0]); }
static inline const struct GbcPaletteEntry * sgbTitlePalettesEnd() { return sgbTitlePalettes + sgbTitlePalettesSize(); }
static const unsigned short **gbcDirPaletteMap = NULL;
static const unsigned short **gbcTitlePaletteMap = NULL;
static const unsigned short **sgbTitlePaletteMap = NULL;
struct GbcPaletteEntryLess {
bool operator()(const GbcPaletteEntry &lhs, const char *const rhstitle) const {
return std::strcmp(lhs.title, rhstitle) < 0;
}
};
static void initPaletteMaps(void)
{
unsigned i;
static const unsigned short * findGbcDirPal(const char *const title) {
const GbcPaletteEntry *const r = std::lower_bound(gbcDirPalettes, gbcDirPalettesEnd(), title, GbcPaletteEntryLess());
return r < gbcDirPalettesEnd() && !std::strcmp(r->title, title) ? r->p : 0;
// gbcDirPalettes
for (i = 0; i < (sizeof gbcDirPalettes) / (sizeof gbcDirPalettes[0]); i++)
RHMAP_SET_STR(gbcDirPaletteMap, gbcDirPalettes[i].title, gbcDirPalettes[i].p);
// gbcTitlePalettes
for (i = 0; i < (sizeof gbcTitlePalettes) / (sizeof gbcTitlePalettes[0]); i++)
RHMAP_SET_STR(gbcTitlePaletteMap, gbcTitlePalettes[i].title, gbcTitlePalettes[i].p);
// sgbTitlePalettes
for (i = 0; i < (sizeof sgbTitlePalettes) / (sizeof sgbTitlePalettes[0]); i++)
RHMAP_SET_STR(sgbTitlePaletteMap, sgbTitlePalettes[i].title, sgbTitlePalettes[i].p);
}
static const unsigned short * findGbcTitlePal(const char *const title) {
const GbcPaletteEntry *const r = std::lower_bound(gbcTitlePalettes, gbcTitlePalettesEnd(), title, GbcPaletteEntryLess());
return r < gbcTitlePalettesEnd() && !std::strcmp(r->title, title) ? r->p : 0;
static void freePaletteMaps(void)
{
RHMAP_FREE(gbcDirPaletteMap);
RHMAP_FREE(gbcTitlePaletteMap);
RHMAP_FREE(sgbTitlePaletteMap);
}
static const unsigned short * findSgbTitlePal(const char *const title) {
const GbcPaletteEntry *const r = std::lower_bound(sgbTitlePalettes, sgbTitlePalettesEnd(), title, GbcPaletteEntryLess());
return r < sgbTitlePalettesEnd() && !std::strcmp(r->title, title) ? r->p : 0;
static const unsigned short *findGbcDirPal(const char *const title)
{
return RHMAP_GET_STR(gbcDirPaletteMap, title);
}
static const unsigned short * findGbcPal(const char *const title) {
if (const unsigned short *const pal = findGbcDirPal(title))
static const unsigned short *findGbcTitlePal(const char *const title)
{
return RHMAP_GET_STR(gbcTitlePaletteMap, title);
}
static const unsigned short *findSgbTitlePal(const char *const title)
{
return RHMAP_GET_STR(sgbTitlePaletteMap, title);
}
static const unsigned short *findGbcPal(const char *const title)
{
const unsigned short *const pal = findGbcDirPal(title);
if (pal)
return pal;
return findGbcTitlePal(title);

View File

@ -951,11 +951,13 @@ void retro_init(void)
#ifdef DUAL_MODE
gb2.setBootloaderGetter(get_bootloader_from_file);
#endif
// Initialise internal palette maps
initPaletteMaps();
struct retro_variable var = {0};
var.key = "gambatte_gb_bootloader";
if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value)
{
if (!strcmp(var.value, "enabled"))
@ -989,6 +991,8 @@ void retro_deinit(void)
video_buf = NULL;
deinit_frame_blending();
freePaletteMaps();
if (libretro_ff_enabled)
set_fastforward_override(false);
@ -1131,7 +1135,17 @@ static bool startswith(const std::string s1, const std::string prefix)
return s1.compare(0, prefix.length(), prefix) == 0;
}
static int gb_colorization_enable = 0;
enum gb_colorization_enable_type
{
GB_COLORIZATION_DISABLED = 0,
GB_COLORIZATION_AUTO = 1,
GB_COLORIZATION_CUSTOM = 2,
GB_COLORIZATION_INTERNAL = 3,
GB_COLORIZATION_GBC = 4,
GB_COLORIZATION_SGB = 5
};
static enum gb_colorization_enable_type gb_colorization_enable = GB_COLORIZATION_DISABLED;
static std::string rom_path;
static char internal_game_name[17];
@ -1244,6 +1258,64 @@ static void load_custom_palette(void)
} // endfor
}
static void find_internal_palette(const unsigned short **palette, bool *is_gbc)
{
const char *palette_title = NULL;
struct retro_variable var = {0};
// Read main internal palette setting
var.key = "gambatte_gb_internal_palette";
var.value = NULL;
if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value)
{
// Handle TWB64 packs
if (!strcmp(var.value, "TWB64 - Pack 1"))
{
var.key = "gambatte_gb_palette_twb64_1";
var.value = NULL;
if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value)
palette_title = var.value;
}
else if (!strcmp(var.value, "TWB64 - Pack 2"))
{
var.key = "gambatte_gb_palette_twb64_2";
var.value = NULL;
if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value)
palette_title = var.value;
}
else
palette_title = var.value;
}
// Ensure we have a valid palette title
if (!palette_title)
palette_title = "GBC - Grayscale";
// Search for requested palette
*palette = findGbcDirPal(palette_title);
// If palette is not found (i.e. if a palette
// is removed from the core, and a user loads
// old core options settings), fall back to
// black and white
if (!(*palette))
{
palette_title = "GBC - Grayscale";
*palette = findGbcDirPal(palette_title);
// No error check here - if this fails,
// the core is entirely broken...
}
// Check whether this is a GBC palette
if (!strncmp("GBC", palette_title, 3))
*is_gbc = true;
else
*is_gbc = false;
}
static void check_variables(void)
{
unsigned i, j;
@ -1469,32 +1541,28 @@ static void check_variables(void)
}
// else it is a GB-mono game -> set a color palette
//bool gb_colorization_old = gb_colorization_enable;
if (strcmp(var.value, "disabled") == 0)
gb_colorization_enable = 0;
gb_colorization_enable = GB_COLORIZATION_DISABLED;
else if (strcmp(var.value, "auto") == 0)
gb_colorization_enable = 1;
gb_colorization_enable = GB_COLORIZATION_AUTO;
else if (strcmp(var.value, "custom") == 0)
gb_colorization_enable = 2;
gb_colorization_enable = GB_COLORIZATION_CUSTOM;
else if (strcmp(var.value, "internal") == 0)
gb_colorization_enable = 3;
gb_colorization_enable = GB_COLORIZATION_INTERNAL;
else if (strcmp(var.value, "GBC") == 0)
gb_colorization_enable = 4;
gb_colorization_enable = GB_COLORIZATION_GBC;
else if (strcmp(var.value, "SGB") == 0)
gb_colorization_enable = 5;
//std::string internal_game_name = gb.romTitle(); // available only in latest Gambatte
//std::string internal_game_name = reinterpret_cast<const char *>(info->data + 0x134); // buggy with some games ("YOSSY NO COOKIE", "YOSSY NO PANEPON, etc.)
gb_colorization_enable = GB_COLORIZATION_SGB;
// Containers for GBC/SGB BIOS built-in palettes
unsigned short* gbc_bios_palette = NULL;
unsigned short* sgb_bios_palette = NULL;
const unsigned short *gbc_bios_palette = NULL;
const unsigned short *sgb_bios_palette = NULL;
bool isGbcPalette = false;
switch (gb_colorization_enable)
{
case 1:
case GB_COLORIZATION_AUTO:
// Automatic colourisation
// Order of preference:
// 1 - SGB, if more colourful than GBC
@ -1503,15 +1571,15 @@ static void check_variables(void)
// 4 - User-defined internal palette, if neither GBC nor SGB palettes defined
//
// Load GBC BIOS built-in palette
gbc_bios_palette = const_cast<unsigned short*>(findGbcTitlePal(internal_game_name));
gbc_bios_palette = findGbcTitlePal(internal_game_name);
// Load SGB BIOS built-in palette
sgb_bios_palette = const_cast<unsigned short*>(findSgbTitlePal(internal_game_name));
sgb_bios_palette = findSgbTitlePal(internal_game_name);
// If both GBC and SGB palettes are defined,
// use whichever is more colourful
if (gbc_bios_palette != 0)
if (gbc_bios_palette)
{
isGbcPalette = true;
if (sgb_bios_palette != 0)
if (sgb_bios_palette)
{
if (gbc_bios_palette != p005 &&
gbc_bios_palette != p006 &&
@ -1530,58 +1598,42 @@ static void check_variables(void)
}
}
// If no GBC palette is defined, use SGB palette
if (gbc_bios_palette == 0)
if (!gbc_bios_palette)
{
gbc_bios_palette = sgb_bios_palette;
}
// If neither GBC nor SGB palettes are defined, set
// user-defined internal palette
if (gbc_bios_palette == 0)
if (!gbc_bios_palette)
{
var.key = "gambatte_gb_internal_palette";
if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value)
{
// Load the selected internal palette
gbc_bios_palette = const_cast<unsigned short*>(findGbcDirPal(var.value));
if (!strncmp("GBC", var.value, 3)) {
isGbcPalette = true;
}
}
find_internal_palette(&gbc_bios_palette, &isGbcPalette);
}
break;
case 2:
case GB_COLORIZATION_CUSTOM:
load_custom_palette();
break;
case 3:
var.key = "gambatte_gb_internal_palette";
if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value)
{
// Load the selected internal palette
gbc_bios_palette = const_cast<unsigned short*>(findGbcDirPal(var.value));
if (!strncmp("GBC", var.value, 3)) {
isGbcPalette = true;
}
}
case GB_COLORIZATION_INTERNAL:
find_internal_palette(&gbc_bios_palette, &isGbcPalette);
break;
case 4:
case GB_COLORIZATION_GBC:
// Force GBC colourisation
gbc_bios_palette = const_cast<unsigned short*>(findGbcTitlePal(internal_game_name));
if (gbc_bios_palette == 0)
gbc_bios_palette = findGbcTitlePal(internal_game_name);
if (!gbc_bios_palette)
{
gbc_bios_palette = const_cast<unsigned short*>(findGbcDirPal("GBC - Dark Green")); // GBC Default
gbc_bios_palette = findGbcDirPal("GBC - Dark Green"); // GBC Default
}
isGbcPalette = true;
break;
case 5:
case GB_COLORIZATION_SGB:
// Force SGB colourisation
gbc_bios_palette = const_cast<unsigned short*>(findSgbTitlePal(internal_game_name));
if (gbc_bios_palette == 0)
gbc_bios_palette = findSgbTitlePal(internal_game_name);
if (!gbc_bios_palette)
{
gbc_bios_palette = const_cast<unsigned short*>(findGbcDirPal("SGB - 1A")); // SGB Default
gbc_bios_palette = findGbcDirPal("SGB - 1A"); // SGB Default
}
break;
default:
gbc_bios_palette = const_cast<unsigned short*>(findGbcDirPal("GBC - Grayscale"));
default: // GB_COLORIZATION_DISABLED
gbc_bios_palette = findGbcDirPal("GBC - Grayscale");
isGbcPalette = true;
break;
}
@ -1589,19 +1641,20 @@ static void check_variables(void)
// Enable colour correction, if required
gb.setColorCorrection((colorCorrection == 2) || ((colorCorrection == 1) && isGbcPalette));
//gambatte is using custom colorization then we have a previously palette loaded,
//skip this loop then
if (gb_colorization_enable != 2)
// If gambatte is using custom colourisation
// then we have already loaded the palette.
// In this case we can therefore skip this loop.
if (gb_colorization_enable != GB_COLORIZATION_CUSTOM)
{
unsigned rgb32 = 0;
for (unsigned palnum = 0; palnum < 3; ++palnum)
{
for (unsigned colornum = 0; colornum < 4; ++colornum)
{
rgb32 = gb.gbcToRgb32(gbc_bios_palette[palnum * 4 + colornum]);
gb.setDmgPaletteColor(palnum, colornum, rgb32);
}
}
unsigned rgb32 = 0;
for (unsigned palnum = 0; palnum < 3; ++palnum)
{
for (unsigned colornum = 0; colornum < 4; ++colornum)
{
rgb32 = gb.gbcToRgb32(gbc_bios_palette[palnum * 4 + colornum]);
gb.setDmgPaletteColor(palnum, colornum, rgb32);
}
}
}
}

View File

@ -69,136 +69,280 @@ 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 },
{ "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 },
{ "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 },
{ "TWB64 - Pack 1", NULL },
{ "TWB64 - Pack 2", NULL },
{ NULL, NULL },
},
"GB - DMG"
},
{
"gambatte_gb_palette_twb64_1",
"> TWB64 - Pack 1 Palette",
"Selects internal colorization palette when 'Internal Palette' is set to 'TWB64 - Pack 1'.",
{
{ "TWB64 001 - Aqours Blue", NULL },
{ "TWB64 002 - Anime Expo Ver.", NULL },
{ "TWB64 003 - SpongeBob Yellow", NULL },
{ "TWB64 004 - Patrick Star Pink", NULL },
{ "TWB64 005 - Neon Red", NULL },
{ "TWB64 006 - Neon Blue", NULL },
{ "TWB64 007 - Neon Yellow", NULL },
{ "TWB64 008 - Neon Green", NULL },
{ "TWB64 009 - Neon Pink", NULL },
{ "TWB64 010 - Mario Red", NULL },
{ "TWB64 011 - Nick Orange", NULL },
{ "TWB64 012 - Virtual Boy Ver.", NULL },
{ "TWB64 013 - Golden Wild", NULL },
{ "TWB64 014 - Builder Yellow", NULL },
{ "TWB64 015 - Classic Blurple", NULL },
{ "TWB64 016 - 765 Production Ver.", NULL },
{ "TWB64 017 - Superball Ivory", NULL },
{ "TWB64 018 - Crunchyroll Orange", NULL },
{ "TWB64 019 - Muse Pink", NULL },
{ "TWB64 020 - Nijigasaki Yellow", NULL },
{ "TWB64 021 - Gamate Ver.", NULL },
{ "TWB64 022 - Greenscale Ver.", NULL },
{ "TWB64 023 - Odyssey Gold", NULL },
{ "TWB64 024 - Super Saiyan God", NULL },
{ "TWB64 025 - Super Saiyan Blue", NULL },
{ "TWB64 026 - Bizarre Pink", NULL },
{ "TWB64 027 - Nintendo Switch Lite Ver.", NULL },
{ "TWB64 028 - Game.com Ver.", NULL },
{ "TWB64 029 - Sanrio Pink", NULL },
{ "TWB64 030 - BANDAI NAMCO Ver.", NULL },
{ "TWB64 031 - Cosmo Green", NULL },
{ "TWB64 032 - Wanda Pink", NULL },
{ "TWB64 033 - Link's Awakening DX Ver.", NULL },
{ "TWB64 034 - Travel Wood", NULL },
{ "TWB64 035 - Pokemon Ver.", NULL },
{ "TWB64 036 - Game Grump Orange", NULL },
{ "TWB64 037 - Scooby-Doo Mystery Ver.", NULL },
{ "TWB64 038 - Pokemon mini Ver.", NULL },
{ "TWB64 039 - Supervision Ver.", NULL },
{ "TWB64 040 - DMG Ver.", NULL },
{ "TWB64 041 - Pocket Ver.", NULL },
{ "TWB64 042 - Light Ver.", NULL },
{ "TWB64 043 - Miraitowa Blue", NULL },
{ "TWB64 044 - Someity Pink", NULL },
{ "TWB64 045 - Pikachu Yellow", NULL },
{ "TWB64 046 - Eevee Brown", NULL },
{ "TWB64 047 - Microvision Ver.", NULL },
{ "TWB64 048 - TI-83 Ver.", NULL },
{ "TWB64 049 - Aegis Cherry", NULL },
{ "TWB64 050 - Labo Fawn", NULL },
{ "TWB64 051 - MILLION LIVE GOLD!", NULL },
{ "TWB64 052 - Tokyo Midtown Ver.", NULL },
{ "TWB64 053 - VMU Ver.", NULL },
{ "TWB64 054 - Game Master Ver.", NULL },
{ "TWB64 055 - Android Green", NULL },
{ "TWB64 056 - Ticketmaster Azure", NULL },
{ "TWB64 057 - Google Red", NULL },
{ "TWB64 058 - Google Blue", NULL },
{ "TWB64 059 - Google Yellow", NULL },
{ "TWB64 060 - Google Green", NULL },
{ "TWB64 061 - WonderSwan Ver.", NULL },
{ "TWB64 062 - Neo Geo Pocket Ver.", NULL },
{ "TWB64 063 - Dew Green", NULL },
{ "TWB64 064 - Coca-Cola Red", NULL },
{ "TWB64 065 - GameKing Ver.", NULL },
{ "TWB64 066 - Do The Dew Ver.", NULL },
{ "TWB64 067 - Digivice Ver.", NULL },
{ "TWB64 068 - Bikini Bottom Ver.", NULL },
{ "TWB64 069 - Blossom Pink", NULL },
{ "TWB64 070 - Bubbles Blue", NULL },
{ "TWB64 071 - Buttercup Green", NULL },
{ "TWB64 072 - NASCAR Ver.", NULL },
{ "TWB64 073 - Lemon-Lime Green", NULL },
{ "TWB64 074 - Mega Man V Ver.", NULL },
{ "TWB64 075 - Tamagotchi Ver.", NULL },
{ "TWB64 076 - Phantom Red", NULL },
{ "TWB64 077 - Halloween Ver.", NULL },
{ "TWB64 078 - Christmas Ver.", NULL },
{ "TWB64 079 - Cardcaptor Pink", NULL },
{ "TWB64 080 - Pretty Guardian Gold", NULL },
{ "TWB64 081 - Camoflauge Ver.", NULL },
{ "TWB64 082 - Legendary Super Saiyan", NULL },
{ "TWB64 083 - Super Saiyan Rose", NULL },
{ "TWB64 084 - Super Saiyan", NULL },
{ "TWB64 085 - Mastered Ultra Instinct", NULL },
{ "TWB64 086 - Saint Snow Red", NULL },
{ "TWB64 087 - Yellow Banana", NULL },
{ "TWB64 088 - Green Banana", NULL },
{ "TWB64 089 - Super Saiyan 3", NULL },
{ "TWB64 090 - Super Saiyan Blue Evolved", NULL },
{ "TWB64 091 - Pocket Tales Ver.", NULL },
{ "TWB64 092 - Investigation Yellow", NULL },
{ "TWB64 093 - S.E.E.S. Blue", NULL },
{ "TWB64 094 - Game Awards Cyan", NULL },
{ "TWB64 095 - Hokage Orange", NULL },
{ "TWB64 096 - Straw Hat Red", NULL },
{ "TWB64 097 - Sword Art Cyan", NULL },
{ "TWB64 098 - Deku Alpha Emerald", NULL },
{ "TWB64 099 - Blue Stripes Ver.", NULL },
{ "TWB64 100 - Stone Orange", NULL },
{ NULL, NULL },
},
"TWB64 001 - Aqours Blue"
},
{
"gambatte_gb_palette_twb64_2",
"> TWB64 - Pack 2 Palette",
"Selects internal colorization palette when 'Internal Palette' is set to 'TWB64 - Pack 2'.",
{
{ "TWB64 101 - 765PRO Pink", NULL },
{ "TWB64 102 - CINDERELLA Blue", NULL },
{ "TWB64 103 - MILLION Yellow!", NULL },
{ "TWB64 104 - SideM Green", NULL },
{ "TWB64 105 - SHINY Sky Blue", NULL },
{ "TWB64 106 - Angry Volcano Ver.", NULL },
{ "TWB64 107 - Yo-kai Pink", NULL },
{ "TWB64 108 - Yo-kai Green", NULL },
{ "TWB64 109 - Yo-kai Blue", NULL },
{ "TWB64 110 - Yo-kai Purple", NULL },
{ "TWB64 111 - Aquatic Iro", NULL },
{ "TWB64 112 - Tea Midori", NULL },
{ "TWB64 113 - Sakura Pink", NULL },
{ "TWB64 114 - Wisteria Murasaki", NULL },
{ "TWB64 115 - Oni Aka", NULL },
{ "TWB64 116 - Golden Kiiro", NULL },
{ "TWB64 117 - Silver Shiro", NULL },
{ "TWB64 118 - Fruity Orange", NULL },
{ "TWB64 119 - AKB48 Pink", NULL },
{ "TWB64 120 - Miku Blue", NULL },
{ "TWB64 121 - Fairy Tail Red", NULL },
{ "TWB64 122 - Survey Corps Brown", NULL },
{ "TWB64 123 - Island Green", NULL },
{ "TWB64 124 - Mania Plus Green", NULL },
{ "TWB64 125 - Ninja Turtle Green", NULL },
{ "TWB64 126 - Slime Blue", NULL },
{ "TWB64 127 - Lime Midori", NULL },
{ "TWB64 128 - Ghostly Aoi", NULL },
{ "TWB64 129 - Retro Bogeda", NULL },
{ "TWB64 130 - Royal Blue", NULL },
{ "TWB64 131 - Neon Purple", NULL },
{ "TWB64 132 - Neon Orange", NULL },
{ "TWB64 133 - Moonlight Vision", NULL },
{ "TWB64 134 - Tokyo Red", NULL },
{ "TWB64 135 - Paris Gold", NULL },
{ "TWB64 136 - Beijing Blue", NULL },
{ "TWB64 137 - Pac-Man Yellow", NULL },
{ "TWB64 138 - Irish Green", NULL },
{ "TWB64 139 - Kakarot Orange", NULL },
{ "TWB64 140 - Dragon Ball Orange", NULL },
{ "TWB64 141 - Christmas Gold", NULL },
{ "TWB64 142 - Pepsi Blue", NULL },
{ "TWB64 143 - Bubblun Green", NULL },
{ "TWB64 144 - Bobblun Blue", NULL },
{ "TWB64 145 - Baja Blast Storm", NULL },
{ "TWB64 146 - Olympic Gold", NULL },
{ "TWB64 147 - Value Orange", NULL },
{ "TWB64 148 - Liella Purple!", NULL },
{ "TWB64 149 - Olympic Silver", NULL },
{ "TWB64 150 - Olympic Bronze", NULL },
{ "TWB64 151 - ANA Sky Blue", NULL },
{ "TWB64 152 - Nijigasaki Orange", NULL },
{ "TWB64 153 - HoloBlue", NULL },
{ "TWB64 154 - Wrestling Red", NULL },
{ "TWB64 155 - Yoshi Egg Green", NULL },
{ "TWB64 156 - Pokedex Red", NULL },
{ "TWB64 157 - Disney Dream Blue", NULL },
{ "TWB64 158 - Xbox Green", NULL },
{ "TWB64 159 - Sonic Mega Blue", NULL },
{ "TWB64 160 - G4 Orange", NULL },
{ "TWB64 161 - Scarlett Green", NULL },
{ "TWB64 162 - Glitchy Blue", NULL },
{ "TWB64 163 - Classic LCD", NULL },
{ "TWB64 164 - 3DS Virtual Console Ver.", NULL },
{ "TWB64 165 - PocketStation Ver.", NULL },
{ "TWB64 166 - Game and Gold", NULL },
{ "TWB64 167 - Smurfy Blue", NULL },
{ "TWB64 168 - Swampy Ogre Green", NULL },
{ "TWB64 169 - Sailor Spinach Green", NULL },
{ "TWB64 170 - Shenron Green", NULL },
{ "TWB64 171 - Berserk Blood", NULL },
{ "TWB64 172 - Super Star Pink", NULL },
{ "TWB64 173 - Gamebuino Classic Ver.", NULL },
{ "TWB64 174 - Barbie Pink", NULL },
{ "TWB64 175 - Star Command Green", NULL },
{ "TWB64 176 - Nokia 3310 Ver.", NULL },
{ "TWB64 177 - Clover Green", NULL },
{ "TWB64 178 - Crash Orange", NULL },
{ "TWB64 179 - Famicom Disk Yellow", NULL },
{ "TWB64 180 - Team Rocket Red", NULL },
{ "TWB64 181 - SEIKO Timer Yellow", NULL },
{ "TWB64 182 - PINK109", NULL },
{ "TWB64 183 - Doraemon Blue", NULL },
{ "TWB64 184 - Fury Blue", NULL },
{ "TWB64 185 - Rockstar Orange", NULL },
{ "TWB64 186 - Puyo Puyo Green", NULL },
{ "TWB64 187 - Susan G. Pink", NULL },
{ "TWB64 188 - Pizza Hut Red", NULL },
{ "TWB64 189 - Plumbob Green", NULL },
{ "TWB64 190 - Grand Ivory", NULL },
{ "TWB64 191 - Demon's Gold", NULL },
{ "TWB64 192 - SEGA Tokyo Blue", NULL },
{ "TWB64 193 - Champion Blue", NULL },
{ "TWB64 194 - DK Barrel Brown", NULL },
{ "TWB64 195 - Evangelion Green", NULL },
{ "TWB64 196 - Equestrian Purple", NULL },
{ "TWB64 197 - Autobot Red", NULL },
{ "TWB64 198 - Niconico Sea Green", NULL },
{ "TWB64 199 - Duracell Copper", NULL },
{ "TWB64 200 - TOKYO SKYTREE CLOUDY BLUE", NULL },
{ NULL, NULL },
},
"TWB64 101 - 765PRO Pink"
},
{
"gambatte_gbc_color_correction",
"Color Correction",