frontend: Recovered precious vertical space for system/software names!

Reduced the height of the bottom info panel by one line.  The system
shortname or list/software name tuple are now only displayed in the info
box on the right.  It's a bit out-of-the-way, but it's not something you
need to see all the time.

The main reason for having the quit or return to previous menu item
always visible is to make it easy for someone to quit if they only have
a mouse.  However, we don't need waste space on the menu for this when
we have a toolbar.  Users without a mouse can exit using the
keyboard/controller UI Cancel input (given how important this is, it's
unlikely they won't have it mapped to something usable).

There's now a toolbar button on the extreme right for returning to the
previous menu or quitting.  The tooltip and icon are appropriately
context-sensitive.  This recovers one line on the system selection menu,
and two on the software selection menu since the separator is no longer
needed.

Replaced the toolbar icons bitmaps with SVGs.  Colours/shapes may be
tweaked before the release if people have good suggestions

Flipped the simple system selection menu so the description is on the
left.

Moved the handling of special cases for the final menu item out of the
base menu class.  It's still hacky having it handled there at all, but
it's less hacky without if menus that want to do something different can
do it themselves.
This commit is contained in:
Vas Crabb 2021-10-11 07:13:50 +11:00
parent 1eb49fc86d
commit fc906d7a17
15 changed files with 520 additions and 505 deletions

View File

@ -13,10 +13,13 @@
#include "ui/moptions.h"
#include "corestr.h"
#include "language.h"
#include "drivenum.h"
#include "softlist_dev.h"
#include "corestr.h"
#include <algorithm>
#include <cstring>
#include <iterator>
@ -262,6 +265,14 @@ favorite_manager::favorite_manager(ui_options &options)
tmpmatches.devicetype = chartrimcarriage(readbuf);
file.gets(readbuf, std::size(readbuf));
tmpmatches.available = atoi(readbuf);
// need to populate this, it isn't displayed anywhere else
tmpmatches.infotext.append(_("swlist-info", "Software list/item"));
tmpmatches.infotext.append(1, '\n');
tmpmatches.infotext.append(tmpmatches.listname);
tmpmatches.infotext.append(1, ':');
tmpmatches.infotext.append(tmpmatches.shortname);
m_favorites.emplace(std::move(tmpmatches));
}
file.close();

View File

