JosJuice
a87dffe52d
DiscIO: Replace IsDataSizeAccurate with GetDataSizeType
...
Previously, we had WBFS and CISO which both returned an upper bound
of the size, and other formats which returned an accurate size. But
now we also have NFS, which returns a lower bound of the size. To
allow VolumeVerifier to make better informed decisions for NFS, let's
use an enum instead of a bool for the type of data size a blob has.
2022-08-04 22:00:59 +02:00
JosJuice
3a6df63e9b
DiscIO: Add support for the NFS format
...
For a few years now, I've been thinking it would be nice to make Dolphin
support reading Wii games in the format they come in when you download
them from the Wii U eShop. The Wii U eShop has some good deals on Wii
games (Metroid Prime Trilogy especially is rather expensive if you try
to buy it physically!), and it's the only place right now where you can
buy Wii games digitally.
Of course, Nintendo being Nintendo, next year they're going to shut down
this only place where you can buy Wii games digitally. I kind of wish I
had implemented this feature earlier so that people would've had ample
time to buy the games they want, but... better late than never, right?
I used MIT-licensed code from the NOD library as a reference when
implementing this. None of the code has been directly copied, but
you may notice that the names of the struct members are very similar.
c1635245b8/lib/DiscIONFS.cpp
2022-08-04 22:00:58 +02:00
JosJuice
bb27d4cc95
DiscIO/VolumeWii: Decouple "is encrypted" from "is hashed"
...
Needed for the next commit. NFS disc images are hashed but not encrypted.
While we're at it, also get rid of SupportsIntegrityCheck.
It does the same thing as old IsEncryptedAndHashed and new HasWiiHashes.
2022-08-04 20:29:22 +02:00
Shawn Hoffman
d71797154a
VolumeVerifier: enable fast hash functions by default
...
sets defaults based on cpu support.
2022-08-02 22:23:49 -07:00
Tilka
7d2d5d914b
Merge pull request #10903 from shuffle2/hash-reorg
...
Common/Hash: use zlib-ng for adler32. small cleanups.
2022-08-02 18:29:04 +01:00
Shawn Hoffman
17c554c165
Common/Hash: use zlib-ng for adler32. small cleanups.
2022-08-01 10:07:27 -07:00
Shawn Hoffman
46ad8b9d68
Implement hw accelerated AES
2022-08-01 10:00:42 -07:00
Admiral H. Curtiss
a9d9f5c0da
Merge pull request #10899 from shuffle2/sha1
...
add hw-accelerated SHA1
2022-07-30 14:11:37 +02:00
JMC47
3bf1ddc549
Merge pull request #10730 from AdmiralCurtiss/riivolution-sysfile-patches
...
Riivolution: Add custom extension to patch boot.bin, bi2.bin, and apploader.img.
2022-07-28 20:29:31 -04:00
JosJuice
14c1a1c658
VolumeVerifier: Fix read_succeeded condition
...
We shouldn't set m_read_errors_occurred to true just because
is_data_needed was false.
2022-07-28 09:57:17 +02:00
Shawn Hoffman
bfa2a66c98
WIABlob: remove outdated mbedtls workaround
2022-07-26 22:16:37 -07:00
Shawn Hoffman
dd29a54cf6
introduce wrapper for SHA1 functionality
2022-07-26 22:16:37 -07:00
Shawn Hoffman
f92541fbd9
StripSpaces: only strip spaces
...
StripWhitespace maintains old behavior
2022-07-25 18:40:12 -07:00
Admiral H. Curtiss
ec3cfc01c1
DiscIO/DirectoryBlob: Add callback to modify sys files before they're added to the disc.
2022-07-19 00:55:04 +02:00
Admiral H. Curtiss
cc315cb7af
DiscIO/Riivolution: Add dolphin-specific extensions "dolphin_sys_file" and "dolphin_sys_folder" to patch sys files like you would patch regular files.
2022-07-19 00:55:04 +02:00
Admiral H. Curtiss
f5c132580c
DiscIO/DirectoryBlob: Add ContentSource that stores data locally in std::vector.
2022-07-19 00:55:03 +02:00
Admiral H. Curtiss
9e5bc98496
DiscIO/RiivolutionPatcher: Skip main.dol patches if no main.dol was given.
2022-07-19 00:55:03 +02:00
JosJuice
81a20a1d74
VolumeVerifier: Ignore case when looking for IOS on update partition
...
One of the Dragon Quest X expansions (S4SJGD) uses lowercase instead of
the usual uppercase for the IOS59 file on its update partition.
2022-07-17 09:20:12 +02:00
Admiral H. Curtiss
10407cc8c1
DiscIO/VolumeVerifier: Don't try to verify data that would read out of bounds.
2022-07-13 13:35:18 +02:00
JMC47
431d757151
Merge pull request #10743 from tellowkrinkle/LargeBlockRVZ
...
Fix creation of rvz with > 2mb chunk size
2022-06-14 16:17:24 -04:00
TellowKrinkle
26fc167a44
DiscIO: Fix creation of rvz with > 2mb chunk size
2022-06-11 16:10:32 -05:00
Tillmann Karras
79a7bf02eb
CMake: rename minizip to minizip-ng
...
minizip-ng is the new name used by the upstream project as well as all
distros other than Fedora (but it looks like it will be renamed there).
2022-06-06 14:21:43 +02:00
Admiral H. Curtiss
580c721c82
cmake: Don't use PCH with Qt6.
2022-05-22 01:19:44 +02:00
Admiral H. Curtiss
57d8f2112c
Merge pull request #10514 from JosJuice/datel-no-gametdb
...
DiscIO: Don't return GameTDB ID for any Datel disc
2022-03-26 03:38:57 +01:00
Admiral H. Curtiss
7b0d5f2df3
Merge pull request #10491 from Minty-Meeo/dolphin-tool-more-stuff
...
More dolphin-tool features and options
2022-03-20 05:43:53 +01:00
Minty-Meeo
deba9ce256
Added a way to check Block Size, Compression Method, and Compression Level flags to dolphin-tool
...
New dolphin-tool command: "header"
-b / --block_size
-c / --compression
-l / --compression_level
Informative RVZ/WIA header2 value "compression_level" is now a s32 instead of a u32, because negative compression is a thing.
Speaking of, it is now possible to use negative compression levels in dolphin-tool's convert command (not the GUI, though).
2022-03-19 17:13:28 -05:00
JosJuice
479489c999
DiscIO: Don't return GameTDB ID for any Datel disc
...
DTLX01 can be either a Freeloader or Action Replay, so it's
inappropriate to always use the same title and cover for it.
2022-03-15 18:56:49 +01:00
JosJuice
41adf3cd53
DiscIO: Treat game ID DTLX01 as a Datel disc
...
Needed for the disc mentioned in the previous commit.
2022-03-12 22:27:58 +01:00
JosJuice
6d1a344aab
VolumeVerifier: Skip "lacks some data" check for Datel discs
...
Turns out there's some Freeloader disc for the GC that triggers this
despite being a good dump. This warning is mostly intended to catch
Wii games that have been truncated at the 4.00 GiB or 4.38 GiB mark
anyway, and if someone does have a Datel dump that has been truncated,
they'll still get the "unusual size" warning.
2022-03-12 22:24:38 +01:00
Starsam80
41a3368889
NANDImporter: Only read the AES key once
...
There is no need to constantly reset the key for every file entry.
2022-03-01 19:24:59 -07:00
Starsam80
80012ae253
NANDImporter: Make superblocks less magical
...
Create a struct describing the superblock layout and use it directly
without needing to specify offsets and such.
2022-03-01 19:24:59 -07:00
Starsam80
73151a5753
NANDImporter: Don't pass paths if we don't need to
2022-03-01 19:24:59 -07:00
Starsam80
6758c77c39
NANDImporter: Reduce recursion in `ProcessEntry`
...
It also simplifies the code flow, as it no longer goes backwards
through the filesystem chain.
2022-03-01 19:24:59 -07:00
Starsam80
2ccd974471
NANDImporter: Improve NANDFSTEntry
...
`uid` is a u32, not a u16. Also, everything is big endian, so we
can simplify the code a little bit.
2022-03-01 19:24:59 -07:00
Starsam80
643057fea2
NANDImporter: Make a class variable for the NAND root
2022-03-01 15:07:59 -07:00
Pokechu22
50d9349926
Fix integer sign difference comparison warnings
2022-02-13 14:38:59 -08:00
Admiral H. Curtiss
a336c4386c
IOFile: Rename Clear() to ClearError() for clarity.
2022-01-29 06:49:22 +01:00
Admiral H. Curtiss
36cfcb530f
IOFile: Make origin parameter to Seek() an enum class.
2022-01-29 06:49:21 +01:00
JosJuice
ff5b323a56
DiscIO: Delete an unused function declaration
2022-01-23 22:15:56 +01:00
JosJuice
7b8e846d0a
Merge pull request #10367 from Pokechu22/fmt-8.1.1
...
Update to fmt 8.1.1
2022-01-20 21:14:41 +01:00
Pokechu22
6e5f4125e3
Use Common::ToLower and Common::ToUpper
2022-01-16 17:00:12 -08:00
Pokechu22
7935e614d1
CMakeLists: Change DiscIO dependency from common to core
...
DiscIO depends on some IOS functions and other functions, which are in Core and not Common. This results in link errors if using DiscIO on its own (which is why DolphinTool had a listed dependency on videocommon; videocommon has a dependency on core so adding that made things build).
2022-01-16 13:29:51 -08:00
Léo Lam
83c5446d85
Fix static initialisation order fiasco issue for Version variables
...
Fixes a crash that could occur if the static constructor function for
the MainSettings.cpp TU happened to run before the variables in
Common/Version.cpp are initialised. (This is known as the static
initialisation order fiasco.)
By using wrapper functions, those variables are now guaranteed to be
constructed on first use.
2022-01-14 00:04:22 +01:00
Pokechu22
29d6dd609c
Fix non-constexpr format strings
2022-01-13 11:11:08 -08:00
Léo Lam
7abb501e0a
Merge pull request #10334 from AdmiralCurtiss/json-maker
...
Core: Add a Maker field for GameModDescriptors.
2022-01-03 01:43:02 +01:00
Admiral H. Curtiss
2906889804
Core: Add a Maker field for GameModDescriptors.
2022-01-02 06:06:53 +01:00
Pokechu22
0c19f895d3
Replace remaining uses of zlib crc32 with Common/Hash.h
2022-01-01 10:36:38 -08:00
Admiral H. Curtiss
e54657254a
Core: Make format of D_WIIROOT_IDX consistent with the rest of the user directories.
2021-12-25 20:21:32 +01:00
Léo Lam
185475fe03
Merge pull request #10187 from AdmiralCurtiss/json-gamelist
...
Support for GameModDescriptor files in Game List.
2021-12-14 11:08:38 +01:00
Admiral H. Curtiss
a2a39cfcfb
Core: Add ability to serialize a GameModDescriptor to json.
2021-12-12 21:26:09 +01:00
Admiral H. Curtiss
da161faff4
GameList: Show game mod descriptor .json files in game list.
2021-12-12 21:26:09 +01:00
Admiral H. Curtiss
b50861ea44
Core: Require game mod descriptor json to self-identify as one.
2021-12-12 21:26:09 +01:00
Admiral H. Curtiss
ea17dd8dba
RiivolutionParser: Create config xml directory if it does not exist yet.
2021-12-12 21:24:36 +01:00
Pokechu22
2025763420
Treewide: Adjust order of includes
2021-12-10 14:49:57 -08:00
ssdsnake
1aa8a4d46f
DolphinTool: CLI utility interface and disc image tools
2021-12-03 15:40:19 -06:00
Admiral H. Curtiss
0fc563ee2e
RiivolutionPatcher: Use case-insensitive filename comparison when searching for files in a folder patch.
2021-11-20 01:15:18 +01:00
JosJuice
96a6d6fd95
Merge pull request #10184 from JosJuice/android-riivolution
...
Android: Allow starting game with Riivolution patches from the GUI
2021-10-31 23:44:54 +01:00
Léo Lam
fb8b9f3251
Merge pull request #10194 from AdmiralCurtiss/riivolution-edge-cases
...
Fix some Riivolution file patching edge cases.
2021-10-31 21:24:03 +01:00
Sepalani
e51119c4ce
HLE: Fix hooks overlapping Riivolution patches
2021-11-01 00:07:14 +04:00
Admiral H. Curtiss
e91e04fe1e
RiivolutionPatcher: More closely match behavior of filename searching file patches to actual Riivolution.
2021-10-31 05:47:39 +01:00
Admiral H. Curtiss
335a1b5cb5
RiivolutionPatcher: More closely match behavior of folder patches to actual Riivolution.
2021-10-31 05:47:39 +01:00
JosJuice
34021b5ebc
Android: Allow starting game with Riivolution patches from the GUI
2021-10-30 23:24:36 +02:00
Admiral H. Curtiss
4f82810845
RiivolutionPatcher: Use FileInfo instead of IOFile when only checking for filesize.
2021-10-24 00:09:09 +02:00
Admiral H. Curtiss
fe7f3a6f26
RiivolutionPatcher: Protect against three or more dots in path traversal.
2021-10-24 00:09:09 +02:00
Admiral H. Curtiss
22c6f2fe3b
RiivolutionPatcher: Handle the possibility of the FST already containing a main.dol file.
2021-10-24 00:09:09 +02:00
Admiral H. Curtiss
ba3373b476
RiivolutionPatcher: Modify memory patching logic to be more accurate to actual Riivolution.
2021-10-24 00:09:09 +02:00
Admiral H. Curtiss
2be62d94fc
RiivolutionParser: Add code to read and write the Riivolution config XMLs that remember the last selection.
2021-10-24 00:09:08 +02:00
Admiral H. Curtiss
6394960f54
Core: Add ability to specify and launch a riivolution-modded game via a .json file.
2021-10-24 00:09:07 +02:00
Admiral H. Curtiss
fe242f79ee
Core: Implement Wii NAND path redirects for Riivolution savegame patches.
2021-10-24 00:09:07 +02:00
Admiral H. Curtiss
588c31acb6
RiivolutionPatcher: Ignore last two bits of offset in file patches to match console behavior.
2021-10-24 00:09:07 +02:00
Admiral H. Curtiss
6ec4af7ea4
RiivolutionPatcher: Load external files with a layer of indirection during the patching process to properly resolve the paths given in the XML.
...
This also may eventually allow loading patches from sources other than the 1:1 expected file structure host file system, such as memory or an archive file.
2021-10-24 00:09:07 +02:00
Admiral H. Curtiss
783b180dc8
Core: Add RiivolutionPatcher to apply Riivolution-style patches to a game's file system and memory.
2021-10-24 00:09:06 +02:00
Admiral H. Curtiss
e26b59bab3
Core: Add RiivolutionParser to parse a Riivolution XML.
2021-10-24 00:09:06 +02:00
Admiral H. Curtiss
09fc39e2e5
DiscIO: Add CreateDisc/WAD/Volume() overloads that take a BlobReader directly.
2021-10-24 00:09:05 +02:00
Admiral H. Curtiss
e3f1de023f
DiscIO/DirectoryBlob: Add a callback that allows patching the main.dol and FST of the game partition during blob construction.
2021-10-24 00:09:05 +02:00
Admiral H. Curtiss
00ef9f2b4f
DiscIO/DirectoryBlob: Allow constructing a DirectoryBlobReader from a VolumeDisc.
2021-10-24 00:09:05 +02:00
Admiral H. Curtiss
3a72a39efd
DiscIO/DirectoryBlob: Allow constructing a DirectoryBlobPartition from a VolumeDisc.
2021-10-24 00:09:00 +02:00
Admiral H. Curtiss
b1802f6daa
DiscIO/DirectoryBlob: Add a content source representing a run of padding bytes.
2021-10-23 23:51:23 +02:00
Admiral H. Curtiss
f8611f7139
DiscIO/DirectoryBlob: Add a content source that reads data from a DiscIO::Volume.
2021-10-23 16:51:45 +02:00
Admiral H. Curtiss
b7a9cc37b1
DiscIO/DirectoryBlob: Add ability to have an offset for a partition ContentSource.
2021-10-23 16:51:45 +02:00
Admiral H. Curtiss
a14436fe3f
DiscIO/DirectoryBlob: Add ability to have a start-of-file offset for a file ContentSource.
2021-10-23 16:51:45 +02:00
Admiral H. Curtiss
885e6690c5
DiscIO/DirectoryBlob: Add explanations for DiscContent members.
2021-10-23 16:51:44 +02:00
Admiral H. Curtiss
b988ab4441
DiscIO/DirectoryBlob: Consolidate functions that take data for ContentSource to just take a ContentSource.
2021-10-23 16:51:44 +02:00
Admiral H. Curtiss
7f57c24172
DiscIO/DirectoryBlob: Rename the vector-reference variant of DiscContentContainer::Add() to AddReference() to make it clearer at call sites that the given vector must remain in memory.
2021-10-23 16:51:44 +02:00
Pokechu22
78bfd25964
Fix all uninitialized variable warnings (C26495)
2021-10-13 12:32:16 -07:00
Admiral H. Curtiss
6684e26ae2
DiscIO/DirectoryBlob: Fix swapped DiscContent comparison operators.
2021-09-21 08:01:21 +02:00
Admiral H. Curtiss
ad410009bb
Core/DiscIO: Extract disc and partition constants to DiscUtils.h.
2021-09-19 22:43:52 +02:00
Admiral H. Curtiss
06d41c53ce
DiscIO/DirectoryBlob: Handle reads between files.
2021-09-14 07:09:55 +02:00
Léo Lam
815b590dfe
Update clang-format to version 12
...
12 is the latest release and various editors (VS, VSCode and CLion)
ship with clang-format 12 by default.
2021-08-30 00:20:18 +02:00
Tilka
0f628ff882
Merge pull request #10028 from GerbilSoft/bugfix/RVT-firmware-filenames
...
VolumeVerifier: Use correct IOS filename for development discs.
2021-08-16 20:47:07 +01:00
David Korth
95d3416305
VolumeVerifier: Use correct IOS filename for development discs.
...
Retail-signed discs use the format: IOS56-64-v5661.wad
Debug-signed discs use the format: firmware.64.56.22.29.wad
Debug-signed discs usually have a 128 version of the firmware as well,
since some devkits have 128 MB MEM2. (Retail has 64 MB.)
2021-08-15 12:41:35 -04:00
Shawn Hoffman
4ef87194a4
revert workaround for msvc arm64 ICE in WIABlob
2021-08-14 03:57:53 -07:00
JosJuice
5fe23ccc3e
DiscIO: Fix broken workaround for MSVC ARM64 ICE
...
The workaround added in 30f9f31
caused a regression where Dolphin
incorrectly replaced runs of one byte with runs of another byte
when writing WIA and RVZ files. ReuseID::operator< was always
returning false unless the ReuseIDs being compared had different
partition keys, which caused std::map<ReuseID, GroupEntry>
to treat all ReuseIDs with the same partition key as equal.
2021-07-24 13:29:03 +02:00
Léo Lam
39e14b6b5f
Merge pull request #9854 from JosJuice/wia-ice
...
DiscIO: Store partition key directly in ReuseID
2021-07-06 13:05:09 +02:00
Pierre Bourdon
f4e34703c0
licensing: convert "public domain" to CC0 1.0
...
Public domain does not have an internationally agreed upon definition,
As such it's generally preferred to use an extremely liberal license,
which can explicitly list the rights granted by the copyright holder.
The CC0 license is the usual choice here.
This "relicensing" is done without hunting down copyright holders, since
it is presumed that their release of this work into the public domain
authorizes us to redistribute this code under any other license of our
choosing.
2021-07-05 04:43:55 +02:00
Pierre Bourdon
e149ad4f0a
treewide: convert GPLv2+ license info to SPDX tags
...
SPDX standardizes how source code conveys its copyright and licensing
information. See https://spdx.github.io/spdx-spec/1-rationale/ . SPDX
tags are adopted in many large projects, including things like the Linux
kernel.
2021-07-05 04:35:56 +02:00
JosJuice
eafa2784d6
DiscIO: Store partition key directly in ReuseID
...
This lets us reuse blocks in the case where different partition
entries use the same key (which probably isn't very common).
2021-06-30 09:06:20 +02:00
Shawn Hoffman
30f9f31a69
DiscIO: Add workaround for MSVC ARM64 ICE
2021-06-29 10:24:09 +02:00
Mateus B. Cassiano
2c598e46ab
VolumeVerifier: increase problem severity for incorrectly signed TMDs
2021-05-26 05:52:21 -04:00
Léo Lam
1a9e72c9bb
DiscIO: Use MathUtil::SaturatingCast
2021-04-06 23:27:23 +02:00