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