Exemplo n.º 1
0
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;
	}
}
Exemplo n.º 2
0
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;
	}
}
Exemplo n.º 3
0
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();
}