Example #1
0
IVolume* CreateVolumeFromFilename(const std::string& _rFilename, u32 _PartitionGroup, u32 _VolumeNum)
{
	std::unique_ptr<IBlobReader> reader(CreateBlobReader(_rFilename));
	if (reader == nullptr)
		return nullptr;

	switch (GetDiscType(*reader))
	{
		case DISC_TYPE_WII:
		case DISC_TYPE_GC:
			return new CVolumeGC(std::move(reader));

		case DISC_TYPE_WAD:
			return new CVolumeWAD(std::move(reader));

		case DISC_TYPE_WII_CONTAINER:
			return CreateVolumeFromCryptedWiiImage(std::move(reader), _PartitionGroup, 0, _VolumeNum);

		case DISC_TYPE_UNK:
		default:
			std::string Filename, ext;
			SplitPath(_rFilename, nullptr, &Filename, &ext);
			Filename += ext;
			NOTICE_LOG(DISCIO, "%s does not have the Magic word for a gcm, wiidisc or wad file\n"
						"Set Log Verbosity to Warning and attempt to load the game again to view the values", Filename.c_str());
	}

	return nullptr;
}
Example #2
0
std::unique_ptr<Volume> CreateVolumeFromFilename(const std::string& filename)
{
  std::unique_ptr<BlobReader> reader(CreateBlobReader(filename));
  if (reader == nullptr)
    return nullptr;

  // Check for Wii
  const std::optional<u32> wii_magic = reader->ReadSwapped<u32>(0x18);
  if (wii_magic == u32(0x5D1C9EA3))
    return std::make_unique<VolumeWii>(std::move(reader));

  // Check for WAD
  // 0x206962 for boot2 wads
  const std::optional<u32> wad_magic = reader->ReadSwapped<u32>(0x02);
  if (wad_magic == u32(0x00204973) || wad_magic == u32(0x00206962))
    return std::make_unique<VolumeWAD>(std::move(reader));

  // Check for GC
  const std::optional<u32> gc_magic = reader->ReadSwapped<u32>(0x1C);
  if (gc_magic == u32(0xC2339F3D))
    return std::make_unique<VolumeGC>(std::move(reader));

  // No known magic words found
  return nullptr;
}
Example #3
0
WiiWAD::WiiWAD(const std::string& name)
{
  std::unique_ptr<IBlobReader> reader(CreateBlobReader(name));
  if (reader == nullptr || File::IsDirectory(name))
  {
    m_valid = false;
    return;
  }

  m_valid = ParseWAD(*reader);
}
Example #4
0
IVolume* CreateVolumeFromFilename(const std::string& _rFilename, u32 _PartitionGroup, u32 _VolumeNum)
{
	IBlobReader* pReader = CreateBlobReader(_rFilename.c_str());
	if (pReader == NULL)
		return NULL;

	switch (GetDiscType(*pReader))
	{
		case DISC_TYPE_WII:
		case DISC_TYPE_GC:
			return new CVolumeGC(pReader);

		case DISC_TYPE_WAD:
			return new CVolumeWAD(pReader);

		case DISC_TYPE_WII_CONTAINER:
		{
			u8 region;
			pReader->Read(0x3,1,&region);

			IVolume* pVolume = CreateVolumeFromCryptedWiiImage(*pReader, _PartitionGroup, 0, _VolumeNum, region == 'K');

			if (pVolume == NULL)
			{
				delete pReader;
			}

			return pVolume;
		}
			break;

		case DISC_TYPE_UNK:
		default:
			std::string Filename, ext;
			SplitPath(_rFilename, NULL, &Filename, &ext);
			Filename += ext;
			NOTICE_LOG(DISCIO, "%s does not have the Magic word for a gcm, wiidisc or wad file\n"
						"Set Log Verbosity to Warning and attempt to load the game again to view the values", Filename.c_str());
			delete pReader;
			return NULL;
	}

	// unreachable code
	return NULL;
}