summaryrefslogtreecommitdiff
path: root/Source/Core/DiscIO/VolumeCommon.cpp
diff options
context:
space:
mode:
authorJosJuice <josjuice@gmail.com>2015-04-10 22:10:49 +0200
committerJosJuice <josjuice@gmail.com>2015-04-28 23:44:29 +0200
commitee694e327ada8c42949a3907d6fa222f73f276b0 (patch)
tree2165a710df95adc3f64f64f73cbfc0db8846515c /Source/Core/DiscIO/VolumeCommon.cpp
parent235ecfbed71986f0be2ecf469a10e1105dcb3c96 (diff)
Get rid of banner loaders and move their functionality to volumes
Having some data available in banner loaders and some other data data available in volumes gets messy, especially with GetNames(), which is available in both but returns different results depending on which one is used. This change drops support for reading names and descriptions from Wii save data.
Diffstat (limited to 'Source/Core/DiscIO/VolumeCommon.cpp')
-rw-r--r--Source/Core/DiscIO/VolumeCommon.cpp55
1 files changed, 45 insertions, 10 deletions
diff --git a/Source/Core/DiscIO/VolumeCommon.cpp b/Source/Core/DiscIO/VolumeCommon.cpp
index 1728e78732..e2c3117170 100644
--- a/Source/Core/DiscIO/VolumeCommon.cpp
+++ b/Source/Core/DiscIO/VolumeCommon.cpp
@@ -4,15 +4,59 @@
#include <map>
#include <string>
+#include <utility>
#include <vector>
+#include "Common/ColorUtil.h"
+#include "Common/CommonFuncs.h"
#include "Common/CommonTypes.h"
+#include "Common/FileUtil.h"
+#include "Common/StringUtil.h"
#include "Common/Logging/Log.h"
#include "DiscIO/Volume.h"
-// Increment CACHE_REVISION if the code below is modified (ISOFile.cpp & GameFile.cpp)
namespace DiscIO
{
+
+static const unsigned int WII_BANNER_WIDTH = 192;
+static const unsigned int WII_BANNER_HEIGHT = 64;
+static const unsigned int WII_BANNER_SIZE = WII_BANNER_WIDTH * WII_BANNER_HEIGHT * 2;
+static const unsigned int WII_BANNER_OFFSET = 0xA0;
+
+std::vector<u32> IVolume::GetBanner(int* width, int* height) const
+{
+ *width = 0;
+ *height = 0;
+
+ u64 TitleID = 0;
+ GetTitleID((u8*)&TitleID);
+ TitleID = Common::swap64(TitleID);
+
+ std::string file_name = StringFromFormat("%stitle/%08x/%08x/data/banner.bin",
+ File::GetUserPath(D_WIIUSER_IDX).c_str(), (u32)(TitleID >> 32), (u32)TitleID);
+ if (!File::Exists(file_name))
+ return std::vector<u32>();
+
+ if (File::GetSize(file_name) < WII_BANNER_OFFSET + WII_BANNER_SIZE)
+ return std::vector<u32>();
+
+ File::IOFile file(file_name, "rb");
+ if (!file.Seek(WII_BANNER_OFFSET, SEEK_SET))
+ return std::vector<u32>();
+
+ std::vector<u8> banner_file(WII_BANNER_SIZE);
+ if (!file.ReadBytes(banner_file.data(), banner_file.size()))
+ return std::vector<u32>();
+
+ std::vector<u32> image_buffer(WII_BANNER_WIDTH * WII_BANNER_HEIGHT);
+ ColorUtil::decode5A3image(image_buffer.data(), (u16*)banner_file.data(), WII_BANNER_WIDTH, WII_BANNER_HEIGHT);
+
+ *width = WII_BANNER_WIDTH;
+ *height = WII_BANNER_HEIGHT;
+ return image_buffer;
+}
+
+// Increment CACHE_REVISION if the code below is modified (ISOFile.cpp & GameFile.cpp)
IVolume::ECountry CountrySwitch(u8 country_code)
{
switch (country_code)
@@ -99,13 +143,4 @@ u8 GetSysMenuRegion(u16 _TitleVersion)
}
}
-std::string IVolume::GetName() const
-{
- auto names = GetNames();
- if (names.empty())
- return "";
- else
- return names.cbegin()->second;
-}
-
}