@ -46,6 +46,39 @@
namespace ui {
enum : unsigned {
INPUT_GROUPS,
INPUT_SPECIFIC,
SETTINGS_DIP_SWITCHES,
SETTINGS_DRIVER_CONFIG,
ANALOG,
BOOKKEEPING,
GAME_INFO,
WARN_INFO,
IMAGE_MENU_IMAGE_INFO,
IMAGE_MENU_FILE_MANAGER,
TAPE_CONTROL,
SLOT_DEVICES,
NETWORK_DEVICES,
KEYBOARD_MODE,
SLIDERS,
VIDEO_TARGETS,
VIDEO_OPTIONS,
CROSSHAIR,
CHEAT,
PLUGINS,
BIOS_SELECTION,
BARCODE_READ,
PTY_INFO,
EXTERNAL_DATS,
ADD_FAVORITE,
REMOVE_FAVORITE,
ABOUT,
QUIT_GAME,
DISMISS,
SELECT_GAME
};
/***************************************************************************
MENU HANDLERS
***************************************************************************/
@ -56,6 +89,7 @@ namespace ui {
menu_main::menu_main(mame_ui_manager &mui, render_container &container) : menu(mui, container)
{
set_needs_prev_menu_item(false);
}
void menu_main::populate(float &customtop, float &custombottom)
@ -143,7 +177,15 @@ void menu_main::populate(float &customtop, float &custombottom)
// item_append(_("Quit from Machine"), 0, (void *)QUIT_GAME);
item_append(_("Select New Machine"), 0, (void *)SELECT_GAME);
if (machine().phase() == machine_phase::INIT)
{
item_append(_("Start Machine"), 0, (void *)DISMISS);
}
else
{
item_append(_("Select New Machine"), 0, (void *)SELECT_GAME);
item_append(_("Return to Machine"), 0, (void *)DISMISS);
}
}
menu_main::~menu_main()
@ -159,7 +201,7 @@ void menu_main::handle()
/* process the menu */
const event *menu_event = process(0);
if (menu_event != nullptr && menu_event->iptkey == IPT_UI_SELECT) {
switch((long long)(menu_event->itemref)) {
switch(uintptr_t(menu_event->itemref)) {
case INPUT_GROUPS:
menu::stack_push<menu_input_groups>(ui(), container());
break;
@ -282,6 +324,10 @@ void menu_main::handle()
ui().request_quit();
break;
case DISMISS:
stack_pop();
return;
default:
fatalerror("ui::menu_main::handle - unknown reference\n");
}

View File

@ -230,6 +230,7 @@ menu::menu(mame_ui_manager &mui, render_container &container)
, m_visible_items(0)
, m_global_state(get_global_state(mui.machine()))
, m_special_main_menu(false)
, m_needs_prev_menu_item(true)
, m_ui(mui)
, m_container(container)
, m_parent()
@ -321,12 +322,9 @@ void menu::item_append(menu_item_type type, uint32_t flags)
void menu::item_append(std::string &&text, std::string &&subtext, uint32_t flags, void *ref, menu_item_type type)
{
// only allow multiline as the first item
if ((flags & FLAG_MULTILINE) != 0)
if ((flags & FLAG_MULTILINE) != 0) // only allow multiline as the first item
assert(m_items.size() == 1);
// only allow a single multi-line item
else if (m_items.size() >= 2)
else if (m_items.size() >= 2) // only allow a single multi-line item
assert((m_items[0].flags & FLAG_MULTILINE) == 0);
// allocate a new item and populate it
@ -339,7 +337,7 @@ void menu::item_append(std::string &&text, std::string &&subtext, uint32_t flags
// append to array
auto index = m_items.size();
if (!m_items.empty())
if (!m_items.empty() && m_needs_prev_menu_item)
{
m_items.emplace(m_items.end() - 1, std::move(pitem));
--index;
@ -892,7 +890,7 @@ void menu::handle_events(uint32_t flags, event &ev)
{
m_selected = m_hover;
ev.iptkey = IPT_UI_SELECT;
if (is_last_selected())
if (is_last_selected() && m_needs_prev_menu_item)
{
ev.iptkey = IPT_UI_CANCEL;
stack_pop();
@ -976,7 +974,7 @@ void menu::handle_keys(uint32_t flags, int &iptkey)
// if we hit select, return true or pop the stack, depending on the item
if (exclusive_input_pressed(iptkey, IPT_UI_SELECT, 0))
{
if (is_last_selected())
if (is_last_selected() && m_needs_prev_menu_item)
{
iptkey = IPT_UI_CANCEL;
stack_pop();
@ -1162,27 +1160,8 @@ void menu::do_handle()
if (m_items.empty())
{
// add an item to return - this is a really hacky way of doing this
if (!m_parent)
{
if (machine().phase() == machine_phase::INIT)
item_append(_("Start Machine"), 0, nullptr);
else
item_append(_("Return to Machine"), 0, nullptr);
}
else if (m_parent->is_special_main_menu())
{
if (machine().options().ui() == emu_options::UI_SIMPLE)
item_append(_("Exit"), 0, nullptr);
else
item_append(_("Exit"), FLAG_LEFT_ARROW | FLAG_RIGHT_ARROW, nullptr);
}
else
{
if (machine().options().ui() != emu_options::UI_SIMPLE && stack_has_special_main_menu())
item_append(_("Return to Previous Menu"), FLAG_LEFT_ARROW | FLAG_RIGHT_ARROW, nullptr);
else
item_append(_("Return to Previous Menu"), 0, nullptr);
}
if (m_needs_prev_menu_item)
item_append(_("Return to Previous Menu"), 0, nullptr);
// let implementation add other items
populate(m_customtop, m_custombottom);

View File

@ -50,38 +50,6 @@ public:
FLAG_COLOR_BOX = 1U << 8
};
enum : unsigned {
INPUT_GROUPS,
INPUT_SPECIFIC,
SETTINGS_DIP_SWITCHES,
SETTINGS_DRIVER_CONFIG,
ANALOG,
BOOKKEEPING,
GAME_INFO,
WARN_INFO,
IMAGE_MENU_IMAGE_INFO,
IMAGE_MENU_FILE_MANAGER,
TAPE_CONTROL,
SLOT_DEVICES,
NETWORK_DEVICES,
KEYBOARD_MODE,
SLIDERS,
VIDEO_TARGETS,
VIDEO_OPTIONS,
CROSSHAIR,
CHEAT,
PLUGINS,
SELECT_GAME,
BIOS_SELECTION,
BARCODE_READ,
PTY_INFO,
EXTERNAL_DATS,
ADD_FAVORITE,
REMOVE_FAVORITE,
QUIT_GAME,
ABOUT
};
virtual ~menu();
// append a new item to the end of the menu
@ -171,6 +139,7 @@ protected:
running_machine &machine() const { return m_ui.machine(); }
render_container &container() const { return m_container; }
void set_needs_prev_menu_item(bool needs) { m_needs_prev_menu_item = needs; }
void reset(reset_options options);
void reset_parent(reset_options options) { m_parent->reset(options); }
@ -390,6 +359,7 @@ protected: // TODO: remove need to expose these
private:
global_state_ptr const m_global_state;
bool m_special_main_menu;
bool m_needs_prev_menu_item;
mame_ui_manager &m_ui; // UI we are attached to
render_container &m_container; // render_container we render to
std::unique_ptr<menu> m_parent; // pointer to parent menu

View File

@ -853,21 +853,20 @@ void menu_select_game::populate(float &customtop, float &custombottom)
});
}
item_append(menu_item_type::SEPARATOR, FLAGS_UI);
// add special items
if (stack_has_special_main_menu())
{
item_append(menu_item_type::SEPARATOR, FLAGS_UI);
item_append(_("Configure Options"), FLAGS_UI, (void *)(uintptr_t)CONF_OPTS);
item_append(_("Configure Machine"), FLAGS_UI, (void *)(uintptr_t)CONF_MACHINE);
skip_main_items = 2;
skip_main_items = 3;
}
else
skip_main_items = 0;
// configure the custom rendering
customtop = 3.0f * ui().get_line_height() + 5.0f * ui().box_tb_border();
custombottom = 5.0f * ui().get_line_height() + 3.0f * ui().box_tb_border();
custombottom = 4.0f * ui().get_line_height() + 3.0f * ui().box_tb_border();
// reselect prior game launched, if any
if (old_item_selected != -1)
@ -1289,194 +1288,6 @@ void menu_select_game::populate_search()
[] (auto const &lhs, auto const &rhs) { return lhs.first < rhs.first; });
}
//-------------------------------------------------
// generate general info
//-------------------------------------------------
void menu_select_game::general_info(ui_system_info const &system, std::string &buffer)
{
game_driver const &driver(*system.driver);
system_flags const &flags(get_system_flags(driver));
std::ostringstream str;
str << "#j2\n";
util::stream_format(str, _("Romset\t%1$-.100s\n"), driver.name);
util::stream_format(str, _("Year\t%1$s\n"), driver.year);
util::stream_format(str, _("Manufacturer\t%1$-.100s\n"), driver.manufacturer);
int cloneof = driver_list::non_bios_clone(driver);
if (cloneof != -1)
util::stream_format(str, _("Driver is Clone of\t%1$-.100s\n"), system.parent);
else
str << _("Driver is Parent\t\n");
if (flags.has_analog())
str << _("Analog Controls\tYes\n");
if (flags.has_keyboard())
str << _("Keyboard Inputs\tYes\n");
if (flags.machine_flags() & machine_flags::NOT_WORKING)
str << _("Overall\tNOT WORKING\n");
else if ((flags.unemulated_features() | flags.imperfect_features()) & device_t::feature::PROTECTION)
str << _("Overall\tUnemulated Protection\n");
else
str << _("Overall\tWorking\n");
if (flags.unemulated_features() & device_t::feature::GRAPHICS)
str << _("Graphics\tUnimplemented\n");
else if (flags.unemulated_features() & device_t::feature::PALETTE)
str << _("Graphics\tWrong Colors\n");
else if (flags.imperfect_features() & device_t::feature::PALETTE)
str << _("Graphics\tImperfect Colors\n");
else if (flags.imperfect_features() & device_t::feature::GRAPHICS)
str << _("Graphics\tImperfect\n");
else
str << _("Graphics\tOK\n");
if (flags.machine_flags() & machine_flags::NO_SOUND_HW)
str << _("Sound\tNone\n");
else if (flags.unemulated_features() & device_t::feature::SOUND)
str << _("Sound\tUnimplemented\n");
else if (flags.imperfect_features() & device_t::feature::SOUND)
str << _("Sound\tImperfect\n");
else
str << _("Sound\tOK\n");
if (flags.unemulated_features() & device_t::feature::CAPTURE)
str << _("Capture\tUnimplemented\n");
else if (flags.imperfect_features() & device_t::feature::CAPTURE)
str << _("Capture\tImperfect\n");
if (flags.unemulated_features() & device_t::feature::CAMERA)
str << _("Camera\tUnimplemented\n");
else if (flags.imperfect_features() & device_t::feature::CAMERA)
str << _("Camera\tImperfect\n");
if (flags.unemulated_features() & device_t::feature::MICROPHONE)
str << _("Microphone\tUnimplemented\n");
else if (flags.imperfect_features() & device_t::feature::MICROPHONE)
str << _("Microphone\tImperfect\n");
if (flags.unemulated_features() & device_t::feature::CONTROLS)
str << _("Controls\tUnimplemented\n");
else if (flags.imperfect_features() & device_t::feature::CONTROLS)
str << _("Controls\tImperfect\n");
if (flags.unemulated_features() & device_t::feature::KEYBOARD)
str << _("Keyboard\tUnimplemented\n");
else if (flags.imperfect_features() & device_t::feature::KEYBOARD)
str << _("Keyboard\tImperfect\n");
if (flags.unemulated_features() & device_t::feature::MOUSE)
str << _("Mouse\tUnimplemented\n");
else if (flags.imperfect_features() & device_t::feature::MOUSE)
str << _("Mouse\tImperfect\n");
if (flags.unemulated_features() & device_t::feature::MEDIA)
str << _("Media\tUnimplemented\n");
else if (flags.imperfect_features() & device_t::feature::MEDIA)
str << _("Media\tImperfect\n");
if (flags.unemulated_features() & device_t::feature::DISK)
str << _("Disk\tUnimplemented\n");
else if (flags.imperfect_features() & device_t::feature::DISK)
str << _("Disk\tImperfect\n");
if (flags.unemulated_features() & device_t::feature::PRINTER)
str << _("Printer\tUnimplemented\n");
else if (flags.imperfect_features() & device_t::feature::PRINTER)
str << _("Printer\tImperfect\n");
if (flags.unemulated_features() & device_t::feature::TAPE)
str << _("Mag. Tape\tUnimplemented\n");
else if (flags.imperfect_features() & device_t::feature::TAPE)
str << _("Mag. Tape\tImperfect\n");
if (flags.unemulated_features() & device_t::feature::PUNCH)
str << _("Punch Tape\tUnimplemented\n");
else if (flags.imperfect_features() & device_t::feature::PUNCH)
str << _("Punch Tape\tImperfect\n");
if (flags.unemulated_features() & device_t::feature::DRUM)
str << _("Mag. Drum\tUnimplemented\n");
else if (flags.imperfect_features() & device_t::feature::DRUM)
str << _("Mag. Drum\tImperfect\n");
if (flags.unemulated_features() & device_t::feature::ROM)
str << _("(EP)ROM\tUnimplemented\n");
else if (flags.imperfect_features() & device_t::feature::ROM)
str << _("(EP)ROM\tImperfect\n");
if (flags.unemulated_features() & device_t::feature::COMMS)
str << _("Communications\tUnimplemented\n");
else if (flags.imperfect_features() & device_t::feature::COMMS)
str << _("Communications\tImperfect\n");
if (flags.unemulated_features() & device_t::feature::LAN)
str << _("LAN\tUnimplemented\n");
else if (flags.imperfect_features() & device_t::feature::LAN)
str << _("LAN\tImperfect\n");
if (flags.unemulated_features() & device_t::feature::WAN)
str << _("WAN\tUnimplemented\n");
else if (flags.imperfect_features() & device_t::feature::WAN)
str << _("WAN\tImperfect\n");
if (flags.unemulated_features() & device_t::feature::TIMING)
str << _("Timing\tUnimplemented\n");
else if (flags.imperfect_features() & device_t::feature::TIMING)
str << _("Timing\tImperfect\n");
str << ((flags.machine_flags() & machine_flags::MECHANICAL) ? _("Mechanical Machine\tYes\n") : _("Mechanical Machine\tNo\n"));
str << ((flags.machine_flags() & machine_flags::REQUIRES_ARTWORK) ? _("Requires Artwork\tYes\n") : _("Requires Artwork\tNo\n"));
str << ((flags.machine_flags() & machine_flags::CLICKABLE_ARTWORK) ? _("Requires Clickable Artwork\tYes\n") : _("Requires Clickable Artwork\tNo\n"));
if (flags.machine_flags() & machine_flags::NO_COCKTAIL)
str << _("Support Cocktail\tNo\n");
str << ((flags.machine_flags() & machine_flags::IS_BIOS_ROOT) ? _("Driver is BIOS\tYes\n") : _("Driver is BIOS\tNo\n"));
str << ((flags.machine_flags() & machine_flags::SUPPORTS_SAVE) ? _("Support Save\tYes\n") : _("Support Save\tNo\n"));
str << ((flags.machine_flags() & ORIENTATION_SWAP_XY) ? _("Screen Orientation\tVertical\n") : _("Screen Orientation\tHorizontal\n"));
bool found = false;
for (romload::region const &region : romload::entries(driver.rom).get_regions())
{
if (region.is_diskdata())
{
found = true;
break;
}
}
str << (found ? _("Requires CHD\tYes\n") : _("Requires CHD\tNo\n"));
// audit the game first to see if we're going to work
if (ui().options().info_audit())
{
driver_enumerator enumerator(machine().options(), driver);
enumerator.next();
media_auditor auditor(enumerator);
media_auditor::summary summary = auditor.audit_media(AUDIT_VALIDATE_FAST);
media_auditor::summary summary_samples = auditor.audit_samples();
// if everything looks good, schedule the new driver
if (audit_passed(summary))
str << _("ROM Audit Result\tOK\n");
else
str << _("ROM Audit Result\tBAD\n");
if (summary_samples == media_auditor::NONE_NEEDED)
str << _("Samples Audit Result\tNone Needed\n");
else if (audit_passed(summary_samples))
str << _("Samples Audit Result\tOK\n");
else
str << _("Samples Audit Result\tBAD\n");
}
else
{
str << _("ROM Audit \tDisabled\nSamples Audit \tDisabled\n");
}
buffer = str.str();
}
//-------------------------------------------------
// get (possibly cached) icon texture

View File

@ -82,9 +82,6 @@ private:
bool load_available_machines();
void load_custom_filters();
// General info
virtual void general_info(ui_system_info const &system, std::string &buffer) override;
// handlers
void inkey_select(const event *menu_event);
void inkey_select_favorite(const event *menu_event);

View File

@ -36,6 +36,7 @@
#include "uiinput.h"
#include "luaengine.h"
#include "util/nanosvg.h"
#include "util/path.h"
#include <algorithm>
@ -93,7 +94,7 @@ std::pair<char const *, char const *> const arts_info[] =
};
char const *const hover_msg[] = {
N_("Add or remove favorites"),
N_("Add or remove favorite"),
N_("Export displayed list to file"),
N_("Show DATs view"),
};
@ -439,10 +440,8 @@ menu_select_launch::cache::cache(running_machine &machine)
, m_no_avail_bitmap(256, 256)
, m_star_bitmap(32, 32)
, m_star_texture(nullptr, machine.render())
, m_toolbar_bitmap()
, m_sw_toolbar_bitmap()
, m_toolbar_texture()
, m_sw_toolbar_texture()
, m_toolbar_bitmaps()
, m_toolbar_textures()
{
render_manager &render(machine.render());
@ -455,37 +454,8 @@ menu_select_launch::cache::cache(running_machine &machine)
m_star_texture.reset(render.texture_alloc());
m_star_texture->set_bitmap(m_star_bitmap, m_star_bitmap.cliprect(), TEXFORMAT_ARGB32);
m_toolbar_bitmap.reserve(UI_TOOLBAR_BUTTONS);
m_sw_toolbar_bitmap.reserve(UI_TOOLBAR_BUTTONS);
m_toolbar_texture.reserve(UI_TOOLBAR_BUTTONS);
m_sw_toolbar_texture.reserve(UI_TOOLBAR_BUTTONS);
for (std::size_t i = 0; i < UI_TOOLBAR_BUTTONS; ++i)
{
m_toolbar_bitmap.emplace_back(32, 32);
m_sw_toolbar_bitmap.emplace_back(32, 32);
m_toolbar_texture.emplace_back(render.texture_alloc(), render);
m_sw_toolbar_texture.emplace_back(render.texture_alloc(), render);
std::memcpy(&m_toolbar_bitmap.back().pix(0), toolbar_bitmap_bmp[i], 32 * 32 * sizeof(uint32_t));
if (m_toolbar_bitmap.back().valid())
m_toolbar_texture.back()->set_bitmap(m_toolbar_bitmap.back(), m_toolbar_bitmap.back().cliprect(), TEXFORMAT_ARGB32);
else
m_toolbar_bitmap.back().reset();
if ((i == 0U) || (i == 2U))
{
std::memcpy(&m_sw_toolbar_bitmap.back().pix(0), toolbar_bitmap_bmp[i], 32 * 32 * sizeof(uint32_t));
if (m_sw_toolbar_bitmap.back().valid())
m_sw_toolbar_texture.back()->set_bitmap(m_sw_toolbar_bitmap.back(), m_sw_toolbar_bitmap.back().cliprect(), TEXFORMAT_ARGB32);
else
m_sw_toolbar_bitmap.back().reset();
}
else
{
m_sw_toolbar_bitmap.back().reset();
}
}
m_toolbar_bitmaps.resize(UI_TOOLBAR_BUTTONS);
m_toolbar_textures.reserve(UI_TOOLBAR_BUTTONS);
}
@ -494,6 +464,58 @@ menu_select_launch::cache::~cache()
}
void menu_select_launch::cache::cache_toolbar(running_machine &machine, float width, float height)
{
// not bothering to transform for non-square pixels greatly simplifies this
render_manager &render(machine.render());
render_target const &target(render.ui_target());
int32_t const pix_size(std::ceil(std::max(width * target.width(), height * target.height())));
if (m_toolbar_textures.empty() || (m_toolbar_bitmaps[0].width() != pix_size) || (m_toolbar_bitmaps[0].height() != pix_size))
{
m_toolbar_textures.clear();
util::nsvg_rasterizer_ptr rasterizer(nsvgCreateRasterizer());
std::string xml;
for (unsigned i = 0; UI_TOOLBAR_BUTTONS > i; ++i)
{
// parse SVG and calculate scale
xml = toolbar_icons_svg[i];
util::nsvg_image_ptr svg(nsvgParse(xml.data(), "px", 72));
float const xscale(float(pix_size) / svg->width);
float const yscale(float(pix_size) / svg->height);
float const drawscale((std::max)(xscale, yscale));
// rasterise the SVG and clear it out of memory
bitmap_argb32 &bitmap(m_toolbar_bitmaps[i]);
bitmap.resize(pix_size, pix_size);
nsvgRasterize(
rasterizer.get(),
svg.get(),
0, 0, drawscale,
reinterpret_cast<unsigned char *>(&bitmap.pix(0)),
pix_size, pix_size,
bitmap.rowbytes());
svg.reset();
// correct colour format
for (int32_t y = 0; bitmap.height() > y; ++y)
{
uint32_t *dst(&bitmap.pix(y));
for (int32_t x = 0; bitmap.width() > x; ++x, ++dst)
{
u8 const *const src(reinterpret_cast<u8 const *>(dst));
rgb_t const d(src[3], src[0], src[1], src[2]);
*dst = d;
}
}
// make a texture
render_texture &texture(*m_toolbar_textures.emplace_back(render.texture_alloc(), render));
texture.set_bitmap(bitmap, bitmap.cliprect(), TEXFORMAT_ARGB32);
}
}
}
menu_select_launch::~menu_select_launch()
{
}
@ -523,6 +545,7 @@ menu_select_launch::menu_select_launch(mame_ui_manager &mui, render_container &c
, m_image_view(FIRST_VIEW)
, m_flags(256)
{
set_needs_prev_menu_item(false);
}
@ -628,7 +651,7 @@ void menu_select_launch::launch_system(mame_ui_manager &mui, game_driver const &
void menu_select_launch::custom_render(void *selectedref, float top, float bottom, float origx1, float origy1, float origx2, float origy2)
{
std::string tempbuf[5];
std::string tempbuf[4];
// determine the text for the header
make_topbox_text(tempbuf[0], tempbuf[1], tempbuf[2]);
@ -681,56 +704,50 @@ void menu_select_launch::custom_render(void *selectedref, float top, float botto
tempbuf[3] = _("Supported: Yes");
color = UI_GREEN_COLOR;
}
// last line is romset name
tempbuf[4] = string_format(_("Software list/item: %1$s:%2$s"), swinfo->listname, swinfo->shortname);
}
else if (system || (swinfo && swinfo->driver))
{
game_driver const &driver(system ? *system->driver : *swinfo->driver);
isstar = mame_machine_manager::instance()->favorite().is_favorite_system(driver);
// first line is the ROM set
tempbuf[0] = string_format(_("Romset: %1$-.100s"), driver.name);
// next line is year, manufacturer
tempbuf[1] = string_format(_("%1$s, %2$-.100s"), driver.year, driver.manufacturer);
// first line is year, manufacturer
tempbuf[0] = string_format(_("%1$s, %2$-.100s"), driver.year, driver.manufacturer);
// next line is clone/parent status
int cloneof = driver_list::non_bios_clone(driver);
if (0 > cloneof)
tempbuf[2] = _("Driver is parent");
tempbuf[1] = _("Driver is parent");
else if (system)
tempbuf[2] = string_format(_("Driver is clone of: %1$-.100s"), system->parent);
tempbuf[1] = string_format(_("Driver is clone of: %1$-.100s"), system->parent);
else
tempbuf[2] = string_format(_("Driver is clone of: %1$-.100s"), driver_list::driver(cloneof).type.fullname());
tempbuf[1] = string_format(_("Driver is clone of: %1$-.100s"), driver_list::driver(cloneof).type.fullname());
// next line is overall driver status
system_flags const &flags(get_system_flags(driver));
if (flags.machine_flags() & machine_flags::NOT_WORKING)
tempbuf[3] = _("Overall: NOT WORKING");
tempbuf[2] = _("Overall: NOT WORKING");
else if ((flags.unemulated_features() | flags.imperfect_features()) & device_t::feature::PROTECTION)
tempbuf[3] = _("Overall: Unemulated Protection");
tempbuf[2] = _("Overall: Unemulated Protection");
else
tempbuf[3] = _("Overall: Working");
tempbuf[2] = _("Overall: Working");
// next line is graphics, sound status
if (flags.unemulated_features() & device_t::feature::GRAPHICS)
tempbuf[4] = _("Graphics: Unimplemented, ");
tempbuf[3] = _("Graphics: Unimplemented, ");
else if ((flags.unemulated_features() | flags.imperfect_features()) & (device_t::feature::GRAPHICS | device_t::feature::PALETTE))
tempbuf[4] = _("Graphics: Imperfect, ");
tempbuf[3] = _("Graphics: Imperfect, ");
else
tempbuf[4] = _("Graphics: OK, ");
tempbuf[3] = _("Graphics: OK, ");
if (driver.flags & machine_flags::NO_SOUND_HW)
tempbuf[4].append(_("Sound: None"));
tempbuf[3].append(_("Sound: None"));
else if (flags.unemulated_features() & device_t::feature::SOUND)
tempbuf[4].append(_("Sound: Unimplemented"));
tempbuf[3].append(_("Sound: Unimplemented"));
else if (flags.imperfect_features() & device_t::feature::SOUND)
tempbuf[4].append(_("Sound: Imperfect"));
tempbuf[3].append(_("Sound: Imperfect"));
else
tempbuf[4].append(_("Sound: OK"));
tempbuf[3].append(_("Sound: OK"));
color = flags.status_color();
}
@ -743,7 +760,6 @@ void menu_select_launch::custom_render(void *selectedref, float top, float botto
tempbuf[1] = string_format(_("%1$s %2$s"), emulator_info::get_appname(), build_version);
tempbuf[2] = copyright.substr(0, found);
tempbuf[3] = copyright.substr(found + 1);
tempbuf[4].clear();
}
// draw the footer
@ -766,13 +782,16 @@ void menu_select_launch::rotate_focus(int dir)
case focused_menu::MAIN:
if (selected_index() <= m_available_items)
{
m_prev_selected = get_selection_ref();
if ((0 < dir) || (ui_globals::panels_status == HIDE_BOTH))
set_selected_index(m_available_items + 1);
else if (ui_globals::panels_status == HIDE_RIGHT_PANEL)
set_focus(focused_menu::LEFT);
else
set_focus(focused_menu::RIGHTBOTTOM);
if (skip_main_items || (ui_globals::panels_status != HIDE_BOTH))
{
m_prev_selected = get_selection_ref();
if ((0 < dir) || (ui_globals::panels_status == HIDE_BOTH))
set_selected_index(m_available_items + 1);
else if (ui_globals::panels_status == HIDE_RIGHT_PANEL)
set_focus(focused_menu::LEFT);
else
set_focus(focused_menu::RIGHTBOTTOM);
}
}
else
{
@ -789,7 +808,10 @@ void menu_select_launch::rotate_focus(int dir)
if (0 > dir)
{
set_focus(focused_menu::MAIN);
set_selected_index(m_available_items + 1);
if (skip_main_items)
set_selected_index(m_available_items + 1);
else
select_prev();
}
else if (ui_globals::panels_status != HIDE_RIGHT_PANEL)
{
@ -1165,8 +1187,8 @@ bool menu_select_launch::scale_icon(bitmap_argb32 &&src, texture_and_bitmap &dst
float const ratio((std::min)({ float(max_height) / src.height(), float(max_width) / src.width(), 1.0F }));
if (1.0F > ratio)
{
float const pix_height(src.height() * ratio);
float const pix_width(src.width() * ratio);
float const pix_height(std::ceil(src.height() * ratio));
float const pix_width(std::ceil(src.width() * ratio));
tmp.allocate(int32_t(pix_width), int32_t(pix_height));
render_resample_argb_bitmap_hq(tmp, src, render_color{ 1.0F, 1.0F, 1.0F, 1.0F }, true);
}
@ -1235,7 +1257,7 @@ bool menu_select_launch::select_part(mame_ui_manager &mui, render_container &con
void menu_select_launch::draw_toolbar(float x1, float y1, float x2, float y2)
{
// draw a box
ui().draw_outlined_box(container(), x1, y1, x2, y2, rgb_t(0xEF, 0x12, 0x47, 0x7B));
ui().draw_outlined_box(container(), x1, y1, x2, y2, rgb_t(0xef, 0x12, 0x47, 0x7b));
// take off the borders
float const aspect(machine().render().ui_aspect(&container()));
@ -1245,33 +1267,61 @@ void menu_select_launch::draw_toolbar(float x1, float y1, float x2, float y2)
y1 += ui().box_tb_border();
y2 -= ui().box_tb_border();
texture_ptr_vector const &t_texture(m_is_swlist ? m_cache.sw_toolbar_texture() : m_cache.toolbar_texture());
bitmap_vector const &t_bitmap(m_is_swlist ? m_cache.sw_toolbar_bitmap() : m_cache.toolbar_bitmap());
// work out which buttons we're going to draw
constexpr unsigned SYS_TOOLBAR_BITMAPS[] = { TOOLBAR_BITMAP_FAVORITE, TOOLBAR_BITMAP_SAVE, TOOLBAR_BITMAP_INFO };
constexpr unsigned SW_TOOLBAR_BITMAPS[] = { TOOLBAR_BITMAP_FAVORITE, TOOLBAR_BITMAP_INFO };
bool const have_parent = m_is_swlist || !stack_has_special_main_menu();
unsigned const *const toolbar_bitmaps = m_is_swlist ? SW_TOOLBAR_BITMAPS : SYS_TOOLBAR_BITMAPS;
unsigned const toolbar_count = m_is_swlist ? std::size(SW_TOOLBAR_BITMAPS) : std::size(SYS_TOOLBAR_BITMAPS);
auto const num_valid(std::count_if(std::begin(t_bitmap), std::end(t_bitmap), [](bitmap_argb32 const &e) { return e.valid(); }));
// calculate metrics
float const x_size = (y2 - y1) * aspect;
float const x_spacing = x_size * 1.5f;
float const backtrack_pos = x2 - x_size;
float const total_width = (float(toolbar_count) + (float(toolbar_count - 1) * 0.5f)) * x_size;
m_cache.cache_toolbar(machine(), x_size, y2 - y1);
float const space_x = (y2 - y1) * aspect;
float const total = (float(num_valid) * space_x) + (float(num_valid - 1) * 0.001f);
x1 += (x2 - x1) * 0.5f - total * 0.5f;
x2 = x1 + space_x;
for (int z = 0; z < UI_TOOLBAR_BUTTONS; ++z)
// add backtrack button
rgb_t color(0xefefefef);
if (mouse_in_rect(backtrack_pos, y1, x2, y2))
{
if (t_bitmap[z].valid())
{
rgb_t color(0xEFEFEFEF);
if (mouse_in_rect(x1, y1, x2, y2))
{
set_hover(HOVER_B_FAV + z);
color = rgb_t::white();
float ypos = y2 + ui().get_line_height() + 2.0f * ui().box_tb_border();
ui().draw_text_box(container(), _(hover_msg[z]), ui::text_layout::CENTER, 0.5f, ypos, ui().colors().background_color());
}
set_hover(HOVER_BACKTRACK);
color = rgb_t::white();
float const ypos = y2 + ui().get_line_height() + 2.0f * ui().box_tb_border();
ui().draw_text_box(
container(),
have_parent ? _("Return to previous menu") : _("Exit"),
ui::text_layout::RIGHT, 1.0f - lr_border, ypos,
ui().colors().background_color());
}
container().add_quad(
backtrack_pos, y1, x2, y2,
color,
m_cache.toolbar_textures()[have_parent ? TOOLBAR_BITMAP_PREVMENU : TOOLBAR_BITMAP_EXIT].get(),
PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA));
container().add_quad(x1, y1, x2, y2, color, t_texture[z].get(), PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA));
x1 += space_x + ((z < UI_TOOLBAR_BUTTONS - 1) ? 0.001f : 0.0f);
x2 = x1 + space_x;
// now add the other buttons
x1 = (std::min)(backtrack_pos - (float(toolbar_count) * x_spacing), x1 + ((x2 - x1 - total_width) * 0.5f));
for (int z = 0; toolbar_count > z; ++z, x1 += x_spacing)
{
x2 = x1 + x_size;
color = rgb_t (0xefefefef);
if (mouse_in_rect(x1, y1, x2, y2))
{
set_hover(HOVER_B_FAV + toolbar_bitmaps[z]);
color = rgb_t::white();
float ypos = y2 + ui().get_line_height() + 2.0f * ui().box_tb_border();
ui().draw_text_box(
container(),
_(hover_msg[toolbar_bitmaps[z]]),
ui::text_layout::CENTER, (x1 + x2) * 0.5f, ypos,
ui().colors().background_color());
}
container().add_quad(
x1, y1, x2, y2,
color,
m_cache.toolbar_textures()[toolbar_bitmaps[z]].get(),
PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA));
}
}
@ -1375,11 +1425,6 @@ void menu_select_launch::handle_keys(uint32_t flags, int &iptkey)
m_prev_selected = nullptr;
filter_selected();
}
if (is_last_selected() && (m_focus == focused_menu::MAIN))
{
iptkey = IPT_UI_CANCEL;
stack_pop();
}
return;
}
@ -1720,6 +1765,12 @@ void menu_select_launch::handle_events(uint32_t flags, event &ev)
inkey_dats();
stop = true;
}
else if (hover() == HOVER_BACKTRACK)
{
ev.iptkey = IPT_UI_CANCEL;
stack_pop();
stop = true;
}
else if (hover() >= HOVER_RP_FIRST && hover() <= HOVER_RP_LAST)
{
ui_globals::rpanel = (HOVER_RP_FIRST - hover()) * (-1);
@ -1753,7 +1804,7 @@ void menu_select_launch::handle_events(uint32_t flags, event &ev)
// caught scroll event
case ui_event::type::MOUSE_WHEEL:
if (hover() >= 0 && hover() < item_count() - skip_main_items - 1)
if (hover() >= 0 && hover() < item_count() - skip_main_items)
{
if (local_menu_event.zdelta > 0)
{
@ -1800,7 +1851,7 @@ void menu_select_launch::handle_events(uint32_t flags, event &ev)
break;
case ui_event::type::MOUSE_RDOWN:
if (hover() >= 0 && hover() < item_count() - skip_main_items - 1)
if (hover() >= 0 && hover() < item_count() - skip_main_items)
{
set_selected_index(hover());
m_prev_selected = get_selection_ref();
@ -1866,8 +1917,8 @@ void menu_select_launch::draw(uint32_t flags)
draw_background();
clear_hover();
m_available_items = (m_is_swlist) ? item_count() - 2 : item_count() - 2 - skip_main_items;
float extra_height = (m_is_swlist) ? 2.0f * line_height : (2.0f + skip_main_items) * line_height;
m_available_items = item_count() - skip_main_items;
float extra_height = skip_main_items * line_height;
float visible_extra_menu_height = get_customtop() + get_custombottom() + extra_height;
// locate mouse
@ -1926,7 +1977,7 @@ void menu_select_launch::draw(uint32_t flags)
int const n_loop = (std::min)(m_visible_lines, m_available_items);
for (int linenum = 0; linenum < n_loop; linenum++)
{
float line_y = visible_top + (float)linenum * line_height;
float line_y = visible_top + (float(linenum) * line_height);
int itemnum = top_line + linenum;
const menu_item &pitem = item(itemnum);
const std::string_view itemtext = pitem.text;
@ -2629,7 +2680,7 @@ void menu_select_launch::infos_render(float origx1, float origy1, float origx2,
int total;
get_selection(software, system);
if (software && (!software->startempty || !system))
if (software && !software->startempty)
{
m_info_driver = nullptr;
first = N_("Software List Info");
@ -2664,32 +2715,33 @@ void menu_select_launch::infos_render(float origx1, float origy1, float origx2,
}
total = ui_globals::cur_sw_dats_total;
}
else if (system)
else if (system || (software && software->driver))
{
game_driver const &driver(system ? *system->driver : *software->driver);
m_info_software = nullptr;
first = N_("General Info");
if (system->driver != m_info_driver || ui_globals::curdats_view != m_info_view)
if (&driver != m_info_driver || ui_globals::curdats_view != m_info_view)
{
m_info_buffer.clear();
if (system->driver == m_info_driver)
if (&driver == m_info_driver)
{
m_info_view = ui_globals::curdats_view;
}
else
{
m_info_driver = system->driver;
m_info_driver = &driver;
m_info_view = 0;
ui_globals::curdats_view = 0;
m_items_list.clear();
mame_machine_manager::instance()->lua()->call_plugin("data_list", system->driver->name, m_items_list);
mame_machine_manager::instance()->lua()->call_plugin("data_list", driver.name, m_items_list);
ui_globals::curdats_total = m_items_list.size() + 1;
}
if (m_info_view == 0)
{
general_info(*system, m_info_buffer);
general_info(system, driver, m_info_buffer);
}
else
{
@ -2863,4 +2915,200 @@ void menu_select_launch::infos_render(float origx1, float origy1, float origx2,
m_right_visible_lines = r_visible_lines - (m_topline_datsview != 0) - (m_topline_datsview + r_visible_lines != m_total_lines);
}
//-------------------------------------------------
// generate general info
//-------------------------------------------------
void menu_select_launch::general_info(ui_system_info const *system, game_driver const &driver, std::string &buffer)
{
system_flags const &flags(get_system_flags(driver));
std::ostringstream str;
str << "#j2\n";
util::stream_format(str, _("Romset\t%1$-.100s\n"), driver.name);
util::stream_format(str, _("Year\t%1$s\n"), driver.year);
util::stream_format(str, _("Manufacturer\t%1$-.100s\n"), driver.manufacturer);
int cloneof = driver_list::non_bios_clone(driver);
if (0 <= cloneof)
{
// TODO: this shows the non-localised parent name in some situations
util::stream_format(
str,
_("Driver is Clone of\t%1$-.100s\n"),
system ? system->parent : driver_list::driver(cloneof).type.fullname());
}
else
{
str << _("Driver is Parent\t\n");
}
if (flags.has_analog())
str << _("Analog Controls\tYes\n");
if (flags.has_keyboard())
str << _("Keyboard Inputs\tYes\n");
if (flags.machine_flags() & machine_flags::NOT_WORKING)
str << _("Overall\tNOT WORKING\n");
else if ((flags.unemulated_features() | flags.imperfect_features()) & device_t::feature::PROTECTION)
str << _("Overall\tUnemulated Protection\n");
else
str << _("Overall\tWorking\n");
if (flags.unemulated_features() & device_t::feature::GRAPHICS)
str << _("Graphics\tUnimplemented\n");
else if (flags.unemulated_features() & device_t::feature::PALETTE)
str << _("Graphics\tWrong Colors\n");
else if (flags.imperfect_features() & device_t::feature::PALETTE)
str << _("Graphics\tImperfect Colors\n");
else if (flags.imperfect_features() & device_t::feature::GRAPHICS)
str << _("Graphics\tImperfect\n");
else
str << _("Graphics\tOK\n");
if (flags.machine_flags() & machine_flags::NO_SOUND_HW)
str << _("Sound\tNone\n");
else if (flags.unemulated_features() & device_t::feature::SOUND)
str << _("Sound\tUnimplemented\n");
else if (flags.imperfect_features() & device_t::feature::SOUND)
str << _("Sound\tImperfect\n");
else
str << _("Sound\tOK\n");
if (flags.unemulated_features() & device_t::feature::CAPTURE)
str << _("Capture\tUnimplemented\n");
else if (flags.imperfect_features() & device_t::feature::CAPTURE)
str << _("Capture\tImperfect\n");
if (flags.unemulated_features() & device_t::feature::CAMERA)
str << _("Camera\tUnimplemented\n");
else if (flags.imperfect_features() & device_t::feature::CAMERA)
str << _("Camera\tImperfect\n");
if (flags.unemulated_features() & device_t::feature::MICROPHONE)
str << _("Microphone\tUnimplemented\n");
else if (flags.imperfect_features() & device_t::feature::MICROPHONE)
str << _("Microphone\tImperfect\n");
if (flags.unemulated_features() & device_t::feature::CONTROLS)
str << _("Controls\tUnimplemented\n");
else if (flags.imperfect_features() & device_t::feature::CONTROLS)
str << _("Controls\tImperfect\n");
if (flags.unemulated_features() & device_t::feature::KEYBOARD)
str << _("Keyboard\tUnimplemented\n");
else if (flags.imperfect_features() & device_t::feature::KEYBOARD)
str << _("Keyboard\tImperfect\n");
if (flags.unemulated_features() & device_t::feature::MOUSE)
str << _("Mouse\tUnimplemented\n");
else if (flags.imperfect_features() & device_t::feature::MOUSE)
str << _("Mouse\tImperfect\n");
if (flags.unemulated_features() & device_t::feature::MEDIA)
str << _("Media\tUnimplemented\n");
else if (flags.imperfect_features() & device_t::feature::MEDIA)
str << _("Media\tImperfect\n");
if (flags.unemulated_features() & device_t::feature::DISK)
str << _("Disk\tUnimplemented\n");
else if (flags.imperfect_features() & device_t::feature::DISK)
str << _("Disk\tImperfect\n");
if (flags.unemulated_features() & device_t::feature::PRINTER)
str << _("Printer\tUnimplemented\n");
else if (flags.imperfect_features() & device_t::feature::PRINTER)
str << _("Printer\tImperfect\n");
if (flags.unemulated_features() & device_t::feature::TAPE)
str << _("Mag. Tape\tUnimplemented\n");
else if (flags.imperfect_features() & device_t::feature::TAPE)
str << _("Mag. Tape\tImperfect\n");
if (flags.unemulated_features() & device_t::feature::PUNCH)
str << _("Punch Tape\tUnimplemented\n");
else if (flags.imperfect_features() & device_t::feature::PUNCH)
str << _("Punch Tape\tImperfect\n");
if (flags.unemulated_features() & device_t::feature::DRUM)
str << _("Mag. Drum\tUnimplemented\n");
else if (flags.imperfect_features() & device_t::feature::DRUM)
str << _("Mag. Drum\tImperfect\n");
if (flags.unemulated_features() & device_t::feature::ROM)
str << _("(EP)ROM\tUnimplemented\n");
else if (flags.imperfect_features() & device_t::feature::ROM)
str << _("(EP)ROM\tImperfect\n");
if (flags.unemulated_features() & device_t::feature::COMMS)
str << _("Communications\tUnimplemented\n");
else if (flags.imperfect_features() & device_t::feature::COMMS)
str << _("Communications\tImperfect\n");
if (flags.unemulated_features() & device_t::feature::LAN)
str << _("LAN\tUnimplemented\n");
else if (flags.imperfect_features() & device_t::feature::LAN)
str << _("LAN\tImperfect\n");
if (flags.unemulated_features() & device_t::feature::WAN)
str << _("WAN\tUnimplemented\n");
else if (flags.imperfect_features() & device_t::feature::WAN)
str << _("WAN\tImperfect\n");
if (flags.unemulated_features() & device_t::feature::TIMING)
str << _("Timing\tUnimplemented\n");
else if (flags.imperfect_features() & device_t::feature::TIMING)
str << _("Timing\tImperfect\n");
str << ((flags.machine_flags() & machine_flags::MECHANICAL) ? _("Mechanical Machine\tYes\n") : _("Mechanical Machine\tNo\n"));
str << ((flags.machine_flags() & machine_flags::REQUIRES_ARTWORK) ? _("Requires Artwork\tYes\n") : _("Requires Artwork\tNo\n"));
str << ((flags.machine_flags() & machine_flags::CLICKABLE_ARTWORK) ? _("Requires Clickable Artwork\tYes\n") : _("Requires Clickable Artwork\tNo\n"));
if (flags.machine_flags() & machine_flags::NO_COCKTAIL)
str << _("Support Cocktail\tNo\n");
str << ((flags.machine_flags() & machine_flags::IS_BIOS_ROOT) ? _("Driver is BIOS\tYes\n") : _("Driver is BIOS\tNo\n"));
str << ((flags.machine_flags() & machine_flags::SUPPORTS_SAVE) ? _("Support Save\tYes\n") : _("Support Save\tNo\n"));
str << ((flags.machine_flags() & ORIENTATION_SWAP_XY) ? _("Screen Orientation\tVertical\n") : _("Screen Orientation\tHorizontal\n"));
bool found = false;
for (romload::region const &region : romload::entries(driver.rom).get_regions())
{
if (region.is_diskdata())
{
found = true;
break;
}
}
str << (found ? _("Requires CHD\tYes\n") : _("Requires CHD\tNo\n"));
// audit the game first to see if we're going to work
if (ui().options().info_audit())
{
driver_enumerator enumerator(machine().options(), driver);
enumerator.next();
media_auditor auditor(enumerator);
media_auditor::summary summary = auditor.audit_media(AUDIT_VALIDATE_FAST);
media_auditor::summary summary_samples = auditor.audit_samples();
// if everything looks good, schedule the new driver
if (audit_passed(summary))
str << _("ROM Audit Result\tOK\n");
else
str << _("ROM Audit Result\tBAD\n");
if (summary_samples == media_auditor::NONE_NEEDED)
str << _("Samples Audit Result\tNone Needed\n");
else if (audit_passed(summary_samples))
str << _("Samples Audit Result\tOK\n");
else
str << _("Samples Audit Result\tBAD\n");
}
else
{
str << _("ROM Audit \tDisabled\nSamples Audit \tDisabled\n");
}
buffer = str.str();
}
} // namespace ui

View File

@ -201,10 +201,10 @@ private:
bitmap_argb32 &no_avail_bitmap() { return m_no_avail_bitmap; }
render_texture *star_texture() { return m_star_texture.get(); }
bitmap_vector const &toolbar_bitmap() { return m_toolbar_bitmap; }
bitmap_vector const &sw_toolbar_bitmap() { return m_sw_toolbar_bitmap; }
texture_ptr_vector const &toolbar_texture() { return m_toolbar_texture; }
texture_ptr_vector const &sw_toolbar_texture() { return m_sw_toolbar_texture; }
bitmap_vector const &toolbar_bitmaps() { return m_toolbar_bitmaps; }
texture_ptr_vector const &toolbar_textures() { return m_toolbar_textures; }
void cache_toolbar(running_machine &machine, float width, float height);
private:
bitmap_ptr m_snapx_bitmap;
@ -216,10 +216,8 @@ private:
bitmap_argb32 m_star_bitmap;
texture_ptr m_star_texture;
bitmap_vector m_toolbar_bitmap;
bitmap_vector m_sw_toolbar_bitmap;
texture_ptr_vector m_toolbar_texture;
texture_ptr_vector m_sw_toolbar_texture;
bitmap_vector m_toolbar_bitmaps;
texture_ptr_vector m_toolbar_textures;
};
// this is to satisfy the std::any requirement that objects be copyable
@ -246,7 +244,7 @@ private:
// draw infos
void infos_render(float x1, float y1, float x2, float y2);
virtual void general_info(ui_system_info const &system, std::string &buffer) = 0;
void general_info(ui_system_info const *system, game_driver const &driver, std::string &buffer);
// get selected software and/or driver
virtual void get_selection(ui_software_info const *&software, ui_system_info const *&system) const = 0;

View File

@ -581,11 +581,10 @@ void menu_select_software::populate(float &customtop, float &custombottom)
m_displaylist[curitem].get().parentname.empty() ? flags_ui : (FLAG_INVERT | flags_ui), (void *)&m_displaylist[curitem].get());
}
item_append(menu_item_type::SEPARATOR, flags_ui);
// configure the custom rendering
skip_main_items = 0;
customtop = 4.0f * ui().get_line_height() + 5.0f * ui().box_tb_border();
custombottom = 5.0f * ui().get_line_height() + 4.0f * ui().box_tb_border();
custombottom = 4.0f * ui().get_line_height() + 4.0f * ui().box_tb_border();
if (old_software != -1)
{

View File

@ -65,8 +65,6 @@ private:
// handlers
void inkey_select(const event *menu_event);
virtual void general_info(ui_system_info const &system, std::string &buffer) override { }
std::map<std::string, std::string> m_icon_paths;
char const *const m_description;
game_driver const &m_driver;

View File

@ -37,7 +37,6 @@ simple_menu_select_game::simple_menu_select_game(mame_ui_manager &mui, render_co
: menu(mui, container)
, m_error(false), m_rerandomize(false)
, m_search()
, m_skip_main_items(0)
, m_driverlist(driver_list::total() + 1)
, m_drivlist()
, m_cached_driver(nullptr)
@ -45,6 +44,7 @@ simple_menu_select_game::simple_menu_select_game(mame_ui_manager &mui, render_co
, m_cached_unemulated(device_t::feature::NONE), m_cached_imperfect(device_t::feature::NONE)
, m_cached_color(ui().colors().background_color())
{
set_needs_prev_menu_item(false);
build_driver_list();
if (gamename)
m_search.assign(gamename);
@ -116,7 +116,7 @@ void simple_menu_select_game::handle()
// process the menu
const event *menu_event = process(0);
if (menu_event && menu_event->itemref)
if (menu_event)
{
if (m_error)
{
@ -162,17 +162,18 @@ void simple_menu_select_game::inkey_select(const event *menu_event)
{
const game_driver *driver = (const game_driver *)menu_event->itemref;
// special case for configure inputs
if ((uintptr_t)driver == 1)
if ((uintptr_t)driver == 1) // special case for configure inputs
{
menu::stack_push<menu_simple_game_options>(
ui(),
container(),
[this] () { reset(reset_options::SELECT_FIRST); });
}
// anything else is a driver
else
else if (!driver) // special case for previous menu
{
stack_pop();
}
else // anything else is a driver
{
// audit the game first to see if we're going to work
driver_enumerator enumerator(machine().options(), *driver);
@ -267,7 +268,11 @@ void simple_menu_select_game::populate(float &customtop, float &custombottom)
if (curmatch != -1)
{
int cloneof = m_drivlist->non_bios_clone(curmatch);
item_append(m_drivlist->driver(curmatch).name, m_drivlist->driver(curmatch).type.fullname(), (cloneof == -1) ? 0 : FLAG_INVERT, (void *)&m_drivlist->driver(curmatch));
item_append(
m_drivlist->driver(curmatch).type.fullname(),
m_drivlist->driver(curmatch).name,
(cloneof == -1) ? 0 : FLAG_INVERT,
(void *)&m_drivlist->driver(curmatch));
}
}
@ -276,7 +281,12 @@ void simple_menu_select_game::populate(float &customtop, float &custombottom)
{
item_append(menu_item_type::SEPARATOR);
item_append(_("Configure Options"), 0, (void *)1);
m_skip_main_items = 1;
item_append(_("Exit"), 0, nullptr);
}
else
{
item_append(menu_item_type::SEPARATOR);
item_append(_("Return to Previous Menu"), 0, nullptr);
}
// configure the custom rendering
@ -308,7 +318,7 @@ void simple_menu_select_game::custom_render(void *selectedref, float top, float
ui().colors().text_color(), ui().colors().background_color(), 1.0f);
// determine the text to render below
driver = ((uintptr_t)selectedref > m_skip_main_items) ? (const game_driver *)selectedref : nullptr;
driver = ((uintptr_t)selectedref > 1) ? (const game_driver *)selectedref : nullptr;
if (driver)
{
// first line is game name

View File

@ -48,7 +48,6 @@ private:
bool m_error;
bool m_rerandomize;
std::string m_search;
int m_skip_main_items;
int m_matchlist[VISIBLE_GAMES_IN_LIST];
std::vector<const game_driver *> m_driverlist;
std::unique_ptr<driver_enumerator> m_drivlist;

View File

@ -1,121 +1,65 @@
// license:BSD-3-Clause
// copyright-holders:Dankan1890
// copyright-holders:Vas Crabb
#ifndef MAME_FRONTEND_UI_TOOLBAR_IPP
#define MAME_FRONTEND_UI_TOOLBAR_IPP
#pragma once
namespace ui {
namespace {
// TODO: move this to an external image file and zlib compress it into a souce file as part of the build process
uint32_t const toolbar_bitmap_bmp[][1024] = {
{
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x02D07A00, 0x15D07A00, 0x0FD07A00, 0x00D07A00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x76D27F04, 0xBFDA9714, 0xB9D78F0E, 0x4DD17B01, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x3BD07A00, 0xFFE8B228, 0xFFFDEB50, 0xFFFBE34A, 0xD0E1A11C, 0x13D07A00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0BD07A00, 0xA0D48306, 0xFFFACE42, 0xFFFBCE45, 0xFFFCD146, 0xFFF2BD34, 0x67D07A00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x49D27E03, 0xE9EAAB26, 0xFFFDD044, 0xFFF9C741, 0xFFFAC942, 0xFFFED245, 0xD1DF9716, 0x27D07A00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xA2DB8D0F, 0xFFF6C236, 0xFFFAC740, 0xFFF8C53F, 0xFFF8C53F, 0xFFFDCB41, 0xF7F0B62E, 0x71D68308, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x31D07A00, 0xFFE7A420, 0xFFFDCA3F, 0xFFF8C23D, 0xFFF8C23D, 0xFFF8C23D, 0xFFF8C23D, 0xFFFCC83D, 0xE0E19818, 0x11D07A00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x08D07A00, 0x99D38004, 0xFFF9C237, 0xFFFAC43C, 0xFFF8BF3A, 0xFFF8BF3A, 0xFFF8BF3A, 0xFFF8BF3A, 0xFFFBC53C, 0xFFF1B32B, 0x63D07A00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x01D07A00, 0x15D07A00, 0x24D07A00, 0x39D07A00, 0x4AD07A00, 0x79D48205, 0xE6E9A820, 0xFFFDC539, 0xFFF8BC37, 0xFFF8BC37, 0xFFF8BC37, 0xFFF8BC37, 0xFFF8BC37, 0xFFF9BD37, 0xFFFEC63A, 0xD8DF9613, 0x64D17C01, 0x3FD07A00, 0x2FD07A00, 0x1CD07A00, 0x0AD07A00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x04D07A00, 0x3BD07A00, 0x8BD07A00, 0xA5D17B01, 0xBFDA940F, 0xCEE1A317, 0xE2E7B622, 0xF4EDC229, 0xFFF1C62D, 0xFFFAC735, 0xFFFABC35, 0xFFF8B934, 0xFFF8B934, 0xFFF8B934, 0xFFF8B934, 0xFFF8B934, 0xFFF8B934, 0xFFFCBF36, 0xFFF7C733, 0xFCEFC52C, 0xE9EABB24, 0xD8E4AE1D, 0xC6DD9C13, 0xB4D58608, 0x99D07A00, 0x75D07A00, 0x20D07A00, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x01D07A00, 0xBBD78608, 0xFFE9AE1F, 0xFFF9D133, 0xFFFCD839, 0xFFFCD338, 0xFFFCCC36, 0xFFFCC333, 0xFFFCBB32, 0xFFF7B630, 0xFFF7B630, 0xFFF7B630, 0xFFF7B630, 0xFFF7B630, 0xFFF7B630, 0xFFF7B630, 0xFFF7B630, 0xFFF7B630, 0xFFF7B630, 0xFFF7B630, 0xFFFAB831, 0xFFFCC033, 0xFFFCC735, 0xFFFCD037, 0xFFFCD739, 0xFFFBD536, 0xFFF5C92F, 0xE8E4A318, 0x55D78507, 0x00000000, 0x00000000,
0x00000000, 0x13D07A00, 0xFFDF9212, 0xFFFABC2F, 0xFFF9B72F, 0xFFF8B32E, 0xFFF7B22D, 0xFFF7B22D, 0xFFF7B22D, 0xFFF7B22D, 0xFFF7B22D, 0xFFF7B22D, 0xFFF7B22D, 0xFFF7B22D, 0xFFF7B22D, 0xFFF7B22D, 0xFFF7B22D, 0xFFF7B22D, 0xFFF7B22D, 0xFFF7B22D, 0xFFF7B22D, 0xFFF7B22D, 0xFFF7B22D, 0xFFF7B22D, 0xFFF7B22D, 0xFFF7B32D, 0xFFF9B52E, 0xFFF9B92F, 0xFFF6B52A, 0xC1DB8B0D, 0x00000000, 0x00000000,
0x00000000, 0x07D07A00, 0xE6DC8B0E, 0xFFF4AB27, 0xFFF7AF2A, 0xFFF7AF2A, 0xFFF7AF2A, 0xFFF7AF2A, 0xFFF7AF2A, 0xFFF7AF2A, 0xFFF7AF2A, 0xFFF7AF2A, 0xFFF7AF2A, 0xFFF7AF2A, 0xFFF7AF2A, 0xFFF7AF2A, 0xFFF7AF2A, 0xFFF7AF2A, 0xFFF7AF2A, 0xFFF7AF2A, 0xFFF7AF2A, 0xFFF7AF2A, 0xFFF7AF2A, 0xFFF7AF2A, 0xFFF7AF2A, 0xFFF7AF2A, 0xFFF7AF2A, 0xFFF7AF2A, 0xFFEFA421, 0xAAD9860A, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x5ED58005, 0xE8E39213, 0xFFF7AB26, 0xFFF7AB26, 0xFFF7AB26, 0xFFF7AB26, 0xFFF7AB26, 0xFFF7AB26, 0xFFF7AB26, 0xFFF7AB26, 0xFFF7AB26, 0xFFF7AB26, 0xFFF7AB26, 0xFFF7AB26, 0xFFF7AB26, 0xFFF7AB26, 0xFFF7AB26, 0xFFF7AB26, 0xFFF7AB26, 0xFFF7AB26, 0xFFF7AB26, 0xFFF7AB26, 0xFFF7AB26, 0xFFF7AB26, 0xFFF7AB26, 0xFFF4A925, 0xE2DC890C, 0x45D27C02, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x41D07A00, 0xE7E18F11, 0xFFF3A420, 0xFFF6A823, 0xFFF6A823, 0xFFF6A823, 0xFFF6A823, 0xFFF6A823, 0xFFF6A823, 0xFFF6A823, 0xFFF6A823, 0xFFF6A823, 0xFFF6A823, 0xFFF6A823, 0xFFF6A823, 0xFFF6A823, 0xFFF6A823, 0xFFF6A823, 0xFFF6A823, 0xFFF6A823, 0xFFF6A823, 0xFFF6A823, 0xFFF6A823, 0xFFEFA11D, 0xE0DB880A, 0x35D07A00, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x5DD47E03, 0xE6E08D0D, 0xFFF5A41F, 0xFFF6A41F, 0xFFF6A41F, 0xFFF6A41F, 0xFFF6A41F, 0xFFF6A41F, 0xFFF6A41F, 0xFFF6A41F, 0xFFF6A41F, 0xFFF6A41F, 0xFFF6A41F, 0xFFF6A41F, 0xFFF6A41F, 0xFFF6A41F, 0xFFF6A41F, 0xFFF6A41F, 0xFFF6A41F, 0xFFF6A41F, 0xFFF6A41F, 0xFFF3A11D, 0xDFDB8609, 0x4FD27C01, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x40D07A00, 0xE6E08A0C, 0xFFF29D19, 0xFFF6A01C, 0xFFF6A01C, 0xFFF6A01C, 0xFFF6A01C, 0xFFF6A01C, 0xFFF6A01C, 0xFFF6A01C, 0xFFF6A01C, 0xFFF6A01C, 0xFFF6A01C, 0xFFF6A01C, 0xFFF6A01C, 0xFFF6A01C, 0xFFF6A01C, 0xFFF6A01C, 0xFFF6A01C, 0xFFEE9917, 0xDDDA8407, 0x30D07A00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x5BD37D02, 0xE6DF880A, 0xFFF59C18, 0xFFF69D18, 0xFFF69D18, 0xFFF69D18, 0xFFF69D18, 0xFFF69D18, 0xFFF69D18, 0xFFF69D18, 0xFFF69D18, 0xFFF69D18, 0xFFF69D18, 0xFFF69D18, 0xFFF69D18, 0xFFF69D18, 0xFFF69D18, 0xFFF29A16, 0xDCD98306, 0x49D17B01, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x7BD07A00, 0xFFEF9311, 0xFFF69A15, 0xFFF59915, 0xFFF59915, 0xFFF59915, 0xFFF59915, 0xFFF59915, 0xFFF59915, 0xFFF59915, 0xFFF59915, 0xFFF59915, 0xFFF59915, 0xFFF59915, 0xFFF59915, 0xFFF69915, 0xFFE2890A, 0x3BD07A00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x01D07A00, 0xA2D17B00, 0xFFF59612, 0xFFF69713, 0xFFF59612, 0xFFF59612, 0xFFF59612, 0xFFF59612, 0xFFF59612, 0xFFF59612, 0xFFF59612, 0xFFF59612, 0xFFF59612, 0xFFF59612, 0xFFF59612, 0xFFF59612, 0xFFF79712, 0xFFE98D0B, 0x4BD07A00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x14D07A00, 0xBED87F03, 0xFFF6940E, 0xFFF5930E, 0xFFF5930E, 0xFFF5930E, 0xFFF5930E, 0xFFF5930E, 0xFFF5930E, 0xFFF5930E, 0xFFF5930E, 0xFFF5930E, 0xFFF5930E, 0xFFF5930E, 0xFFF5930E, 0xFFF5930E, 0xFFF7940E, 0xFFF1900B, 0x7ED07A00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x27D07A00, 0xD1DE8205, 0xFFF8920C, 0xFFF5900C, 0xFFF5900C, 0xFFF5900C, 0xFFF5900C, 0xFFF5900C, 0xFFF5900C, 0xFFF5900C, 0xFFF5900C, 0xFFF5900C, 0xFFF5900C, 0xFFF5900C, 0xFFF5900C, 0xFFF5900C, 0xFFF6910C, 0xFFF5910C, 0xA5D27B01, 0x03D07A00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x40D07A00, 0xEAE48505, 0xFFFA9009, 0xFFF58D09, 0xFFF58D09, 0xFFF58D09, 0xFFF58D09, 0xFFF58D09, 0xFFF58D09, 0xFFF58D09, 0xFFF58D09, 0xFFF58D09, 0xFFF58D09, 0xFFF58D09, 0xFFF58D09, 0xFFF58D09, 0xFFF58D09, 0xFFF78E09, 0xC1D97F02, 0x17D07A00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x57D17B00, 0xFBE88504, 0xFFF78D06, 0xFFF48B06, 0xFFF48B06, 0xFFF48B06, 0xFFF48B06, 0xFFF48B06, 0xFFF38B06, 0xFFEC8705, 0xFFF18A06, 0xFFF48B06, 0xFFF48B06, 0xFFF48B06, 0xFFF48B06, 0xFFF48B06, 0xFFF48B06, 0xFFF88E06, 0xD6DF8102, 0x2CD07A00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x83D67D01, 0xFFED8503, 0xFFF48804, 0xFFF48804, 0xFFF48804, 0xFFF48804, 0xFFF28804, 0xFFEA8503, 0xCDDC7F02, 0x79D17B00, 0xA1D47C01, 0xEFE18102, 0xFFEE8604, 0xFFF38804, 0xFFF48804, 0xFFF48804, 0xFFF48804, 0xFFF88B04, 0xEFE58203, 0x46D07A00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xA0D87D01, 0xFFED8401, 0xFFF48602, 0xFFF48602, 0xFFF48602, 0xFFEF8501, 0xE9DE7F01, 0x8FD67D00, 0x23D07A00, 0x04D07A00, 0x0DD07A00, 0x46D07A00, 0xC3D97D01, 0xFFE28001, 0xFFF38602, 0xFFF48602, 0xFFF48602, 0xFFF58702, 0xFDE88201, 0x59D17A00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x5FD47B00, 0xF3E58000, 0xFFF18400, 0xFFED8200, 0xDEE07F01, 0x90D37B00, 0x1FD07A00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x01D07A00, 0x3BD07A00, 0xBDD67C00, 0xF2E48000, 0xFFEF8300, 0xFFF08300, 0xDEDF7E01, 0x34D07A00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x10D07A00, 0x71D57C00, 0xD2DB7D00, 0x9AD87C00, 0x34D07A00, 0x0AD07A00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x13D07A00, 0x52D27B00, 0xBBD97D00, 0xCBDA7D00, 0x5DD27B00, 0x0AD07A00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000
},
{
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x41D07A00, 0x8BD07A00, 0xAAD07A00, 0xAAD07A00, 0xAAC48715, 0xAAC08C1D, 0xAAC08C1D, 0xAAC08C1D, 0xAAC08C1D, 0xAAC08C1D, 0xAAC08C1D, 0xAAC08C1D, 0xAAC08C1D, 0xAAC08C1D, 0xAAC08C1D, 0xAAC08C1D, 0xAAC08C1D, 0xAAC08C1D, 0xAAC08C1D, 0xAAC08C1D, 0xAACA810B, 0xAAD07A00, 0xA4D07A00, 0x7DD07A00, 0x1CD07A00, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x07D07A00, 0x7BD38206, 0xFFE8B82B, 0xFFF9E24B, 0xFFFEEE55, 0xFFFDEE55, 0xFFCBA95F, 0xFFEBEBEB, 0xFFF1F1F1, 0xFFF3F3F3, 0xFFF7F7F7, 0xFFF9F9F9, 0xFFFCFCFC, 0xFFFEFEFE, 0xFFFEFEFE, 0xFFFEFEFE, 0xFFFCFCFC, 0xFFFAFAFA, 0xFFF7F7F7, 0xFFF5F5F5, 0xFFF2F2F2, 0xFFE9E9E9, 0xFFD4AC2F, 0xFFFDEE55, 0xFFFDEC53, 0xFFF6DE47, 0xE4DE9E19, 0x49D38105, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x2DD07A00, 0xD7E39E1C, 0xFFFDDC4A, 0xFFFBD047, 0xFFFACC45, 0xFFF9CB45, 0xFFC4A258, 0xFFD0D0D0, 0xFFD6D6D6, 0xFFDDDDDD, 0xFFE6E6E6, 0xFFEEEEEE, 0xFFF6F6F6, 0xFFFBFBFB, 0xFFF0E5CC, 0xFFD4B167, 0xFFD2B066, 0xFFD0AE64, 0xFFE9E9E9, 0xFFE1E1E1, 0xFFD8D8D8, 0xFFD2D2D2, 0xFFD3A12A, 0xFFF9CB45, 0xFFFACD46, 0xFFFBD348, 0xFFF7CD3E, 0xB2DB9112, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x52D07A00, 0xFCEBAD2C, 0xFFFCCC44, 0xFFF9C943, 0xFFF9C943, 0xFFF9C943, 0xFFC4A258, 0xFFD0D0D0, 0xFFD6D6D6, 0xFFDDDDDD, 0xFFE6E6E6, 0xFFEEEEEE, 0xFFF6F6F6, 0xFFFBFBFB, 0xFFE9D8B3, 0xFFE6B437, 0xFFF9C943, 0xFFD3A02A, 0xFFE9E9E9, 0xFFE1E1E1, 0xFFD8D8D8, 0xFFD2D2D2, 0xFFD3A02A, 0xFFF9C943, 0xFFF9C943, 0xFFF9C943, 0xFFFBCB44, 0xFADD9416, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x55D07A00, 0xFFEBAD2B, 0xFFF9C741, 0xFFF9C741, 0xFFF9C741, 0xFFF9C741, 0xFFC4A258, 0xFFD0D0D0, 0xFFD6D6D6, 0xFFDDDDDD, 0xFFE6E6E6, 0xFFEEEEEE, 0xFFF6F6F6, 0xFFFBFBFB, 0xFFE9D8B3, 0xFFE6B335, 0xFFF9C741, 0xFFD3A029, 0xFFE9E9E9, 0xFFE1E1E1, 0xFFD8D8D8, 0xFFD2D2D2, 0xFFD3A029, 0xFFF9C741, 0xFFF9C741, 0xFFF9C741, 0xFFF9C741, 0xFFDD9416, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x55D07A00, 0xFFEAAB2A, 0xFFF8C43F, 0xFFF8C43F, 0xFFF8C43F, 0xFFF8C43F, 0xFFC4A258, 0xFFD0D0D0, 0xFFD6D6D6, 0xFFDDDDDD, 0xFFE6E6E6, 0xFFEEEEEE, 0xFFF6F6F6, 0xFFFBFBFB, 0xFFE9D8B3, 0xFFE5B133, 0xFFF8C43F, 0xFFD29F28, 0xFFE9E9E9, 0xFFE1E1E1, 0xFFD8D8D8, 0xFFD2D2D2, 0xFFD29F28, 0xFFF8C43F, 0xFFF8C43F, 0xFFF8C43F, 0xFFF8C43F, 0xFFDD9315, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x55D07A00, 0xFFEAAA28, 0xFFF8C23C, 0xFFF8C23C, 0xFFF8C23C, 0xFFF8C23C, 0xFFC4A258, 0xFFD0D0D0, 0xFFD6D6D6, 0xFFDDDDDD, 0xFFE6E6E6, 0xFFEEEEEE, 0xFFF6F6F6, 0xFFFBFBFB, 0xFFE9D8B3, 0xFFE5B032, 0xFFF8C23C, 0xFFD29E27, 0xFFE9E9E9, 0xFFE1E1E1, 0xFFD8D8D8, 0xFFD2D2D2, 0xFFD29E27, 0xFFF8C23C, 0xFFF8C23C, 0xFFF8C23C, 0xFFF8C23C, 0xFFDD9214, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x55D07A00, 0xFFEAA826, 0xFFF8BF39, 0xFFF8BF39, 0xFFF8BF39, 0xFFF8BF39, 0xFFC9A352, 0xFFCFCDC7, 0xFFD6D6D6, 0xFFDDDDDD, 0xFFE6E6E6, 0xFFEEEEEE, 0xFFF6F6F6, 0xFFFBFBFB, 0xFFE9D8B3, 0xFFD8A329, 0xFFE5AE30, 0xFFCC9723, 0xFFECECEC, 0xFFE1E1E1, 0xFFD8D8D8, 0xFFD0CCC2, 0xFFD8A128, 0xFFF8BF39, 0xFFF8BF39, 0xFFF8BF39, 0xFFF8BF39, 0xFFDD9113, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x55D07A00, 0xFFEAA624, 0xFFF8BC36, 0xFFF8BC36, 0xFFF8BC36, 0xFFF8BC36, 0xFFD7A63B, 0xFFCCBFA3, 0xFFD6D6D6, 0xFFDDDDDD, 0xFFE6E6E6, 0xFFEEEEEE, 0xFFF6F6F6, 0xFFFBFBFB, 0xFFF8F2E6, 0xFFEAD8B3, 0xFFEAD8B3, 0xFFEAD8B3, 0xFFF5F5F5, 0xFFE1E1E1, 0xFFD8D7D5, 0xFFCBB280, 0xFFE9AF2F, 0xFFF8BC36, 0xFFF8BC36, 0xFFF8BC36, 0xFFF8BC36, 0xFFDD9012, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x55D07A00, 0xFFEAA422, 0xFFF8B933, 0xFFF8B933, 0xFFF8B933, 0xFFF8B933, 0xFFF1B430, 0xFFD6A02D, 0xFFD0B57B, 0xFFD3C099, 0xFFD9C8A3, 0xFFDFCDA8, 0xFFE4D3AE, 0xFFE7D6B1, 0xFFE9D8B3, 0xFFE8D7B2, 0xFFE5D3AE, 0xFFE1CFAA, 0xFFDBCAA5, 0xFFD5C298, 0xFFD0AB5D, 0xFFDDA42C, 0xFFF8B933, 0xFFF8B933, 0xFFF8B933, 0xFFF8B933, 0xFFF8B933, 0xFFDD8F11, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x55D07A00, 0xFFEAA120, 0xFFF7B530, 0xFFF7B530, 0xFFF7B530, 0xFFF7B530, 0xFFF7B530, 0xFFF4B32F, 0xFFE9AB2B, 0xFFE5A72A, 0xFFE4A729, 0xFFE4A729, 0xFFE4A729, 0xFFE4A729, 0xFFE4A729, 0xFFE4A729, 0xFFE4A729, 0xFFE4A729, 0xFFE4A729, 0xFFE5A82A, 0xFFEDAE2D, 0xFFF5B430, 0xFFF7B530, 0xFFF7B530, 0xFFF7B530, 0xFFF7B530, 0xFFF7B530, 0xFFDD8E10, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x55D07A00, 0xFFEA9F1E, 0xFFF7B22D, 0xFFF7B22D, 0xFFF7B22D, 0xFFF7B22D, 0xFFF7B22D, 0xFFF7B22D, 0xFFF7B22D, 0xFFF7B22D, 0xFFF7B22D, 0xFFF7B22D, 0xFFF7B22D, 0xFFF7B22D, 0xFFF7B22D, 0xFFF7B22D, 0xFFF7B22D, 0xFFF7B22D, 0xFFF7B22D, 0xFFF7B22D, 0xFFF7B22D, 0xFFF7B22D, 0xFFF7B22D, 0xFFF7B22D, 0xFFF7B22D, 0xFFF7B22D, 0xFFF7B22D, 0xFFDD8D0F, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x55D07A00, 0xFFEA9D1C, 0xFFF7AF2A, 0xFFF7AF2A, 0xFFF7AF2A, 0xFFF7AF2A, 0xFFF7AF2A, 0xFFF7AF2A, 0xFFF7AF2A, 0xFFF7AF2A, 0xFFF7AF2A, 0xFFF7AF2A, 0xFFF7AF2A, 0xFFF7AF2A, 0xFFF7AF2A, 0xFFF7AF2A, 0xFFF7AF2A, 0xFFF7AF2A, 0xFFF7AF2A, 0xFFF7AF2A, 0xFFF7AF2A, 0xFFF7AF2A, 0xFFF7AF2A, 0xFFF7AF2A, 0xFFF7AF2A, 0xFFF7AF2A, 0xFFF7AF2A, 0xFFDD8B0E, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x55D07A00, 0xFFEA9A19, 0xFFF7AB26, 0xFFF7AB26, 0xFFF7AB26, 0xFFF7AB26, 0xFFF0A725, 0xFFE8A324, 0xFFE4A123, 0xFFE4A123, 0xFFE4A123, 0xFFE4A123, 0xFFE4A123, 0xFFE4A123, 0xFFE4A123, 0xFFE4A123, 0xFFE4A123, 0xFFE4A123, 0xFFE4A123, 0xFFE4A123, 0xFFE5A124, 0xFFE9A424, 0xFFF4AA26, 0xFFF7AB26, 0xFFF7AB26, 0xFFF7AB26, 0xFFF7AB26, 0xFFDD8A0D, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x55D07A00, 0xFFE99917, 0xFFF6A823, 0xFFF6A823, 0xFFF6A823, 0xFFE9A122, 0xFFD7A84A, 0xFFE5CC98, 0xFFEAD8B3, 0xFFEAD8B3, 0xFFEAD8B3, 0xFFEAD8B3, 0xFFEAD8B3, 0xFFEAD8B3, 0xFFEAD8B3, 0xFFEAD8B3, 0xFFEAD8B3, 0xFFEAD8B3, 0xFFEAD8B3, 0xFFEAD8B3, 0xFFE9D6AE, 0xFFE4C78C, 0xFFD89C2A, 0xFFF0A522, 0xFFF6A823, 0xFFF6A823, 0xFFF6A823, 0xFFDD890B, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x55D07A00, 0xFFE99614, 0xFFF6A41F, 0xFFF6A41F, 0xFFEFA11F, 0xFFD7A94D, 0xFFFBF9F6, 0xFFF7F7F7, 0xFFEFEFEF, 0xFFEEEEEE, 0xFFEEEEEE, 0xFFEEEEEE, 0xFFEEEEEE, 0xFFEEEEEE, 0xFFEEEEEE, 0xFFEEEEEE, 0xFFEEEEEE, 0xFFEEEEEE, 0xFFEEEEEE, 0xFFEEEEEE, 0xFFF2F2F2, 0xFFF8F8F8, 0xFFEEE1C5, 0xFFDBA136, 0xFFF6A41F, 0xFFF6A41F, 0xFFF6A41F, 0xFFDC880A, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x55D07A00, 0xFFE99413, 0xFFF6A11C, 0xFFF6A11C, 0xFFE79B1C, 0xFFDDC594, 0xFFF3F3F3, 0xFFEDEDED, 0xFFECECEC, 0xFFECECEC, 0xFFECECEC, 0xFFECECEC, 0xFFECECEC, 0xFFECECEC, 0xFFECECEC, 0xFFECECEC, 0xFFECECEC, 0xFFECECEC, 0xFFECECEC, 0xFFECECEC, 0xFFECECEC, 0xFFEDEDED, 0xFFF2EFEA, 0xFFD2AA59, 0xFFF6A11C, 0xFFF6A11C, 0xFFF6A11C, 0xFFDC8709, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x55D07A00, 0xFFE99110, 0xFFF69D18, 0xFFF69D18, 0xFFE49719, 0xFFDCCAA5, 0xFFE9E9E9, 0xFFE2E2E2, 0xFFDEDEDE, 0xFFDEDEDE, 0xFFDEDEDE, 0xFFDEDEDE, 0xFFDEDEDE, 0xFFDEDEDE, 0xFFDEDEDE, 0xFFDEDEDE, 0xFFDEDEDE, 0xFFDEDEDE, 0xFFDEDEDE, 0xFFDEDEDE, 0xFFDEDEDE, 0xFFE6E6E6, 0xFFEAEAEA, 0xFFCEAB61, 0xFFF69D18, 0xFFF69D18, 0xFFF69D18, 0xFFDC8608, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x55D07A00, 0xFFE88F0E, 0xFFF59A15, 0xFFF59A15, 0xFFE39518, 0xFFDAC9A4, 0xFFE7E7E7, 0xFFE0E0E0, 0xFFDCDCDC, 0xFFDCDCDC, 0xFFDCDCDC, 0xFFDCDCDC, 0xFFDCDCDC, 0xFFDCDCDC, 0xFFDCDCDC, 0xFFDCDCDC, 0xFFDCDCDC, 0xFFDCDCDC, 0xFFDCDCDC, 0xFFDCDCDC, 0xFFDCDCDC, 0xFFE4E4E4, 0xFFE7E7E7, 0xFFCDAA60, 0xFFF59A15, 0xFFF59A15, 0xFFF59A15, 0xFFDC8507, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x55D07A00, 0xFFE88D0C, 0xFFF59712, 0xFFF59712, 0xFFE39315, 0xFFD8C6A1, 0xFFE4E4E4, 0xFFE4E4E4, 0xFFE4E4E4, 0xFFE4E4E4, 0xFFE4E4E4, 0xFFE4E4E4, 0xFFE4E4E4, 0xFFE4E4E4, 0xFFE4E4E4, 0xFFE4E4E4, 0xFFE4E4E4, 0xFFE4E4E4, 0xFFE4E4E4, 0xFFE4E4E4, 0xFFE4E4E4, 0xFFE4E4E4, 0xFFE4E4E4, 0xFFCCA95F, 0xFFF59712, 0xFFF59712, 0xFFF59712, 0xFFDC8406, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x55D07A00, 0xFFE88B0A, 0xFFF5930F, 0xFFF5930F, 0xFFE39114, 0xFFD5C49F, 0xFFE0E0E0, 0xFFE0E0E0, 0xFFE0E0E0, 0xFFE0E0E0, 0xFFE0E0E0, 0xFFE0E0E0, 0xFFE0E0E0, 0xFFE0E0E0, 0xFFE0E0E0, 0xFFE0E0E0, 0xFFE0E0E0, 0xFFE0E0E0, 0xFFE0E0E0, 0xFFE0E0E0, 0xFFE0E0E0, 0xFFE0E0E0, 0xFFE0E0E0, 0xFFCBA85E, 0xFFF5930F, 0xFFF5930F, 0xFFF5930F, 0xFFDC8205, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x55D07A00, 0xFFE88808, 0xFFF5900C, 0xFFF5900C, 0xFFE38E11, 0xFFD3C29D, 0xFFDCDCDC, 0xFFCECECE, 0xFFC7C7C7, 0xFFC7C7C7, 0xFFC7C7C7, 0xFFC7C7C7, 0xFFC7C7C7, 0xFFC7C7C7, 0xFFC7C7C7, 0xFFC7C7C7, 0xFFC7C7C7, 0xFFC7C7C7, 0xFFC7C7C7, 0xFFC7C7C7, 0xFFC7C7C7, 0xFFD6D6D6, 0xFFDDDDDD, 0xFFCAA75D, 0xFFF5900C, 0xFFF5900C, 0xFFF5900C, 0xFFDC8104, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x55D07A00, 0xFFE88706, 0xFFF58E09, 0xFFF58E09, 0xFFE38D10, 0xFFD1C09B, 0xFFDADADA, 0xFFDADADA, 0xFFDADADA, 0xFFDADADA, 0xFFDADADA, 0xFFDADADA, 0xFFDADADA, 0xFFDADADA, 0xFFDADADA, 0xFFDADADA, 0xFFDADADA, 0xFFDADADA, 0xFFDADADA, 0xFFDADADA, 0xFFDADADA, 0xFFDADADA, 0xFFDADADA, 0xFFC8A65C, 0xFFF58E09, 0xFFF58E09, 0xFFF58E09, 0xFFDC8103, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x55D07A00, 0xFFE88504, 0xFFF48B07, 0xFFF48B07, 0xFFE38B0E, 0xFFCEBD98, 0xFFD6D6D6, 0xFFD6D6D6, 0xFFD6D6D6, 0xFFD6D6D6, 0xFFD6D6D6, 0xFFD6D6D6, 0xFFD6D6D6, 0xFFD6D6D6, 0xFFD6D6D6, 0xFFD6D6D6, 0xFFD6D6D6, 0xFFD6D6D6, 0xFFD6D6D6, 0xFFD6D6D6, 0xFFD6D6D6, 0xFFD6D6D6, 0xFFD6D6D6, 0xFFC7A55B, 0xFFF48B07, 0xFFF48B07, 0xFFF48B07, 0xFFDC8002, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x52D07A00, 0xFCE78404, 0xFFF48905, 0xFFF48905, 0xFFE28A0D, 0xFFCDBC97, 0xFFD3D3D3, 0xFFC6C6C6, 0xFFBFBFBF, 0xFFBFBFBF, 0xFFBFBFBF, 0xFFBFBFBF, 0xFFBFBFBF, 0xFFBFBFBF, 0xFFBFBFBF, 0xFFBFBFBF, 0xFFBFBFBF, 0xFFBFBFBF, 0xFFBFBFBF, 0xFFBFBFBF, 0xFFBFBFBF, 0xFFCDCDCD, 0xFFD4D4D4, 0xFFC7A45A, 0xFFF48905, 0xFFF48905, 0xFFF38905, 0xFADC7F02, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x2ED07A00, 0xD8DF7F01, 0xFFF38602, 0xFFF48602, 0xFFE2880B, 0xFFCBBA95, 0xFFD1D1D1, 0xFFD1D1D1, 0xFFD1D1D1, 0xFFD1D1D1, 0xFFD1D1D1, 0xFFD1D1D1, 0xFFD1D1D1, 0xFFD1D1D1, 0xFFD1D1D1, 0xFFD1D1D1, 0xFFD1D1D1, 0xFFD1D1D1, 0xFFD1D1D1, 0xFFD1D1D1, 0xFFD1D1D1, 0xFFD1D1D1, 0xFFD1D1D1, 0xFFC6A359, 0xFFF48602, 0xFFF48602, 0xFFED8402, 0xB2D97D01, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x08D07A00, 0x7BD37B00, 0xFFE27F00, 0xFFF08401, 0xFFE2870A, 0xFFCAB893, 0xFFCFCFCF, 0xFFCFCFCF, 0xFFCFCFCF, 0xFFCFCFCF, 0xFFCFCFCF, 0xFFCFCFCF, 0xFFCFCFCF, 0xFFCFCFCF, 0xFFCFCFCF, 0xFFCFCFCF, 0xFFCFCFCF, 0xFFCFCFCF, 0xFFCFCFCF, 0xFFCFCFCF, 0xFFCFCFCF, 0xFFCFCFCF, 0xFFCFCFCF, 0xFFC5A258, 0xFFF38501, 0xFFEE8301, 0xE4DB7D00, 0x49D27B00, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x43D07A00, 0x8DD07A00, 0xAACD7D05, 0xAAC28919, 0xAAC08C1D, 0xAAC08C1D, 0xAAC08C1D, 0xAAC08C1D, 0xAAC08C1D, 0xAAC08C1D, 0xAAC08C1D, 0xAAC08C1D, 0xAAC08C1D, 0xAAC08C1D, 0xAAC08C1D, 0xAAC08C1D, 0xAAC08C1D, 0xAAC08C1D, 0xAAC08C1D, 0xAAC08C1D, 0xAAC08C1D, 0xAAC48715, 0xA5D07A00, 0x7FD07A00, 0x1DD07A00, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000
},
{
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0E999999, 0x59999999, 0x9E999999, 0xAA999999, 0xAA999999, 0xAA999999, 0xAA999999, 0xAA999999, 0xAA999999, 0xAA999999, 0xAA999999, 0xAA999999, 0xAA999999, 0xAA999999, 0xAA999999, 0xAA999999, 0xAA999999, 0xAA999999, 0xAA999999, 0xAA999999, 0xAA999999, 0xAA999999, 0x8B999999, 0x41999999, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x0F999999, 0xC8AEAEAE, 0xFFDADADA, 0xFFF7F7F7, 0xFFFAFAFA, 0xFFFAFAFA, 0xFFFAFAFA, 0xFFFAFAFA, 0xFFFAFAFA, 0xFFFAFAFA, 0xFFFAFAFA, 0xFFFAFAFA, 0xFFFAFAFA, 0xFFFAFAFA, 0xFFFAFAFA, 0xFFFAFAFA, 0xFFFAFAFA, 0xFFFAFAFA, 0xFFFAFAFA, 0xFFFAFAFA, 0xFFFAFAFA, 0xFFFAFAFA, 0xFFFAFAFA, 0xFFF1F1F1, 0xFFCDCDCD, 0x7BA1A1A1, 0x08999999, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x5B999999, 0xFFDADADA, 0xFFF8F8F8, 0xFFF2F2F2, 0xFFEFEFEF, 0xFFEFEFEF, 0xFFEFEFEF, 0xFFEFEFEF, 0xFFEFEFEF, 0xFFEFEFEF, 0xFFEFEFEF, 0xFFEFEFEF, 0xFFEFEFEF, 0xFFEFEFEF, 0xFFEFEFEF, 0xFFEFEFEF, 0xFFEFEFEF, 0xFFEFEFEF, 0xFFEFEFEF, 0xFFEFEFEF, 0xFFEFEFEF, 0xFFEFEFEF, 0xFFF0F0F0, 0xFFF3F3F3, 0xFFFAFAFA, 0xD8BFBFBF, 0x2E999999, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0xA3999999, 0xFFEEEEEE, 0xFFF0F0F0, 0xFFEFEFEF, 0xFFEFEFEF, 0xFFEFEFEF, 0xFFEFEFEF, 0xFFEFEFEF, 0xFFEFEFEF, 0xFFEFEFEF, 0xFFEFEFEF, 0xFFEFEFEF, 0xFFEFEFEF, 0xFFEFEFEF, 0xFFEFEFEF, 0xFFEFEFEF, 0xFFEFEFEF, 0xFFEFEFEF, 0xFFEFEFEF, 0xFFEFEFEF, 0xFFEFEFEF, 0xFFEFEFEF, 0xFFEFEFEF, 0xFFEFEFEF, 0xFFF2F2F2, 0xFCD1D1D1, 0x53999999, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0xAA999999, 0xFFEEEEEE, 0xFFEEEEEE, 0xFFEEEEEE, 0xFFEEEEEE, 0xFFEEEEEE, 0xFFEEEEEE, 0xFFEEEEEE, 0xFFEEEEEE, 0xFFEEEEEE, 0xFFEEEEEE, 0xFFEEEEEE, 0xFFEEEEEE, 0xFFEEEEEE, 0xFFEEEEEE, 0xFFEEEEEE, 0xFFEEEEEE, 0xFFEEEEEE, 0xFFEEEEEE, 0xFFEEEEEE, 0xFFEEEEEE, 0xFFEEEEEE, 0xFFEEEEEE, 0xFFEEEEEE, 0xFFEEEEEE, 0xFFD1D1D1, 0x55999999, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0xAA999999, 0xFFEDEDED, 0xFFEDEDED, 0xFFEDEDED, 0xFFB5B5B5, 0xFF999999, 0xFF999999, 0xFF999999, 0xFF999999, 0xFF999999, 0xFF999999, 0xFF999999, 0xFF999999, 0xFF999999, 0xFF999999, 0xFF999999, 0xFF999999, 0xFF999999, 0xFF999999, 0xFF999999, 0xFF999999, 0xFF9A9A9A, 0xFFD3D3D3, 0xFFEDEDED, 0xFFEDEDED, 0xFFD1D1D1, 0x55999999, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0xAA999999, 0xFFEDEDED, 0xFFEDEDED, 0xFFEDEDED, 0xFFDADADA, 0xFFD1D1D1, 0xFFD1D1D1, 0xFFD1D1D1, 0xFFD1D1D1, 0xFFD1D1D1, 0xFFD1D1D1, 0xFFD1D1D1, 0xFFD1D1D1, 0xFFD1D1D1, 0xFFD1D1D1, 0xFFD1D1D1, 0xFFD1D1D1, 0xFFD1D1D1, 0xFFD1D1D1, 0xFFD1D1D1, 0xFFD1D1D1, 0xFFD1D1D1, 0xFFE4E4E4, 0xFFEDEDED, 0xFFEDEDED, 0xFFD1D1D1, 0x55999999, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0xAA999999, 0xFFECECEC, 0xFFECECEC, 0xFFECECEC, 0xFFECECEC, 0xFFECECEC, 0xFFECECEC, 0xFFECECEC, 0xFFECECEC, 0xFFECECEC, 0xFFECECEC, 0xFFECECEC, 0xFFECECEC, 0xFFECECEC, 0xFFECECEC, 0xFFECECEC, 0xFFECECEC, 0xFFECECEC, 0xFFECECEC, 0xFFECECEC, 0xFFECECEC, 0xFFECECEC, 0xFFECECEC, 0xFFECECEC, 0xFFECECEC, 0xFFD0D0D0, 0x55999999, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0xAA999999, 0xFFEBEBEB, 0xFFEBEBEB, 0xFFEBEBEB, 0xFFEBEBEB, 0xFFEBEBEB, 0xFFEBEBEB, 0xFFEBEBEB, 0xFFEBEBEB, 0xFFEBEBEB, 0xFFEBEBEB, 0xFFEBEBEB, 0xFFEBEBEB, 0xFFEBEBEB, 0xFFEBEBEB, 0xFFEBEBEB, 0xFFEBEBEB, 0xFFEBEBEB, 0xFFEBEBEB, 0xFFEBEBEB, 0xFFEBEBEB, 0xFFEBEBEB, 0xFFEBEBEB, 0xFFEBEBEB, 0xFFEBEBEB, 0xFFCFCFCF, 0x55999999, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0xAA999999, 0xFFEAEAEA, 0xFFEAEAEA, 0xFFEAEAEA, 0xFFD8D8D8, 0xFFCFCFCF, 0xFFCFCFCF, 0xFFCFCFCF, 0xFFCFCFCF, 0xFFCFCFCF, 0xFFCFCFCF, 0xFFCFCFCF, 0xFFCFCFCF, 0xFFCFCFCF, 0xFFCFCFCF, 0xFFCFCFCF, 0xFFCFCFCF, 0xFFCFCFCF, 0xFFCFCFCF, 0xFFCFCFCF, 0xFFCFCFCF, 0xFFCFCFCF, 0xFFE1E1E1, 0xFFEAEAEA, 0xFFEAEAEA, 0xFFCFCFCF, 0x55999999, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0xAA999999, 0xFFE9E9E9, 0xFFE9E9E9, 0xFFE9E9E9, 0xFFB4B4B4, 0xFF999999, 0xFF999999, 0xFF999999, 0xFF999999, 0xFF999999, 0xFF999999, 0xFF999999, 0xFF999999, 0xFF999999, 0xFF999999, 0xFF999999, 0xFF999999, 0xFF999999, 0xFF999999, 0xFF999999, 0xFF999999, 0xFF9A9A9A, 0xFFD0D0D0, 0xFFE9E9E9, 0xFFE9E9E9, 0xFFCECECE, 0x55999999, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0xAA999999, 0xFFE8E8E8, 0xFFE8E8E8, 0xFFE8E8E8, 0xFFE8E8E8, 0xFFE8E8E8, 0xFFE8E8E8, 0xFFE8E8E8, 0xFFE8E8E8, 0xFFE8E8E8, 0xFFE8E8E8, 0xFFE8E8E8, 0xFFE8E8E8, 0xFFE8E8E8, 0xFFE8E8E8, 0xFFE8E8E8, 0xFFE8E8E8, 0xFFE8E8E8, 0xFFE8E8E8, 0xFFE8E8E8, 0xFFE8E8E8, 0xFFE8E8E8, 0xFFE8E8E8, 0xFFE8E8E8, 0xFFE8E8E8, 0xFFCDCDCD, 0x55999999, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0xAA999999, 0xFFE7E7E7, 0xFFE7E7E7, 0xFFE7E7E7, 0xFFE7E7E7, 0xFFE7E7E7, 0xFFE7E7E7, 0xFFE7E7E7, 0xFFE7E7E7, 0xFFE7E7E7, 0xFFE7E7E7, 0xFFE7E7E7, 0xFFE7E7E7, 0xFFE7E7E7, 0xFFE7E7E7, 0xFFE7E7E7, 0xFFE7E7E7, 0xFFE7E7E7, 0xFFE7E7E7, 0xFFE7E7E7, 0xFFE7E7E7, 0xFFE7E7E7, 0xFFE7E7E7, 0xFFE7E7E7, 0xFFE7E7E7, 0xFFCDCDCD, 0x55999999, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0xAA999999, 0xFFE6E6E6, 0xFFE6E6E6, 0xFFE6E6E6, 0xFFE6E6E6, 0xFFE6E6E6, 0xFFE6E6E6, 0xFFE6E6E6, 0xFFE6E6E6, 0xFFE6E6E6, 0xFFE6E6E6, 0xFFE6E6E6, 0xFFE6E6E6, 0xFFE6E6E6, 0xFFE6E6E6, 0xFFE6E6E6, 0xFFE6E6E6, 0xFFE6E6E6, 0xFFE6E6E6, 0xFFE6E6E6, 0xFFE6E6E6, 0xFFE6E6E6, 0xFFE6E6E6, 0xFFE6E6E6, 0xFFE6E6E6, 0xFFCCCCCC, 0x55999999, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0xAA999999, 0xFFE5E5E5, 0xFFE5E5E5, 0xFFE5E5E5, 0xFFE5E5E5, 0xFFE5E5E5, 0xFFE5E5E5, 0xFFE5E5E5, 0xFFE5E5E5, 0xFFE5E5E5, 0xFFE5E5E5, 0xFFE5E5E5, 0xFFE5E5E5, 0xFFE5E5E5, 0xFFE5E5E5, 0xFFE5E5E5, 0xFFE5E5E5, 0xFFE5E5E5, 0xFFE5E5E5, 0xFFE5E5E5, 0xFFE5E5E5, 0xFFE5E5E5, 0xFFE5E5E5, 0xFFE5E5E5, 0xFFE5E5E5, 0xFFCBCBCB, 0x55999999, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0xAA999999, 0xFFE4E4E4, 0xFFE4E4E4, 0xFFE4E4E4, 0xFFB2B2B2, 0xFF999999, 0xFF999999, 0xFF999999, 0xFF999999, 0xFF999999, 0xFF999999, 0xFF999999, 0xFF999999, 0xFF999999, 0xFF999999, 0xFF999999, 0xFF999999, 0xFF999999, 0xFF999999, 0xFF999999, 0xFF999999, 0xFF9A9A9A, 0xFFCCCCCC, 0xFFE4E4E4, 0xFFE4E4E4, 0xFFCBCBCB, 0x55999999, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0xAA999999, 0xFFE3E3E3, 0xFFE3E3E3, 0xFFE3E3E3, 0xFFD2D2D2, 0xFFCACACA, 0xFFCACACA, 0xFFCACACA, 0xFFCACACA, 0xFFCACACA, 0xFFCACACA, 0xFFCACACA, 0xFFCACACA, 0xFFCACACA, 0xFFCACACA, 0xFFCACACA, 0xFFCACACA, 0xFFCACACA, 0xFFCACACA, 0xFFCACACA, 0xFFB0BABD, 0xFFAEB9BC, 0xFFDADBDB, 0xFFABC1C8, 0xFFD9DDDE, 0xFFCACACA, 0x55999999, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0xAA999999, 0xFFE2E2E2, 0xFFE2E2E2, 0xFFE2E2E2, 0xFFE2E2E2, 0xFFE2E2E2, 0xFFE2E2E2, 0xFFE2E2E2, 0xFFE2E2E2, 0xFFE2E2E2, 0xFFE2E2E2, 0xFFE2E2E2, 0xFFE2E2E2, 0xFFE2E2E2, 0xFFE2E2E2, 0xFFE2E2E2, 0xFFE2E2E2, 0xFFDEE0E0, 0xFFBECFD4, 0xFFC5D1D4, 0xFF6CADC1, 0xFF53B4CE, 0xFF89B6C4, 0xFF35AAC8, 0xFFA8C3CC, 0xFFA6B9BE, 0x59758F96, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0xAA999999, 0xFFE1E1E1, 0xFFE1E1E1, 0xFFE1E1E1, 0xFFE1E1E1, 0xFFE1E1E1, 0xFFE1E1E1, 0xFFE1E1E1, 0xFFE1E1E1, 0xFFE1E1E1, 0xFFE1E1E1, 0xFFE1E1E1, 0xFFE1E1E1, 0xFFE1E1E1, 0xFFE1E1E1, 0xFFE1E1E1, 0xFFE1E1E1, 0xFFD2D7D9, 0xFF5CABC4, 0xFF4AB6D1, 0xFF35ACD0, 0xFF2ABAE5, 0xFF25B0D9, 0xFF28B6E3, 0xFF49ACC8, 0xFF3AACCB, 0x632385A4, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0xAA999999, 0xFFE0E0E0, 0xFFE0E0E0, 0xFFE0E0E0, 0xFFE0E0E0, 0xFFE0E0E0, 0xFFE0E0E0, 0xFFE0E0E0, 0xFFE0E0E0, 0xFFE0E0E0, 0xFFE0E0E0, 0xFFE0E0E0, 0xFFE0E0E0, 0xFFE0E0E0, 0xFFE0E0E0, 0xFFDEDFDF, 0xFFA7C0C9, 0xFF79B4C5, 0xFF3CA1C0, 0xFF29B3E0, 0xFF25B0DC, 0xFF5DC2E3, 0xFFB1E2F2, 0xFF59C2E3, 0xFF26B3DE, 0xFF26A8D2, 0xA41C8CAD, 0x661783A4, 0x180E6784,
0x00000000, 0x00000000, 0x00000000, 0xAA999999, 0xFFDFDFDF, 0xFFDFDFDF, 0xFFDFDFDF, 0xFFC0C0C0, 0xFFB0B0B0, 0xFFB0B0B0, 0xFFB0B0B0, 0xFFB0B0B0, 0xFFB0B0B0, 0xFFB0B0B0, 0xFFB0B0B0, 0xFFB0B0B0, 0xFFB0B0B0, 0xFFB0B0B0, 0xFFDEDEDE, 0xFF87AEBA, 0xFF24A7D1, 0xFF25ABD5, 0xFF25A8D1, 0xFF1EA4CF, 0xFF9BD7EA, 0xFFFFFFFF, 0xFF91D3E8, 0xFF23A6D0, 0xFF25A9D2, 0xFD26ACD4, 0xD11E94B8, 0x280D647F,
0x00000000, 0x00000000, 0x00000000, 0xAA999999, 0xFFDEDEDE, 0xFFDEDEDE, 0xFFDEDEDE, 0xFFBFBFBF, 0xFFB0B0B0, 0xFFB0B0B0, 0xFFB0B0B0, 0xFFB0B0B0, 0xFFB0B0B0, 0xFFB0B0B0, 0xFFB0B0B0, 0xFFB0B0B0, 0xFFB0B0B0, 0xFFB0B0B0, 0xFFBFCCD1, 0xFF85B3C2, 0xFF1F96BC, 0xFF229FC7, 0xFF229FC6, 0xFF1B9BC5, 0xFF95D1E4, 0xFFFFFFFF, 0xFF8DCDE2, 0xFF219DC6, 0xFF229FC6, 0xFF22A0C8, 0xBE1986A9, 0x46137696,
0x00000000, 0x00000000, 0x00000000, 0xAA999999, 0xFFDDDDDD, 0xFFDDDDDD, 0xFFDDDDDD, 0xFFDDDDDD, 0xFFDDDDDD, 0xFFDDDDDD, 0xFFDDDDDD, 0xFFDDDDDD, 0xFFDDDDDD, 0xFFDDDDDD, 0xFFDDDDDD, 0xFFDDDDDD, 0xFFDDDDDD, 0xFFDDDDDD, 0xFF77A5B4, 0xFF2795B9, 0xFF2099C0, 0xFF2097BD, 0xFF2097BD, 0xFF1A95BC, 0xFF8BC9DD, 0xFFFEFEFF, 0xFF7CC2D8, 0xFF1D96BC, 0xFF2097BD, 0xFF2097BE, 0xFB219BC1, 0xDE1780A1,
0x00000000, 0x00000000, 0x00000000, 0xAA999999, 0xFFDCDCDC, 0xFFDCDCDC, 0xFFDCDCDC, 0xFFDCDCDC, 0xFFDCDCDC, 0xFFDCDCDC, 0xFFDCDCDC, 0xFFDCDCDC, 0xFFDCDCDC, 0xFFDCDCDC, 0xFFDCDCDC, 0xFFDCDCDC, 0xFFDCDCDC, 0xFFDCDCDC, 0xFFCBD2D3, 0xFF5293A8, 0xFF1D8FB3, 0xFF1C8EB1, 0xFF1C8EB1, 0xFF198CB0, 0xFF77BAD0, 0xFFFCFDFE, 0xFF64B1CA, 0xFF178BAF, 0xFF1C8EB1, 0xFF1C8EB2, 0xF21984A6, 0x5E0F6884,
0x00000000, 0x00000000, 0x00000000, 0xAA999999, 0xFFDBDBDB, 0xFFDBDBDB, 0xFFDBDBDB, 0xFFDBDBDB, 0xFFDBDBDB, 0xFFDBDBDB, 0xFFDBDBDB, 0xFFDBDBDB, 0xFFDBDBDB, 0xFFDBDBDB, 0xFFDBDBDB, 0xFFDBDBDB, 0xFFDBDBDB, 0xFFDBDBDB, 0xFF85ABB8, 0xFF2789AA, 0xFF1B87A9, 0xFF1A85A7, 0xFF1A85A7, 0xFF1884A6, 0xFF69AEC5, 0xFFF9FCFD, 0xFF51A2BC, 0xFF1683A5, 0xFF1A85A7, 0xFF1A85A7, 0xFB1B88AB, 0xC0147695,
0x00000000, 0x00000000, 0x00000000, 0xAA999999, 0xFFDADADA, 0xFFDADADA, 0xFFDADADA, 0xFFDADADA, 0xFFDADADA, 0xFFDADADA, 0xFFDADADA, 0xFFDADADA, 0xFFDADADA, 0xFFDADADA, 0xFFDADADA, 0xFFDADADA, 0xFFDADADA, 0xFFDADADA, 0xFFAFC0C6, 0xFF5F95A6, 0xFF177998, 0xFF187C9D, 0xFF187C9C, 0xFF177B9C, 0xFF2C87A4, 0xFF75B0C3, 0xFF1E7F9F, 0xFF177B9C, 0xFF187C9C, 0xFF177D9D, 0xD7147190, 0x7C0F6682,
0x00000000, 0x00000000, 0x00000000, 0xAA999999, 0xFFDADADA, 0xFFDADADA, 0xFFDADADA, 0xFFDADADA, 0xFFDADADA, 0xFFDADADA, 0xFFDADADA, 0xFFDADADA, 0xFFDADADA, 0xFFDADADA, 0xFFDADADA, 0xFFDADADA, 0xFFDADADA, 0xFFDADADA, 0xFFDADADA, 0xFF94B1B9, 0xFF167695, 0xFF167695, 0xFF157593, 0xFF137492, 0xFF4E97AE, 0xFFA3CAD6, 0xFF4390A9, 0xFF147492, 0xFF157593, 0xFF177796, 0xBD126D8B, 0x190B5B75,
0x00000000, 0x00000000, 0x00000000, 0x91999999, 0xFFD2D2D2, 0xFFD9D9D9, 0xFFD9D9D9, 0xFFD9D9D9, 0xFFD9D9D9, 0xFFD9D9D9, 0xFFD9D9D9, 0xFFD9D9D9, 0xFFD9D9D9, 0xFFD9D9D9, 0xFFD9D9D9, 0xFFD9D9D9, 0xFFD9D9D9, 0xFFD9D9D9, 0xFFD6D7D8, 0xFF7FA4B0, 0xFF4D899B, 0xFF21718B, 0xFF136D8A, 0xFF0C6986, 0xFF7FB0BF, 0xFFE5EFF2, 0xFF78ABBB, 0xFF116C89, 0xFC136C88, 0xCA106682, 0x990F6580, 0x240B5E78,
0x00000000, 0x00000000, 0x00000000, 0x45999999, 0xFFBCBCBC, 0xFFD8D8D8, 0xFFD9D9D9, 0xFFD9D9D9, 0xFFD9D9D9, 0xFFD9D9D9, 0xFFD9D9D9, 0xFFD9D9D9, 0xFFD9D9D9, 0xFFD9D9D9, 0xFFD9D9D9, 0xFFD9D9D9, 0xFFD9D9D9, 0xFFD9D9D9, 0xFFD9D9D9, 0xFFD3D6D6, 0xFFBFC9CC, 0xFF3D7E93, 0xFF126681, 0xFF116682, 0xFF22728B, 0xFF44889D, 0xFF1F6F89, 0xF90F6480, 0xFC116681, 0x620D607A, 0x0A0A5A74, 0x020A5B75,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x7B9C9C9C, 0xD7B1B1B1, 0xFAC1C1C1, 0xFFC3C3C3, 0xFFC3C3C3, 0xFFC3C3C3, 0xFFC3C3C3, 0xFFC3C3C3, 0xFFC3C3C3, 0xFFC3C3C3, 0xFFC3C3C3, 0xFFC3C3C3, 0xFFC3C3C3, 0xFFC3C3C3, 0xFFC3C3C3, 0xFFC3C3C3, 0xFFBDBFC0, 0xFF819BA4, 0xFF96A8AD, 0xFF467C8E, 0xF220687F, 0xCB276A7F, 0xE90E607A, 0x520B5D77, 0x5F0B5D77, 0x2B0B5D77, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x07999999, 0x2D999999, 0x50999999, 0x55999999, 0x55999999, 0x55999999, 0x55999999, 0x55999999, 0x55999999, 0x55999999, 0x55999999, 0x55999999, 0x55999999, 0x55999999, 0x55999999, 0x55999999, 0x55999999, 0x55999999, 0x55999999, 0x72407283, 0x6626687D, 0x22467584, 0x800B5C76, 0x1A0A5B75, 0x00000000, 0x00000000, 0x00000000, 0x00000000
}
namespace {
// TODO: move this to external image files and zlib compress them into a source file as part of the build process
char const *const toolbar_icons_svg[] = {
// favourites star
u8"<?xml version='1.0' encoding='UTF-8' standalone='no'?>"
"<svg xmlns:svg='http://www.w3.org/2000/svg' xmlns='http://www.w3.org/2000/svg' version='1.1' height='104' width='104'>"
"<path fill='#ffef0f' stroke='#ffdf1f' stroke-width='8' stroke-linejoin='round' d='m 50,6 11,35 h 37 l -30,22 12,35 -30,-21 -30,21 12,-35 -30,-22 h 37 z' />"
"</svg>",
// save diskette
u8"<?xml version='1.0' encoding='UTF-8' standalone='no'?>"
"<svg xmlns:svg='http://www.w3.org/2000/svg' xmlns='http://www.w3.org/2000/svg' version='1.1' height='100' width='100'>"
"<path fill='#ffcf0f' d='m 0,3 a 3,3 0 0,1 3,-3 h 90 l 7,7 v 90 a 3,3 0 0,1 -3,3 h -94 a 3,3 0 0,1 -3,-3 z m 3,89 v 4 h 5 v -4 z m 89,0 v 4 h 5 v -4 z' />"
"<path fill='#ffbf1f' d='m 10,0 h 67 v 32 a 3,3 0 0,1 -3,3 h -61 a 3,3 0 0,1 -3,-3 z' />"
"<path fill='#b0b0b0' d='m 24,0 h 53 v 31 a 3,3 0 0,1 -3,3 h -47 a 3,3 0 0,1 -3,-3 z m 31,5 v 25 h 13 v -25 z' />"
"<path fill='#ffbf1f' d='m 10,47 a 3,3 0 0,1 3,-3 h 74 a 3,3 0 0,1 3,3 v 53 h -80 z' />"
"<path fill='#e7e7e7' d='m 11,48 a 3,3 0 0,1 3,-3 h 72 a 3,3 0 0,1 3,3 v 40 h -78 z' />"
"<path fill='#f71f1f' d='m 11,87 h 78 v 9 a 3,3 0 0,1 -3,3 h -72 a 3,3 0 0,1 -3,-3 z' />"
"</svg>",
// info
u8"<?xml version='1.0' encoding='UTF-8' standalone='no'?>"
"<svg xmlns:svg='http://www.w3.org/2000/svg' xmlns='http://www.w3.org/2000/svg' version='1.1' height='100' width='100'>"
"<circle cx='50' cy='50' r='47' fill='#001fff' stroke='#001bdf' stroke-width='6' />"
"<circle cx='50' cy='20' r='10' fill='#ffffff' />"
"<path fill='#ffffff' d='m 59,38 v 34 a 10,4 0 0,0 10,4 v 8 h -36 v -8 a 10,4 0 0,0 10,-4 v -23 a 8,4 0 0,0 -8,-4 v -6 z' />"
"</svg>",
// previous menu
u8"<?xml version='1.0' encoding='UTF-8' standalone='no'?>"
"<svg xmlns:svg='http://www.w3.org/2000/svg' xmlns='http://www.w3.org/2000/svg' version='1.1' height='100' width='100'>"
"<rect y='8' x='8' height='84' width='84' fill='#001bdf' stroke='#001bdf' stroke-width='16' stroke-linejoin='round' />"
"<rect y='10' x='10' height='80' width='80' fill='#001fff' stroke='#001fff' stroke-width='8' stroke-linejoin='round' />"
"<path fill='#ffffff' stroke='#ffffff' stroke-width='8' stroke-linejoin='round' d='m 16,46 28,-28 v 16 q 40,12 40,48 q -10,-24 -40,-24 v 16 z' />"
"</svg>",
// exit
u8"<?xml version='1.0' encoding='UTF-8' standalone='no'?>"
"<svg xmlns:svg='http://www.w3.org/2000/svg' xmlns='http://www.w3.org/2000/svg' version='1.1' height='100' width='100'>"
"<rect y='8' x='8' height='84' width='84' fill='#df0000' stroke='#df0000' stroke-width='16' stroke-linejoin='round' />"
"<rect y='10' x='10' height='80' width='80' fill='#ff0000' stroke='#ff0000' stroke-width='8' stroke-linejoin='round' />"
"<path fill='#ffffff' stroke='#ffffff' stroke-width='8' stroke-linejoin='round' d='m 16,24 8,-8 26,26 26,-26 8,8 -26,26 26,26 -8,8 -26,-26 -26,26 -8,-8 26,-26 z' />"
"</svg>" };
enum
{
TOOLBAR_BITMAP_FAVORITE,
TOOLBAR_BITMAP_SAVE,
TOOLBAR_BITMAP_INFO,
TOOLBAR_BITMAP_PREVMENU,
TOOLBAR_BITMAP_EXIT
};
#define UI_TOOLBAR_BUTTONS (std::size(toolbar_bitmap_bmp))
constexpr size_t UI_TOOLBAR_BUTTONS = std::size(toolbar_icons_svg);
} // anonymous namespace
} // namespace ui
#endif // MAME_FRONTEND_UI_TOOLBAR_IPP

View File

@ -2042,14 +2042,18 @@ ui_software_info::ui_software_info(
, alttitles()
, available(false)
{
// show the list/item here
infotext.append(_("swlist-info", "Software list/item"));
infotext.append(1, '\n');
infotext.append(listname);
infotext.append(1, ':');
infotext.append(shortname);
info.reserve(sw.info().size());
bool firstinfo(true);
for (software_info_item const &feature : sw.info())
{
// add info for the internal UI, localising recognised
if (!firstinfo)
infotext.append(2, '\n');
firstinfo = false;
// add info for the internal UI, localising recognised keys
infotext.append(2, '\n');
auto const found = std::lower_bound(
std::begin(ui::SOFTWARE_INFO_NAMES),
std::end(ui::SOFTWARE_INFO_NAMES),

View File

@ -377,6 +377,7 @@ enum
HOVER_B_FAV,
HOVER_B_EXPORT,
HOVER_B_DATS,
HOVER_BACKTRACK,
HOVER_RPANEL_ARROW,
HOVER_LPANEL_ARROW,
HOVER_FILTER_FIRST,