void ui_menu_control_device_image::load_software_part() { std::string temp_name = std::string(sld->list_name()).append(":").append(swi->shortname()).append(":").append(swp->name()); driver_enumerator drivlist(machine().options(), machine().options().system_name()); drivlist.next(); media_auditor auditor(drivlist); media_auditor::summary summary = auditor.audit_software(sld->list_name(), (software_info *)swi, AUDIT_VALIDATE_FAST); // if everything looks good, load software if (summary == media_auditor::CORRECT || summary == media_auditor::BEST_AVAILABLE || summary == media_auditor::NONE_NEEDED) hook_load(temp_name, true); else { popmessage("The selected game is missing one or more required ROM or CHD images. Please select a different game."); state = SELECT_SOFTLIST; } }
void menu_control_device_image::load_software_part() { std::string temp_name = string_format("%s:%s:%s", m_sld->list_name(), m_swi->shortname(), m_swp->name()); driver_enumerator drivlist(machine().options(), machine().options().system_name()); drivlist.next(); media_auditor auditor(drivlist); media_auditor::summary summary = auditor.audit_software(m_sld->list_name(), (software_info *)m_swi, AUDIT_VALIDATE_FAST); // if everything looks good, load software if (summary == media_auditor::CORRECT || summary == media_auditor::BEST_AVAILABLE || summary == media_auditor::NONE_NEEDED) { m_image.load_software(temp_name); stack_pop(); } else { machine().popmessage(_("The software selected is missing one or more required ROM or CHD images. Please select a different one.")); m_state = SELECT_SOFTLIST; } }
std::string machine_info::warnings_string() { constexpr UINT32 warning_flags = ( MACHINE_NOT_WORKING | MACHINE_UNEMULATED_PROTECTION | MACHINE_MECHANICAL | MACHINE_WRONG_COLORS | MACHINE_IMPERFECT_COLORS | MACHINE_REQUIRES_ARTWORK | MACHINE_NO_SOUND | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_KEYBOARD | MACHINE_NO_COCKTAIL | MACHINE_IS_INCOMPLETE | MACHINE_NO_SOUND_HW ); // if no warnings, nothing to return if (m_machine.rom_load().warnings() == 0 && m_machine.rom_load().knownbad() == 0 && !(m_machine.system().flags & warning_flags) && m_machine.rom_load().software_load_warnings_message().length() == 0) return std::string(); std::ostringstream buf; // add a warning if any ROMs were loaded with warnings if (m_machine.rom_load().warnings() > 0) { buf << _("One or more ROMs/CHDs for this machine are incorrect. The machine may not run correctly.\n"); if (m_machine.system().flags & warning_flags) buf << "\n"; } if (m_machine.rom_load().software_load_warnings_message().length()>0) { buf << m_machine.rom_load().software_load_warnings_message(); if (m_machine.system().flags & warning_flags) buf << "\n"; } // if we have at least one warning flag, print the general header if ((m_machine.system().flags & warning_flags) || m_machine.rom_load().knownbad() > 0) { buf << _("There are known problems with this machine\n\n"); // add a warning if any ROMs are flagged BAD_DUMP/NO_DUMP if (m_machine.rom_load().knownbad() > 0) { buf << _("One or more ROMs/CHDs for this machine have not been correctly dumped.\n"); } // add one line per warning flag if (m_machine.system().flags & MACHINE_IMPERFECT_KEYBOARD) buf << _("The keyboard emulation may not be 100% accurate.\n"); if (m_machine.system().flags & MACHINE_IMPERFECT_COLORS) buf << _("The colors aren't 100% accurate.\n"); if (m_machine.system().flags & MACHINE_WRONG_COLORS) buf << _("The colors are completely wrong.\n"); if (m_machine.system().flags & MACHINE_IMPERFECT_GRAPHICS) buf << _("The video emulation isn't 100% accurate.\n"); if (m_machine.system().flags & MACHINE_IMPERFECT_SOUND) buf << _("The sound emulation isn't 100% accurate.\n"); if (m_machine.system().flags & MACHINE_NO_SOUND) { buf << _("The machine lacks sound.\n"); } if (m_machine.system().flags & MACHINE_NO_COCKTAIL) buf << _("Screen flipping in cocktail mode is not supported.\n"); // check if external artwork is present before displaying this warning? if (m_machine.system().flags & MACHINE_REQUIRES_ARTWORK) { buf << _("The machine requires external artwork files\n"); } if (m_machine.system().flags & MACHINE_IS_INCOMPLETE ) { buf << _("This machine was never completed. It may exhibit strange behavior or missing elements that are not bugs in the emulation.\n"); } if (m_machine.system().flags & MACHINE_NO_SOUND_HW ) { buf << _("This machine has no sound hardware, MAME will produce no sounds, this is expected behaviour.\n"); } // if there's a NOT WORKING, UNEMULATED PROTECTION or GAME MECHANICAL warning, make it stronger if (m_machine.system().flags & (MACHINE_NOT_WORKING | MACHINE_UNEMULATED_PROTECTION | MACHINE_MECHANICAL)) { // add the strings for these warnings if (m_machine.system().flags & MACHINE_UNEMULATED_PROTECTION) { buf << _("The machine has protection which isn't fully emulated.\n"); } if (m_machine.system().flags & MACHINE_NOT_WORKING) { buf << _("\nTHIS MACHINE DOESN'T WORK. The emulation for this machine is not yet complete. " "There is nothing you can do to fix this problem except wait for the developers to improve the emulation.\n"); } if (m_machine.system().flags & MACHINE_MECHANICAL) { buf << _("\nCertain elements of this machine cannot be emulated as it requires actual physical interaction or consists of mechanical devices. " "It is not possible to fully play this machine.\n"); } // find the parent of this driver driver_enumerator drivlist(m_machine.options()); int maindrv = drivlist.find(m_machine.system()); int clone_of = drivlist.non_bios_clone(maindrv); if (clone_of != -1) maindrv = clone_of; // scan the driver list for any working clones and add them bool foundworking = false; while (drivlist.next()) if (drivlist.current() == maindrv || drivlist.clone() == maindrv) if ((drivlist.driver().flags & (MACHINE_NOT_WORKING | MACHINE_UNEMULATED_PROTECTION | MACHINE_MECHANICAL)) == 0) { // this one works, add a header and display the name of the clone if (!foundworking) { buf << _("\n\nThere are working clones of this machine: "); } else buf << ", "; buf << drivlist.driver().name; foundworking = true; } if (foundworking) buf << "\n"; } } // add the 'press OK' string buf << _("\n\nPress any key to continue"); return buf.str(); }