diff options
| author | Jules Blok <jules.blok@gmail.com> | 2015-06-10 00:00:12 +0200 |
|---|---|---|
| committer | Jules Blok <jules.blok@gmail.com> | 2015-06-10 00:00:12 +0200 |
| commit | 7dfced21a2e5aac7195e0e1ad76468e30306766b (patch) | |
| tree | bd671b639d3d911460b767caabad8fc8a759a6bf /Source/Core/DiscIO/VolumeCommon.cpp | |
| parent | c25be031fc1031d795157d8344b87b7841145197 (diff) | |
| parent | 7b0a65e295c784f9d573f2ef52d4e2a7b9bb2889 (diff) | |
Merge branch 'master' into stable
Diffstat (limited to 'Source/Core/DiscIO/VolumeCommon.cpp')
| -rw-r--r-- | Source/Core/DiscIO/VolumeCommon.cpp | 569 |
1 files changed, 569 insertions, 0 deletions
diff --git a/Source/Core/DiscIO/VolumeCommon.cpp b/Source/Core/DiscIO/VolumeCommon.cpp new file mode 100644 index 0000000000..f5ceac8b0f --- /dev/null +++ b/Source/Core/DiscIO/VolumeCommon.cpp @@ -0,0 +1,569 @@ +// Copyright 2009 Dolphin Emulator Project +// Licensed under GPLv2+ +// Refer to the license.txt file included. + +#include <algorithm> +#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" + +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("%s/title/%08x/%08x/data/banner.bin", + File::GetUserPath(D_WIIROOT_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; +} + +std::map<IVolume::ELanguage, std::string> IVolume::ReadWiiNames(const std::vector<u8>& data) +{ + std::map<IVolume::ELanguage, std::string> names; + for (size_t i = 0; i < NUMBER_OF_LANGUAGES; ++i) + { + size_t name_start = NAME_BYTES_LENGTH * i; + size_t name_end = name_start + NAME_BYTES_LENGTH; + if (data.size() >= name_end) + { + u16* temp = (u16*)(data.data() + name_start); + std::wstring out_temp(NAME_STRING_LENGTH, '\0'); + std::transform(temp, temp + out_temp.size(), out_temp.begin(), (u16(&)(u16))Common::swap16); + out_temp.erase(std::find(out_temp.begin(), out_temp.end(), 0x00), out_temp.end()); + std::string name = UTF16ToUTF8(out_temp); + if (!name.empty()) + names[(IVolume::ELanguage)i] = name; + } + } + return names; +} + +// Increment CACHE_REVISION if the code below is modified (ISOFile.cpp & GameFile.cpp) +IVolume::ECountry CountrySwitch(u8 country_code) +{ + switch (country_code) + { + // Region free - Uses European flag as placeholder + case 'A': + return IVolume::COUNTRY_WORLD; + + // PAL + case 'D': + return IVolume::COUNTRY_GERMANY; + + case 'X': // Used by a couple PAL games + case 'Y': // German, French + case 'L': // Japanese import to PAL regions + case 'M': // Japanese import to PAL regions + case 'P': + return IVolume::COUNTRY_EUROPE; + + case 'U': + return IVolume::COUNTRY_AUSTRALIA; + + case 'F': + return IVolume::COUNTRY_FRANCE; + + case 'I': + return IVolume::COUNTRY_ITALY; + + case 'H': + return IVolume::COUNTRY_NETHERLANDS; + + case 'R': + return IVolume::COUNTRY_RUSSIA; + + case 'S': + return IVolume::COUNTRY_SPAIN; + + // NTSC + case 'E': + case 'N': // Japanese import to USA and other NTSC regions + case 'Z': // Prince of Persia - The Forgotten Sands (Wii) + case 'B': // Ufouria: The Saga (Virtual Console) + return IVolume::COUNTRY_USA; + + case 'J': + return IVolume::COUNTRY_JAPAN; + + case 'K': + case 'Q': // Korea with Japanese language + case 'T': // Korea with English language + return IVolume::COUNTRY_KOREA; + + case 'W': + return IVolume::COUNTRY_TAIWAN; + + default: + if (country_code > 'A') // Silently ignore IOS wads + WARN_LOG(DISCIO, "Unknown Country Code! %c", country_code); + return IVolume::COUNTRY_UNKNOWN; + } +} + +u8 GetSysMenuRegion(u16 _TitleVersion) +{ + switch (_TitleVersion) + { + case 128: case 192: case 224: case 256: + case 288: case 352: case 384: case 416: + case 448: case 480: case 512: + return 'J'; + case 97: case 193: case 225: case 257: + case 289: case 353: case 385: case 417: + case 449: case 481: case 513: + return 'E'; + case 130: case 162: case 194: case 226: + case 258: case 290: case 354: case 386: + case 418: case 450: case 482: case 514: + return 'P'; + case 326: case 390: case 454: case 486: + case 518: + return 'K'; + default: + return 'A'; + } +} + +std::string GetCompanyFromID(const std::string& company_id) +{ + static const std::map<std::string, std::string> companies = + { + { "01", "Nintendo" }, + { "02", "Rocket Games / Ajinomoto" }, + { "03", "Imagineer-Zoom" }, + { "04", "Gray Matter" }, + { "05", "Zamuse" }, + { "06", "Falcom" }, + { "07", "Enix" }, + { "08", "Capcom" }, + { "09", "Hot B Co." }, + { "0A", "Jaleco" }, + { "0B", "Coconuts Japan" }, + { "0C", "Coconuts Japan / GX Media" }, + { "0D", "Micronet" }, + { "0E", "Technos" }, + { "0F", "Mebio Software" }, + { "0G", "Shouei System" }, + { "0H", "Starfish" }, + { "0J", "Mitsui Fudosan / Dentsu" }, + { "0L", "Warashi Inc." }, + { "0N", "Nowpro" }, + { "0P", "Game Village" }, + { "0Q", "IE Institute" }, + { "12", "Infocom" }, + { "13", "Electronic Arts Japan" }, + { "15", "Cobra Team" }, + { "16", "Human / Field" }, + { "17", "KOEI" }, + { "18", "Hudson Soft" }, + { "19", "S.C.P." }, + { "1A", "Yanoman" }, + { "1C", "Tecmo Products" }, + { "1D", "Japan Glary Business" }, + { "1E", "Forum / OpenSystem" }, + { "1F", "Virgin Games (Japan)" }, + { "1G", "SMDE" }, + { "1J", "Daikokudenki" }, + { "1P", "Creatures Inc." }, + { "1Q", "TDK Deep Impresion" }, + { "20", "Zoo" }, + { "21", "Sunsoft / Tokai Engineering" }, + { "22", "Planning Office Wada / VR1 Japan" }, + { "23", "Micro World" }, + { "25", "San-X" }, + { "26", "Enix" }, + { "27", "Loriciel / Electro Brain" }, + { "28", "Kemco Japan" }, + { "29", "Seta" }, + { "2A", "Culture Brain" }, + { "2C", "Palsoft" }, + { "2D", "Visit Co., Ltd." }, + { "2E", "Intec" }, + { "2F", "System Sacom" }, + { "2G", "Poppo" }, + { "2H", "Ubisoft Japan" }, + { "2J", "Media Works" }, + { "2K", "NEC InterChannel" }, + { "2L", "Tam" }, + { "2M", "Jordan" }, + { "2N", "Smilesoft / Rocket" }, + { "2Q", "Mediakite" }, + { "30", "Viacom" }, + { "31", "Carrozzeria" }, + { "32", "Dynamic" }, + { "34", "Magifact" }, + { "35", "Hect" }, + { "36", "Codemasters" }, + { "37", "Taito / GAGA Communications" }, + { "38", "Laguna" }, + { "39", "Telstar / Event / Taito " }, + { "3B", "Arcade Zone Ltd." }, + { "3C", "Entertainment International / Empire Software" }, + { "3D", "Loriciel" }, + { "3E", "Gremlin Graphics" }, + { "3F", "K. Amusement Leasing Co." }, + { "40", "Seika Corp." }, + { "41", "Ubisoft Entertainment" }, + { "42", "Sunsoft US" }, + { "44", "Life Fitness" }, + { "46", "System 3" }, + { "47", "Spectrum Holobyte" }, + { "49", "IREM" }, + { "4B", "Raya Systems" }, + { "4C", "Renovation Products" }, + { "4D", "Malibu Games" }, + { "4F", "Eidos" }, + { "4G", "Playmates Interactive" }, + { "4J", "Fox Interactive" }, + { "4K", "Time Warner Interactive" }, + { "4Q", "Disney Interactive" }, + { "4S", "Black Pearl" }, + { "4U", "Advanced Productions" }, + { "4X", "GT Interactive" }, + { "4Y", "Rare" }, + { "4Z", "Crave Entertainment" }, + { "50", "Absolute Entertainment" }, + { "51", "Acclaim" }, + { "52", "Activision" }, + { "53", "American Sammy" }, + { "54", "Take 2 Interactive / GameTek" }, + { "55", "Hi Tech" }, + { "56", "LJN Ltd." }, + { "58", "Mattel" }, + { "5A", "Mindscape / Red Orb Entertainment" }, + { "5B", "Romstar" }, + { "5C", "Taxan" }, + { "5D", "Midway / Tradewest" }, + { "5F", "American Softworks" }, + { "5G", "Majesco Sales Inc." }, + { "5H", "3DO" }, + { "5K", "Hasbro" }, + { "5L", "NewKidCo" }, + { "5M", "Telegames" }, + { "5N", "Metro3D" }, + { "5P", "Vatical Entertainment" }, + { "5Q", "LEGO Media" }, + { "5S", "Xicat Interactive" }, + { "5T", "Cryo Interactive" }, + { "5W", "Red Storm Entertainment" }, + { "5X", "Microids" }, + { "5Z", "Data Design / Conspiracy / Swing" }, + { "60", "Titus" }, + { "61", "Virgin Interactive" }, + { "62", "Maxis" }, + { "64", "LucasArts Entertainment" }, + { "67", "Ocean" }, + { "68", "Bethesda Softworks" }, + { "69", "Electronic Arts" }, + { "6B", "Laser Beam" }, + { "6E", "Elite Systems" }, + { "6F", "Electro Brain" }, + { "6G", "The Learning Company" }, + { "6H", "BBC" }, + { "6J", "Software 2000" }, + { "6K", "UFO Interactive Games" }, + { "6L", "BAM! Entertainment" }, + { "6M", "Studio 3" }, + { "6Q", "Classified Games" }, + { "6S", "TDK Mediactive" }, + { "6U", "DreamCatcher" }, + { "6V", "JoWood Produtions" }, + { "6W", "Sega" }, + { "6X", "Wannado Edition" }, + { "6Y", "LSP (Light & Shadow Prod.)" }, + { "6Z", "ITE Media" }, + { "70", "Atari (Infogrames)" }, + { "71", "Interplay" }, + { "72", "JVC (US)" }, + { "73", "Parker Brothers" }, + { "75", "Sales Curve (Storm / SCI)" }, + { "78", "THQ" }, + { "79", "Accolade" }, + { "7A", "Triffix Entertainment" }, + { "7C", "Microprose Software" }, + { "7D", "Sierra / Universal Interactive" }, + { "7F", "Kemco" }, + { "7G", "Rage Software" }, + { "7H", "Encore" }, + { "7J", "Zoo" }, + { "7K", "Kiddinx" }, + { "7L", "Simon & Schuster Interactive" }, + { "7M", "Asmik Ace Entertainment Inc." }, + { "7N", "Empire Interactive" }, + { "7Q", "Jester Interactive" }, + { "7S", "Rockstar Games" }, + { "7T", "Scholastic" }, + { "7U", "Ignition Entertainment" }, + { "7V", "Summitsoft" }, + { "7W", "Stadlbauer" }, + { "80", "Misawa" }, + { "81", "Teichiku" }, + { "82", "Namco Ltd." }, + { "83", "LOZC" }, + { "84", "KOEI" }, + { "86", "Tokuma Shoten Intermedia" }, + { "87", "Tsukuda Original" }, + { "88", "DATAM-Polystar" }, + { "8B", "Bullet-Proof Software" }, + { "8C", "Vic Tokai Inc." }, + { "8E", "Character Soft" }, + { "8F", "I'Max" }, + { "8G", "Saurus" }, + { "8J", "General Entertainment" }, + { "8N", "Success" }, + { "8P", "Sega Japan" }, + { "90", "Takara Amusement" }, + { "91", "Chunsoft" }, + { "92", "Video System / Mc O' River" }, + { "93", "BEC" }, + { "95", "Varie" }, + { "96", "Yonezawa / S'pal" }, + { "97", "Kaneko" }, + { "99", "Marvelous Entertainment" }, + { "9A", "Nichibutsu / Nihon Bussan" }, + { "9B", "Tecmo" }, + { "9C", "Imagineer" }, + { "9F", "Nova" }, + { "9G", "Take2 / Den'Z / Global Star" }, + { "9H", "Bottom Up" }, + { "9J", "Technical Group Laboratory" }, + { "9L", "Hasbro Japan" }, + { "9N", "Marvelous Entertainment" }, + { "9P", "Keynet Inc." }, + { "9Q", "Hands-On Entertainment" }, + { "A0", "Telenet" }, + { "A1", "Hori" }, + { "A4", "Konami" }, + { "A5", "K. Amusement Leasing Co." }, + { "A6", "Kawada" }, + { "A7", "Takara" }, + { "A9", "Technos Japan Corp." }, + { "AA", "JVC / Victor" }, + { "AC", "Toei Animation" }, + { "AD", "Toho" }, + { "AF", "Namco" }, + { "AG", "Media Rings Corporation" }, + { "AH", "J-Wing" }, + { "AJ", "Pioneer LDC" }, + { "AK", "KID" }, + { "AL", "Mediafactory" }, + { "AP", "Infogrames / Hudson" }, + { "AQ", "Kiratto Ludic Inc." }, + { "B0", "Acclaim Japan" }, + { "B1", "ASCII" }, + { "B2", "Bandai" }, + { "B4", "Enix" }, + { "B6", "HAL Laboratory" }, + { "B7", "SNK" }, + { "B9", "Pony Canyon" }, + { "BA", "Culture Brain" }, + { "BB", "Sunsoft" }, + { "BC", "Toshiba EMI" }, + { "BD", "Sony Imagesoft" }, + { "BF", "Sammy" }, + { "BG", "Magical" }, + { "BH", "Visco" }, + { "BJ", "Compile" }, + { "BL", "MTO Inc." }, + { "BN", "Sunrise Interactive" }, + { "BP", "Global A Entertainment" }, + { "BQ", "Fuuki" }, + { "C0", "Taito" }, + { "C2", "Kemco" }, + { "C3", "Square" }, + { "C4", "Tokuma Shoten" }, + { "C5", "Data East" }, + { "C6", "Tonkin House / Tokyo Shoseki" }, + { "C8", "Koei" }, + { "CA", "Konami / Ultra / Palcom" }, + { "CB", "NTVIC / VAP" }, + { "CC", "Use Co., Ltd." }, + { "CD", "Meldac" }, + { "CE", "Pony Canyon / FCI " }, + { "CF", "Angel / Sotsu Agency / Sunrise" }, + { "CG", "Yumedia / Aroma Co., Ltd" }, + { "CJ", "Boss" }, + { "CK", "Axela / Crea-Tech" }, + { "CL", "Sekaibunka-Sha / Sumire Kobo / Marigul Management Inc." }, + { "CM", "Konami Computer Entertainment Osaka" }, + { "CN", "NEC Interchannel" }, + { "CP", "Enterbrain" }, + { "CQ", "From Software" }, + { "D0", "Taito / Disco" }, + { "D1", "Sofel" }, + { "D2", "Quest / Bothtec" }, + { "D3", "Sigma" }, + { "D4", "Ask Kodansha" }, + { "D6", "Naxat" }, + { "D7", "Copya System" }, + { "D8", "Capcom Co., Ltd." }, + { "D9", "Banpresto" }, + { "DA", "Tomy" }, + { "DB", "LJN Japan" }, + { "DD", "NCS" }, + { "DE", "Human Entertainment" }, + { "DF", "Altron" }, + { "DG", "Jaleco" }, + { "DH", "Gaps Inc." }, + { "DN", "Elf" }, + { "DQ", "Compile Heart" }, + { "E0", "Jaleco" }, + { "E2", "Yutaka" }, + { "E3", "Varie" }, + { "E4", "T&E Soft" }, + { "E5", "Epoch" }, + { "E7", "Athena" }, + { "E8", "Asmik" }, + { "E9", "Natsume" }, + { "EA", "King Records" }, + { "EB", "Atlus" }, + { "EC", "Epic / Sony Records" }, + { "EE", "Information Global Service" }, + { "EG", "Chatnoir" }, + { "EH", "Right Stuff" }, + { "EL", "Spike" }, + { "EM", "Konami Computer Entertainment Tokyo" }, + { "EN", "Alphadream Corporation" }, + { "EP", "Sting" }, + { "ES", "Star-Fish" }, + { "F0", "A Wave" }, + { "F1", "Motown Software" }, + { "F2", "Left Field Entertainment" }, + { "F3", "Extreme Ent. Grp." }, + { "F4", "TecMagik" }, + { "F9", "Cybersoft" }, + { "FB", "Psygnosis" }, + { "FE", "Davidson / Western Tech." }, + { "FK", "The Game Factory" }, + { "FL", "Hip Games" }, + { "FM", "Aspyr" }, + { "FP", "Mastiff" }, + { "FQ", "iQue" }, + { "FR", "Digital Tainment Pool" }, + { "FS", "XS Games / Jack Of All Games" }, + { "FT", "Daiwon" }, + { "G0", "Alpha Unit" }, + { "G1", "PCCW Japan" }, + { "G2", "Yuke's Media Creations" }, + { "G4", "KiKi Co., Ltd." }, + { "G5", "Open Sesame Inc." }, + { "G6", "Sims" }, + { "G7", "Broccoli" }, + { "G8", "Avex" }, + { "G9", "D3 Publisher" }, + { "GB", "Konami Computer Entertainment Japan" }, + { "GD", "Square-Enix" }, + { "GE", "KSG" }, + { "GF", "Micott & Basara Inc." }, + { "GH", "Orbital Media" }, + { "GJ", "Detn8 Games" }, + { "GL", "Gameloft / Ubisoft" }, + { "GM", "Gamecock Media Group" }, + { "GN", "Oxygen Games" }, + { "GT", "505 Games" }, + { "GY", "The Game Factory" }, + { "H1", "Treasure" }, + { "H2", "Aruze" }, + { "H3", "Ertain" }, + { "H4", "SNK Playmore" }, + { "HF", "Level-5" }, + { "HJ", "Genius Products" }, + { "HY", "Reef Entertainment" }, + { "HZ", "Nordcurrent" }, + { "IH", "Yojigen" }, + { "J9", "AQ Interactive" }, + { "JF", "Arc System Works" }, + { "JJ", "Deep Silver" }, + { "JW", "Atari" }, + { "K6", "Nihon System" }, + { "KB", "NIS America" }, + { "KM", "Deep Silver" }, + { "KP", "Purple Hills" }, + { "LH", "Trend Verlag / East Entertainment" }, + { "LT", "Legacy Interactive" }, + { "MJ", "Mumbo Jumbo" }, + { "MR", "Mindscape" }, + { "MS", "Milestone / UFO Interactive" }, + { "MT", "Blast!" }, + { "N9", "Terabox" }, + { "NG", "Nordic Games" }, + { "NK", "Neko Entertainment / Diffusion / Naps team" }, + { "NP", "Nobilis" }, + { "NQ", "Namco Bandai" }, + { "NR", "Data Design / Destineer Studios" }, + { "PL", "Playlogic" }, + { "RM", "Rondomedia" }, + { "RS", "Warner Bros. Interactive Entertainment Inc." }, + { "RT", "RTL Games" }, + { "RW", "RealNetworks" }, + { "S5", "Southpeak Interactive" }, + { "SP", "Blade Interactive Studios" }, + { "SV", "SevenGames" }, + { "SZ", "Storm City" }, + { "TK", "Tasuke / Works" }, + { "TV", "Tivola" }, + { "UG", "Metro 3D / Data Design" }, + { "VN", "Valcon Games" }, + { "VP", "Virgin Play" }, + { "VZ", "Little Orbit" }, + { "WR", "Warner Bros. Interactive Entertainment Inc." }, + { "XJ", "Xseed Games" }, + { "XS", "Aksys Games" }, + { "YT", "Valcon Games" }, + { "Z4", "Ntreev Soft" }, + { "ZA", "WBA Interactive" }, + { "ZH", "Internal Engine" }, + { "ZS", "Zinkia" }, + { "ZW", "Judo Baby" }, + { "ZX", "Topware Interactive" } + }; + + auto iterator = companies.find(company_id); + if (iterator != companies.end()) + return iterator->second; + else + return ""; +} + +} |
