chore: upstream merge to 2412 (#44)

* DolphinQt: Remove unneeded Win32 code

Dolphin already uses QStyleHints::colorScheme to detect dark mode,
so this code is now redundant.

* VideoBackendBase: Only populate backend info when uninitialized

Prevent potential issues when creating the Graphics window (and thus
calling PopulateBackendInfo) while the core state is Stopping, like we
already do while it's Starting or Running.

* linux: Use D-Bus to inhibit screensaver

* Android: Add 16 KiB page size support

So far, Dolphin hasn't been able to run on Android devices that use a
16 KiB page size. 16 KiB page sizes are a very new Android feature that
no phones have shipped with so far, so we're still compatible with the
phones that exist out there, but let's get this fixed before phones
start shipping with 16 KiB page sizes.

Because I couldn't get Android Studio's emulator to work, I haven't been
able to confirm that this change actually makes Dolphin fully compatible
with devices that use a 16 KiB page size. But I have confirmed that this
doesn't break anything on a regular 4 KiB page size device.

* Android: Use enableEdgeToEdge

Dolphin has been using edge-to-edge rendering for a little while now,
but it has required a bit of manual work. Now that edge-to-edge is
becoming something expected of apps in Android 15, there's a nicer API
we can use.

Tested on Android 8, 11 and 13, with no changes in behavior noted.

* GameINI: Fix Cheats for Conduit 2

These codes are actually Gecko codes so setting that correctly.

There were errors which pop up when running this game as the comments for AR codes need to be set with hash(#) instead of asterisk(*). I replaced those anyways.

Removed the url in the comment since it's inaccessible and not on wayback machine either.

Also corrected the GameID, the wrong one is listed.

* GameINI: Remove Obsolete Settings in Super Metroid Demo (Brawl VC)

Both UseXFB and UseRealXFB are obsolete since Hybrid XFB.

* GameINI: Remove Obsolete Setting in FaceBreaker K.O. Party

Hack is not a valid setting.

Also updated the GameID.

* GameINI: Rename INI for Naruto Collection (Demo)

The wrong filename was used so the settings weren't being applied.

(All it does is reset the Texture Cache Accuracy to the default setting.)

* GameINI: Disable AA in Sonic Heroes

The use of any anti-aliasing will cause graphical corruption, which occurs on the ground.

MaxAnisotropy is supposed to be for [Video_Enhancements], but also it doesn't cause any of the issues in game so it is being removed rather than set under the correct heading.

Added a comment on why these values are set.

* GameINI: Set Texture Cache Accuracy to "Safe" for UFC Personal Trainer: The Ultimate Fitness System

SafeTextureCacheColorSamples is supposed to be for [Video_Settings], but also the medium setting isn't enough to display the missing text.

* Boot: write Apploader version into memory

When HLE-ing the apploader, this is necessary to avoid "Error #002"
errors. Homebrew doesn't care.

* VolumeVerifier: Promote `DEBUG_ASSERT` to `static_assert`

This runtime assertion was added before `std::is_sorted` became constexpr in the codebase.

* VideoBackends:Metal: Use ios_use_simdgroup_functions with SPIRV-Cross

It defaults to trying to emulate simdgroup functions on iOS

* VideoCommon: Dirty pixel shader manager on efb scale changes

* WII_IPC: rewrite multiply as 100_tbticks literal (NFC)

* GameSettings: safe texture cache for "Winter Sports 3: The Great Tournament"

This is required to avoid glitches during Downhill Skiing.

* VideoBackends:Metal: subgroup_ops requires Apple7, not Apple6

SIMD-scoped permute operations are Apple6, but reduction operations are Apple7

* Revert "Allow shared zlib-ng"

This reverts commit 6dad8f8372.

Our bundled zlib-ng uses zlib compat mode, making it override system zlib.
System zlib-ng will not, and all its functions will be prefixed with zng_.
Therefore the two aren't actually compatible.

* Properly Notify when Achievements Login Fails

* Bluetooth: show vid:pid in error message

* VideoBackends:Vulkan: Don't try to present if swapchain acquire failed

* VideoBackends:Vulkan: Wait until we've confirmed a successful AcquireNextImage before marking semaphores used

* Migrate Hardcore Toggle Code to Achievement Manager

AchievementManager::SetHardcoreMode now handles the (non-Qt) settings disabled by hardcore mode, instead of doing this on the Qt layer. Also ensured Init/Enable Achievements paths run this code, fixing the bug wherein the player can manipulate things when achievements are disabled that persist when turned back on.

* Add Confirm Popups for Achievements Logout and Hardcore Off

* Turn off debug mode if hardcore is active on emulator start

Found this bug while testing; if I manually edit the config files while Dolphin is closed I was able to get debug and hardcore on at the same time, this resolves that.

* GameINI: Add Skylanders: Spyro's Adventure
`EFBEmulateFormatChanges = True` properly emulates the blur in the pause screen.
`ImmediateXFBEnable = False` to prevent epilepsy-inducing FMVs and main menu.

* GameINI: Add Skylanders: Giants
`EFBEmulateFormatChanges = True` properly emulates the blur in the pause screen.
`ImmediateXFBEnable = False` to prevent epilepsy-inducing FMVs and main menu.

* GameINI: Add Skylanders: Trap Team
`EFBEmulateFormatChanges = True` properly emulates the blur in the backgrounds.
`ImmediateXFBEnable = False` to prevent epilepsy-inducing FMVs.

* Partially revert "Revert "Audit uses of IsRunning and GetState""

This reverts the revert commit bc67fc97c3,
except for the changes in BaseConfigLoader.cpp, which caused the bug
that made us revert 72cf2bdb87. PR 12917
contains an improved change to BaseConfigLoader.cpp, which can be merged
(or rejected) independently.

A few changes have also been made based on review comments.

* Core: Include partition when calling GetGameTDBID for non-game partition

This problem was introduced in 8842a0f402
and is likely a copy-paste error.

Fixes the problem mentioned in the issue comment
https://bugs.dolphin-emu.org/issues/13640#note-2.

* VideoBackends:Vulkan: Increase VMA Vulkan Version to 1.2

We now use Vulkan 1.2 if available

* Skylanders: Fix Head Rush (Nitro)

* VideoBackends:Metal: Log file on failed pipeline compile

* VideoBackends:Metal: Use standardized C++ features over clang builtins

* Readme: specify  which windows 10 version is minimum

* FifoPlayer: Set up additional BATs in Wii mode

The light LIT fifolog from https://bugs.dolphin-emu.org/issues/13635 has position data at physical address 11ae3180. This works fine when using the memory viewer in physical mode, but the corresponding virtual address (91ae3180) previously didn't show anything in effective mode. It works fine now though.

This shouldn't affect playback of fifologs as everything in there uses physical addresses; this only impacts the memory viewer.

This logic was copied from CBoot::SetupBAT.

* Fifo analyzer: Fix indexed XF loads showing "bytes" instead of "words"

Indexed XF loads specify the number of 32-bit words (generally floats, but light data has some integers) to load, not the number of bytes. This was only a mistake in the fifo analyzer text; the actual implementation already loaded words.

* Simplify `std::copy` with `std::copy_n`

+ a surprise `std::memcpy` in VolumeVerifier.cpp.

* Simplify `std::fill` with `std::fill_n`

* IOS: log cIOS device checks as warnings, not errors

Some games do this to detect piracy.

* Simplify `std::fill` with `std::array::fill`

* Simplify `std::transform` with `std::ranges::transform_view`

* Simplify `std::stable_sort` with `std::ranges::stable_partition`

* VideoCommon: fix common opcode decoding errors

Many games call GXSetGPFifo() without first waiting for the GP to finish
consuming outstanding commands in the previous GP fifo. Normally,
Dolphin runs OpcodeDecoding in 1000-cycle time slices. In that time
frame, GXSetGPFifo() has probably completed and the GP read pointer now
points to entirely new memory. If the last GP fifo copy ended in an
incomplete command, the new GP fifo would most likely desync for a
while. To avoid all this, give the GP a time slice right now to copy the
remaining data from the previous GP fifo.

* Modernize `std::for_each` with ranges

* Modernize `std::count` with ranges

* Modernize `std::count_if` with ranges

* Modernize `std::equal` with ranges

* Modernize `std::copy` with ranges

* Modernize `std::transform` with ranges

In StringUtil.h, the lambdas wrapping `Common::ToLower(char)` and `Common::ToUpper(char)` were only necessary due to the function names being overloaded.

* Modernize `std::replace` with ranges

* Modernize `std::replace_if` with ranges

* Modernize `std::fill` with ranges

In DSPCore.cpp, there were two `std::fill` uses that could be simplified using `std::fill_n`. Due to their proximity with other `std::fill` algorithms being modernized with ranges, I chose to make these examples into the rare `std::ranges::fill_n`.

* Modernize `std::reverse` with ranges

* Modernize `std::reverse_copy` with ranges

* Modernize `std::sort` with ranges

* Modernize `std::is_sorted` with ranges

In OGLConfig.cpp, `std::views::reverse` is used rather than sorting using `std::ranges::greater` in order to parallel other instances of reverse iteration in the function.

* Modernize `std::binary_search` with ranges

In VolumeVerifier.cpp, constructing a `std::string_view` of the volume's GameID is unnecessary, as `std::`(`ranges::`)`binary_search` supports heterogeneous lookup. The usage in GameFile.cpp is a perfect example.

* Modernize `std::set_intersection` with ranges

* Modernize `std::max_element` with ranges

* Modernize `std::min_element` with ranges

* Update Contributing.md

fix typos

* Remove Bloom Definitions for Skylanders Trap Team

* JitArm64_RegCache: Add IsImm helper

Because checking if a register is a specific immediate is a rather
common operation.

* JitArm64_SystemRegisters: Optimize mtspr

No need to materialize the immediate if it is zero, we can just use WZR.

Before:
mov    w27, #0x0                 ; =0
str    w27, [x29, #0x1178]

After:
str    wzr, [x29, #0x1178]

* JitArm64_Integer: Use IsImm helper more

* Modernize `std::find` with ranges

* Modernize `std::find_if` with ranges

In BTEmu.cpp, `std::mem_fn` was not necessary for the predicate to compile.

* Modernize `std::adjacent_find` with ranges

* C++20: Synthesize `operator!=` From `operator==`

The inequality operator is automatically generated by the compiler if `operator==` is defined.

* CoreTiming: Simplify algorithms using ranges and three-way comparison

* GraphicsMod: Simplify `std::sort` using ranges and projections

* JitArm64_RegCache: Simplify `std::find` using ranges and projections

* DolphinQt/MappingIndicator: Use Settings::IsThemeDark instead of reimplementing it.

* ControllerEmu: Change trigger threshold check to >= instead of > and set minimum threshold in UI to 1% to prevent user error.

* DolphinQt: Auto hide the mapping window tab bar.

* DolphinQt: Restrict size of banner image in game properties info tab.

* Boot: don't error for NTSC IPL v1.2 of DOL-001 consoles

Checksum and descriptions from Redump.

* Cache normals in addition to binormals and tangents

Fixes LIT (https://bugs.dolphin-emu.org/issues/13635). The text does not include normals, but has lighting enabled. With the previous default of (0, 0, 0), lighting was always black (as dot(X, (0, 0, 0)) is always 0). It seems like the normal from the map in the background (0, 0, 1) is re-used.

LIT also has the vertex color enabled while vertex color is not specified, the same as SMS's debug cubes; the default MissingColorValue GameINI value of solid white seems to work correctly in this case.

* Create STZ.ini

* Create S7E.ini

* Android: Add vsync setting

Recently we have been getting some requests to make the existing vsync
setting available in the Android GUI:

https://bugs.dolphin-emu.org/issues/13650
https://forums.dolphin-emu.org/Thread-vsync-toggle-for-android

I don't quite understand why enabling the vsync setting is helpful when
Android already enforces vsync, but I guess having the option available
doesn't hurt. I'm putting the setting under Advanced, unlike in
DolphinQt, since there's no clear reason why the typical user would want
to use this setting.

* Audio: Add option to AudioPane to temporarily mute audio when emulation speed limit is disabled.

* IOS/Net: implement ioctlv that retrieves the network routing table that libogc now uses on network init

* DSPHLE/AXWii: fix wiimote audio in multiple games

Three bugs specific to older Wii games:
- The size difference between high-pass and biquad filter was not
  accounted for, causing wiimote related fields to be corrupted.
- Wiimote sample buffer pointers were advanced by 32 samples per
  millisecond instead of 6 samples. Usually hidden by the first bug.
- PB updates on Wii were being byte-swapped twice, but I've not actually
  found any Wii games that make use of PB updates.

This fixes wiimote audio in at least the following games:
- Excite Truck
- Ice Age 2: The Meltdown
- Kororinpa: Marble Mania
- Rapala Tournament Fishing
- Shrek the Third
- Super Monkey Ball: Banana Blitz
- Tiger Woods PGA Tour 07
- WarioWare: Smooth Moves (issue 11725)
- Wing Island

* Core: apply Dolphin OnFrame patches right after boot

* VideoCommon: fix -Wshadow-uncaptured-local warning and simplify

* GameINI: Remove trailing space for 1080° Snowboarding

* GameINI: Remove OnLoad sections

These haven't worked since 2008 (0b5fed62c1).

* JitCache: Add WipeBlockProfilingData Function

Accessible from DolphinQt and Android.

* Externals: Update rangeset

I added a new `get_stats` member function to the upstream for use in the JIT Widget Refresh.

* CachedInterpreter: Callback Disassembler

* JITs: Outline FreeRanges Function

As I have done for Cached Interpreter 2.0

* JITs: Add EraseSingleBlock Function

* JITs: Add GetMemoryStats Function

Using the updated rangeset library

* Move UICommon/Disassembler to Common/HostDisassembler

A preliminary commit for a cleaner diff and an easier review

* DolphinQt: JIT Widget Refresh

Fulfilling a certain six-year-old todo.

* JITs: Revamp LogGeneratedX86

Debug logging of recompiled code is now a feature of all three JITs.

* Simplify `std::copy` with `fmt::join`

* Simplify `std::copy` with `fmt::format_to`

Plus a few other memory allocation optimizations.

* Jit64: Make Furthest Exit Micro-Optimization More Correct

* GameINI: Shadow the Hedgehog texture cache default

Adjusts the Texture Cache settings/slider to 512 samples which equates
to the 'middle' option in the UI.

If using the 'Safe' Texture Cache Accuracy mode, the left screen will only render bloom in 2P modes.
If using the 'Fast' Texture Cache Accuracy mode, the Intro Movie will
drop frames near the end when the "Shadow the Hedgehog" game title
letters appear. This mode also can result in artifacts/bleed from bloom
effects in some situations.

* JitArm64: Add ScopedARM64Reg

* JitArm64_Integer: Use ScopedARM64Reg

* JitArm64: Use ScopedARM64Reg

* JitArm64_Branch: Use ScopedARM64Reg

* JitArm64_FloatingPoint: Use ScopedARM64Reg

* JitArm64_LoadStore: Use ScopedARM64Reg

* JitArm64_LoadStoreFloating: Use ScopedARM64Reg

* JitArm64_LoadStorePaired: Use ScopedARM64Reg

* JitArm64_Paired: Use ScopedARM64Reg

* JitArm64_SystemRegisters: Use ScopedARM64Reg

* JitArm64: Allow ppcState STP optimization for imm

* JitArm64: Use WZR for ppcState STP optimization with imm == 0

* Split `SettingsHandler` into separate reader and writer classes

* GraphicsSettings: EFBAccessEnable=false by default

Makes Graphics -> Hacks -> Skip EFB Access from CPU enabled by default. Some GPU drivers stall when EFB access occurs in games where EFB is not used. Most games that require this setting set to 'true' already have this defined in their game inis.

* Add missing algorithm header in SettingsHandlerTest.cpp

* Migrate /dev/dolphin documentation to the repository

* GameINI: Remove EFBAccessEnable=false overrides

Removes the EFBAccessEnable=false explicit game overrides for:
  GT6 (Terminator 3: The Redemption)
  GXB (SSX3) [deleted - no other configuration]
  RTH (Tony Hawk's Downhill Jam)
  SNC (SONIC COLOURS) [deleted - no other configuration]

* Host: Rename `JitCacheInvalidation`

There are two hard problems in computer science...

* DolphinQt: Signal `Host::JitCacheInvalidation` in more places

* DolphinQt: Remove a stray period from the Audio tab

* JitBlockTableModel: Update For Symbols Too

Flushing efficiency down the drain because I wrote unsafe code to achieve it... I hope I can recover this.

* MainWindow: Avoid Global System Accessor

* Translation resources sync with Transifex

* VideoCommon: Implement primitive breaking for primitive lists

* GameSettings: add patch to fix Eternal Darkness startup hang

The game calls GXSetDrawDone and then switches the GP fifo without first
waiting for the draw done interrupt to arrive. Before
e96960e2a6, Dolphin would not execute the
draw done command and potentially also skip other commands in the old GP
fifo. Since that commit, Dolphin executes the remaining commands on the
old GP fifo just before disabling reads for switching, but because
PixelEngineManager::RaiseEvent() enforces a minimum delay of 500 cycles
for the draw done interrupt, it arrives after the game has switched to
the new GP fifo which seems to trigger the deadlock.

This patch replaces the call to GXSetDrawDone by a call to GXDrawDone
which does the same but also waits for the interrupt.

* ControllerInterface/SDL: Disable SDL's Windows.Gaming.Input controller handling.

* DolphinQt: Ensure skylanders QDateTimeEdit shows a four digit year without forcing dd-mm-yyyy format.

* ControllerInterface/SDL: Fix device removal event processing.

* Translation resources sync with Transifex

* Add include guard to QtUtils.h

* Config/IsSettingSaveable: Use class template argument deduction.

* Config/IsSettingSaveable: Remove unused includes.

* InputCommon: Disable DualSense Player LED

* VideoBackendBase: Clarify function name

Rename GetDefaultBackendName to GetDefaultBackendConfigName to
distinguish it from the display name.

* GeneralWidget: Recommend default video backend in tooltip

Recommend the platform's default video backend in the Backend tooltip
instead of always recommending OpenGL.

* InputCommon: Rename AddAnalogInputs to AddFullAnalogSurfaceInputs.

* InputCommon: Move FullAnalogSurface class definition out of header file.

* IOS/USB: Reconnect HIDv4 Devices after shutdown

* DSPHLE/AXWii: fix Elebits sound

Regressed in 37ebb13ece.

* WiimoteEmu: Remove disabled and no-longer-compiling wav dumping code.

* ProcessorInterface: sync GPU just before PI_FIFO_RESET

GXAbortFrame() is problematic for Dolphin because it first writes
PI_FIFO_RESET (for which we discard our internal fifo), then disables CP
reads (for which we execute pending commands in the GP fifo in emulated
memory). I don't know whether there is a race condition on hardware, but
there is one for us. Avoid this by also doing a GPU sync here.

* Add Approved Patches - Eternal Darkness, Monster Hunter Tri

The primary focus of this PR is the Eternal Darkness patch which fixes hanging at startup, which prior to this fix makes Eternal Darkness unplayable in hardcore. The MHTri patch was added as well simply because it could be.

* Flatpak: Upgrade kde runtime to 6.8

this version bundles SDL2-2.30.6, the temporary measure of building the
vendored version from exports is no longer necessary.

* Translation resources sync with Transifex

* Add Config Changed Callback for Hardcore Mode

* docs: Clarify wia_except_list_t padding in uncompressed groups

https://bugs.dolphin-emu.org/issues/13671

* Force NetPlay Clients to Host Hardcore Status

If the host is in hardcore mode, all joining players will be set to hardcore mode; if not, all joining players will be set to softcore. This ensures all players have the same settings and remain synchroized.

* Sys: Sync wiitdb files with GameTDB

* GDBStub: Signal Breakpoint Changes To Host

* Externals: Update SDL to 2.30.9

* fix SUKP01 metafortress bypass

* GameINI: Use Safe Texture Cache for Cabela's Dangerous Hunts 2011

This fixes text on the menu and in-game.

* Translation resources sync with Transifex

* Android/GCAdapter: Don't join current thread

The read thread could call Reset, which in turn tried to join the read
thread, leading to a SIGABRT. This manifested as Dolphin consistently
crashing when disconnecting a GC adapter and having a chance of crashing
a few seconds after connecting a GC adapter.

* ScmRevGen: Bump major version to 2412

---------

Co-authored-by: robxnano <89391914+robxnano@users.noreply.github.com>
Co-authored-by: Dentomologist <dentomologist@gmail.com>
Co-authored-by: JosJuice <josjuice@gmail.com>
Co-authored-by: Patrick Ferry <8967997+PatrickFerry@users.noreply.github.com>
Co-authored-by: Tillmann Karras <tilkax@gmail.com>
Co-authored-by: mitaclaw <140017135+mitaclaw@users.noreply.github.com>
Co-authored-by: TellowKrinkle <tellowkrinkle@gmail.com>
Co-authored-by: JMC47 <JMC4789@gmail.com>
Co-authored-by: LillyJadeKatrin <lilly.kitty.1988@gmail.com>
Co-authored-by: Martino Fontana <tinozzo123@gmail.com>
Co-authored-by: OatmealDome <OatmealDome@users.noreply.github.com>
Co-authored-by: Jules Blok <jules.blok@gmail.com>
Co-authored-by: lycheefox <lycheefox@inventati.org>
Co-authored-by: Mrlinkwii <Mrlinkwii@users.noreply.github.com>
Co-authored-by: Pokechu22 <Pokechu022@gmail.com>
Co-authored-by: Bob Conan <sufssl03@gmail.com>
Co-authored-by: Sintendo <3380580+Sintendo@users.noreply.github.com>
Co-authored-by: Jordan Woyak <jordan.woyak@gmail.com>
Co-authored-by: AGuy27 <91433739+AGuy27@users.noreply.github.com>
Co-authored-by: TryTwo <taolas@gmail.com>
Co-authored-by: DacoTaco <daco_65@hotmail.com>
Co-authored-by: dreamsyntax <dreamsyntax@gmail.com>
Co-authored-by: Niel Lebeck <niel.lebeck@gmail.com>
Co-authored-by: Admiral H. Curtiss <pikachu025@gmail.com>
Co-authored-by: Mateus B. Cassiano <mbc07@live.com>
Co-authored-by: Joshua de Reeper <joshua@dereeper.co.nz>
Co-authored-by: Carles Pastor <cpbadosa@gmail.com>
Co-authored-by: vaguerant <vaguerant@users.noreply.github.com>
Co-authored-by: OatmealDome <julian@oatmealdome.me>
This commit is contained in:
Nikhil Narayana 2025-08-09 17:28:36 -07:00 committed by GitHub
commit 85da59460a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
428 changed files with 56324 additions and 46031 deletions

View file

@ -31,7 +31,7 @@ if(GIT_FOUND)
endif()
# version number
set(DOLPHIN_VERSION_MAJOR "2409")
set(DOLPHIN_VERSION_MAJOR "2412")
set(DOLPHIN_VERSION_MINOR "0")
set(DOLPHIN_VERSION_PATCH ${DOLPHIN_WC_REVISION})

View file

@ -601,7 +601,7 @@ if(UNIX)
endif()
if(ENABLE_SDL)
dolphin_find_optional_system_library(SDL2 Externals/SDL 2.30.6)
dolphin_find_optional_system_library(SDL2 Externals/SDL 2.30.9)
endif()
if(ENABLE_ANALYTICS)
@ -718,7 +718,7 @@ dolphin_make_imported_target_if_missing(LibLZMA::LibLZMA LIBLZMA)
dolphin_find_optional_system_library_pkgconfig(ZSTD libzstd>=1.4.0 zstd::zstd Externals/zstd)
dolphin_find_optional_system_library_pkgconfig(ZLIB zlib-ng ZLIB::ZLIB Externals/zlib-ng)
add_subdirectory(Externals/zlib-ng)
dolphin_find_optional_system_library_pkgconfig(MINIZIP
"minizip>=4.0.4" minizip::minizip Externals/minizip-ng

View file

@ -189,7 +189,7 @@ Summary:
## <a name="cpp-code-general"></a>General
- The codebase currently uses C++20, though not all compilers support all C++20 features.
- See CMakeLists.txt "Enforce minimium compiler versions" for the currently supported compilers.
- See CMakeLists.txt "Enforce minimum compiler versions" for the currently supported compilers.
- Use the [nullptr](https://en.cppreference.com/w/cpp/language/nullptr) type over the macro `NULL`.
- If a [range-based for loop](https://en.cppreference.com/w/cpp/language/range-for) can be used instead of container iterators, use it.
- Obviously, try not to use `goto` unless you have a *really* good reason for it.
@ -227,7 +227,7 @@ Summary:
## <a name="cpp-code-functions"></a>Functions
- If a function parameter is a pointer or reference and its value or data isn't intended to be changed, please mark that parameter as `const`.
- Functions that specifically modify their parameters should have the respective parameter(s) marked as a pointer so that the variables being modified are syntaxically obvious.
- Functions that specifically modify their parameters should have the respective parameter(s) marked as a pointer so that the variables being modified are syntactically obvious.
- What not to do:
```c++

View file

@ -44,6 +44,18 @@
"title": "Dead to Rights",
"E23D98B2CE185C3993A40F2495D37E41B971BF91": "Fix audio issues"
},
"GEDE01": {
"title": "Eternal Darkness",
"21068C3CE905FB0CFFAA7408A93154AF8A5295A2": "Fix startup hang"
},
"GEDJ01": {
"title": "Eternal Darkness",
"7061F3CF11BF64D3BA7F32CCF2BAC42FF3614AB6": "Fix startup hang"
},
"GEDP01": {
"title": "Eternal Darkness",
"6F1B00517CBA30BEB738EAA90E71221378CD570D": "Fix startup hang"
},
"GEME7F": {
"title": "Egg Mania: Eggstreme Madness",
"CB04E00918C9C0F161715D21D046ED6620F7ADEF": "Force Progressive Scan"
@ -236,6 +248,14 @@
"title": "Ten Pin Alley 2",
"793642AC6862C2F3412035A9E3D7172CC4A1D5C7": "Fix crash on main menu"
},
"RMHE08": {
"title": "Monster Hunter Tri",
"CCF233DA57B3E75221870DE502955114B0D4E7FA": "Bloom OFF"
},
"RMHJ08": {
"title": "Monster Hunter Tri",
"29D3625B7ED577587E56AA07CB0EB8C47C97E823": "Bloom OFF"
},
"RMHP08": {
"title": "Monster Hunter Tri",
"1720C1173D4698167080DBFC4232F21757C4DA08": "Bloom OFF"

View file

@ -3,14 +3,6 @@
[Core]
# Values set here will override the main Dolphin settings.
[EmuState]
# The Emulation State. 1 is worst, 5 is best, 0 is not set.
EmulationStateId = 5
EmulationIssues =
[OnLoad]
# Add memory patches to be loaded once on boot here.
[OnFrame]
# Add memory patches to be applied every frame here.

View file

@ -1,19 +0,0 @@
{
"meta":
{
"title": "Bloom Texture Definitions",
"author": "SuperSamus"
},
"groups":
[
{
"name": "Bloom",
"targets": [
{
"type": "efb",
"texture_filename": "efb1_n000005_320x228_6"
}
]
}
]
}

View file

@ -1,4 +1,4 @@
TITLES = https://www.gametdb.com (type: Wii language: DE_unique version: 20230727194133)
TITLES = https://www.gametdb.com (type: Wii language: DE_unique version: 20241114210104)
R22J01 = FlingSmash
R23P52 = Barbie und Die Drei Musketiere
R25PWR = LEGO Harry Potter: Die Jahre 1-4
@ -56,7 +56,6 @@ R9EPNP = Brico Party: Werde Heimwerker-König
R9GPWR = Die Legende der Wächter
R9LP41 = Girls Life: Pyjama-Party
R9RPNG = Dance Party - Pop Hits
RAAE01 = Disco de Startup Wii
RB7P54 = Bully: Die Ehrenrunde
RBEP52 = Bee Movie: Das Game
RBEX52 = Bee Movie: Das Game
@ -419,7 +418,7 @@ SVQPVZ = Barbie und ihre Schwestern: Die Rettung der Welpen
SVVPAF = Die Croods: Steinzeit Party!
SW3PKM = Eurosport Winter Stars
CS4P00 = SingItStar NRJ Music Tour
RMCPCA = Mario Kart Wii (Katalanische Übersetzung)
RZDPCA = The Legend of Zelda: Twilight Princess (Katalanische Übersetzung)
SDNP01 = New SUPER DODO BROS wii
SIS1OH = SingItStar Custom: Volume 1
SISACD = SingItStar AC/DC
@ -428,14 +427,11 @@ W2CP = Gehirntraining
W2FP = Physiofun - Balance Training
W2GD = Phoenix Wright Ace Attorney: Justice for All (Deutsche Version)
W2GP = Phoenix Wright Ace Attorney: Justice for All
W2MP = Blaster Master: Overdrive
W2PP = Physiofun - Beckenboden Training
W3GD = Phoenix Wright Ace Attorney 3: Trials And Tribulations
W3KP = ThruSpace: High Velocity 3D Puzzle
W3MP = Die Drei Musketiere Einer für alle!
W4AP = Arcade Sports: Air Hockey, Bowling, Pool, Snooker
W6BP = Eco-Shooter: Plant 530
W72P = Successfully Learning German Year 3
W73P = Lernerfolg Grundschule Deutsch Klasse 4
W74P = Lernerfolg Grundschule Deutsch Klasse 5
W7IP = Lernerfolg Grundschule Deutsch Klasse 2
@ -444,12 +440,8 @@ W8WP = Happy Holidays Halloween
W9BP = Big Town Shoot
W9RP = Happy Holidays Christmas
WA4P = WarioWare: Do It Yourself - Showcase
WA7P = Toribash Violence Perfected
WA8P = Art Style: Penta Tentacles
WAEP = Around the world
WAFP = Airport Mania: First Flight
WAHP = Trenches: Generals
WALP = Art Style: light trax
WAOP = The Very Hungry Caterpillar´s ABC
WB2P = Strong Bad Episode 4: Dangeresque 3
WB3P = Strong Bad Episode 5: 8-bit is Enough
@ -487,7 +479,6 @@ WGGP = Gabrielle's Ghostly Groove: Monster Mix
WGPP = Zenquaria Virtuelles Aquarium
WGSD = Phoenix Wright: Ace Attorney (Deutsche Version)
WGSF = Phoenix Wright: Ace Attorney (French Version)
WGSP = Phoenix Wright: Ace Attorney
WHEE = Heracles: Chariot Racing
WHEP = Heracles: Chariot Racing
WHFP = Heavy Fire: Special Operations
@ -562,6 +553,7 @@ WWIP = Where's Wally? Fantastic Journey 1
WWRP = Excitebike: World Challenge
WWXP = Paper Wars Cannon Fodder
WXBP = Ben 10: Alien Force - The Rise of Hex
WXIP = Lernerfolg Grundschule Englisch Klasse 1
WYIP = escapeVektor: Chapter 1
WYSP = Yard Sale Hidden Treasures Sunnyville
WZIP = Rubik's Puzzle Galaxy: RUSH
@ -623,20 +615,13 @@ JDJP = Super Star Wars: The Empire Strikes Back
JDLP = Super Star Wars: Return of the Jedi
JDWP = Aero The Acrobat
JDZD = Mystic Quest Legend
NACE = The Legend of Zelda: Ocarina of Time
NACP = The Legend of Zelda: Ocarina of Time
NADE = Lylat wars
NAJN = Sin and Punishment
NAKS = Pokémon Snap
NAME = Kirby 64: The Crystal Shards
NAMP = Kirby 64: The Crystal Shards
NAND = Pokémon Puzzle League
NAOE = 1080° Snowboarding
NAOP = 1080°: TenEighty Snowboarding
NARE = The Legend of Zelda: Majora's Mask
NARP = The Legend of Zelda: Majora's Mask
NAYE = Ogre Battle 64: Person of Lordly Caliber
NAYM = Ogre Battle 64: Person of Lordly Caliber
LALP = Fantasy Zone II
LANP = Alex Kidd: The Lost Stars
LAPP = Wonder Boy III: The Dragon's Trap
@ -686,7 +671,6 @@ EAIP = Top Hunter
EBDP = Magical Drop 3
EBFP = Spin master
EBSP = The Path of the Warrior: Art of Fighting 3
ECAP = Real Bout Fatal Fury 2: The Newcomers
ECGP = Shock Troopers: 2nd Squad
E54P = GHOSTS'N GOBLINS
E55P = Commando
@ -703,21 +687,24 @@ HADE = Internet Kanal
HADP = Internet-Kanal
HAFP = Wetterkanal
HAGA = Nachrichtenkanal
HAGE = Nachrichtenkanal
HAGJ = Nachrichtenkanal
HAGP = Nachrichtenkanal
HAJP = Meinungskanal
HAKP = Vertrag/Kontakt
HAPP = Mii-Wettbewerbskanal
HATP = Nintendo-Kanal
HAVP = Glückstagskanal
HAWP = Metroid Prime 3 Preview
HAYA = Fotokanal
HCAP = Jam with the Band Live
HCAP = Jam with the Band Live-Kanal
HCCJ = Adresseinstellungen
HCFE = Wii Speak-Kanal
HCFP = Wii Speak-Kanal
HCGP = Wii & Internet
HCMP = Kirby TV-Kanal
HCRE = The Legend of Zelda: Skyward Sword - Speicherdaten-Update-Kanal für
HCRP = The Legend of Zelda: Skyward Sword - Speicherdaten-Update-Kanal für
RFPP = Wii Fit Plus-Kanal
RMCP = Mario Kart-Kanal
OHBC = Homebrew-Kanal
G2FD78 = Tak 2: Der Stab der Träume

File diff suppressed because it is too large Load diff

View file

@ -1,4 +1,4 @@
TITLES = https://www.gametdb.com (type: Wii language: ES_unique version: 20230727194141)
TITLES = https://www.gametdb.com (type: Wii language: ES_unique version: 20241114210112)
DCHJAF = We Cheer: Ohasta Produce ! Gentei Collabo Game Disc
R22J01 = FlingSmash
R23E52 = Barbie y las Tres Mosqueteras
@ -90,6 +90,7 @@ R9EPNP = Brico Party: ¡Cuidado! Mancha
R9GPWR = Ga'Hoole: La Leyenda de los Guardianes
R9LP41 = Girls Life: Pijama Party
R9TK69 = Tiger Woods PGA Tour 09
RAAE01 = Disco de Startup Wii
RB9D78 = Bratz: La Película
RB9P78 = Bratz: La Película
RB9X78 = Bratz: La Película
@ -109,7 +110,7 @@ RC2E78 = Cars: Mater-National
RC2P78 = Cars: La Copa Internacional de Mate
RC2X78 = Cars: La Copa Internacional de Mate
RC2Y78 = Cars: La Copa Internacional de Mate
RC3P41 = Catz: Diviértete con Nuevos Felinos
RC3P41 = Catz: ¡Diviértete con nuevos felinos!
RC3X41 = Catz: Diviértete con Nuevos Felinos
RC4SGT = Shin Chan: ¡Las Nuevas Aventuras para Wii!
RC8P7D = Crash: Guerra al Coco-Maníaco
@ -187,6 +188,7 @@ RH5PKM = Horse Life 2: Amigos para Siempre
RH6K69 = Harry Potter and the Half-Blood Prince
RH6P69 = Harry Potter y el Misterio del Príncipe
RHAK01 = Wii Play
RHAW01 = Wii Play
RHKJ18 = Hataraku Hit
RHKP18 = Job Island
RHQP4Q = Hannah Montana: Únete a Su Gira Mundial
@ -199,6 +201,7 @@ RHZP41 = Horsez: El Valle del Rancho
RI2P4Q = High School Musical: ¡Canta con ellos!
RI8E41 = Brothers in Arms: Road to Hill 30
RI9PGT = Divagirls: Princesas Sobre Hielo
RIAE52 = Ice Age: Dawn of the Dinosaurs
RIAI52 = Ice Age 3: El Origen de los Dinosaurios
RIAP52 = Ice Age 3: El Origen de los Dinosaurios
RIBPKM = Igor: El Videojuego
@ -225,7 +228,7 @@ RJAP52 = Call of Duty: Modern Warfare: Reflex
RJAX52 = Call of Duty: Modern Warfare: Reflex
RJDPKM = Mi Hospital de Animales
RJFE5G = Fitness Ultimatum 2009 de Jillian Michaels
RJFPKM = Fitness Ultimatum 2009 con Jillian Michaels
RJFPKM = Ponte en forma con Jillian Michaels
RJMPRS = Jumper
RJNE20 = Build 'n Race
RJOP99 = Ju-On: The Grudge
@ -437,7 +440,7 @@ RV9P78 = Avatar: La Leyenda de Aang - Dentro del Infierno
RVAP78 = Avatar: La Leyenda de Aang - La Tierra Ardiente
RVBPRS = Alvin y las Ardillas
RVHP41 = Scrabble Interactivo: Edición 2009
RVJPFR = So Blonde: Perdidos en el Caribe
RVJPFR = So Blonde: De Vuelta en la Isla
RVKJ99 = Valhalla Knights: Elder Saga
RVQP41 = Desafío Cine Party
RVTFMR = Veterinarios en Acción
@ -499,6 +502,8 @@ RZRPGT = El Destino de El Zorro
RZYF41 = Mi Experto en Vocabulario
RZYP41 = Mi Experto en Vocabulario
RZYS41 = Mi Experto en Vocabulario
S26PML = 2 en 1: Pony Friends 2 + Mi Granja de Caballos
S2VPAF = Victorious: Salto a la fama
S2XE41 = Los Pitufos 2
S2XP41 = Los Pitufos 2
S2ZP52 = Zhu Zhu Pets: Los Amigos del Bosque
@ -507,6 +512,7 @@ S3BEWR = Batman: El Intrépido Batman
S3BPWR = Batman: El Intrépido Batman
S3DJ18 = Deca Sporta 3
S3EP78 = Barbie: Planeta Fashionista
S3EXVZ = Barbie: Planeta Fashionista
S3MP69 = Los Sims 3
S3PP4Q = Disney Princesas: Reinos Mágicos
S5BPKM = Regreso al Futuro: El juego
@ -524,6 +530,7 @@ SALE4Q = Alicia en el País de las Maravillas
SALP4Q = Alicia en el País de las Maravillas
SAOP78 = Monster High: Instituto Monstruoso
SAOXVZ = Monster High: Instituto Monstruoso
SAVX5G = Alvin y las ardillas 2
SB2PNP = My Baby 2: ¡Mi Bebé Ha Crecido!
SB4K01 = Super Mario Galaxy 2
SB6P52 = Bakugan: Defensores de la Tierra
@ -551,6 +558,7 @@ SCYZ4Q = Cars 2: El Videojuego
SD2Y41 = Just Dance 2 (Edición Best Buy)
SD6PTV = Éxito en Primaria: Inglés - Curso 1-4
SD7PTV = Éxito en Primaria: Matemáticas - Curso 1-4
SDDPML = Sexos en Guerra: típicos tópicos
SDFP4Q = Disney Sing It: Éxitos de película
SDLP78 = La Gran Aventura de Dood
SDMEG9 = Gru, Mi Villano Favorito
@ -608,11 +616,12 @@ SJDZ41 = Just Dance 3 (Edición Target)
SJIEG9 = Fitness Ultimatum 2011 de Jillian Michaels
SJME5G = Fitness Ultimatum 2010 de Jillian Michaels
SJMPGT = Fitness Ultimatum 2010 de Jillian Michaels
SJXD41 = Just Dance 4
SJXD41 = Just Dance 4 Edición Especial
SK4E52 = Shrek: Felices Para Siempre
SK4P52 = Shrek: Felices Para Siempre
SK7PVZ = Disney Violetta: Ritmo & Música
SK7XVZ = Disney Violetta: Ritmo & Música
SKYZ52 = Skylanders Giants
SLAE78 = Airbender: El Último Guerrero
SLAP78 = Airbender: El Último Guerrero
SLAX78 = Airbender: El Último Guerrero (Edición Especial)
@ -636,7 +645,7 @@ SMNW01 = New Super Mario Bros. Wii (Chino Tradicional)
SN4JDA = Naruto Shippuuden Ryujinki
SNBP41 = NCIS Navy Investigación Criminal
SNYEVZ = Monster High: 13 Deseos
SNYPVZ = Monster High: 13 Deseos
SNYPVZ = Monster High: 13 Monstruo-deseos
SOTE52 = Wipeout
SOUJ01 = The Legend of Zelda: Skyward Sword
SP5PVV = The Kore Gang: La Exvasión de los Intraterrestres
@ -824,7 +833,6 @@ RJJG52 = Guitar Hero III Custom: JJ-KwiK's Edition
RMCE88 = Mario Carritos Definitivo 3.0
RMCEB8 = Mario Kart Manía
RMCEFO = Neptune777 Forza MAX Orígenes
RMCPCA = Mario Kart Wii (traducción al catalán)
RMGE52 = Guitar Hero III Custom: Megadeth
RMHC08 = Monster Hunter Tri (Personalizado)
RMMP52 = Guitar Hero III Custom: Metal Mayhem
@ -835,6 +843,7 @@ RSFC99 = Muramasa: The Demon Blade (Personalizado)
RSJESD = Guitar Hero III Custom: System of a Down
RSYP06 = Super Smash Bros. Brawl: YF06's Mod
RZDC01 = The Legend of Zelda: Twilight Princess (Personalizado)
RZDPCA = The Legend of Zelda: Twilight Princess (Traducción al catalán - Traducció al català)
SB4C01 = Super Mario Galaxy 2 (Personalizado)
SBOD3Q = SingItStar: Best of Disney
SDUEO1 = DU Super Mario Bros.: DU Edition
@ -857,7 +866,6 @@ W2FP = Entrenamiento de Equilibrio Physiofun
W2GD = Phoenix Wright Ace Attorney: Justice for All (Deutsche Version)
W2GE = Phoenix Wright: Ace Attorney Justice for All
W2GP = Phoenix Wright Ace Attorney: Justice for All
W2GS = Phoenix Wright Ace Attorney: Justice for All
W2JE = Just Jam
W2ME = Blaster Master: Overdrive
W2MP = Blaster Master Overdrive
@ -866,7 +874,6 @@ W3AE = Carmen Sandiego Adventures in Math: The Big Ben Burglary
W3GD = Phoenix Wright: Ace Attorney - Trials and Tribulations
W3GE = Phoenix Wright Ace Attorney: Trials and Tribulations
W3GP = Phoenix Wright: Ace Attorney - Trials and Tribulations
W3GS = Phoenix Wright: Ace Attorney Trials and Tribulations
W3KE = Thruspace
W3KP = ThruSpace
W3LE = Carmen Sandiego Adventures in Math: The Lady Liberty Larceny
@ -874,15 +881,10 @@ W3ME = The Three Musketeers: One for all
W3MP = Los Tres Mosqueteros ¡Uno para todos!
W3TE = Pearl Harbor Trilogy - 1941: Red Sun Rising
W44E = Stop Stress: A Day of Fury
W44P = Stop Stress: A Day of Fury
W4AP = Arcade Sports: Air Hockey, Bowling, Pool, Snooker
W5IE = 5 in 1 Solitaire
W6BE = Eco Shooter: Plant 530
W6BP = Eco-Shooter: Plant 530
W72P = Successfully Learning German Year 3
W73P = Successfully Learning German Year 4
W74P = Successfully Learning German Year 5
W7IP = Successfully Learning German Year 2
W8CE = Bit.Trip Core
W8CP = Bit.Trip Core
W8WE = Happy Holidays: Halloween
@ -899,8 +901,6 @@ WA8E = Art Style: Rotozoa
WA8P = Art Style: Penta Tentacles
WAEE = Around The World
WAFE = Airport Mania: First Flight
WAFP = Airport Mania: First Flight
WAHP = Trenches: Generals
WAKE = Carmen Sandiego Adventures in Math: The Case of the Crumbling Cathedral
WALE = Art Style: Light Trax
WALP = Art Style: Light Trax
@ -946,7 +946,7 @@ WDHP = Art Style: Rotohex
WDMJ = Dr. Mario & Bactericida
WDMP = Dr. Mario & Bactericida
WDPE = Dr. Mario Online Rx (Friend Battle Demo)
WDPP = Dr. Mario & Germ Buster (Friend Battle Demo)
WDPP = Dr. Mario & Bactericida (Demo Batalla Amistosa)
WDRE = Mr Driller W
WEME = Aha! I Got It! Escape Game
WEMP = Aha! I Got It! Escape Game
@ -981,7 +981,6 @@ WGPP = Zenquaria: El Acuario Virtual
WGSD = Phoenix Wright: Ace Attorney (Versión Alemana)
WGSE = Phoenix Wright: Ace Attorney
WGSF = Phoenix Wright: Ace Attorney (French Version)
WGSP = Phoenix Wright: Ace Attorney
WGSS = Phoenix Wright: Ace Attorney (Textos en español)
WHBE = Hubert the Teddy Bear: Winter Games
WHEE = Heracles: Chariot Racing
@ -1130,6 +1129,7 @@ WWXE = Paper Wars: Cannon Fodder
WWXP = Paper Wars Cannon Fodder
WXBE = Ben 10 Alien Force The Rise of Hex
WXBP = Ben 10: Alien Force - The Rise of Hex
WXIP = Éxito en primaria Inglés, curso 1º
WXPE = Paint Splash!
WXRE = Reel Fishing Ocean Challenge
WYIE = escapeVektor: Chapter 1
@ -1262,20 +1262,13 @@ JDWP = Aero The Acrobat
JDZD = Mystic Quest Legend
JDZF = Mystic Quest Legend
JDZP = Mystic Quest Legend
NACE = The Legend of Zelda: Ocarina of Time
NACP = The Legend of Zelda: Ocarina of Time
NAJ8 = The Legend of Zelda: Ocarina of Time (traducido al español)
NAJN = Sin and Punishment
NAKS = Pokémon Snap
NAME = Kirby 64: The Crystal Shards
NAMP = Kirby 64: The Crystal Shards
NAND = Pokémon Puzzle League
NAOE = 1080° Snowboarding
NAOP = 1080°: TenEighty Snowboarding
NARE = The Legend of Zelda: Majora's Mask
NARP = The Legend of Zelda: Majora's Mask
NAYE = Ogre Battle 64: Person of Lordly Caliber
NAYM = Ogre Battle 64: Person of Lordly Caliber
LAFN = Secret Commando
LAGE = Sonic the Hedgehog
LAJE = Sonic the Hedgehog 2
@ -1373,7 +1366,6 @@ EBQE = Ninja Master's
EBSE = The Path of the Warrior: Art of Fighting 3
EBSP = The Path of the Warrior: Art of Fighting 3
ECAE = Real Bout Fatal Fury 2: The Newcomers
ECAP = Real Bout Fatal Fury 2: The Newcomers
ECGE = Shock Troopers: 2nd Squad
ECGP = Shock Troopers: 2nd Squad
E54P = GHOSTS'N GOBLINS
@ -1403,6 +1395,8 @@ HAGJ = Canal Noticias
HAGP = Canal Noticias
HAJE = Canal Opiniones
HAJP = Canal Opiniones
HAKE = Documentos legales/Contacto
HAKP = Contrato/Contacto
HAPE = Canal Miirame
HAPP = Canal Concursos Mii
HATE = Canal Nintendo
@ -1411,12 +1405,24 @@ HAVP = Canal La fortuna te sonríe
HAWE = Metroid Prime 3 Preview
HAWP = Metroid Prime 3 Preview
HAYA = Canal Fotos
HCAJ = Band Bros. DX Speaker Channel
HCAP = Jam with the Band Live
HCAP = Canal Jam with the Band Live
HCCJ = Ajustes de dirección
HCFE = Canal Wii Speak
HCFP = Canal Wii Speak
HCGP = Wii e Internet
HCGX = Wii e Internet
HCLE = Netflix
HCMP = Canal Kirby TV
HCRE = The Legend of Zelda: Skyward Sword - Canal de actualización de datos de guardado
HCRP = The Legend of Zelda: Skyward Sword - Canal de actualización de datos de guardado
HCRP = The Legend of Zelda: Skyward Sword - Canal Actualización de datos
HCSP = Transferencia Wii U
HCTP = Transferencia de datos de Wii
HCYP = Manual Electrónico del Menú de Wii (Wii Mini)
RFNP = Canal Wii Fit
RFPE = Canal Wii Fit Plus
RFPP = Canal Wii Fit Plus
RGWP = Canal Rabbids
RGWX = Canal Rabbids
RMCE = Canal Mario Kart
RMCP = Canal Mario Kart
D64A = Wii64
@ -1429,10 +1435,12 @@ DSDA = SuperDump 1.3
JODI = Canal Homebrew
LULZ = Canal Homebrew
OHBC = Canal Homebrew
RMCX = Canal CTGP Revolution
G3AS69 = El Señor de los Anillos: La Tercera Edad
G3DX6L = Carmen Sandiego: El secreto de los tambores robados
G3FS69 = TimeSplitters: Futuro Perfecto
G4MP69 = Los Sims: Toman La Calle
G4ZP69 = Los Sims 2
G8MP01 = Paper Mario: La Puerta Milenaria
G9TP52 = El Espantatiburones
GAZS69 = Harry Potter y el prisionero de Azkaban
@ -1457,7 +1465,7 @@ GLNP69 = Looney Tunes: De Nuevo En Accion
GLOS69 = El Señor de los Anillos: Las Dos Torres
GNES78 = Buscando a Nemo
GOYS69 = GoldenEye: Agente Corrupto
GPQP6L = Las Supernenas: Arrasando las Salsas
GPQP6L = Las Supernenas: Escabeche Mutante
GPXP01 = Pokémon Box: Rubí y Zafiro
GQQD78 = Bob Esponja: ¡Luces, Cámara, Esponja!
GQQE78 = Bob Esponja: ¡Luces, Cámara, Esponja!
@ -1467,7 +1475,7 @@ GQQP78 = Bob Esponja: ¡Luces, Cámara, Esponja!
GQWX69 = Harry Potter: Quidditch Copa del Mundo
GR9P6L = El Imperio del Fuego
GSXS64 = Star Wars: Las Guerras Clon
GTYP69 = Ty, el tigre de Tasmani
GTYP69 = Ty, el tigre de Tasmania
GVLP69 = Marvel Némesis: La Rebelión de los Imperfectos
GWHP41 = Winnie the Pooh: La Fiesta de Cumpleaños
GX2S52 = X-Men Legends II: El Ascenso de Apocalipsis

View file

@ -1,4 +1,4 @@
TITLES = https://www.gametdb.com (type: Wii language: FR_unique version: 20230727194148)
TITLES = https://www.gametdb.com (type: Wii language: FR_unique version: 20241114210121)
R22J01 = FlingSmash
R23P52 = Barbie et les Trois Mousquetaires
R25PWR = LEGO Harry Potter : Années 1 à 4
@ -127,7 +127,7 @@ RCGP54 = Carnival: Fête Foraine
RCIP41 = Les Experts : Morts Programmées
RCKPGN = Sports Challenge : Defi Sports
RCLP4Q = Chicken Little : Aventures Intergalactiques
RCOPNP = Détective Conan : Enquête
RCOPNP = Détective Conan : Enquête à Mirapolis
RCVP41 = Far Cry : Vengeance
RCXP78 = All Star Pom-pom Girl
RD4PA4 = Dance Dance Revolution : Hottest Party 2
@ -198,6 +198,7 @@ RH3P4Q = High School Musical 3 Dance! Nos Années Lycée
RH5PKM = Horse Life : Amis pour la vie
RH6P69 = Harry Potter et le Prince de Sang-Mêlé
RH8P4F = Tomb Raider : Underworld
RHAW01 = Wii Play
RHCP52 = The History Channel : Battle for the Pacific
RHGP6Z = Agent Hugo : Lemoon Twist
RHKP18 = Job Island
@ -598,6 +599,7 @@ SINPNG = We Sing : Robbie Williams
SJ2PWR = Scooby-Doo! Panique dans la Marmite
SJ9P41 = Just Dance 2 : Extra Songs
SJTP41 = Just Dance : Best Of
SJXD41 = Just Dance 4 Edition Speciale
SK4P52 = Shrek 4: Il Etait une Fin
SK7PVZ = Disney Violetta : Rythme et musique
SK7XVZ = Disney Violetta : Rythme et musique
@ -616,7 +618,7 @@ SMBP8P = Super Monkey Ball : Step & Roll
SMFP4Q = Phineas et Ferb: Voyage dans la Deuxième Dimension
SMGP78 = Megamind
SMHPNK = Marvel Super Heroes 3D
SMSP78 = Marvel Super Hero Squad
SMSP78 = Marvel Super Hero Squad : Le Gant de l'Infini
SN4XGT = Naruto Shippuden : Dragon Blade Chronicles
SNBP41 = NCIS: Adapté de la série TV
SNHP69 = Need for Speed
@ -687,14 +689,13 @@ RMCE88 = Le Mario Kare Deluxa por jatras
RMCJ91 = Wiimms Mario Kart Fun 2021-09 Reservé
RMCK91 = Wiimms Mario Kart Fun 2021-09 Reservé
RMCP91 = Wiimms Mario Kart Fun 2021-09 Réservé
RMCPCA = Mario Kart Wii (traduction en catalan)
RZDPCA = The Legend of Zelda: Twilight Princess (traduction catalane)
SBOD3Q = StarSing : Chansons Magiques de Disney v1.1
SILP4Q = SingItStar Latino
SNBE66 = Nouveau Super Mario Bros. Wii Apocalypse
W2CP = Cérébral Challenge
W2FP = Entrainement d'équilibre Physiofun
W2GD = Phoenix Wright Ace Attorney: Justice for All (Deutsche Version)
W2GF = Phoenix Wright: Ace Attorney: Justice for All
W2GP = Phoenix Wright Ace Attorney : Justice for All
W2MP = Blaster Master Overdrive
W2PP = Programme de rééducation du périnée Physiofun
@ -707,10 +708,6 @@ W3MP = Les Trois Mousquetaires : Tous pour un!
W44P = Stop Stress : A Day of Fury
W4AP = Arcade Sports : Air Hockey, Bowling, Pool, Snooker
W6BP = Eco-Shooter: Plant 530
W72P = Successfully Learning German Year 3
W73P = Successfully Learning German Year 4
W74P = Successfully Learning German Year 5
W7IP = Successfully Learning German Year 2
W8CP = Bit.Trip Core
W8WP = Happy Holidays Halloween
W9BP = Big Town Shoot
@ -719,8 +716,6 @@ WA4P = WarioWare : Do It Yourself - Showcase
WA7P = Toribash - La violence perfectionnée
WA8P = ArtStyle: Penta Tentacles
WAEP = Around the world
WAFP = Airport Mania: First Flight
WAHP = Trenches: Generals
WALP = Art Style : light trax
WAOP = The Very Hungry Caterpillar´s ABC
WB2P = Strong Bad Episode 4 : Dangeresque 3
@ -761,7 +756,6 @@ WGGP = Gabrielle's Ghostly Groove: Monster Mix
WGPP = Zenquaria L'aquarium Virtuel
WGSE = Phoenix Wright: Ace Attorney
WGSF = Phoenix Wright: Ace Attorney (French Version)
WGSP = Phoenix Wright: Ace Attorney
WHEE = Heracles : Chariot Racing
WHEP = Heracles : Chariot Racing
WHFP = Heavy Fire: Special Operations
@ -853,6 +847,7 @@ WWRP = Excitebike: World Challenge
WWXP = Paper Wars Cannon Fodder
WXBE = Ben 10 Alien Force The Rise of Hex
WXBP = Ben 10 Alien Force The Rise of Hex
WXIP = Succès au primaire : Anglais, CP
WYIP = escapeVektor: Chapter 1
WYSP = Yard Sale Hidden Treasures Sunnyville
WZIP = Rubik's Puzzle Galaxy : RUSH
@ -923,14 +918,11 @@ JDWP = Aero The Acrobat
JDZF = Mystic Quest Legend
NACP = The Legend of Zelda : Ocarina of Time
NAJN = Sin and Punishment
NAKS = Pokémon Snap
NAME = Kirby 64 : The Crystal Shards
NAMP = Kirby 64 : The Crystal Shards
NAND = Pokémon Puzzle League
NAOP = 1080°: TenEighty Snowboarding
NARP = The Legend of Zelda : Majora's Mask
NAYE = Ogre Battle 64: Person of Lordly Caliber
NAYM = Ogre Battle 64: Person of Lordly Caliber
LALP = Fantasy Zone II
LANP = Alex Kidd: The Lost Stars
LAPP = Wonder Boy III: The Dragon's Trap
@ -990,7 +982,6 @@ EASE = Samurai Shodown 2
EBDP = Magical Drop 3
EBFP = Spin master
EBSP = The Path of the Warrior: Art of Fighting 3
ECAP = Real Bout Fatal Fury 2: The Newcomers
ECGP = Shock Troopers: 2nd Squad
E54P = GHOSTS'N GOBLINS
E55P = Commando
@ -1006,30 +997,38 @@ HACK = Chaîne Mii
HADE = Chaîne Internet
HADP = Chaîne Internet
HAFA = Chaîne météo
HAFE = Chaîne météo
HAFP = Chaîne météo
HAGA = Chaîne infos
HAGE = Chaîne infos
HAGJ = Chaîne infos
HAGP = Chaîne infos
HAJP = Chaîne votes
HAKE = Documents légaux/Contact
HAKP = Contrat/Contact
HAPE = Chaîne Regardez-Mii
HAPP = Chaîne concours Mii
HATE = Chaîne Nintendo
HATP = Chaîne Nintendo
HAVP = Chaîne jour de chance
HAWP = Metroid Prime 3 Preview
HAYA = Chaîne photos
HAYK = Chaîne Photo
HCAP = Jam with the Band Live
HCAP = Chaîne Jam with the Band Live
HCCJ = Paramètres d'adresse
HCFE = Chaîne Wii Speak
HCFP = Chaîne Wii Speak
HCGP = Wii et Internet
HCMP = Chaîne Kirby TV
HCRE = The Legend of Zelda: Skyward Sword - Chaîne mise à jour des données
HCRP = The Legend of Zelda: Skyward Sword - Chaîne mise à jour des données
RFPE = Chaîne Wii Fit Plus
RFPP = Chaîne Wii Fit Plus
RMCE = Chaîne Mario Kart
RMCP = Chaîne Mario Kart
DNUA = Donut Wii
OHBC = Chaîne Homebrew
RMCX = Chaîne Mario Kart Wii CTGP Revolution
RMCX = Chaîne CTGP Revolution
G2FF78 = Tak 2: Le Sceptre des Rêves
G3AF69 = Le Seigneur des Anneaux: Le Tiers Âge
G3DP6L = Carmen Sandiego : Le Secret des Tam-Tams Volés
@ -1057,7 +1056,6 @@ GENF69 = James Bond 007: Quitte ou Double
GF4F52 = Les 4 Fantastiques
GFHP6V = Un Voisin d'Enfer!
GFSF69 = Coupe du Monde FIFA 2002
GGVX78 = Bob l'Eponge : Le Film
GH2P69 = Need for Speed : Poursuite Infernale 2
GH4F69 = Harry Potter et la Coupe de Feu
GH5F52 = Nos Voisins, les Hommes

View file

@ -1,4 +1,4 @@
TITLES = https://www.gametdb.com (type: Wii language: IT_unique version: 20230727194156)
TITLES = https://www.gametdb.com (type: Wii language: IT_unique version: 20241114210129)
R23P52 = Barbie e le Tre Moschettiere
R25PWR = LEGO Harry Potter: Anni 1-4
R2AP7D = L'Era Glaciale 2: Il Disgelo
@ -298,6 +298,7 @@ SIAI52 = L'Era Glaciale 4: Continenti alla Deriva - Giochi Polari
SIIP8P = Mario & Sonic ai Giochi Olimpici di Londra 2012
SJ2PWR = Scooby-Doo! e la palude del mistero
SJ9P41 = Just Dance 2 - Extra Songs
SJXD41 = Just Dance 4 Edizione Speciale
SK4I52 = Shrek e vissero felici e contenti
SK4P52 = Shrek: E Vissero Felici E Contenti
SK7PVZ = Disney Violetta: Musica e Ritmo
@ -356,40 +357,29 @@ G01E01 = Super Smash Bros. Melee: Remix SD
MILPSI = SingItStar Miliki
R15POH = SingItStar Radio 105
RGGE52 = Guitar Hero III Custom: Rock The Games
RMCPCA = Mario Kart Wii (traduzione in catalano)
RSJESD = Guitar Hero III Custom: System Of A Down
RZDPCA = The Legend of Zelda: Twilight Princess (traduzione in catalano)
S02PES = SingItStar 90's
SILP4Q = Sing It: Latino
SP9P4Q = SingItStar POP 2009
WFFF4I = Fatal Frame 4: La Maschera dell'eclissi lunare
W2CP = Brain Challenge L'Allena-Mente
W2FP = Physiofun - Balance Training
W2FP = Physiofun: Balance Training
W2GD = Phoenix Wright Ace Attorney: Justice for All (Deutsche Version)
W2GI = Phoenix Wright: Ace Attorney: Justice for All
W2GP = Phoenix Wright Ace Attorney: Justice for All
W2MP = Blaster Master: Overdrive
W2PP = Physiofun: Pelvic Floor Training
W3GI = Phoenix Wright: Ace Attorney: Trials and Tribulations
W3KP = ThruSpace: High Velocity 3D Puzzle
W3MP = I Tre Moschettieri Uno per tutti!
W44P = Stop Stress: A Day of Fury
W4AP = Arcade Sports: Air Hockey, Bowling, Pool, Snooker
W6BP = 530 ECO SHOOTER
W72P = Successfully Learning German Year 3
W73P = Successfully Learning German Year 4
W74P = Successfully Learning German Year 5
W7IP = Successfully Learning German Year 2
W8CP = Bit.Trip Core
W8WP = Happy Holidays Halloween
W9BP = Big Town Shoot
W9RP = Happy Holidays Christmas
WA4P = WarioWare: Do It Yourself - Showcase
WA7P = Toribash Violence Perfected
WA8P = Art Style: Penta Tentacles
WAEP = Around the world
WAFP = Airport Mania: First Flight
WAHP = Trenches: Generals
WALP = Art Style: light trax
WAOP = The Very Hungry Caterpillar´s ABC
WB2P = Strong Bad Episode 4: Dangeresque 3
WB3P = Strong Bad Episode 5: 8-bit is Enough
@ -423,8 +413,6 @@ WGFP = Girlfriends Forever: Magic Skate
WGGP = Gabrielle's Ghostly Groove: Monster Mix
WGPP = Zenquaria™: Acquario virtuale
WGSF = Phoenix Wright: Ace Attorney (French Version)
WGSI = Phoenix Wright: Ace Attorney
WGSP = Phoenix Wright: Ace Attorney
WHEP = Heracles: Chariot Racing
WHFP = Heavy Fire: Special Operations
WHRP = Heron: Steam Machine
@ -557,12 +545,7 @@ JDLP = Super Star Wars: Return of the Jedi
JDWP = Aero The Acrobat
JDZP = Mystic Quest Legend
JECM = CHRONO TRIGGER
NACP = The Legend of Zelda: Ocarina of Time
NAKS = Pokémon Snap
NAMP = Kirby 64: The Crystal Shards
NAOP = 1080°: TenEighty Snowboarding
NARP = The Legend of Zelda: Majora's Mask
NAYM = Ogre Battle 64: Person of Lordly Caliber
LALP = Fantasy Zone II
LANP = Alex Kidd: The Lost Stars
LAPP = Wonder Boy III: The Dragon's Trap
@ -615,7 +598,6 @@ EAIP = Top Hunter
EBDP = Magical Drop 3
EBFP = Spin master
EBSP = The Path of the Warrior: Art of Fighting 3
ECAP = Real Bout Fatal Fury 2: The Newcomers
ECGP = Shock Troopers: 2nd Squad
E54P = GHOSTS'N GOBLINS
E55P = Wolf of the Battlefield: Commando
@ -631,20 +613,24 @@ HADE = Canale Internet
HADP = Canale Internet
HAFP = Canale Meteo
HAGA = Canale Notizie
HAGE = Canale Notizie
HAGJ = Canale Notizie
HAGP = Canale Notizie
HAJP = Canale Vota Anche Tu
HAKP = Accordo/Contatto
HAPP = Canale Concorsi Mii
HATP = Canale Nintendo
HAVP = Canal La fortuna ti sorride
HAVP = Canale La fortuna ti sorride
HAWP = Metroid Prime 3 Preview
HAYA = Canale Foto
HCAP = Canale Jam with the Band Live
HCCJ = Impostazioni indirizzo
HCFE = Canale Wii Speak
HCFP = Canale Wii Speak
HCGP = Wii e Internet
HCMP = Canale TV Kirby
HCRE = The Legend of Zelda: Skyward Sword - Canale Aggrioornamento dati di
HCRP = The Legend of Zelda: Skyward Sword - Canale Aggrioornamento dati di
RFPP = Canale Wii Fit Plus
RMCP = Canale Mario Kart
JODI = Canale Homebrew
LULZ = Canale Homebrew

View file

@ -1,6 +1,7 @@
TITLES = https://www.gametdb.com (type: Wii language: JA_unique version: 20240420135206)
TITLES = https://www.gametdb.com (type: Wii language: JA_unique version: 20241114210137)
D2AJAF = みんなで冒険!ファミリートレーナー 体験版
DCHJAF = WE CHEER: おはスタプロデュース!限定コラボゲームディスク
DFNJ01 = Wiiフィット 体験版
DHHJ8J = 平野綾 Premiumムービーディスク from 涼宮ハルヒの激動
DK6J18 = コロリンパ2 -アンソニーと黃金のひまわりのタネ-
DMHJ08 = モンスターハンター 3 -tri- (Demo)
@ -17,7 +18,7 @@ R2GJAF = FRAGILE 〜さよなら月の廃墟〜
R2JJAF = 太鼓の達人Wii
R2LJMS = Hula Wii フラで始める 美と健康!!
R2PJ9B = スイングゴルフ パンヤ 2ndショット
R2QJC0 = クッキングママ 2 たいへん!!ママはおおいそがし!
R2QJC0 = クッキングママ2 たいへん!!ママはおおいそがし!
R2SJ18 = DECA SPORTA 2 Wiiでスポーツ”10”種目
R2UJ8P = レッツタップ
R2VJ01 = 罪と罰 宇宙の後継者
@ -396,6 +397,7 @@ S5KJAF = 太鼓の達人Wii 超ごうか版
S5QJC8 = 戦国無双 3 猛将伝
S5SJHF = イナズマイレブンGO ストライカーズ 2013
S6TJGD = ドラゴンクエストX オールインワンパッケージ
S72E01 = 星のカービィ 20周年スペシャルコレクション
S72J01 = 星のカービィ 20周年スペシャルコレクション
S7CJAF = 仮面ライダー クライマックスヒーローズ フォーゼ
SAAJA4 = ウイニングイレブン プレーメーカー 2013
@ -434,7 +436,7 @@ SGIJA4 = GTI Club ワールド シティ レース
SGKJC8 = チャンピオンジョッキー:ギャロップレーサー&ジーワンジョッキー
SGVJAF = ゴーバケーション
SH2JMS = Hula Wii 楽しくフラを踴ろう!!
SHIJ2N = シェイプボクシング 2 Wiiでエンジョイダイエット
SHIJ2N = シェイプボクシング2 Wiiでエンジョイダイエット
SIIE8P = マリオ&ソニック AT ロンドンオリンピック
SIIJ01 = マリオ&ソニック AT ロンドンオリンピック
SIIP8P = マリオ&ソニック AT ロンドンオリンピック
@ -500,6 +502,7 @@ STKJ08 = タツノコ VS.カプコン アルティメットオール・スター
STQJHF = イナズマイレブン ストライカーズ
SUKE01 = 星のカービィWii
SUKJ01 = 星のカービィWii
SUKP01 = 星のカービィWii
SUMJC8 = ウイニングポストワールド 2010
SUPJ01 = Wiiパーティー
SUXJA4 = ウイニングイレブン プレーメーカー 2010
@ -564,7 +567,7 @@ W4KJ = 鹿狩
W4OJ = シカクいアタマをマルくする。 毎日みんなでチャレンジ編
W6BJ = 530 エコシューター
W82J = 陣取りアクション! 太閤検地 ~からくり城のナゾ~
W8CJ = BIT. TRIP CORE ~リズム星人の逆襲~
W8CJ = BIT.TRIP CORE ~リズム星人の逆襲~
W8DJ = メビウス・ドライブ
W8IJ = ハチワンダイバー -81diver- Wii
W8PJ = おうちで∞プチプチWii
@ -587,7 +590,7 @@ WBAJ = バクたん
WBBJ = ボードウォリアーズ
WBJJ = 牧場物語シリーズ まきばのおみせ
WBKJ = ARKANOID Plus
WBLJ = BUBBLE BOBBLE Wii
WBLJ = バブルボブルWii
WBMJ = みんなのポケモン牧場 プラチナ対応版
WBNJ = 盆栽バーバー
WBSJ = POP ~ポップ~
@ -760,8 +763,8 @@ WZJJ = @SIMPLEシリーズ Vol.5 THE 柔道
WZMJ = @SIMPLEシリーズ Vol.3 THE 麻雀
WZPJ = ゾンビ イン ワンダーランド
WZZJ = くまなげ ~ピイナの好きな赤いキャンディ パズル編~
XHCJ = 光と闇の姫君と世界征服の塔 -FINAL FANTASY CHRISTAL CHRONICLES- (Demo)
XHEJ = BIT. TRIP BEAT (Demo)
XHCJ = 光と闇の姫君と世界征服の塔 -FINAL FANTASY CRYSTAL CHRONICLES- (Demo)
XHEJ = BIT.TRIP BEAT (Demo)
XHFJ = グーの惑星 (Demo)
XHHJ = ポケモン不思議のダンジョン めざせ!光の冒険団 (Demo)
XHJJ = すりぬけアナトウス (Demo)
@ -1003,6 +1006,7 @@ JCYJ = 大航海時代Ⅱ
JCZJ = スーパー蒼き狼と白き牝鹿 元朝秘史
JD2J = 美少女雀士 スーチーパイ
JD3J = SUPER E.D.F. EARTH DEFENSE FORCE
JD4J = ラッシングビート
JD5J = ラッシング・ビート 乱 複製都市
JD6J = ファイヤー・ファイティング
JD7J = 高橋名人の大冒険島
@ -1577,7 +1581,7 @@ E36J01 = 月刊任天堂店頭デモ 2006年08月号
E37J01 = 月刊任天堂店頭デモ 2006年09月号
G2DJB2 = デジモンバトルクロニクル
G2GJB2 = 機動戦士ガンダム ガンダムvs.Zガンダム
G2MJ01 = メトロイドプライム 2 ダークエコーズ
G2MJ01 = メトロイドプライム2 ダークエコーズ
G2NJ13 = ニード・フォー・スピード アンダーグラウンド 2
G2SJGE = 式神の城Ⅱ
G2VJ08 = ビューティフルジョー 2 ブラックフィルムの謎
@ -1629,7 +1633,7 @@ GBZJ08 = バイオハザード 0
GC4JBN = 新世紀GPXサイバーフォーミュラ Road To The Evolution
GC6J01 = ポケモンコロシアム
GC8JA4 = クラッシュ・バンディクー 爆走!ニトロカート
GCBJA4 = クラッシュ・バンディクー 4 さくれつ!魔神パワー
GCBJA4 = クラッシュ・バンディクー4 さくれつ!魔神パワー
GCCJ01 = FINAL FANTASY CRYSTAL CHRONICLES
GCCJGC = FINAL FANTASY CRYSTAL CHRONICLES
GCDJ08 = バイオハザード -コード:ベロニカ- 完全版
@ -1718,7 +1722,9 @@ GKRJB2 = ケロケロキングDX
GKTJA4 = キャプテン翼 ~黄金世代の挑戦~
GKWJ18 = ドリームミックスTV ワールドファイターズ
GKXJE7 = 極・麻雀DXⅡ The 4th MONDO21Cup
GKYE01 = カービィのエアライド
GKYJ01 = カービィのエアライド
GKYP01 = カービィのエアライド
GL3JE8 = ルパン三世:海に消えた秘宝
GLEJ08 = バイオハザード 3 ラストエスケープ
GLIJA7 = SPECIAL人生ゲーム
@ -1830,7 +1836,9 @@ GYBJ01 = ドンキーコング ジャングルビート
GYFJA4 = 遊戯王 フォルスバウンドキングダム 虚構に閉ざされた王国
GYKJB2 = 金色のガッシュベル!! 友情タッグバトル2
GYMJA4 = 実況パワフルメジャーリーグ
GYQE01 = スーパーマリオスタジアム ミラクルベースボール
GYQJ01 = スーパーマリオスタジアム ミラクルベースボール
GYQP01 = スーパーマリオスタジアム ミラクルベースボール
GYWJ99 = 牧場物語 ワンダフルライフ
GZ2J01 = ゼルダの伝説 トワイライトプリンセス [GC]
GZBJB2 = ドラゴンボールZ

View file

@ -1,4 +1,4 @@
TITLES = https://www.gametdb.com (type: Wii language: KO_unique version: 20230727194210)
TITLES = https://www.gametdb.com (type: Wii language: KO_unique version: 20241114210146)
091E00 = 영화 채널 설치 디스크 Ver. A
410E01 = Wii 백업 디스크 v1.31
413E01 = 디스크업데이트 디스크
@ -31,7 +31,6 @@ DQGP69 = 마이심즈 레이싱 체험판
DRME18 = 룸즈: 메인 빌딩 체험판
DSFE7U = 무라마사: 데몬 블레이드 체험판
DSRJ8P = 소닉과 비밀의 링 체험판
DTOJ8P = 428: 봉쇄된 시부야에서 체험판
DTZJ08 = 보물섬 Z 발바로스의 보물 체험판
DWEJA4 = 위닝 일레븐 플레이 메이커 2008 체험판
DWEPA4 = 프로 에볼루션 사커 2008 체험판
@ -134,12 +133,12 @@ R3JE5G = 고 플레이 써커스 스타
R3KP6N = 고층 건물
R3LEWR = 그린 랜턴: 반지의 선택
R3LPWR = 그린 랜턴: 맨헌터의 위협
R3ME01 = 메트로이드 프라임: 3부작
R3MP01 = 메트로이드 프라임: 3부작
R3ME01 = 메트로이드 프라임 트릴로지
R3MP01 = 메트로이드 프라임 트릴로지
R3NEXS = 길티기어 이그젝스 액센트 코어 플러스
R3NPH3 = 길티기어 이그젝스 액센트 코어 플러스
R3OE01 = 메트로이드: 다른 M
R3OJ01 = 메트로이드: 다른 M
R3OE01 = 메트로이드: 다른 M
R3OJ01 = 메트로이드: 다른 M
R3OP01 = 메트로이드: 다른 M
R3PEWR = 스피드 레이서: 비디오게임
R3PJ52 = 스피드 레이서
@ -445,10 +444,10 @@ R92J01 = Wii로 즐기는 피크민 2
R92P01 = 피크민 2
R94PMR = 얼티밋 레드 볼 첼린지
R94XMR = 얼티밋 레드 볼 첼린지
R96EAF = 바람의 크로노아 - 판토마일의 문
R96JAF = 바람의 크로노아 - 판토마일의 문
R96KAF = 바람의 크로노아: 판토마일의 문
R96PAF = 바람의 크로노아 - 판토마일의 문
R96EAF = 바람의 크로노아 Door to Phantomile
R96JAF = 바람의 크로노아 Door to Phantomile
R96KAF = 바람의 크로노아 Door to Phantomile
R96PAF = 바람의 크로노아 Door to Phantomile
R97E9B = 패밀리 펀 풋볼
R9AE52 = 엑티비젼 데모 액션 팩 체험판
R9BPMT = 뚝딱뚝딱 밥아저씨: 즐거운 축제
@ -500,8 +499,8 @@ RB4X08 = 레지던트 이블 4: Wii 에디션
RB5E41 = 브라더스 인 암즈: 언드 인 블러드
RB5P41 = 브라더스 인 암즈: 언드 인 블러드
RB6J18 = 봄버맨
RB7E54 = 불리: 장학금 에디션
RB7P54 = 불리: 장학금 에디션
RB7E54 = 불리: 스칼라쉽 에디션
RB7P54 = 불리: 스칼라쉽 에디션
RB8E70 = 백야드 야구 '09
RB9D78 = 브라츠: 영화
RB9E78 = 브라츠: 영화
@ -576,7 +575,7 @@ RC3E41 = 애완동물 고양이들 2
RC3J41 = 고양이와 마법의 모자
RC3P41 = 고양이들
RC3X41 = 고양이들
RC4JD9 = 크레용 신 짱: 최강 가족 카스카베 Wii
RC4JD9 = 크레용 신 짱: 최강 가족 카스카베 Wii
RC4SGT = 짱구는 못말려: 새로운 모험 Wii
RC5JDQ = 청소 전대 크린 키퍼
RC7E20 = 바다 몬스터들: 선사시대 모험
@ -618,7 +617,7 @@ RCLE4Q = 디즈니의 치킨 리틀: 액션 에이스
RCLP4Q = 디즈니의 치킨 리틀: 액션 에이스
RCOJ99 = 명탐정 코난: 추억의 환상
RCOK99 = 명탐정 코난: 추억의 환상
RCOKZF = 명탐정 홈즈 추억의 환상
RCOKZF = 명탐정 코난: 추억의 환상
RCOPNP = 명탐정 코난: 추억의 환상
RCPE18 = 코로린파: 구슬 매니아
RCPJ18 = 코로린파
@ -1095,10 +1094,10 @@ RK2JEB = 트라우마 센터: 새로운 피
RK2P01 = 트라우마 센터: 새로운 피
RK3J01 = 앤드 검색
RK4JAF = 결계사: 흑망루의 그림자
RK5E01 = 털실 커비 이야기
RK5J01 = 털실 커비 이야기
RK5K01 = 털실 커비 이야기
RK5P01 = 털실 커비 이야기
RK5E01 = 털실 커비 이야기
RK5J01 = 털실 커비 이야기
RK5K01 = 털실 커비 이야기
RK5P01 = 털실 커비 이야기
RK6E18 = 구슬 이야기: 코로린파
RK6J18 = 코로린파 2 - 앤써니와 황금 해바라기 씨앗
RK6P18 = 마블! 균형 도전
@ -1255,12 +1254,11 @@ RM9PGM = 버섯맨: 포자 대전
RMAE01 = 마리오 파워 테니스
RMAJ01 = Wii로 즐기는 마리오 테니스 GC
RMAP01 = 마리오 파워 테니스
RMBE01 = 마리오 슈퍼 강타자들
RMBJ01 = 슈퍼 마리오 스타디움 패밀리 야구
RMBE01 = 마리오 슈퍼 슬러거즈
RMBJ01 = 슈퍼 마리오 스타디움 패밀리 베이스볼
RMCE01 = 마리오 카트 Wii
RMCJ01 = 마리오 카트 Wii
RMCK01 = 마리오 카트 Wii
RMCK50 = Wiimms 마리오 카트-텍스쳐즈 2022-12.한국
RMCKBR = 마리오 카트 Brown
RMCP01 = 마리오 카트 Wii
RMDE69 = 매든 NFL 07
@ -1302,7 +1300,7 @@ RMRXNK = 코코토 매직 써커스
RMSE52 = 마벨: 얼티밋 얼라이언스 2
RMSP52 = 마벨: 얼티밋 얼라이언스 2
RMTJ18 = 모모타로 전철 16 홋카이도 대이동의 권!
RMUE52 = 마: 얼티밋 얼라이언스
RMUE52 = 마: 얼티밋 얼라이언스
RMUJ2K = 마벨: 얼티밋 얼라이언스
RMUP52 = 마벨: 얼티밋 얼라이언스
RMVE69 = 메달 오브 아너: 선봉
@ -1671,7 +1669,7 @@ RS3P52 = 스파이더맨 3
RS3X52 = 스파이더맨 3
RS4EXS = 식신의 성 III
RS4JJF = 식신의 성 III
RS4PXS = 식신의 성 III
RS4PH3 = 식신의 성 III
RS5EC8 = 사무라이 전사들: 카타나
RS5JC8 = 전국무쌍 카타나
RS5PC8 = 사무라이 전사들: 카타나
@ -1684,7 +1682,7 @@ RSAE78 = 스펀지밥 - 아틀란티스
RSAP78 = 스펀지밥 - 아틀란티스
RSBE01 = 대난투 스매시 브라더스 X
RSBJ01 = 대난투 스매시 브라더스 X
RSBK01 = 대난투 스매시 브라더스
RSBK01 = 대난투 스매시 브라더스 X
RSBP01 = 대난투 스매시 브라더스 X
RSCD7D = 스카페이스: 세상은 너의 것
RSCE7D = 스카페이스: 세상은 너의 것
@ -1708,10 +1706,10 @@ RSJP41 = 파검: 기사단의 그림자 (감독판)
RSKE52 = 슈렉 3
RSKP52 = 슈렉 3
RSKX52 = 슈렉 3
RSLEAF = 소울 칼리버: 전설들
RSLJAF = 소울 칼리버: 전설들
RSLKAF = 소울칼리버: 전설들
RSLPAF = 소울 칼리버: 전설들
RSLEAF = 소울 칼리버 레전즈
RSLJAF = 소울 칼리버 레전즈
RSLKAF = 소울 칼리버 레전즈
RSLPAF = 소울 칼리버 레전즈
RSME8P = 슈퍼 몽키 볼: 바나나 블리츠
RSMJ8P = 슈퍼 몽키 볼: 우키 우키 파티 대집합
RSMP8P = 슈퍼 몽키 볼: 바나나 블리츠
@ -1788,10 +1786,10 @@ RTDK8M = 신중화대선 ~마이클과 메이메이의 모험~
RTEE78 = 파우스 & 클라우스 : 애완동물 수의사
RTEHMR = 실제 이야기들: 수의사
RTEPFR = 나의 수의사 연습
RTFE52 = 트랜스포머: 게임
RTFJ52 = 트랜스포머: 게임
RTFK52 = 트랜스포머: 더 게임
RTFP52 = 트랜스포머: 게임
RTFE52 = 트랜스포머: 게임
RTFJ52 = 트랜스포머: 게임
RTFK52 = 트랜스포머: 더 게임
RTFP52 = 트랜스포머: 게임
RTFX52 = 트랜스포머즈: 게임
RTFY52 = 트랜스포머즈: 게임
RTGJ18 = 엄선 테이블 게임 Wii
@ -1932,7 +1930,6 @@ RVEFMR = 알로, 슈티
RVFE20 = 빅풋: 충돌 진로
RVFP7J = 빅풋: 충돌 진로
RVGE78 = 머브 그리핀의 십자말풀이
RVGP78 = 마곳의 워드 브레인
RVHP41 = 스크래블 인터렉티브: 2009 에디션
RVIE4F = 바이오니클 히어로즈
RVIP4F = 바이오니클 히어로즈
@ -2345,8 +2342,8 @@ S6IP78 = 디즈니 공주들: 매혹적인 이야기 책들
S6RE52 = 주먹왕 랄프
S6RP52 = 주먹왕 랄프
S6TJGD = 드래곤 퀘스트 X (올 인 원 팩키지)
S72E01 = 커비의 꿈 컬렉션: 스페셜 에디
S72J01 = 별의 커비: 20 주년 스페셜 컬렉션
S72E01 = 별의 커비 20주년 스페셜 컬렉
S72J01 = 별의 커비 20주년 스페셜 컬렉션
S75E69 = 모노폴리 스트리츠
S75P69 = 모노폴리 스트리츠
S7AEWR = 레고 배트맨 2: DC 슈퍼 히어로즈
@ -2479,7 +2476,7 @@ SC7S52 = 콜 오브 듀티: 블랙 옵스
SC7Z52 = 콜 오브 듀티: 블랙 옵스
SC8E01 = Wii 플레이: 모션
SC8J01 = Wii 리모콘 플러스 버라이어티
SC8K01 = Wii 리모컨플러스로 즐기는 버라이어티 게임 박스
SC8K01 = Wii리모컨플러스로 즐기는 버라이어티 게임박스
SC8P01 = Wii 플레이: 모션
SC9P52 = 카벨라의 위대한 게임 사냥꾼 2010
SCAE18 = 콜링: 검은 착신
@ -2611,7 +2608,7 @@ SESEWR = 세서미 스트리트: 레디, 세트, 그로버!
SESPWR = 세서미 스트리트: 레디, 세트, 그로버!
SESUWR = 세서미 스트리트: 레디, 세트, 그로버!
SEUPEY = 레트로 시티 램페이지 DX
SEVPEY = 강탈: 하와이
SEVPEY = 쉐이크다운: 하와이
SEZJHF = 이나즈마 일레븐 스트라이커즈 2012 익스트림
SF2P64 = 스타 워즈: 해방된 포스 II
SF4E20 = 플랫아웃
@ -2620,9 +2617,9 @@ SF5E41 = 핏 인 식스
SF5J41 = 핏 인 식스: 몸을 단련하는 6 가지 요소
SF5P41 = 나의 피트니스 코치: 클럽
SF7E41 = 패밀리 Feud 2012 에디션
SF8E01 = 동키 콩: 컨트리 리턴즈
SF8J01 = 동키 콩 리턴즈
SF8P01 = 동키 콩: 컨트리 리턴즈
SF8E01 = 동키 리턴즈
SF8J01 = 동키콩 리턴즈
SF8P01 = 동키 리턴즈
SFAE41 = 패밀리 퓨드 데케이드즈
SFAJGD = 강철의 연금술사: 황혼의 소녀
SFBE70 = 백야드 스포츠 풋볼: 루키 러쉬
@ -2996,7 +2993,7 @@ SMUJAF = 대괴수 배틀: 울트라 콜로세움 DX - 울트라 전사 대집
SMVE54 = 메이저 리그 야구 2K11
SMWE4Z = 베어 그릴스의 인간과 자연의 대결
SMYE20 = 사소한 도전 60초
SMZE78 = 마 슈퍼 히어로 스쿼드: 코믹 컴뱃
SMZE78 = 마 슈퍼 히어로 스쿼드: 코믹 컴뱃
SMZP78 = 마벨 슈퍼 히어로 스쿼드: 코믹 컴뱃
SN2E69 = 너프 N-스트라이크 더블 블래스트 번들
SN3EYG = 맥시멈 레이싱: 랠리 레이서
@ -3044,9 +3041,9 @@ SNRE52 = 나스카 언리쉬드
SNSE52 = 나스카 2011: 게임
SNTEXN = 넷플릭스 인스턴트 스트리밍 디스크
SNUPJW = 해피 뉴런 아카데미
SNVE69 = 니드 포 스피드: 도망
SNVJ13 = 니드 포 스피드: 도망
SNVP69 = 니드 포 스피드: 도망
SNVE69 = 니드 포 스피드: 더 런
SNVJ13 = 니드 포 스피드: 더 런
SNVP69 = 니드 포 스피드: 더 런
SNXJDA = 나루토 질풍전: 격투 닌자 대전! 스페셜
SNYEVZ = 몬스터 하이: 13 개의 소원들
SNYPVZ = 몬스터 하이: 13 개의 소원들
@ -3345,10 +3342,10 @@ SU8PNG = 위 싱: 독일 히츠 2
SU9E4Q = 디즈니 비행기들
SU9P4Q = 디즈니 비행기들
SU9X4Q = 디즈니 비행기들
SUKE01 = 커비의 드림랜드 귀환
SUKE01 = 별의 커비 Wii
SUKJ01 = 별의 커비 Wii
SUKK01 = 별의 커비 Wii
SUKP01 = 커비의 모험 Wii
SUKP01 = 별의 커비 Wii
SUMJC8 = 위닝 포스트 월드 2010
SUNEYG = 디어 드라이브 레전드즈
SUOE41 = 힙합 댄스 익스피리언스
@ -3442,7 +3439,7 @@ SX2PNG = 정글 카트즈
SX3EXJ = 판도라의 탑
SX3J01 = 판도라의 탑: 너의 곁으로 돌아갈 때까지
SX3P01 = 판도라의 탑
SX4E01 = 제노블레이드 연대기
SX4E01 = 제노블레이드 크로니클스
SX4J01 = 제노블레이드
SX4P01 = 제노블레이드 연대기
SX5E4Z = 산타 클로스가 마을로 오고 있어!
@ -3724,6 +3721,7 @@ GZBEB2 = 금색의 갓슈벨: 고! 고! 마물 파이트!!
GZLK01 = 젤다의 전설: 바람의 지휘봉
HBWE01 = 뉴 슈퍼 마리오 브라더스 Wii: 헬보이 에디션
HSMP01 = 하더 슈퍼 마리오 브라더스 Wii
J5EE41 = 저스트 댄스 2025 에디션
JF3E41 = 저스트 댄스 포커스 3
JOUE01 = 뉴 슈퍼 마리오 브라더스 Wii 10 여행
KHPE01 = 커비 에어 라이드 핵 팩
@ -4001,6 +3999,8 @@ RMCK46 = Wiimms 마리오 카트 Wii 펀 2021-09.한국
RMCK47 = Wiimms 마리오 카트 Wii 히스토리 2021-12.한국
RMCK48 = Wiimms 마리오 카트 Wii 펀 2022-05.한국
RMCK49 = Wiimms 마리오 카트-펀 2022-11.한국
RMCK50 = Wiimms 마리오 카트-텍스쳐즈 2022-12.한국
RMCK51 = Wiimms 마리오 카트 Wii 펀 2023-09.한국
RMCK86 = 마리오 카트 크리스 3.5 캐럿
RMCKYP = 요시 레이싱 리조트 플러스
RMCP02 = Wiimms 마리오 카트 Wii 펀 2010-02.유럽
@ -4051,7 +4051,6 @@ RMCP76 = 프로 CT 팩
RMCP86 = 마리오 카트 크리스 3.500CT
RMCP93 = 마리오 카트 Wii 핵 팩
RMCPA1 = 마리오 카트 어드벤처
RMCPCA = 마리오 카트 Wii (카탈루냐어 번역)
RMCPG2 = 마리오 카트 Wii CTGP 레볼루션
RMCPGP = 마리오 카트 CTGP 레볼루션
RMCPL1 = Luma의 CT 팩
@ -4066,6 +4065,7 @@ RNEEUD = 나루토 질풍전: 닌자 격돌 레볼루션 3 (언덥)
ROMESD = 몬스터 헌터 G (영어 패치)
RPJEUD = 아크 라이즈 판타지아 (언덥)
RQQE52 = 기타 히어로 III 커스텀 : 퀸
RS4PXS = 식신의 성 III
RSBE02 = 슈퍼 스매시 브라더스 프로젝트 엠 레드 버전
RSBE03 = 대난투 스매시 브라더스 X DX
RSBE04 = 슈퍼 스매시 브라더스 프로젝트 엠+
@ -4313,6 +4313,7 @@ SMNE68 = 요시의 전설 DLC
SMNE69 = 리바이즈드 슈퍼 마리오 브라더스 Wii
SMNE90 = 커스텀 레벨의 전설
SMNEAM = 어드벤처 슈퍼 마리오 브라더스 Wii
SMNED3 = 뉴어 슈퍼 마리오 브라더스 Wii
SMNELL = 뉴어 슈퍼 루이지 Wii
SMNELM = 뉴어 슈퍼 루이지 Wii: 검은 달
SMNEMI = Midi의 슈퍼 마리오 브라더스 Wii: 그냥 작은 모험
@ -4862,7 +4863,7 @@ WFCJ = 파이널 판타지 크리스탈 연대기: 작은 임금님과 약속의
WFCP = 파이널 판타지 크리스탈 연대기: 왕으로서의 나의 인생
WFDE = 수인 구조
WFDP = 수인 구조
WFEE = 페니모어 필모어
WFEE = 페니모어 필모어
WFFE = 펀! 펀! 미니골프
WFFJ = 펀! 펀! 미니골프
WFFP = 펀! 펀! 미니골프
@ -5738,6 +5739,7 @@ FCWP = 슈퍼 마리오 브라더스 3
FCWQ = 슈퍼 마리오 브라더스 3
FCYE = 요시의 쿠키
FCYJ = 요시의 쿠키
FCYK = 요시의 쿠키
FCYP = 요시의 쿠키
FCYT = 요시의 쿠키
FCZE = 왕의 기사
@ -6258,7 +6260,6 @@ NAZJ = 마리오 파티 2
NAZP = 마리오 파티 2
NEEA = 젤다의 전설: 시간의 오카리나 마스터 퀘스트
NTLC = 슈퍼 마리오 64 멀티플레이어
NZXM = 슈퍼 마리오 64 멀티플레이어
LAAJ = 북두의 권
LABE = 판타지 존
LABJ = 판타지 존
@ -6543,13 +6544,13 @@ MCVP = 피트폴: 메이안 어드벤처
MCWE = 갤럭시 포스 II
MCWJ = 갤럭시 포스 II
MCWP = 갤럭시 포스 II
MCXJ = 드래곤 슬레이어: 영웅전설
MCXJ = 드래곤 슬레이어: 영웅전설 II
MCYE = 시노비의 복수
MCYJ = 슈퍼 시노비
MCYP = 시노비의 복수
MCZE = 상하이 II: 용의 눈
MCZP = 상하이 II: 용의 눈
PA2J = 열혈고교 돗지볼 부: CD 축구 편
PA2J = 요괴도 중기
PA3J = 사라만다
PA4J = 파라솔 스타즈
PA6E = 블러디 울프
@ -6734,7 +6735,7 @@ PDEJ = S.C.I.: 특수 범죄 수사
PDFJ = 지옥순례
PDGJ = 파이어 프로레슬링 3: 레전드 바우트
PDHJ = 라스탄 사가 II
PDIJ = 챔피언 레슬러®
PDIJ = 챔피언 레슬러
PDJJ = 스트리트 파이터 II': 챔피언 에디션
PDJL = 스트리트 파이터 II': 챔피언 에디션
PDJN = 스트리트 파이터 II: 챔피언 에디션
@ -7124,6 +7125,7 @@ C9MP = 핏스톱 II
C9PP = 마지막 닌자 3
C9QP = 점프맨
C9RP = 인터내셔널 카라테 +
C9SP = 불가능한 임무 II
C9XE = 마지막 닌자
C9XJ = 마지막 닌자
C9XP = 마지막 닌자
@ -7165,10 +7167,10 @@ HAGP = 뉴스 채널
HAJE = 모두의 투표 채널
HAJJ = 모두의 투표 채널
HAJP = 모두의 투표 채널
HAKE = 최종 사용자 라이선스 동의
HAKJ = 최종 사용자 라이선스 동의
HAKK = 최종 사용자 라이선스 동의
HAKP = 최종 사용자 라이선스 동의
HAKE = 이용 약관
HAKJ = 이용 약관
HAKK = 이용 약관
HAKP = 이용 약관
HALE = 지역 선택
HALJ = 지역 선택
HALK = 지역 선택
@ -7180,7 +7182,7 @@ HATE = 닌텐도 채널
HATJ = 닌텐도 채널
HATP = 닌텐도 채널
HAVJ = 운세 채널
HAVK = 운세 채널
HAVK = 즐거운 하루 운세 채널
HAVP = 즐거운 하루 운세 채널
HAWE = 메트로이드 프라임 3 프리뷰
HAWP = 메트로이드 프라임 3 프리뷰
@ -7194,12 +7196,12 @@ HC4P = 크런치롤
HCAJ = 밴드 브라더스 DX 스피커 채널
HCAP = 밴드 라이브와 함께하는 잼
HCBJ = 사진 채널 1.0 복구 프로그램
HCCJ = 개인 데이터 설정
HCCJ = 주소 설정
HCDJ = 디지탈 카메라 프린트 채널
HCFE = Wi 스피크 채널
HCFJ = Wi 스피크 채널
HCFE = Wii 스피크 채널
HCFJ = Wii 스피크 채널
HCFK = Wii 스피크 채널
HCFP = Wi 스피크 채널
HCFP = Wii 스피크 채널
HCGE = Wii + 인터넷
HCGJ = Wii + 인터넷
HCGP = Wii + 인터넷
@ -7210,8 +7212,6 @@ HCJP = BBC iPlayer 채널
HCLE = 넷플릭스
HCLP = 넷플릭스
HCMP = 커비 TV 채널
HCQE = 훌루 플러스
HCQJ = 훌루
HCRE = 젤다의 전설 스카이워드 소드 데이터 복구 채널
HCRJ = 젤다의 전설 스카이워드 소드 데이터 복구 채널
HCRK = 젤다의 전설 스카이워드 소드 데이터 복구 채널
@ -7225,7 +7225,6 @@ HCTP = Wii 시스템 전송
HCUE = Wii 메뉴 전자 매뉴얼
HCUJ = Wii 메뉴 전자 매뉴얼
HCUP = Wii 메뉴 전자 매뉴얼
HCVA = Wii U 메뉴
HCWE = 아마존 인스턴트 비디오
HCWP = 아마존 인스턴트 비디오
HCXE = 유튜브
@ -7240,10 +7239,11 @@ RFNJ = Wii 핏 채널
RFNK = Wii 핏 채널
RFNP = Wii 핏 채널
RFNW = Wii 핏 채널
RFPE = Wii 핏 플러스 채널
RFPJ = Wii 핏 플러스 채널
RFPP = Wii 핏 플러스 채널
RFPW = Wii 핏 플러스 채널
RFPE = Wii Fit Plus 채널
RFPJ = Wii Fit Plus 채널
RFPK = Wii Fit Plus 채널
RFPP = Wii Fit Plus 채널
RFPW = Wii Fit Plus 채널
RGWE = 레비즈 채널
RGWJ = 레비즈 채널
RGWP = 레비즈 채널
@ -7878,10 +7878,11 @@ HWFL = 핵위플로우
JODI = 홈브류 채널
LULZ = 홈브류 채널
MAUI = 백업 홈브류 채널
NZXM = 슈퍼 마리오 64 멀티플레이어
OHBC = 홈브류 채널
PXWE = 프로젝트 X: 사랑의 묘약 참사
RIIV = 리볼루션
RMCX = 마리오 카트 Wii CTGP 레볼루션 채널
RMCX = CTGP 레볼루션 채널
SEGA = 제네시스 플러스 GX
SMGX = 세이브게임 매니저 GX
ULFW = u로더
@ -8043,8 +8044,8 @@ G3RF52 = 슈렉 2
G3RM52 = 슈렉 2
G3RP52 = 슈렉 2
G3SE41 = 버스트 어 무브 3000
G3SJC0 = 슈퍼 퍼즐 보글 올 스타즈
G3SWC0 = 슈퍼 퍼즐 보글 올 스타즈
G3SJC0 = 슈퍼 퍼즐 보블 올스타즈
G3SWC0 = 슈퍼 퍼즐 보블 올스타즈
G3TJ8P = 더비 레이싱 3: 경주마를 만들자!
G3VE69 = NBA 스트리트 볼륨 3
G3VJ13 = NBA 스트리트 V3: 마리오 덩크
@ -8105,7 +8106,7 @@ G6ME69 = 매든 NFL 06
G6MP69 = 매든 NFL 06
G6NE69 = NBA 라이브 06
G6NP69 = NBA 라이브 06
G6QE08 = 메가맨 기념 컬렉션
G6QE08 = 메가맨 애니버서리 컬렉션
G6SE7D = 스파이로의 전설: 새로운 시작
G6SP7D = 스파이로의 전설: 새로운 시작
G6TE5G = 틴 타이탄즈
@ -8116,10 +8117,10 @@ G7ME69 = 매든 NFL 07
G89EAF = 팩 맨 월드 랠리
G8FE8P = 버추어 퀘스트
G8FJ8P = 버추어 파이터 사이버 제너레이션
G8ME01 = 페이퍼 마리오: 천년의 문
G8MJ01 = 페이퍼 마리오 RPG
G8ME01 = 페이퍼 마리오 1000년의 문
G8MJ01 = 페이퍼 마리오 1000년의 문
G8MK01 = 페이퍼 마리오 - 천년의 문
G8MP01 = 페이퍼 마리오: 천년의 문
G8MP01 = 페이퍼 마리오 1000년의 문
G8OJ18 = 무적 코털 보보보 탈출!! 하지케 로얄
G8SJAF = 배틀 스타디움 D.O.N
G8WE01 = 배탤리언 워즈
@ -8197,8 +8198,8 @@ GAZM69 = 해리 포터와 아즈카반의 죄수
GAZP69 = 해리 포터와 아즈카반의 죄수
GAZS69 = 해리 포터와 아즈카반의 죄수
GB2J18 = 봄버맨 랜드 2 - 게임 사상 최대 규모의 테마파크
GB4E51 = 번아웃 2: 탄착점
GB4P51 = 번아웃 2: 탄착점
GB4E51 = 번아웃 2: 포인트 오브 임팩트
GB4P51 = 번아웃 2: 포인트 오브 임팩트
GBDE5G = 블러드레인
GBDF7D = 블러드레인
GBDP7D = 블러드레인
@ -8266,10 +8267,10 @@ GCAE5H = 큐빅스: 모두를 위한 로봇 대결
GCBE7D = 크래쉬 밴디쿳: 마왕의 부활
GCBJA4 = 크래쉬 밴디쿳 4: 작렬! 마신 파워
GCBP7D = 크래쉬 밴디쿳: 마왕의 부활
GCCE01 = 파이널 판타지 크리스탈 연대기
GCCJ01 = 파이널 판타지 크리스탈 연대기
GCCE01 = 파이널 판타지 크리스탈 크로니클
GCCJ01 = 파이널 판타지 크리스탈 크로니클
GCCJGC = 파이널 판타지 크리스탈 연대기
GCCP01 = 파이널 판타지 크리스탈 연대기
GCCP01 = 파이널 판타지 크리스탈 크로니클
GCDE08 = 레지던트 이블 코드: 베로니카 X
GCDJ08 = 바이오하자드 코드: 베로니카 완전판
GCDP08 = 레지던트 이블 코드: 베로니카 X
@ -8444,7 +8445,7 @@ GFAP69 = 피파 축구 2003
GFAS69 = 피파 축구 2003
GFBE5D = 파이어블레이드
GFBP5D = 파이어블레이드
GFCP69 = F1 경력 도전
GFCP69 = F1 커리어 챌린지
GFDD69 = 프리덤 파이터즈
GFDE69 = 프리덤 파이터즈
GFDF69 = 프리덤 파이터즈
@ -8522,7 +8523,7 @@ GGZJB2 = 마다가스카: 왜 비추고 난리야
GGZP52 = 마다가스카: 왜 비추고 난리야
GGZS52 = 마다가스카: 왜 비추고 난리야
GGZX52 = 마다가스카: 왜 비추고 난리야
GH2E69 = 니드 포 스피드: 맹열한 추적 2
GH2E69 = 니드 포 스피드: 핫 퍼슈트 2
GH2P69 = 니드 포 스피드: 맹열한 추적 2
GH4D69 = 해리 포터와 불의 잔
GH4E69 = 해리 포터와 불의 잔
@ -8731,9 +8732,9 @@ GKTJA4 = 캡틴 츠바사: 황금 세대의 도전
GKUE9G = 스케일러
GKWJ18 = 드림믹스 TV 월드 파이터즈
GKXJE7 = 극・마작 DXII: 제 4회 몬도21 컵
GKYE01 = 커비 에어 라이드
GKYJ01 = 커비의 에어 라이드
GKYP01 = 커비 에어 라이드
GKYE01 = 커비 에어라이드
GKYJ01 = 커비의 에어라이드
GKYP01 = 커비 에어라이드
GKZD54 = 코드네임: 키즈 넥스트 도어 - 오퍼레이션: 비디오게임
GKZE9G = 코드네임: 키즈 넥스트 도어 - 오퍼레이션: 비디오게임
GKZP54 = 코드네임: 키즈 넥스트 도어 - 오퍼레이션: 비디오게임
@ -8806,8 +8807,9 @@ GM2J8P = 슈퍼 몽키 볼 2
GM2P8P = 슈퍼 몽키 볼 2
GM3E69 = 매든 NFL 2003
GM3P69 = 매든 NFL 2003
GM4E01 = 마리오 카트: 더블 대!!
GM4E01 = 마리오 카트: 더블 대!!
GM4J01 = 마리오 카트: 더블 대쉬!!
GM4K01 = 마리오 카트: 더블 대시!!
GM4P01 = 마리오 카트: 더블 대쉬!!
GM5D7D = 메탈 암즈: 시스템 글리치
GM5E7D = 메탈 암즈: 시스템 글리치
@ -8894,6 +8896,7 @@ GNDP69 = 니드 포 스피드: 언더그라운드
GNED78 = 니모를 찾아서
GNEE78 = 니모를 찾아서
GNEF78 = 니모를 찾아서
GNEK78 = 니모를 찾아서
GNEP78 = 니모를 찾아서
GNES78 = 니모를 찾아서
GNFE5D = NFL 블리츠 2002
@ -8964,11 +8967,11 @@ GOSP41 = 오픈 시즌
GOSX41 = 오픈 시즌
GOTJB2 = TV 애니메이션: 원피스 트레저 배틀!
GOUPNK = 코코토 놀이공원
GOWD69 = 니드 포 스피드: 지명 수배
GOWE69 = 니드 포 스피드: 지명 수배
GOWF69 = 니드 포 스피드: 지명 수배
GOWJ13 = 니드 포 스피드: 지명 수배
GOWP69 = 니드 포 스피드: 지명 수배
GOWD69 = 니드 포 스피드: 모스트 원티드
GOWE69 = 니드 포 스피드: 모스트 원티드
GOWF69 = 니드 포 스피드: 모스트 원티드
GOWJ13 = 니드 포 스피드: 모스트 원티드
GOWP69 = 니드 포 스피드: 모스트 원티드
GOYD69 = 골든아이: 로그 에이전트
GOYE69 = 골든아이: 로그 에이전트
GOYF69 = 골든아이: 로그 에이전트
@ -9136,7 +9139,7 @@ GRUF78 = 파워 레인져스 다이노 썬더
GRUP78 = 파워 레인져스 다이노 썬더
GRVEA4 = 레이브 마스터
GRVJA4 = 그루브 어드벤처 레이브: 파이팅 라이브
GRWJD9 = 슈퍼 로봇 대전 GC
GRWJD9 = 슈퍼로봇대전 GC
GRYE41 = 레이맨 아레나
GRZJ13 = 메달 오브 아너: 라이징 선
GS2D78 = 소환사: 여신 환생
@ -9465,9 +9468,9 @@ GYFPA4 = 유희왕! 허구에 갇힌 왕국
GYKEB2 = 금색의 갓슈!! 우정 태그 배틀 2
GYKJB2 = 금색의 갓슈!! 우정 태그 배틀 2
GYMJA4 = 실황 파워풀 메이저 리그
GYQE01 = 마리오 슈퍼스타즈 야구
GYQJ01 = 슈퍼 마리오 스테이디움 기적의 야구
GYQP01 = 마리오 슈퍼스타즈 야구
GYQE01 = 마리오 슈퍼스타 베이스볼
GYQJ01 = 슈퍼 마리오 스디움 기적의 야구
GYQP01 = 마리오 슈퍼스타 베이스볼
GYRE41 = 돌연변이 닌자 거북
GYRP41 = 돌연변이 닌자 거북
GYTE69 = 타이 더 태즈메이니언 타이거 2: 부쉬 구조대

View file

@ -1,4 +1,4 @@
TITLES = https://www.gametdb.com (type: Wii language: NL_unique version: 20230727194218)
TITLES = https://www.gametdb.com (type: Wii language: NL_unique version: 20241114210155)
R23P52 = Barbie en De Drie Musketiers
R25PWR = LEGO Harry Potter: Jaren 1-4
R27X54 = Dora redt het Land van Kristal
@ -177,7 +177,7 @@ SHDP52 = Hoe Tem Je Een Draak
SIAP52 = Ice Age 4: Continental Drift
SIIP8P = Mario & Sonic op de Olympische Spelen Londen 2012
SJ2PWR = Scooby-Doo! En Het Spookmoeras
SJXD41 = Just Dance 4
SJXD41 = Just Dance 4 Speciale Editie
SK4P52 = Shrek Voor Eeuwig En Altijd
SLHPWR = LEGO Harry Potter: Jaren 5-7
SM4PXT = Monster Trucks
@ -199,32 +199,20 @@ SVQEVZ = Barbie En Haar Zusjes In Het Grote Puppy Avontuur
SVQPVZ = Barbie En Haar Zusjes In Het Grote Puppy Avontuur
SVZPVZ = Hoe Tem Je Een Draak 2
CG1P52 = Guitar Hero III Custom : Guitar Hero I
RMCPCA = Mario Kart Wii (Catalaanse vertaling)
W2FP = Physiofun - Balance Training
RZDPCA = The Legend of Zelda: Twilight Princess (Catalaanse vertaling)
W2FP = Physiofun: Balance Training
W2GP = Phoenix Wright Ace Attorney: Justice for All
W2MP = Blaster Master: Overdrive
W2PP = Physiofun: Pelvic Floor Training
W3GP = Phoenix Wright Ace Attorney: Trials and Tribulations
W3KP = ThruSpace: High Velocity 3D Puzzle
W3MP = The Three Musketeers: One for all
W44P = Stop Stress: A Day of Fury
W4AP = Arcade Sports: Air Hockey, Bowling, Pool, Snooker
W6BP = Eco-Shooter: Plant 530
W72P = Successfully Learning German Year 3
W73P = Successfully Learning German Year 4
W74P = Successfully Learning German Year 5
W7IP = Successfully Learning German Year 2
W8CP = Bit.Trip Core
W8WP = Happy Holidays: Halloween
W9BP = Big Town Shoot
W9RP = Happy Holidays: Christmas
WA4P = WarioWare: Do It Yourself - Showcase
WA7P = Toribash Violence Perfected
WA8P = Art Style: Penta Tentacles
WAEP = Around the world
WAFP = Airport Mania: First Flight
WAHP = Trenches: Generals
WALP = Art Style: light trax
WAOP = The Very Hungry Caterpillar´s ABC
WB2P = Strong Bad Episode 4: Dangeresque 3
WB3P = Strong Bad Episode 5: 8-bit is Enough
@ -258,8 +246,6 @@ WFYP = Family Games Pen & Paper Edition
WGDP = Gradius Rebirth
WGFP = Girlfriends Forever: Magic Skate
WGGP = Gabrielle's Ghostly Groove: Monster Mix
WGPP = Zenquaria: Virtual Aquarium
WGSP = Phoenix Wright: Ace Attorney
WHEP = Heracles: Chariot Racing
WHFP = Heavy Fire: Special Operations
WHRP = Heron: Steam Machine
@ -387,11 +373,7 @@ JDJP = Super Star Wars: The Empire Strikes Back
JDLP = Super Star Wars: Return of the Jedi
JDWP = Aero The Acrobat
JDZP = Mystic Quest Legend
NACP = The Legend of Zelda: Ocarina of Time
NAMP = Kirby 64: The Crystal Shards
NAOP = 1080°: TenEighty Snowboarding
NARP = The Legend of Zelda: Majora's Mask
NAYM = Ogre Battle 64: Person of Lordly Caliber
LALP = Fantasy Zone II
LANP = Alex Kidd: The Lost Stars
LAPP = Wonder Boy III: The Dragon's Trap
@ -442,7 +424,6 @@ EAIP = Top Hunter
EBDP = Magical Drop 3
EBFP = Spin master
EBSP = The Path of the Warrior: Art of Fighting 3
ECAP = Real Bout Fatal Fury 2: The Newcomers
ECGP = Shock Troopers: 2nd Squad
E54P = GHOSTS'N GOBLINS
E55P = Commando
@ -460,14 +441,18 @@ HAFP = Weerkanaal
HAGA = Nachrichtenkanaal
HAGP = Nieuwskanaal
HAJP = Enquêtekanaal
HAKP = Overeenkomst/bedrijfsinformatie
HAPP = Mii-wedstrijdkanaal
HATP = Nintendo-kanaal
HAVP = Geluksdagkanaal
HAWP = Metroid Prime 3 Preview
HAYA = Fotokanaal
HCAP = Jam with the Band Live
HCFE = Wii Speak-Kanaal
HCFP = Wii Speak-Kanaal
HCAP = Jam with the Band Channel Live Channel
HCCJ = Adresinstellingen
HCFE = Wii Speak-kanaal
HCFP = Wii Speak-kanaal
HCGP = Wii en Internet
HCRE = The Legend of Zelda - Skyward Sword - Save Data Update Channel
OHBC = Homebrew-Kanaal
G4BP08 = Resident Evil 4: Wii Edition
G4CP54 = Sjakie en chocolade

View file

@ -1,4 +1,4 @@
TITLES = https://www.gametdb.com (type: Wii language: PT_unique version: 20230727194225)
TITLES = https://www.gametdb.com (type: Wii language: PT_unique version: 20241114210204)
R42P69 = Os SIMS 2: Naufragos
R43P69 = EA Sports Active
R4PP69 = Os SIMS 2: Animais de Estimação
@ -39,7 +39,6 @@ SIIP8P = Mario & Sonic nos Jogos Olímpicos de Londres 2012
GFEK01 = Fire Emblem: Path of Radiance
GMSE02 = Super Mario Sunshine Multijogador
PT2PSI = SingIt Portugal Hits Festa de Verão
RMCPCA = Mario Kart Wii (tradução catalã)
WA4E = WarioWare: D.I.Y. Showcase
WA4P = _D.I.Y. Showcase
WAQJ = Yakuman Wii: Ide Yousuke no Kenkou Mahjong
@ -63,6 +62,18 @@ WZIP = Rubik's Puzzle Galaxy RUSH
MC3E = Super Street Fighter II: The New Challengers
MC3P = Super Street Fighter II: The New Challengers
HAAA = Canal Photo
HAFE = Canal do Tempo
HAFP = Canal do Tempo
HAGE = Canal de Notícias
HAGP = Canal de Notícias
HAJE = Canal de Opiniões
HAJP = Canal de Opiniões
HAPE = Canal Mii Veja
HAPP = Canal de Concursos Mii
HATE = Canal Nintendo
HATP = Canal Nintendo
HAYA = Canal de Fotos
HCCJ = Definições do endereço
G6TE5G = Os Jovens Titãs
GAXE5D = Lucas: Um Intruso no Formigueiro
GAZD69 = Harry Potter e o Prisoneiro de Azkaban

View file

@ -1,14 +1,21 @@
TITLES = https://www.gametdb.com (type: Wii language: RU_unique version: 20230727194232)
TITLES = https://www.gametdb.com (type: Wii language: RU_unique version: 20241114210212)
R5IR4Q = История игрушек: Парк развлечений
RN4P41 = Anno: Create A New World
RWAR78 = Валл-И
RXDR4Q = Disney Отвечай Не Зевай
RY2R41 = Возвращение бешеных кроликов
RYBP69 = BOOM BLOX Bash Party
SFDPAF = 家庭训练机 梦幻主题乐园(欧)
SJXD41 = Just Dance 4 Специальное издание
SKSE54 = NBA 2K13(美)
SP5E70 = 恶徒 来自地底的侵略者(美)
STNP41 = Приключения Тинтина: Тайна Единорога
GMSE02 = Супер Марио Саншайн Мультиплеер
SOMR01 = Ритм небес
HAFP = Канал новостей
HAGP = Канал новостей
HAJP = Канал голосований
HAPP = Канал конкурсов Mii
HATP = Канал Nintendo
HAYA = Фотоканал
HCCJ = Настройки адреса
G3EP51 = XGIII: 익스트림 G 레이싱

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -9,7 +9,7 @@ option(SDL_TEST "Build the SDL2_test library" OFF)
option(SDL_TEST_ENABLED_BY_DEFAULT "" OFF)
# SDL fails to clean up old headers after version upgrades, so do that manually
set(EXPECTED_SDL_REVISION "SDL-release-2.30.6-0")
set(EXPECTED_SDL_REVISION "SDL-release-2.30.9-0")
if (EXISTS "${CMAKE_CURRENT_BINARY_DIR}/SDL/include/SDL2/SDL_revision.h")
file(READ "${CMAKE_CURRENT_BINARY_DIR}/SDL/include/SDL2/SDL_revision.h" ACTUAL_SDL_REVISION)
if (NOT "${ACTUAL_SDL_REVISION}" MATCHES "${EXPECTED_SDL_REVISION}")

2
Externals/SDL/SDL vendored

@ -1 +1 @@
Subproject commit 8236e01a9f758d15927624925c6043f84d8a261f
Subproject commit c98c4fbff6d8f3016a3ce6685bf8f43433c3efcc

@ -1 +1 @@
Subproject commit f4ce3c9618e7ecfcdd238b17dad9a0b888f5de90
Subproject commit 8fae8ce254dfc1344527e05301e43f37dea2df80

View file

@ -3,6 +3,7 @@
#include <cassert>
#include <cstddef>
#include <map>
#include <utility>
namespace HyoutaUtilities {
template <typename T> class RangeSet {
@ -254,7 +255,31 @@ public:
return !(*this == other);
}
// Get free size and fragmentation ratio
std::pair<std::size_t, double> get_stats() const {
std::size_t free_total = 0;
if (begin() == end())
return {free_total, 1.0};
std::size_t largest_size = 0;
for (auto iter = begin(); iter != end(); ++iter) {
const std::size_t size = calc_size(iter.from(), iter.to());
if (size > largest_size)
largest_size = size;
free_total += size;
}
return {free_total, static_cast<double>(free_total - largest_size) / free_total};
}
private:
static std::size_t calc_size(T from, T to) {
if constexpr (std::is_pointer_v<T>) {
// For pointers we don't want pointer arithmetic here, else void* breaks.
return reinterpret_cast<std::size_t>(to) - reinterpret_cast<std::size_t>(from);
} else {
return static_cast<std::size_t>(to - from);
}
}
// Assumptions that can be made about the data:
// - Range are stored in the form [from, to[
// That is, the starting value is inclusive, and the end value is exclusive.

View file

@ -4,6 +4,7 @@
#include <cstddef>
#include <map>
#include <type_traits>
#include <utility>
namespace HyoutaUtilities {
// Like RangeSet, but additionally stores a map of the ranges sorted by their size, for quickly finding the largest or
@ -398,6 +399,16 @@ public:
return !(*this == other);
}
// Get free size and fragmentation ratio
std::pair<std::size_t, double> get_stats() const {
std::size_t free_total = 0;
if (begin() == end())
return {free_total, 1.0};
for (auto iter = begin(); iter != end(); ++iter)
free_total += calc_size(iter.from(), iter.to());
return {free_total, static_cast<double>(free_total - Sizes.begin()->first) / free_total};
}
private:
static SizeT calc_size(T from, T to) {
if constexpr (std::is_pointer_v<T>) {

21
Flatpak/SDL2/SDL2.json Normal file
View file

@ -0,0 +1,21 @@
{
"name": "SDL2",
"buildsystem": "autotools",
"config-opts": ["--disable-static"],
"sources": [
{
"type": "dir",
"path": "../../Externals/SDL/SDL"
}
],
"cleanup": [ "/bin/sdl2-config",
"/include",
"/lib/libSDL2.la",
"/lib/libSDL2main.a",
"/lib/libSDL2main.la",
"/lib/libSDL2_test.a",
"/lib/libSDL2_test.la",
"/lib/cmake",
"/share/aclocal",
"/lib/pkgconfig"]
}

8
Flatpak/fill_release_node.sh Executable file
View file

@ -0,0 +1,8 @@
#!/usr/bin/env bash
DATE=$(git log -1 --pretty=%cd --date=iso8601 --date=format:'%Y-%m-%d')
sed -i -e "s/@DATE_PLACEHOLDER/${DATE}/" org.DolphinEmu.dolphin-emu.metainfo.xml
VERSION=$(git describe --tags | sed -E 's/^([0-9]+-[0-9]+).*/\1/')
sed -i -e "s/@VERSION_PLACEHOLDER/${VERSION}/" org.DolphinEmu.dolphin-emu.metainfo.xml

View file

@ -0,0 +1,49 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Copyright 2016 Jeremy Newton -->
<component type="desktop-application">
<id>org.DolphinEmu.dolphin-emu</id>
<name>Dolphin Emulator</name>
<developer id="org.dolphin-emu">
<name>Dolphin Emulator Project</name>
</developer>
<summary>GameCube / Wii</summary>
<metadata_license>CC-BY-SA-3.0</metadata_license>
<project_license>GPL-2.0+</project_license>
<content_rating type="oars-1.0"/>
<!-- Descriptions taken from Dolphin Homepage -->
<description><p>Dolphin is an emulator for two recent Nintendo video game consoles: the GameCube and the Wii. It allows PC gamers to enjoy games for these two consoles in full HD (1080p) with several enhancements: compatibility with all PC controllers, turbo speed, networked multiplayer, and even more!</p></description>
<screenshots>
<screenshot type="default">
<caption>Dolphin's main window</caption>
<image type="source">http://dolphin-emu.org/m/user/flatpak/screenshot_1.png</image>
</screenshot>
<screenshot>
<caption>In-game</caption>
<image type="source">http://dolphin-emu.org/m/user/flatpak/screenshot_2.png</image>
</screenshot>
<screenshot>
<caption>Graphics configuration</caption>
<image type="source">http://dolphin-emu.org/m/user/flatpak/screenshot_3.png</image>
</screenshot>
<screenshot>
<caption>Controller configuration</caption>
<image type="source">http://dolphin-emu.org/m/user/flatpak/screenshot_4.png</image>
</screenshot>
</screenshots>
<launchable type="desktop-id">dolphin-emu.desktop</launchable>
<provides>
<binary>dolphin-emu</binary>
<id>dolphin-emu.desktop</id>
</provides>
<releases>
<release version="@VERSION_PLACEHOLDER" date="@DATE_PLACEHOLDER"/>
</releases>
<url type="homepage">https://dolphin-emu.org</url>
<url type="bugtracker">https://bugs.dolphin-emu.org/projects/emulator/issues</url>
<url type="faq">https://dolphin-emu.org/docs/faq/</url>
<url type="help">https://dolphin-emu.org/docs/guides/</url>
<url type="translate">https://www.transifex.com/projects/p/dolphin-emu</url>
<url type="contact">https://dolphin-emu.org/docs/faq/#ive-got-idea-make-dolphin-better-how-should-i-tell</url>
<url type="vcs-browser">https://github.com/dolphin-emu/dolphin</url>
<url type="contribute">https://github.com/dolphin-emu/dolphin/blob/master/Contributing.md</url>
</component>

View file

@ -0,0 +1,83 @@
app-id: org.DolphinEmu.dolphin-emu
runtime: org.kde.Platform
runtime-version: '6.8'
sdk: org.kde.Sdk
command: dolphin-emu-wrapper
rename-desktop-file: dolphin-emu.desktop
rename-icon: dolphin-emu
finish-args:
- --device=all
- --socket=pulseaudio
# dolphin doesn't work on wayland (only the ui does), if a user were to set
# this env variable globally to wayland then games wouldn't work.
# we overwrite the setting and force xcb to prevent this from happening.
- --env=QT_QPA_PLATFORM=xcb
- --socket=x11
- --share=network
- --share=ipc
# required for the emulated bluetooth adapter feature to work.
- --allow=bluetooth
- --filesystem=xdg-run/app/com.discordapp.Discord:create
- --talk-name=org.freedesktop.ScreenSaver
# required for Gamescope on Steam Deck
- --filesystem=xdg-run/gamescope-0:ro
modules:
# enables motion controls on non-wii controllers (switch, ps4, etc)
# requires a udev rule enabling Motion Sensors access
- name: libevdev
buildsystem: meson
config-opts:
- -Dtests=disabled
- -Ddocumentation=disabled
sources:
- type: archive
url: https://www.freedesktop.org/software/libevdev/libevdev-1.13.3.tar.xz
sha256: abf1aace86208eebdd5d3550ffded4c8d73bb405b796d51c389c9d0604cbcfbf
x-checker-data:
type: anitya
project-id: 20540
stable-only: true
url-template: https://www.freedesktop.org/software/libevdev/libevdev-$version.tar.xz
# needed for screensaver inhibition
- name: xdg-screensaver-shim
buildsystem: meson
sources:
- type: archive
url: https://github.com/Unrud/xdg-screensaver-shim/archive/0.0.2.tar.gz
sha256: 0ed2a69fe6ee6cbffd2fe16f85116db737f17fb1e79bfb812d893cf15c728399
# build the vendored SDL2 from Externals until the runtime gets 2.30.9
- SDL2/SDL2.json
- name: dolphin-emu
buildsystem: cmake-ninja
config-opts:
- -DCMAKE_BUILD_TYPE=Release
- -DENABLE_ALSA=OFF
- -DENABLE_SDL=ON
- -DENABLE_EVDEV=ON
- -DDISTRIBUTOR=dolphin-emu.org
cleanup:
- /share/man
post-install:
- install -D -t ${FLATPAK_DEST}/bin/ dolphin-emu-wrapper
- "${FLATPAK_BUILDER_BUILDDIR}/Flatpak/fill_release_node.sh"
- install -Dm644 -t ${FLATPAK_DEST}/share/metainfo/ org.DolphinEmu.dolphin-emu.metainfo.xml
- desktop-file-edit --set-key=Exec --set-value='/app/bin/dolphin-emu-wrapper'
/app/share/applications/dolphin-emu.desktop
sources:
- type: dir
path: ..
- type: file
path: org.DolphinEmu.dolphin-emu.metainfo.xml.in
dest-filename: org.DolphinEmu.dolphin-emu.metainfo.xml
- type: script
commands:
- |
for i in {0..9}; do
test -S $XDG_RUNTIME_DIR/discord-ipc-$i ||
ln -sf {app/com.discordapp.Discord,$XDG_RUNTIME_DIR}/discord-ipc-$i;
done
dolphin-emu "$@"
dest-filename: dolphin-emu-wrapper

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -27,7 +27,7 @@ Please read the [FAQ](https://dolphin-emu.org/docs/faq/) before using Dolphin.
### Desktop
* OS
* Windows (10 or higher).
* Windows (10 1703 or higher).
* Linux.
* macOS (10.15 Catalina or higher).
* Unix-like systems other than Linux are not officially supported but might work.
@ -261,7 +261,7 @@ Options:
Path to disc image FILE.
-a ALGORITHM, --algorithm=ALGORITHM
Optional. Compute and print the digest using the
selected algorithm, then exit. [crc32|md5|sha1]
selected algorithm, then exit. [crc32|md5|sha1|rchash]
```
```

View file

@ -101,8 +101,12 @@ android {
defaultConfig {
externalNativeBuild {
cmake {
arguments("-DANDROID_STL=c++_static", "-DCMAKE_BUILD_TYPE=RelWithDebInfo")
// , "-DENABLE_GENERIC=ON"
arguments(
"-DANDROID_STL=c++_static",
"-DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON",
"-DCMAKE_BUILD_TYPE=RelWithDebInfo"
// , "-DENABLE_GENERIC=ON"
)
abiFilters("arm64-v8a", "x86_64") //, "armeabi-v7a", "x86"
// Uncomment the line below if you don't want to build the C++ unit tests

View file

@ -302,7 +302,7 @@ public final class NativeLibrary
public static native int DefaultCPUCore();
public static native String GetDefaultGraphicsBackendName();
public static native String GetDefaultGraphicsBackendConfigName();
public static native int GetMaxLogLevel();
@ -381,10 +381,21 @@ public final class NativeLibrary
*/
public static native boolean IsRunning();
public static native boolean IsRunningAndStarted();
/**
* Returns true if emulation is running and not paused.
*/
public static native boolean IsRunningAndUnpaused();
/**
* Returns true if emulation is fully shut down.
*/
public static native boolean IsUninitialized();
/**
* Re-initialize software JitBlock profiling data
*/
public static native void WipeJitBlockProfilingData();
/**
* Writes out the JitBlock Cache log dump
*/

View file

@ -6,11 +6,10 @@ import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.view.View
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowCompat
import androidx.core.view.WindowInsetsCompat
import com.google.android.material.color.MaterialColors
import org.dolphinemu.dolphinemu.R
import org.dolphinemu.dolphinemu.databinding.ActivityConvertBinding
import org.dolphinemu.dolphinemu.fragments.ConvertFragment
@ -23,14 +22,13 @@ class ConvertActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
ThemeHelper.setTheme(this)
enableEdgeToEdge()
super.onCreate(savedInstanceState)
binding = ActivityConvertBinding.inflate(layoutInflater)
setContentView(binding.root)
WindowCompat.setDecorFitsSystemWindows(window, false)
val path = intent.getStringExtra(ARG_GAME_PATH)
var fragment = supportFragmentManager
@ -62,10 +60,6 @@ class ConvertActivity : AppCompatActivity() {
binding.scrollViewConvert.setPadding(insets.left, 0, insets.right, insets.bottom)
InsetsHelper.applyNavbarWorkaround(insets.bottom, binding.workaroundView)
ThemeHelper.setNavigationBarColor(
this,
MaterialColors.getColor(binding.appbarConvert, R.attr.colorSurface)
)
windowInsets
}

View file

@ -10,12 +10,11 @@ import android.os.Build
import android.os.Bundle
import android.provider.DocumentsContract
import android.view.View
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowCompat
import androidx.core.view.WindowInsetsCompat
import androidx.lifecycle.ViewModelProvider
import com.google.android.material.color.MaterialColors
import org.dolphinemu.dolphinemu.R
import org.dolphinemu.dolphinemu.databinding.ActivityUserDataBinding
import org.dolphinemu.dolphinemu.dialogs.NotificationDialog
@ -25,7 +24,6 @@ import org.dolphinemu.dolphinemu.features.DocumentProvider
import org.dolphinemu.dolphinemu.model.TaskViewModel
import org.dolphinemu.dolphinemu.utils.*
import org.dolphinemu.dolphinemu.utils.ThemeHelper.enableScrollTint
import org.dolphinemu.dolphinemu.utils.ThemeHelper.setNavigationBarColor
import java.io.File
import java.io.FileInputStream
import java.io.FileOutputStream
@ -43,14 +41,13 @@ class UserDataActivity : AppCompatActivity() {
taskViewModel = ViewModelProvider(this)[TaskViewModel::class.java]
ThemeHelper.setTheme(this)
enableEdgeToEdge()
super.onCreate(savedInstanceState)
mBinding = ActivityUserDataBinding.inflate(layoutInflater)
setContentView(mBinding.root)
WindowCompat.setDecorFitsSystemWindows(window, false)
val android7 = Build.VERSION.SDK_INT >= Build.VERSION_CODES.N
val android10 = Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q
val android11 = Build.VERSION.SDK_INT >= Build.VERSION_CODES.R
@ -334,10 +331,6 @@ class UserDataActivity : AppCompatActivity() {
mBinding.scrollViewUserData.setPadding(insets.left, 0, insets.right, insets.bottom)
InsetsHelper.applyNavbarWorkaround(insets.bottom, mBinding.workaroundView)
setNavigationBarColor(
this,
MaterialColors.getColor(mBinding.appbarUserData, R.attr.colorSurface)
)
windowInsets
}
}

View file

@ -10,10 +10,10 @@ import android.view.Menu
import android.view.View
import android.view.ViewGroup
import android.view.ViewGroup.MarginLayoutParams
import androidx.activity.enableEdgeToEdge
import androidx.annotation.ColorInt
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowCompat
import androidx.core.view.WindowInsetsAnimationCompat
import androidx.core.view.WindowInsetsCompat
import androidx.lifecycle.ViewModelProvider
@ -51,6 +51,7 @@ class CheatsActivity : AppCompatActivity(), PanelSlideListener {
override fun onCreate(savedInstanceState: Bundle?) {
ThemeHelper.setTheme(this)
enableEdgeToEdge()
super.onCreate(savedInstanceState)
@ -69,8 +70,6 @@ class CheatsActivity : AppCompatActivity(), PanelSlideListener {
binding = ActivityCheatsBinding.inflate(layoutInflater)
setContentView(binding.root)
WindowCompat.setDecorFitsSystemWindows(window, false)
cheatListLastFocus = binding.cheatList
cheatDetailsLastFocus = binding.cheatDetails
@ -225,10 +224,6 @@ class CheatsActivity : AppCompatActivity(), PanelSlideListener {
binding.cheatDetails.layoutParams = mlpDetails
InsetsHelper.applyNavbarWorkaround(barInsets.bottom, binding.workaroundView)
ThemeHelper.setNavigationBarColor(
this,
MaterialColors.getColor(binding.appbarCheats, R.attr.colorSurface)
)
windowInsets
}

View file

@ -6,13 +6,12 @@ import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.view.View
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowCompat
import androidx.core.view.WindowInsetsCompat
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.LinearLayoutManager
import com.google.android.material.color.MaterialColors
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
@ -31,14 +30,13 @@ class RiivolutionBootActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
ThemeHelper.setTheme(this)
enableEdgeToEdge()
super.onCreate(savedInstanceState)
binding = ActivityRiivolutionBootBinding.inflate(layoutInflater)
setContentView(binding.root)
WindowCompat.setDecorFitsSystemWindows(window, false)
val path = intent.getStringExtra(ARG_GAME_PATH)
val gameId = intent.getStringExtra(ARG_GAME_ID)
val revision = intent.getIntExtra(ARG_REVISION, -1)
@ -96,10 +94,6 @@ class RiivolutionBootActivity : AppCompatActivity() {
binding.scrollViewRiivolution.setPadding(insets.left, 0, insets.right, insets.bottom)
InsetsHelper.applyNavbarWorkaround(insets.bottom, binding.workaroundView)
ThemeHelper.setNavigationBarColor(
this,
MaterialColors.getColor(binding.appbarRiivolution, R.attr.colorSurface)
)
windowInsets
}

View file

@ -651,6 +651,7 @@ enum class BooleanSetting(
SYSCONF_PROGRESSIVE_SCAN(Settings.FILE_SYSCONF, "IPL", "PGS", true),
SYSCONF_PAL60(Settings.FILE_SYSCONF, "IPL", "E60", true),
SYSCONF_WIIMOTE_MOTOR(Settings.FILE_SYSCONF, "BT", "MOT", true),
GFX_VSYNC(Settings.FILE_GFX, Settings.SECTION_GFX_HARDWARE, "VSync", false),
GFX_WIDESCREEN_HACK(Settings.FILE_GFX, Settings.SECTION_GFX_SETTINGS, "wideScreenHack", false),
GFX_CROP(Settings.FILE_GFX, Settings.SECTION_GFX_SETTINGS, "Crop", false),
GFX_SHOW_FPS(Settings.FILE_GFX, Settings.SECTION_GFX_SETTINGS, "ShowFPS", false),
@ -788,7 +789,7 @@ enum class BooleanSetting(
Settings.FILE_GFX,
Settings.SECTION_GFX_HACKS,
"EFBAccessEnable",
true
false
),
GFX_HACK_EFB_DEFER_INVALIDATION(
Settings.FILE_GFX,

View file

@ -36,7 +36,7 @@ class Settings : Closeable {
if (isGameSpecific) {
// Loading game INIs while the core is running will mess with the game INIs loaded by the core
check(!NativeLibrary.IsRunning()) { "Attempted to load game INI while emulating" }
check(NativeLibrary.IsUninitialized()) { "Attempted to load game INI while emulating" }
NativeConfig.loadGameInis(gameId, revision)
}
}
@ -124,6 +124,7 @@ class Settings : Closeable {
const val SECTION_INI_DSP = "DSP"
const val SECTION_LOGGER_LOGS = "Logs"
const val SECTION_LOGGER_OPTIONS = "Options"
const val SECTION_GFX_HARDWARE = "Settings"
const val SECTION_GFX_SETTINGS = "Settings"
const val SECTION_GFX_ENHANCEMENTS = "Enhancements"
const val SECTION_GFX_COLOR_CORRECTION = "ColorCorrection"

View file

@ -45,7 +45,7 @@ enum class StringSetting(
Settings.FILE_DOLPHIN,
Settings.SECTION_INI_CORE,
"GFXBackend",
NativeLibrary.GetDefaultGraphicsBackendName()
NativeLibrary.GetDefaultGraphicsBackendConfigName()
),
MAIN_DUMP_PATH(Settings.FILE_DOLPHIN, Settings.SECTION_INI_GENERAL, "DumpPath", ""),
MAIN_LOAD_PATH(Settings.FILE_DOLPHIN, Settings.SECTION_INI_GENERAL, "LoadPath", ""),

View file

@ -20,5 +20,5 @@ class RunRunnable(
override val setting: AbstractSetting? = null
override val isEditable: Boolean
get() = worksDuringEmulation || !NativeLibrary.IsRunning()
get() = worksDuringEmulation || NativeLibrary.IsUninitialized()
}

View file

@ -54,7 +54,7 @@ abstract class SettingsItem {
open val isEditable: Boolean
get() {
if (!NativeLibrary.IsRunning()) return true
if (NativeLibrary.IsUninitialized()) return true
val setting = setting
return setting != null && setting.isRuntimeEditable
}

View file

@ -14,17 +14,16 @@ import android.os.Bundle
import android.view.Menu
import android.view.View
import android.widget.Toast
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AlertDialog
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowCompat
import androidx.core.view.WindowInsetsCompat
import androidx.fragment.app.DialogFragment
import androidx.lifecycle.ViewModelProvider
import com.google.android.material.appbar.CollapsingToolbarLayout
import com.google.android.material.color.MaterialColors
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.google.android.material.snackbar.Snackbar
import org.dolphinemu.dolphinemu.NativeLibrary
import org.dolphinemu.dolphinemu.R
import org.dolphinemu.dolphinemu.databinding.ActivitySettingsBinding
@ -32,11 +31,9 @@ import org.dolphinemu.dolphinemu.features.settings.model.Settings
import org.dolphinemu.dolphinemu.features.settings.ui.SettingsFragment.Companion.newInstance
import org.dolphinemu.dolphinemu.ui.main.MainPresenter
import org.dolphinemu.dolphinemu.utils.FileBrowserHelper
import org.dolphinemu.dolphinemu.utils.GpuDriverInstallResult
import org.dolphinemu.dolphinemu.utils.InsetsHelper
import org.dolphinemu.dolphinemu.utils.SerializableHelper.serializable
import org.dolphinemu.dolphinemu.utils.ThemeHelper.enableScrollTint
import org.dolphinemu.dolphinemu.utils.ThemeHelper.setNavigationBarColor
import org.dolphinemu.dolphinemu.utils.ThemeHelper.setTheme
class SettingsActivity : AppCompatActivity(), SettingsActivityView {
@ -55,6 +52,7 @@ class SettingsActivity : AppCompatActivity(), SettingsActivityView {
override fun onCreate(savedInstanceState: Bundle?) {
setTheme(this)
enableEdgeToEdge()
super.onCreate(savedInstanceState)
@ -69,8 +67,6 @@ class SettingsActivity : AppCompatActivity(), SettingsActivityView {
binding = ActivitySettingsBinding.inflate(layoutInflater)
setContentView(binding!!.root)
WindowCompat.setDecorFitsSystemWindows(window, false)
val launcher = intent
var gameID = launcher.getStringExtra(ARG_GAME_ID)
if (gameID == null) gameID = ""
@ -291,10 +287,6 @@ class SettingsActivity : AppCompatActivity(), SettingsActivityView {
)
InsetsHelper.applyNavbarWorkaround(insets.bottom, binding!!.workaroundView)
setNavigationBarColor(
this,
MaterialColors.getColor(binding!!.appbarSettings, R.attr.colorSurface)
)
windowInsets
}

View file

@ -69,7 +69,7 @@ class SettingsFragmentPresenter(
} else if (
menuTag == MenuTag.GRAPHICS
&& this.gameId.isNullOrEmpty()
&& !NativeLibrary.IsRunning()
&& NativeLibrary.IsUninitialized()
&& GpuDriverHelper.supportsCustomDriverLoading()
) {
this.gpuDriver =
@ -1226,6 +1226,24 @@ class SettingsFragmentPresenter(
MenuTag.getWiimoteMenuTag(3)
)
)
sl.add(SwitchSetting(context, object : AbstractBooleanSetting {
override val isOverridden: Boolean = IntSetting.WIIMOTE_BB_SOURCE.isOverridden
override val isRuntimeEditable: Boolean = IntSetting.WIIMOTE_BB_SOURCE.isRuntimeEditable
override fun delete(settings: Settings): Boolean {
return IntSetting.WIIMOTE_BB_SOURCE.delete(settings)
}
override val boolean: Boolean get() = IntSetting.WIIMOTE_BB_SOURCE.int == 2
override fun setBoolean(settings: Settings, newValue: Boolean) {
// 0 == None
// 1 == Emulated
// 2 == Real
IntSetting.WIIMOTE_BB_SOURCE.setInt(settings, if (newValue) 2 else 0)
}
}, R.string.real_balance_board, 0))
}
private fun addGraphicsSettings(sl: ArrayList<SettingsItem>) {
@ -1303,7 +1321,7 @@ class SettingsFragmentPresenter(
if (
this.gpuDriver != null && this.gameId.isNullOrEmpty()
&& !NativeLibrary.IsRunning()
&& NativeLibrary.IsUninitialized()
&& GpuDriverHelper.supportsCustomDriverLoading()
) {
sl.add(
@ -1777,6 +1795,14 @@ class SettingsFragmentPresenter(
0
)
)
sl.add(
SwitchSetting(
context,
BooleanSetting.GFX_VSYNC,
R.string.vsync,
R.string.vsync_description
)
)
sl.add(
SwitchSetting(
context,
@ -1987,6 +2013,16 @@ class SettingsFragmentPresenter(
0
)
)
sl.add(
RunRunnable(
context,
R.string.debug_jit_wipe_block_profiling_data,
0,
R.string.debug_jit_wipe_block_profiling_data_alert,
0,
true
) { NativeLibrary.WipeJitBlockProfilingData() }
)
sl.add(
RunRunnable(
context,

View file

@ -180,11 +180,11 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
private fun run(isActivityRecreated: Boolean) {
if (isActivityRecreated) {
if (NativeLibrary.IsRunning()) {
if (NativeLibrary.IsUninitialized()) {
loadPreviousTemporaryState = true
} else {
loadPreviousTemporaryState = false
deleteFile(temporaryStateFilePath)
} else {
loadPreviousTemporaryState = true
}
} else {
Log.debug("[EmulationFragment] activity resumed or fresh start")
@ -203,7 +203,7 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
private fun runWithValidSurface() {
runWhenSurfaceIsValid = false
if (!NativeLibrary.IsRunning()) {
if (NativeLibrary.IsUninitialized()) {
NativeLibrary.SetIsBooting()
val emulationThread = Thread({
if (loadPreviousTemporaryState) {

View file

@ -83,7 +83,7 @@ class InputOverlay(context: Context?, attrs: AttributeSet?) : SurfaceView(contex
fun initTouchPointer() {
// Check if we have all the data we need yet
val aspectRatioAvailable = NativeLibrary.IsRunningAndStarted()
val aspectRatioAvailable = NativeLibrary.IsRunning()
if (!aspectRatioAvailable || surfacePosition == null)
return

View file

@ -9,14 +9,13 @@ import android.view.Menu
import android.view.MenuItem
import android.view.View
import android.view.ViewGroup.MarginLayoutParams
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
import androidx.core.view.ViewCompat
import androidx.core.view.WindowCompat
import androidx.core.view.WindowInsetsCompat
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout.OnRefreshListener
import com.google.android.material.appbar.AppBarLayout
import com.google.android.material.color.MaterialColors
import com.google.android.material.tabs.TabLayout
import org.dolphinemu.dolphinemu.R
import org.dolphinemu.dolphinemu.activities.EmulationActivity
@ -53,13 +52,13 @@ class MainActivity : AppCompatActivity(), MainView, OnRefreshListener, ThemeProv
installSplashScreen().setKeepOnScreenCondition { !DirectoryInitialization.areDolphinDirectoriesReady() }
ThemeHelper.setTheme(this)
enableEdgeToEdge()
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
WindowCompat.setDecorFitsSystemWindows(window, false)
setInsets()
ThemeHelper.enableStatusBarScrollTint(this, binding.appbarMain)
@ -330,10 +329,6 @@ class MainActivity : AppCompatActivity(), MainView, OnRefreshListener, ThemeProv
binding.pagerPlatforms.setPadding(insets.left, 0, insets.right, 0)
InsetsHelper.applyNavbarWorkaround(insets.bottom, binding.workaroundView)
ThemeHelper.setNavigationBarColor(
this,
MaterialColors.getColor(binding.appbarMain, R.attr.colorSurface)
)
windowInsets
}

View file

@ -1,6 +1,5 @@
package org.dolphinemu.dolphinemu.utils
import android.app.Activity
import androidx.appcompat.app.AppCompatActivity
import org.dolphinemu.dolphinemu.R
import android.os.Build
@ -14,11 +13,8 @@ import com.google.android.material.appbar.MaterialToolbar
import com.google.android.material.appbar.AppBarLayout
import com.google.android.material.elevation.ElevationOverlayProvider
import com.google.android.material.color.MaterialColors
import android.graphics.Color
import androidx.annotation.ColorInt
import androidx.annotation.RequiresApi
import androidx.preference.PreferenceManager
import kotlin.math.roundToInt
object ThemeHelper {
@ -32,8 +28,6 @@ object ThemeHelper {
const val GREEN = 3
const val PINK = 4
const val NAV_BAR_ALPHA = 0.9f
@JvmStatic
fun setTheme(activity: AppCompatActivity) {
// We have to use shared preferences in addition to Dolphin's settings to guarantee that the
@ -166,32 +160,6 @@ object ThemeHelper {
}
}
@JvmStatic
fun setNavigationBarColor(activity: Activity, @ColorInt color: Int) {
val gestureType = InsetsHelper.getSystemGestureType(activity.applicationContext)
val orientation = activity.resources.configuration.orientation
// Use black if the Android version is too low to support changing button colors
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O_MR1) {
activity.window.navigationBarColor =
ContextCompat.getColor(activity.applicationContext, android.R.color.black)
} else if ((gestureType == InsetsHelper.THREE_BUTTON_NAVIGATION ||
gestureType == InsetsHelper.TWO_BUTTON_NAVIGATION) &&
orientation == Configuration.ORIENTATION_LANDSCAPE
) {
activity.window.navigationBarColor = color
} else if (gestureType == InsetsHelper.THREE_BUTTON_NAVIGATION ||
gestureType == InsetsHelper.TWO_BUTTON_NAVIGATION
) {
activity.window.navigationBarColor = getColorWithOpacity(color, NAV_BAR_ALPHA)
} else {
activity.window.navigationBarColor = ContextCompat.getColor(
activity.applicationContext,
android.R.color.transparent
)
}
}
@JvmStatic
fun enableScrollTint(
activity: AppCompatActivity, toolbar: MaterialToolbar, appBarLayout: AppBarLayout
@ -232,13 +200,4 @@ object ThemeHelper {
}
}
}
@RequiresApi(api = Build.VERSION_CODES.O_MR1)
@ColorInt
private fun getColorWithOpacity(@ColorInt color: Int, alphaFactor: Float): Int {
return Color.argb(
(alphaFactor * Color.alpha(color)).roundToInt(), Color.red(color),
Color.green(color), Color.blue(color)
)
}
}

View file

@ -23,6 +23,8 @@
<string name="wiimote_extension_2">Wii Remote Extension 3</string>
<string name="wiimote_extension_3">Wii Remote Extension 4</string>
<string name="real_balance_board">Real Balance Board</string>
<string name="wiimote">Wii Remote</string>
<string name="wiimote_general">Buttons</string>
<string name="wiimote_motion_simulation">Motion Simulation</string>
@ -330,6 +332,8 @@
<string name="crop">Crop</string>
<string name="crop_description">Crops the picture from its native aspect ratio to 4:3 or 16:9. If unsure, leave this unchecked.</string>
<string name="progressive_scan">Enable Progressive Scan</string>
<string name="vsync">V-Sync</string>
<string name="vsync_description">This setting is unnecessary on most Android devices, because Android always enables V-Sync. If unsure, leave this unchecked.</string>
<string name="backend_multithreading">Backend Multithreading</string>
<string name="backend_multithreading_description">Enables graphics backend multithreading (Vulkan only). May affect performance. If unsure, leave this checked.</string>
<string name="prefer_vs_for_point_line_expansion">Prefer VS for Point/Line Expansion</string>
@ -408,6 +412,8 @@
<string name="debug_large_entry_points_map">Disable Large Entry Points Map</string>
<string name="debug_jit_profiling_header">Jit Profiling</string>
<string name="debug_jit_enable_block_profiling">Enable Jit Block Profiling</string>
<string name="debug_jit_wipe_block_profiling_data">Wipe Jit Block Profiling Data</string>
<string name="debug_jit_wipe_block_profiling_data_alert">Re-initialize JIT block profiling data?</string>
<string name="debug_jit_write_block_log_dump">Write Jit Block Log Dump</string>
<string name="debug_jit_header">Jit</string>
<string name="debug_jitoff">Jit Disabled</string>

View file

@ -6,6 +6,9 @@
#include <jni.h>
#include <fmt/format.h>
#include <fmt/ranges.h>
#include "Common/FileUtil.h"
#include "Common/IniFile.h"
#include "Core/ConfigManager.h"
@ -58,7 +61,7 @@ Java_org_dolphinemu_dolphinemu_features_cheats_model_GeckoCheat_getCreator(JNIEn
JNIEXPORT jstring JNICALL
Java_org_dolphinemu_dolphinemu_features_cheats_model_GeckoCheat_getNotes(JNIEnv* env, jobject obj)
{
return ToJString(env, JoinStrings(GetPointer(env, obj)->notes, "\n"));
return ToJString(env, fmt::to_string(fmt::join(GetPointer(env, obj)->notes, "\n")));
}
JNIEXPORT jstring JNICALL

View file

@ -101,6 +101,10 @@ void Host_PPCSymbolsChanged()
{
}
void Host_PPCBreakpointsChanged()
{
}
void Host_RefreshDSPDebuggerWindow()
{
}
@ -118,8 +122,7 @@ void Host_Message(HostMessageID id)
}
else if (id == HostMessageID::WMUserStop)
{
if (Core::IsRunning(Core::System::GetInstance()))
Core::QueueHostJob(&Core::Stop);
Core::QueueHostJob(&Core::Stop);
}
}
@ -147,6 +150,14 @@ void Host_UpdateDisasmDialog()
{
}
void Host_JitCacheInvalidation()
{
}
void Host_JitProfileDataWiped()
{
}
void Host_UpdateMainFrame()
{
}
@ -292,13 +303,6 @@ JNIEXPORT void JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_SetIsBooting
}
JNIEXPORT jboolean JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_IsRunning(JNIEnv*, jclass)
{
return s_is_booting.IsSet() ||
static_cast<jboolean>(Core::IsRunning(Core::System::GetInstance()));
}
JNIEXPORT jboolean JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_IsRunningAndStarted(JNIEnv*,
jclass)
{
return static_cast<jboolean>(Core::IsRunning(Core::System::GetInstance()));
}
@ -309,6 +313,13 @@ Java_org_dolphinemu_dolphinemu_NativeLibrary_IsRunningAndUnpaused(JNIEnv*, jclas
return static_cast<jboolean>(Core::GetState(Core::System::GetInstance()) == Core::State::Running);
}
JNIEXPORT jboolean JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_IsUninitialized(JNIEnv*,
jclass)
{
return static_cast<jboolean>(Core::IsUninitialized(Core::System::GetInstance()) &&
!s_is_booting.IsSet());
}
JNIEXPORT jstring JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_GetVersionString(JNIEnv* env,
jclass)
{
@ -417,9 +428,10 @@ JNIEXPORT jint JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_DefaultCPUCo
}
JNIEXPORT jstring JNICALL
Java_org_dolphinemu_dolphinemu_NativeLibrary_GetDefaultGraphicsBackendName(JNIEnv* env, jclass)
Java_org_dolphinemu_dolphinemu_NativeLibrary_GetDefaultGraphicsBackendConfigName(JNIEnv* env,
jclass)
{
return ToJString(env, VideoBackendBase::GetDefaultBackendName());
return ToJString(env, VideoBackendBase::GetDefaultBackendConfigName());
}
JNIEXPORT jint JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_GetMaxLogLevel(JNIEnv*, jclass)
@ -427,6 +439,22 @@ JNIEXPORT jint JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_GetMaxLogLev
return static_cast<jint>(Common::Log::MAX_LOGLEVEL);
}
JNIEXPORT void JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_WipeJitBlockProfilingData(
JNIEnv* env, jclass native_library_class)
{
HostThreadLock guard;
auto& system = Core::System::GetInstance();
auto& jit_interface = system.GetJitInterface();
const Core::CPUThreadGuard cpu_guard(system);
if (jit_interface.GetCore() == nullptr)
{
env->CallStaticVoidMethod(native_library_class, IDCache::GetDisplayToastMsg(),
ToJString(env, Common::GetStringT("JIT is not active")), JNI_FALSE);
return;
}
jit_interface.WipeBlockProfilingData(cpu_guard);
}
JNIEXPORT void JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_WriteJitBlockLogDump(
JNIEnv* env, jclass native_library_class)
{

View file

@ -28,6 +28,7 @@
#endif
#include <fmt/format.h>
#include <fmt/ranges.h>
#include "Common/CommonTypes.h"
#include "Common/FileUtil.h"
@ -332,5 +333,5 @@ std::string CPUInfo::Summarize()
if (bSHA2)
sum.push_back("SHA2");
return JoinStrings(sum, ",");
return fmt::to_string(fmt::join(sum, ","));
}

View file

@ -47,7 +47,7 @@ private:
std::array<uint32_t, 36 + sizeof...(ExtraMatches)> _conns;
std::optional<V> _val;
TrieEntry() { std::fill(_conns.begin(), _conns.end(), INVALID_CONN); }
TrieEntry() { _conns.fill(INVALID_CONN); }
};
constexpr size_t IndexOf(char c) const

View file

@ -77,6 +77,8 @@ add_library(common
Hash.cpp
Hash.h
HookableEvent.h
HostDisassembler.cpp
HostDisassembler.h
HttpRequest.cpp
HttpRequest.h
Image.cpp
@ -183,6 +185,11 @@ PRIVATE
${VTUNE_LIBRARIES}
)
if ((DEFINED CMAKE_ANDROID_ARCH_ABI AND CMAKE_ANDROID_ARCH_ABI MATCHES "x86|x86_64") OR
(NOT DEFINED CMAKE_ANDROID_ARCH_ABI AND _M_X86_64))
target_link_libraries(common PRIVATE bdisasm)
endif()
if (APPLE)
target_link_libraries(common
PRIVATE
@ -333,6 +340,28 @@ if(OPROFILE_FOUND)
target_link_libraries(common PRIVATE OProfile::OProfile)
endif()
if(ENABLE_LLVM)
find_package(LLVM CONFIG)
if(LLVM_FOUND)
message(STATUS "LLVM found, enabling LLVM support in disassembler")
target_compile_definitions(common PRIVATE HAVE_LLVM)
# Minimal documentation about LLVM's CMake functions is available here:
# https://releases.llvm.org/16.0.0/docs/CMake.html#embedding-llvm-in-your-project
# https://groups.google.com/g/llvm-dev/c/YeEVe7HTasQ?pli=1
#
# However, you have to read the source code in any case.
# Look for LLVM-Config.cmake in your (Unix) system:
# $ find /usr -name LLVM-Config\\.cmake 2>/dev/null
llvm_expand_pseudo_components(LLVM_EXPAND_COMPONENTS
AllTargetsInfos AllTargetsDisassemblers AllTargetsCodeGens
)
llvm_config(common USE_SHARED
mcdisassembler target ${LLVM_EXPAND_COMPONENTS}
)
target_include_directories(common PRIVATE ${LLVM_INCLUDE_DIRS})
endif()
endif()
if(UNIX)
# Posix networking code needs to be fixed for Windows
add_executable(traversal_server TraversalServer.cpp)

View file

@ -20,7 +20,6 @@ struct ConfigChangedCallbackID
size_t id = -1;
bool operator==(const ConfigChangedCallbackID&) const = default;
bool operator!=(const ConfigChangedCallbackID&) const = default;
};
using ConfigChangedCallback = std::function<void()>;

View file

@ -15,11 +15,6 @@ bool Location::operator==(const Location& other) const
strcasecmp(key.c_str(), other.key.c_str()) == 0;
}
bool Location::operator!=(const Location& other) const
{
return !(*this == other);
}
bool Location::operator<(const Location& other) const
{
if (system != other.system)

View file

@ -28,7 +28,6 @@ struct Location
std::string key;
bool operator==(const Location& other) const;
bool operator!=(const Location& other) const;
bool operator<(const Location& other) const;
};

View file

@ -252,8 +252,8 @@ Signature Sign(const u8* key, const u8* hash)
bn_mul(s.data.data(), minv, kk, ec_N, 30);
Signature signature;
std::copy(r.data.cbegin(), r.data.cend(), signature.begin());
std::copy(s.data.cbegin(), s.data.cend(), signature.begin() + 30);
std::ranges::copy(r.data, signature.begin());
std::ranges::copy(s.data, signature.begin() + 30);
return signature;
}

View file

@ -97,7 +97,7 @@ std::vector<std::string> DoFileSearch(const std::vector<std::string>& directorie
// Remove duplicates (occurring because caller gave e.g. duplicate or overlapping directories -
// not because std::filesystem returns duplicates). Also note that this pathname-based uniqueness
// isn't as thorough as std::filesystem::equivalent.
std::sort(result.begin(), result.end());
std::ranges::sort(result);
result.erase(std::unique(result.begin(), result.end()), result.end());
// Dolphin expects to be able to use "/" (DIR_SEP) everywhere.
@ -107,7 +107,7 @@ std::vector<std::string> DoFileSearch(const std::vector<std::string>& directorie
if constexpr (os_separator != DIR_SEP_CHR)
{
for (auto& path : result)
std::replace(path.begin(), path.end(), '\\', DIR_SEP_CHR);
std::ranges::replace(path, '\\', DIR_SEP_CHR);
}
return result;

View file

@ -448,7 +448,7 @@ FSTEntry ScanDirectoryTree(std::string directory, bool recursive)
// about with directory separators (for host paths - emulated paths may require it) and instead
// use fs::path to interact with them.
auto wpath = path.wstring();
std::replace(wpath.begin(), wpath.end(), L'\\', L'/');
std::ranges::replace(wpath, L'\\', L'/');
return WStringToUTF8(wpath);
#else
return PathToString(path);

View file

@ -0,0 +1,158 @@
// Copyright 2008 Dolphin Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
#include "Common/HostDisassembler.h"
#include <span>
#include <fmt/format.h>
#include <fmt/ostream.h>
#include <fmt/ranges.h>
#if defined(HAVE_LLVM)
#include <llvm-c/Disassembler.h>
#include <llvm-c/Target.h>
#elif defined(_M_X86_64)
#include <disasm.h> // Bochs
#endif
#if defined(HAVE_LLVM)
class HostDisassemblerLLVM final : public HostDisassembler
{
public:
explicit HostDisassemblerLLVM(const char* host_disasm, const char* cpu = "",
std::size_t inst_size = 0);
~HostDisassemblerLLVM();
private:
LLVMDisasmContextRef m_llvm_context;
std::size_t m_instruction_size;
std::size_t Disassemble(const u8* begin, const u8* end, std::ostream& stream) override;
};
HostDisassemblerLLVM::HostDisassemblerLLVM(const char* host_disasm, const char* cpu,
std::size_t inst_size)
: m_instruction_size(inst_size)
{
LLVMInitializeAllTargetInfos();
LLVMInitializeAllTargetMCs();
LLVMInitializeAllDisassemblers();
m_llvm_context = LLVMCreateDisasmCPU(host_disasm, cpu, nullptr, 0, nullptr, nullptr);
// Couldn't create llvm context
if (!m_llvm_context)
return;
LLVMSetDisasmOptions(m_llvm_context, LLVMDisassembler_Option_AsmPrinterVariant |
LLVMDisassembler_Option_PrintLatency);
}
HostDisassemblerLLVM::~HostDisassemblerLLVM()
{
if (m_llvm_context)
LLVMDisasmDispose(m_llvm_context);
}
std::size_t HostDisassemblerLLVM::Disassemble(const u8* begin, const u8* end, std::ostream& stream)
{
std::size_t instruction_count = 0;
if (!m_llvm_context)
return instruction_count;
while (begin < end)
{
char inst_disasm[256];
const auto inst_size =
LLVMDisasmInstruction(m_llvm_context, const_cast<u8*>(begin), static_cast<u64>(end - begin),
reinterpret_cast<u64>(begin), inst_disasm, sizeof(inst_disasm));
if (inst_size == 0)
{
if (m_instruction_size != 0)
{
// If we are on an architecture that has a fixed instruction
// size, we can continue onward past this bad instruction.
fmt::println(stream, "{}\tInvalid inst: {:02x}", fmt::ptr(begin),
fmt::join(std::span{begin, m_instruction_size}, ""));
begin += m_instruction_size;
}
else
{
// We can't continue if we are on an architecture that has flexible
// instruction sizes. Dump the rest of the block instead.
fmt::println(stream, "{}\tInvalid inst: {:02x}", fmt::ptr(begin),
fmt::join(std::span{begin, end}, ""));
break;
}
}
else
{
fmt::println(stream, "{}{}", fmt::ptr(begin), inst_disasm);
begin += inst_size;
}
++instruction_count;
}
return instruction_count;
}
#elif defined(_M_X86_64)
class HostDisassemblerBochs final : public HostDisassembler
{
public:
explicit HostDisassemblerBochs();
~HostDisassemblerBochs() = default;
private:
disassembler m_disasm;
std::size_t Disassemble(const u8* begin, const u8* end, std::ostream& stream) override;
};
HostDisassemblerBochs::HostDisassemblerBochs()
{
m_disasm.set_syntax_intel();
}
std::size_t HostDisassemblerBochs::Disassemble(const u8* begin, const u8* end, std::ostream& stream)
{
std::size_t instruction_count = 0;
while (begin < end)
{
char inst_disasm[256];
const auto inst_size =
m_disasm.disasm64(0, reinterpret_cast<bx_address>(begin), begin, inst_disasm);
fmt::println(stream, "{}\t{}", fmt::ptr(begin), inst_disasm);
begin += inst_size;
++instruction_count;
}
return instruction_count;
}
#endif
std::unique_ptr<HostDisassembler> HostDisassembler::Factory(Platform arch)
{
switch (arch)
{
#if defined(HAVE_LLVM)
case Platform::x86_64:
return std::make_unique<HostDisassemblerLLVM>("x86_64-none-unknown");
case Platform::aarch64:
return std::make_unique<HostDisassemblerLLVM>("aarch64-none-unknown", "cortex-a57", 4);
#elif defined(_M_X86_64)
case Platform::x86_64:
return std::make_unique<HostDisassemblerBochs>();
#else
case Platform{}: // warning C4065: "switch statement contains 'default' but no 'case' labels"
#endif
default:
return std::make_unique<HostDisassembler>();
}
}
std::size_t HostDisassembler::Disassemble(const u8* begin, const u8* end, std::ostream& stream)
{
fmt::println(stream, "{}\t{:02x}", fmt::ptr(begin), fmt::join(std::span{begin, end}, ""));
return 0;
}

View file

@ -0,0 +1,26 @@
// Copyright 2008 Dolphin Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#include <cstddef>
#include <iosfwd>
#include <memory>
#include "Common/CommonTypes.h"
class HostDisassembler
{
public:
enum class Platform
{
x86_64,
aarch64,
};
virtual ~HostDisassembler() = default;
static std::unique_ptr<HostDisassembler> Factory(Platform arch);
virtual std::size_t Disassemble(const u8* begin, const u8* end, std::ostream& stream);
};

View file

@ -85,7 +85,7 @@ bool IniFile::Section::Delete(std::string_view key)
return false;
values.erase(it);
keys_order.erase(std::find(keys_order.begin(), keys_order.end(), key));
keys_order.erase(std::ranges::find(keys_order, key));
return true;
}
@ -130,7 +130,7 @@ const IniFile::Section* IniFile::GetSection(std::string_view section_name) const
{
for (const Section& sect : sections)
{
if (CaseInsensitiveStringCompare::IsEqual(sect.name, section_name))
if (CaseInsensitiveEquals(sect.name, section_name))
return &sect;
}
@ -141,7 +141,7 @@ IniFile::Section* IniFile::GetSection(std::string_view section_name)
{
for (Section& sect : sections)
{
if (CaseInsensitiveStringCompare::IsEqual(sect.name, section_name))
if (CaseInsensitiveEquals(sect.name, section_name))
return &sect;
}

View file

@ -15,29 +15,6 @@
namespace Common
{
struct CaseInsensitiveStringCompare
{
// Allow heterogenous lookup.
using is_transparent = void;
bool operator()(std::string_view a, std::string_view b) const
{
return std::lexicographical_compare(
a.begin(), a.end(), b.begin(), b.end(),
[](char lhs, char rhs) { return Common::ToLower(lhs) < Common::ToLower(rhs); });
}
static bool IsEqual(std::string_view a, std::string_view b)
{
if (a.size() != b.size())
return false;
return std::equal(a.begin(), a.end(), b.begin(), b.end(), [](char lhs, char rhs) {
return Common::ToLower(lhs) == Common::ToLower(rhs);
});
}
};
class IniFile
{
public:
@ -86,7 +63,7 @@ public:
bool GetLines(std::vector<std::string>* lines, const bool remove_comments = true) const;
bool operator<(const Section& other) const { return name < other.name; }
using SectionMap = std::map<std::string, std::string, CaseInsensitiveStringCompare>;
using SectionMap = std::map<std::string, std::string, CaseInsensitiveLess>;
const std::string& GetName() const { return name; }
const SectionMap& GetValues() const { return values; }

View file

@ -8,6 +8,7 @@
#include <vector>
#include <fmt/format.h>
#include <fmt/ranges.h>
#include "Common/CommonTypes.h"
#include "Common/FileUtil.h"
@ -141,7 +142,7 @@ std::string EscapePath(const std::string& path)
for (const std::string& split_string : split_strings)
escaped_split_strings.push_back(EscapeFileName(split_string));
return JoinStrings(escaped_split_strings, "/");
return fmt::to_string(fmt::join(escaped_split_strings, "/"));
}
std::string UnescapeFileName(const std::string& filename)

View file

@ -36,10 +36,10 @@ MACAddress GenerateMacAddress(const MACConsumer type)
switch (type)
{
case MACConsumer::BBA:
std::copy(oui_bba.begin(), oui_bba.end(), mac.begin());
std::ranges::copy(oui_bba, mac.begin());
break;
case MACConsumer::IOS:
std::copy(oui_ios.begin(), oui_ios.end(), mac.begin());
std::ranges::copy(oui_ios, mac.begin());
break;
}

View file

@ -17,72 +17,72 @@
namespace Common
{
SettingsHandler::SettingsHandler() : m_buffer{}, m_position{0}, m_key{INITIAL_SEED}, decoded{""}
namespace
{
// Key used to encrypt/decrypt setting.txt contents
constexpr u32 INITIAL_SEED = 0x73B5DBFA;
} // namespace
SettingsWriter::SettingsWriter() : m_buffer{}, m_position{0}, m_key{INITIAL_SEED}
{
}
SettingsHandler::SettingsHandler(const Buffer& buffer) : SettingsHandler()
{
m_buffer = buffer;
Decrypt();
}
const SettingsHandler::Buffer& SettingsHandler::GetBytes() const
const SettingsBuffer& SettingsWriter::GetBytes() const
{
return m_buffer;
}
std::string SettingsHandler::GetValue(std::string_view key) const
std::string SettingsReader::GetValue(std::string_view key) const
{
constexpr char delim[] = "\n";
std::string toFind = std::string(delim).append(key).append("=");
size_t found = decoded.find(toFind);
size_t found = m_decoded.find(toFind);
if (found != std::string_view::npos)
{
size_t delimFound = decoded.find(delim, found + toFind.length());
size_t delimFound = m_decoded.find(delim, found + toFind.length());
if (delimFound == std::string_view::npos)
delimFound = decoded.length() - 1;
return decoded.substr(found + toFind.length(), delimFound - (found + toFind.length()));
delimFound = m_decoded.length() - 1;
return m_decoded.substr(found + toFind.length(), delimFound - (found + toFind.length()));
}
else
{
toFind = std::string(key).append("=");
found = decoded.find(toFind);
found = m_decoded.find(toFind);
if (found == 0)
{
size_t delimFound = decoded.find(delim, found + toFind.length());
size_t delimFound = m_decoded.find(delim, found + toFind.length());
if (delimFound == std::string_view::npos)
delimFound = decoded.length() - 1;
return decoded.substr(found + toFind.length(), delimFound - (found + toFind.length()));
delimFound = m_decoded.length() - 1;
return m_decoded.substr(found + toFind.length(), delimFound - (found + toFind.length()));
}
}
return "";
}
void SettingsHandler::Decrypt()
SettingsReader::SettingsReader(const SettingsBuffer& buffer) : m_decoded{""}
{
while (m_position < m_buffer.size())
u32 key = INITIAL_SEED;
for (u32 position = 0; position < buffer.size(); ++position)
{
decoded.push_back((u8)(m_buffer[m_position] ^ m_key));
m_position++;
m_key = (m_key >> 31) | (m_key << 1);
m_decoded.push_back((u8)(buffer[position] ^ key));
key = (key >> 31) | (key << 1);
}
// The decoded data normally uses CRLF line endings, but occasionally
// (see the comment in WriteLine), lines can be separated by CRLFLF.
// To handle this, we remove every CR and treat LF as the line ending.
// (We ignore empty lines.)
std::erase(decoded, '\x0d');
std::erase(m_decoded, '\x0d');
}
void SettingsHandler::AddSetting(std::string_view key, std::string_view value)
void SettingsWriter::AddSetting(std::string_view key, std::string_view value)
{
WriteLine(fmt::format("{}={}\r\n", key, value));
}
void SettingsHandler::WriteLine(std::string_view str)
void SettingsWriter::WriteLine(std::string_view str)
{
const u32 old_position = m_position;
const u32 old_key = m_key;
@ -106,7 +106,7 @@ void SettingsHandler::WriteLine(std::string_view str)
}
}
void SettingsHandler::WriteByte(u8 b)
void SettingsWriter::WriteByte(u8 b)
{
if (m_position >= m_buffer.size())
return;
@ -116,7 +116,7 @@ void SettingsHandler::WriteByte(u8 b)
m_key = (m_key >> 31) | (m_key << 1);
}
std::string SettingsHandler::GenerateSerialNumber()
std::string SettingsWriter::GenerateSerialNumber()
{
const std::time_t t = std::time(nullptr);

View file

@ -13,34 +13,35 @@
namespace Common
{
class SettingsHandler
using SettingsBuffer = std::array<u8, 0x100>;
class SettingsWriter
{
public:
enum
{
SETTINGS_SIZE = 0x100,
// Key used to encrypt/decrypt setting.txt contents
INITIAL_SEED = 0x73B5DBFA
};
using Buffer = std::array<u8, SETTINGS_SIZE>;
SettingsHandler();
explicit SettingsHandler(const Buffer& buffer);
SettingsWriter();
void AddSetting(std::string_view key, std::string_view value);
const Buffer& GetBytes() const;
std::string GetValue(std::string_view key) const;
const SettingsBuffer& GetBytes() const;
static std::string GenerateSerialNumber();
private:
void Decrypt();
void WriteLine(std::string_view str);
void WriteByte(u8 b);
std::array<u8, SETTINGS_SIZE> m_buffer;
SettingsBuffer m_buffer;
u32 m_position, m_key;
std::string decoded;
};
class SettingsReader
{
public:
explicit SettingsReader(const SettingsBuffer& buffer);
std::string GetValue(std::string_view key) const;
private:
std::string m_decoded;
};
} // namespace Common

View file

@ -235,8 +235,8 @@ std::string_view StripQuotes(std::string_view s)
// Turns "\n\rhello" into " hello".
void ReplaceBreaksWithSpaces(std::string& str)
{
std::replace(str.begin(), str.end(), '\r', ' ');
std::replace(str.begin(), str.end(), '\n', ' ');
std::ranges::replace(str, '\r', ' ');
std::ranges::replace(str, '\n', ' ');
}
void TruncateToCString(std::string* s)
@ -369,21 +369,6 @@ std::vector<std::string> SplitString(const std::string& str, const char delim)
return output;
}
std::string JoinStrings(const std::vector<std::string>& strings, const std::string& delimiter)
{
// Check if we can return early, just for speed
if (strings.empty())
return "";
std::ostringstream res;
std::copy(strings.begin(), strings.end(),
std::ostream_iterator<std::string>(res, delimiter.c_str()));
// Drop the trailing delimiter.
std::string joined = res.str();
return joined.substr(0, joined.length() - delimiter.length());
}
std::string TabsToSpaces(int tab_size, std::string str)
{
const std::string spaces(tab_size, ' ');
@ -490,8 +475,7 @@ std::string ConvertStringForGame(const std::string& input, int length)
size_t StringUTF8CodePointCount(std::string_view str)
{
return str.size() -
std::count_if(str.begin(), str.end(), [](char c) -> bool { return (c & 0xC0) == 0x80; });
return str.size() - std::ranges::count_if(str, [](char c) -> bool { return (c & 0xC0) == 0x80; });
}
#ifdef _WIN32
@ -861,20 +845,24 @@ std::string GetEscapedHtml(std::string html)
void ToLower(std::string* str)
{
std::transform(str->begin(), str->end(), str->begin(), [](char c) { return Common::ToLower(c); });
std::ranges::transform(*str, str->begin(), static_cast<char (&)(char)>(Common::ToLower));
}
void ToUpper(std::string* str)
{
std::transform(str->begin(), str->end(), str->begin(), [](char c) { return Common::ToUpper(c); });
std::ranges::transform(*str, str->begin(), static_cast<char (&)(char)>(Common::ToUpper));
}
bool CaseInsensitiveEquals(std::string_view a, std::string_view b)
{
if (a.size() != b.size())
return false;
return std::equal(a.begin(), a.end(), b.begin(),
[](char ca, char cb) { return Common::ToLower(ca) == Common::ToLower(cb); });
return std::ranges::equal(
a, b, [](char ca, char cb) { return Common::ToLower(ca) == Common::ToLower(cb); });
}
bool CaseInsensitiveLess::operator()(std::string_view a, std::string_view b) const
{
return std::ranges::lexicographical_compare(
a, b, [](char ca, char cb) { return Common::ToLower(ca) < Common::ToLower(cb); });
}
std::string BytesToHexString(std::span<const u8> bytes)

View file

@ -200,7 +200,6 @@ std::from_chars_result FromChars(std::string_view sv, T& value,
std::string TabsToSpaces(int tab_size, std::string str);
std::vector<std::string> SplitString(const std::string& str, char delim);
std::string JoinStrings(const std::vector<std::string>& strings, const std::string& delimiter);
// "C:/Windows/winhelp.exe" to "C:/Windows/", "winhelp", ".exe"
// This requires forward slashes to be used for the path separators, even on Windows.
@ -333,6 +332,14 @@ std::string GetEscapedHtml(std::string html);
void ToLower(std::string* str);
void ToUpper(std::string* str);
bool CaseInsensitiveEquals(std::string_view a, std::string_view b);
// 'std::less'-like comparison function object type for case-insensitive strings.
struct CaseInsensitiveLess
{
using is_transparent = void; // Allow heterogenous lookup.
bool operator()(std::string_view a, std::string_view b) const;
};
std::string BytesToHexString(std::span<const u8> bytes);
} // namespace Common

View file

@ -14,6 +14,7 @@
#include <thread>
#include <fmt/format.h>
#include <fmt/ranges.h>
#include "Common/CommonTypes.h"
#include "Common/Intrinsics.h"
@ -275,5 +276,5 @@ std::string CPUInfo::Summarize()
if (bSHA2)
sum.push_back("SHA2");
return JoinStrings(sum, ",");
return fmt::to_string(fmt::join(sum, ","));
}

View file

@ -122,7 +122,6 @@ struct OpArg
return std::tie(scale, offsetOrBaseReg, indexReg, offset, operandReg) ==
std::tie(b.scale, b.offsetOrBaseReg, b.indexReg, b.offset, b.operandReg);
}
constexpr bool operator!=(const OpArg& b) const { return !operator==(b); }
u64 Imm64() const
{
DEBUG_ASSERT(scale == SCALE_IMM64);

Some files were not shown because too many files have changed in this diff Show more