summaryrefslogtreecommitdiffstatshomepage
path: root/src/frontend/mame/ui
diff options
context:
space:
mode:
author Vas Crabb <vas@vastheman.com>2021-10-11 07:13:50 +1100
committer Vas Crabb <vas@vastheman.com>2021-10-11 07:13:50 +1100
commitfc906d7a1783f93578cedd1c162015d6182d8e3b (patch)
tree4b9b2d8ea322f436f2d4a11446a09cbb0aea2a9c /src/frontend/mame/ui
parent1eb49fc86d29be70d5177ecf68d20db27b46ee73 (diff)
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.
Diffstat (limited to 'src/frontend/mame/ui')
-rw-r--r--src/frontend/mame/ui/inifile.cpp13
-rw-r--r--src/frontend/mame/ui/mainmenu.cpp50
-rw-r--r--src/frontend/mame/ui/menu.cpp37
-rw-r--r--src/frontend/mame/ui/menu.h34
-rw-r--r--src/frontend/mame/ui/selgame.cpp195
-rw-r--r--src/frontend/mame/ui/selgame.h3
-rw-r--r--src/frontend/mame/ui/selmenu.cpp472
-rw-r--r--src/frontend/mame/ui/selmenu.h16
-rw-r--r--src/frontend/mame/ui/selsoft.cpp5
-rw-r--r--src/frontend/mame/ui/selsoft.h2
-rw-r--r--src/frontend/mame/ui/simpleselgame.cpp30
-rw-r--r--src/frontend/mame/ui/simpleselgame.h1
-rw-r--r--src/frontend/mame/ui/toolbar.ipp156
-rw-r--r--src/frontend/mame/ui/utils.cpp14
-rw-r--r--src/frontend/mame/ui/utils.h1
15 files changed, 522 insertions, 507 deletions
diff --git a/src/frontend/mame/ui/inifile.cpp b/src/frontend/mame/ui/inifile.cpp
index 317df1c637a..487c2954de9 100644
--- a/src/frontend/mame/ui/inifile.cpp
+++ b/src/frontend/mame/ui/inifile.cpp
@@ -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();
diff --git a/src/frontend/mame/ui/mainmenu.cpp b/src/frontend/mame/ui/mainmenu.cpp
index 32c88a24ca0..32240167318 100644
--- a/src/frontend/mame/ui/mainmenu.cpp
+++ b/src/frontend/mame/ui/mainmenu.cpp
@@ -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");
}
diff --git a/src/frontend/mame/ui/menu.cpp b/src/frontend/mame/ui/menu.cpp
index b785deea72b..36ebf0c4d52 100644
--- a/src/frontend/mame/ui/menu.cpp
+++ b/src/frontend/mame/ui/menu.cpp
@@ -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);
diff --git a/src/frontend/mame/ui/menu.h b/src/frontend/mame/ui/menu.h
index 2d8d5e9173c..b509bff49ed 100644
--- a/src/frontend/mame/ui/menu.h
+++ b/src/frontend/mame/ui/menu.h
@@ -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
diff --git a/src/frontend/mame/ui/selgame.cpp b/src/frontend/mame/ui/selgame.cpp
index b940aac2705..76b595e0053 100644
--- a/src/frontend/mame/ui/selgame.cpp
+++ b/src/frontend/mame/ui/selgame.cpp
@@ -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
diff --git a/src/frontend/mame/ui/selgame.h b/src/frontend/mame/ui/selgame.h
index d459c0b53e0..23127fa8c14 100644
--- a/src/frontend/mame/ui/selgame.h
+++ b/src/frontend/mame/ui/selgame.h
@@ -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);
diff --git a/src/frontend/mame/ui/selmenu.cpp b/src/frontend/mame/ui/selmenu.cpp
index a8ee5faa263..84d9a3620b7 100644
--- a/src/frontend/mame/ui/selmenu.cpp
+++ b/src/frontend/mame/ui/selmenu.cpp
@@ -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,42 +454,65 @@ 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);
+ m_toolbar_bitmaps.resize(UI_TOOLBAR_BUTTONS);
+ m_toolbar_textures.reserve(UI_TOOLBAR_BUTTONS);
+}
- 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();
- }
- }
+menu_select_launch::cache::~cache()
+{
}
-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);
+ }
+ }
}
@@ -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());
-
- auto const num_valid(std::count_if(std::begin(t_bitmap), std::end(t_bitmap), [](bitmap_argb32 const &e) { return e.valid(); }));
-
- 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)
- {
- 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());
- }
-
- 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;
+ // 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);
+
+ // 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);
+
+ // add backtrack button
+ rgb_t color(0xefefefef);
+ if (mouse_in_rect(backtrack_pos, y1, x2, y2))
+ {
+ 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));
+
+ // 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
diff --git a/src/frontend/mame/ui/selmenu.h b/src/frontend/mame/ui/selmenu.h
index 040c4e991fb..399b3c1544b 100644
--- a/src/frontend/mame/ui/selmenu.h
+++ b/src/frontend/mame/ui/selmenu.h
@@ -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;
diff --git a/src/frontend/mame/ui/selsoft.cpp b/src/frontend/mame/ui/selsoft.cpp
index 90943922cda..7e8010e9fa5 100644
--- a/src/frontend/mame/ui/selsoft.cpp
+++ b/src/frontend/mame/ui/selsoft.cpp
@@ -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)
{
diff --git a/src/frontend/mame/ui/selsoft.h b/src/frontend/mame/ui/selsoft.h
index ebf3e77df89..370bcd0c6f1 100644
--- a/src/frontend/mame/ui/selsoft.h
+++ b/src/frontend/mame/ui/selsoft.h
@@ -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;
diff --git a/src/frontend/mame/ui/simpleselgame.cpp b/src/frontend/mame/ui/simpleselgame.cpp
index d434db8b572..130434a74cf 100644
--- a/src/frontend/mame/ui/simpleselgame.cpp
+++ b/src/frontend/mame/ui/simpleselgame.cpp
@@ -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
diff --git a/src/frontend/mame/ui/simpleselgame.h b/src/frontend/mame/ui/simpleselgame.h
index 96383c3b458..e56dac8185b 100644
--- a/src/frontend/mame/ui/simpleselgame.h
+++ b/src/frontend/mame/ui/simpleselgame.h
@@ -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;
diff --git a/src/frontend/mame/ui/toolbar.ipp b/src/frontend/mame/ui/toolbar.ipp
index 1822c6daef6..16c3bfdff69 100644
--- a/src/frontend/mame/ui/toolbar.ipp
+++ b/src/frontend/mame/ui/toolbar.ipp
@@ -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
- }
+// 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
diff --git a/src/frontend/mame/ui/utils.cpp b/src/frontend/mame/ui/utils.cpp
index dead21e8184..c8d65fbe665 100644
--- a/src/frontend/mame/ui/utils.cpp
+++ b/src/frontend/mame/ui/utils.cpp
@@ -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),
diff --git a/src/frontend/mame/ui/utils.h b/src/frontend/mame/ui/utils.h
index 4ef91eb5e2e..1ad8c1e373a 100644
--- a/src/frontend/mame/ui/utils.h
+++ b/src/frontend/mame/ui/utils.h
@@ -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,