mirror of
https://github.com/PCSX2/pcsx2.git
synced 2026-01-31 01:15:24 +01:00
Compare commits
8 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b01359e06f | ||
|
|
905f9431a5 | ||
|
|
424951e1bb | ||
|
|
2167d9e4f5 | ||
|
|
82a38a7124 | ||
|
|
eb6a52c55c | ||
|
|
234b8f6abf | ||
|
|
843566eb49 |
420
bin/utils/bulk_compression.py
Executable file
420
bin/utils/bulk_compression.py
Executable file
@@ -0,0 +1,420 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
# PCSX2 - PS2 Emulator for PCs
|
||||
# Copyright (C) 2024 PCSX2 Dev Team
|
||||
#
|
||||
# PCSX2 is free software: you can redistribute it and/or modify it under the terms
|
||||
# of the GNU General Public License as published by the Free Software Found-
|
||||
# ation, either version 3 of the License, or (at your option) any later version.
|
||||
#
|
||||
# PCSX2 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
||||
# without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
||||
# PURPOSE. See the GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License along with PCSX2.
|
||||
# If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
import sys
|
||||
import os
|
||||
import re
|
||||
from subprocess import Popen, PIPE
|
||||
from os.path import exists
|
||||
|
||||
gamecount = [0]
|
||||
|
||||
# =================================================================================================
|
||||
|
||||
def deletionChoice(source_extension): # Choose to delete source files
|
||||
|
||||
yesno = {
|
||||
"n" : 0,
|
||||
"no" : 0,
|
||||
"y" : 1,
|
||||
"yes" : 1,
|
||||
}
|
||||
|
||||
print("╟-------------------------------------------------------------------------------╢")
|
||||
print(f"║ Do you want to delete the original {source_extension.upper()} files as they are converted?")
|
||||
choice = input("║ Type Y or N then press ENTER: ").lower()
|
||||
|
||||
if (not choice in yesno):
|
||||
exitInvalidOption()
|
||||
|
||||
return (yesno[choice])
|
||||
|
||||
# -------------------------------------------------------------------------------------------------
|
||||
|
||||
def blockSizeChoice(is_cd, decompressing): # Choose block size
|
||||
|
||||
if (decompressing):
|
||||
return 0
|
||||
|
||||
sizes = {
|
||||
"1" : 16384,
|
||||
"2" : 131072,
|
||||
"3" : 262144,
|
||||
} if not is_cd else {
|
||||
"1": 17136,
|
||||
"2": 132192,
|
||||
"3": 264384,
|
||||
}
|
||||
|
||||
print("╟-------------------------------------------------------------------------------╢")
|
||||
print("║ Please pick the block size you would like to use:")
|
||||
print("║")
|
||||
print("║ 1 - 16 kB (bigger files, faster access/less CPU, choose this if unsure)")
|
||||
print("║ 2 - 128 kB (balanced)")
|
||||
print("║ 3 - 256 kB (smaller files, slower access/more CPU)")
|
||||
print("║")
|
||||
blocksize = input("║ Type the number corresponding to your selection then press ENTER: ")
|
||||
|
||||
if (not blocksize in sizes):
|
||||
exitInvalidOption()
|
||||
|
||||
return (sizes[blocksize])
|
||||
|
||||
# =================================================================================================
|
||||
|
||||
def checkSuccess(compressing, fname, extension, error_code): # Ensure file created properly
|
||||
|
||||
target_fname = f"{fname}.{extension}"
|
||||
if (error_code):
|
||||
|
||||
print("╠===============================================================================╣")
|
||||
|
||||
if (compressing):
|
||||
print(f"║ Compression to {extension.upper()} failed for the following:{(37 - len(extension)) * ' '}║")
|
||||
else:
|
||||
print(f"║ Extraction to {extension.upper()} failed for the following:{(38 - len(extension)) * ' '}║")
|
||||
|
||||
print(f"║ {target_fname}{(77 - len(target_fname)) * ' '}║")
|
||||
print("╚===============================================================================╝")
|
||||
|
||||
sys.exit(1)
|
||||
|
||||
print(f"║ {target_fname} created.{(69 - len(target_fname)) * ' '}║")
|
||||
|
||||
# -------------------------------------------------------------------------------------------------
|
||||
|
||||
def checkProgramMissing(program):
|
||||
|
||||
if (sys.platform.startswith('win32') and exists(f"./{program}.exe")):
|
||||
return # Windows
|
||||
|
||||
else: # Linux, macOS
|
||||
from shutil import which
|
||||
if (which(program) is not None):
|
||||
return
|
||||
|
||||
print("╠===============================================================================╗")
|
||||
print(f"║ {program} failed, {program} is missing.{(39 - (len(program) * 2)) * ' '}║")
|
||||
print("╚===============================================================================╝")
|
||||
sys.exit(1)
|
||||
|
||||
# -------------------------------------------------------------------------------------------------
|
||||
|
||||
def checkBinCueMismatch(bin_files, cue_files): # Ensure all bins and cues match
|
||||
|
||||
if (len(bin_files) != len(cue_files)): # Ensure numerical parity
|
||||
exitBinCueMismatch()
|
||||
|
||||
for fname in bin_files: # Ensure filename parity
|
||||
if (f"{fname[:-4]}.cue" not in cue_files):
|
||||
exitBinCueMismatch()
|
||||
|
||||
# -------------------------------------------------------------------------------------------------
|
||||
|
||||
def checkDuplicates(source_files, target_extensions, crash_protection_type=0):
|
||||
|
||||
dupe_options = {
|
||||
"s" : 0,
|
||||
"skip" : 0,
|
||||
"o" : 1,
|
||||
"overwrite" : 1,
|
||||
}
|
||||
|
||||
dupe_files = []
|
||||
dupe_names = []
|
||||
target_files = []
|
||||
|
||||
for extension in target_extensions:
|
||||
target_files[len(target_files):] = returnFilteredPwdContents(extension)
|
||||
|
||||
for fname in source_files:
|
||||
for extension in target_extensions:
|
||||
target_fname = f"{fname[:-4]}.{extension}"
|
||||
if (target_fname in target_files):
|
||||
dupe_files.append(target_fname)
|
||||
|
||||
match crash_protection_type:
|
||||
case 0:
|
||||
pass
|
||||
case 1: # Skip any dupe files no matter what
|
||||
[dupe_names.append(fname[:-4]) for fname in dupe_files if fname[:-4] not in dupe_names]
|
||||
return dupe_names
|
||||
case 2: # Only skip if intermediate .iso present
|
||||
[dupe_names.append(fname[:-4]) for fname in dupe_files if fname[:-4] not in dupe_names and fname[-4:] == ".iso"]
|
||||
case _:
|
||||
pass
|
||||
|
||||
if (not dupe_files):
|
||||
return dupe_names
|
||||
|
||||
print("╟-------------------------------------------------------------------------------╢")
|
||||
print("║ The following files were found which would be overwritten:")
|
||||
|
||||
for fname in dupe_files:
|
||||
print(f"║ - {fname}")
|
||||
|
||||
print("║")
|
||||
print("║ You may choose to OVERWRITE or SKIP all of these.")
|
||||
if (crash_protection_type == 2):
|
||||
print("║ NOTE: chdman cannot overwrite .cso files. These will be skipped regardless.")
|
||||
choice = input("║ Press 'O' to overwrite or 'S' to skip and press ENTER: ").lower()
|
||||
|
||||
if (choice in dupe_options):
|
||||
if (not dupe_options[choice]): # Skip
|
||||
[dupe_names.append(fname[:-4]) for fname in dupe_files if fname[:-4] not in dupe_names]
|
||||
return dupe_names
|
||||
else:
|
||||
exitInvalidOption()
|
||||
|
||||
# =================================================================================================
|
||||
|
||||
def printInitialStatus(decompressing, target_fname):
|
||||
|
||||
if (gamecount[0] != 0):
|
||||
print("╟-------------------------------------------------------------------------------╢")
|
||||
gamecount[0] += 1
|
||||
|
||||
if (decompressing):
|
||||
print(f"║ Extracting to {target_fname}... ({gamecount[0]}){(58 - len(target_fname) - len(str(gamecount[0]))) * ' '}║")
|
||||
else:
|
||||
print(f"║ Compressing to {target_fname}... ({gamecount[0]}){(57 - len(target_fname) - len(str(gamecount[0]))) * ' '}║")
|
||||
|
||||
# -------------------------------------------------------------------------------------------------
|
||||
|
||||
def printSkip(target_fname):
|
||||
|
||||
if (gamecount[0] != 0):
|
||||
print("╟-------------------------------------------------------------------------------╢")
|
||||
gamecount[0] += 1
|
||||
print(f"║ Skipping creation of {target_fname}{(57 - len(target_fname)) * ' '}║")
|
||||
|
||||
# =================================================================================================
|
||||
|
||||
def createCommandList(mode, source_fname, target_fname, blocksize=0):
|
||||
|
||||
match mode:
|
||||
case 1:
|
||||
return [["maxcso", f"--block={blocksize}", source_fname]]
|
||||
case 2:
|
||||
return [["chdman", "createraw", "-us", "2048", "-hs", f"{blocksize}", "-f", "-i", source_fname, "-o", target_fname]]
|
||||
case 3:
|
||||
return [["chdman", "createcd", "-hs", f"{blocksize}", "-i", source_fname, "-o", f"{source_fname[:-4]}.chd"]]
|
||||
case 4:
|
||||
return [["maxcso", "--decompress", source_fname],
|
||||
["chdman", "createraw", "-us", "2048", "-hs", f"{blocksize}", "-f", "-i", f"{source_fname[:-4]}.iso", "-o", f"{source_fname[:-4]}.chd"]]
|
||||
case 5:
|
||||
return [["chdman", "extractraw", "-i", source_fname, "-o", f"{source_fname[:-4]}.iso"],
|
||||
["maxcso", f"--block={blocksize}", f"{source_fname[:-4]}.iso"]]
|
||||
case 6:
|
||||
return [["chdman", "extractraw", "-i", source_fname, "-o", target_fname]]
|
||||
case 7:
|
||||
return [["chdman", "extractcd", "-i", source_fname, "-o", target_fname]]
|
||||
case 8:
|
||||
return [["maxcso", "--decompress", source_fname]]
|
||||
case _:
|
||||
print("You have somehow chosen an invalid mode, and this was not correctly caught by the program.\nPlease report this as a bug.")
|
||||
sys.exit(1)
|
||||
|
||||
# =================================================================================================
|
||||
|
||||
def returnFilteredPwdContents(file_extension): # Get files in pwd with extension
|
||||
|
||||
extension_pattern = r".*\." + file_extension.lower()
|
||||
extension_reg = re.compile(extension_pattern)
|
||||
return [fname for fname in os.listdir('.') if extension_reg.match(fname)]
|
||||
|
||||
# -------------------------------------------------------------------------------------------------
|
||||
|
||||
def deleteFile(fname): # Delete a file in pwd
|
||||
|
||||
print(f"║ Deleting {fname}...{(66 - len(fname)) * ' '}║")
|
||||
os.remove(f"./{fname}")
|
||||
|
||||
# =================================================================================================
|
||||
|
||||
def exitInvalidOption():
|
||||
|
||||
print("╠===============================================================================╗")
|
||||
print("║ Invalid option. ║")
|
||||
print("╚===============================================================================╝")
|
||||
sys.exit(1)
|
||||
|
||||
# -------------------------------------------------------------------------------------------------
|
||||
|
||||
def exitBinCueMismatch():
|
||||
|
||||
print("╠===============================================================================╗")
|
||||
print("║ All BIN files must have a matching CUE. ║")
|
||||
print("╚===============================================================================╝")
|
||||
sys.exit(1)
|
||||
|
||||
# =================================================================================================
|
||||
# /////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
# =================================================================================================
|
||||
|
||||
options = { # Options listings
|
||||
1 : "Convert ISO to CSO",
|
||||
2 : "Convert ISO to CHD",
|
||||
3 : "Convert CUE/BIN to CHD",
|
||||
4 : "Convert CSO to CHD",
|
||||
5 : "Convert DVD CHD to CSO",
|
||||
6 : "Extract DVD CHD to ISO",
|
||||
7 : "Extract CD CHD to CUE/BIN",
|
||||
8 : "Extract CSO to ISO",
|
||||
9 : "Exit script",
|
||||
}
|
||||
|
||||
# -------------------------------------------------------------------------------------------------
|
||||
|
||||
sources = { # Source file extensions
|
||||
1 : "iso",
|
||||
2 : "iso",
|
||||
3 : "cue/bin",
|
||||
4 : "cso",
|
||||
5 : "chd",
|
||||
6 : "chd",
|
||||
7 : "chd",
|
||||
8 : "cso",
|
||||
}
|
||||
|
||||
# -------------------------------------------------------------------------------------------------
|
||||
|
||||
targets = { # Target file extensions
|
||||
1 : ["cso"],
|
||||
2 : ["chd"],
|
||||
3 : ["chd"],
|
||||
4 : ["iso", "chd"],
|
||||
5 : ["iso", "cso"],
|
||||
6 : ["iso"],
|
||||
7 : ["cue", "bin"],
|
||||
8 : ["iso"],
|
||||
}
|
||||
|
||||
# # -------------------------------------------------------------------------------------------------
|
||||
|
||||
reqs = { # Selection dependencies
|
||||
1 : ["maxcso"],
|
||||
2 : ["chdman"],
|
||||
3 : ["chdman"],
|
||||
4 : ["maxcso", "chdman"],
|
||||
5 : ["maxcso", "chdman"],
|
||||
6 : ["chdman"],
|
||||
7 : ["chdman"],
|
||||
8 : ["maxcso"],
|
||||
}
|
||||
|
||||
# -------------------------------------------------------------------------------------------------
|
||||
|
||||
print("╔===============================================================================╗")
|
||||
print("║ CSO/CHD/ISO/CUEBIN Conversion by Refraction, RedDevilus and TheTechnician27 ║")
|
||||
print("║ (Version Jul 16 2024) ║")
|
||||
print("╠===============================================================================╣")
|
||||
print("║ ║")
|
||||
print("║ PLEASE NOTE: This will affect all files in this folder! ║")
|
||||
print("║ Be sure to run this from the same directory as the files you wish to convert. ║")
|
||||
print("║ ║")
|
||||
|
||||
for number, message in options.items():
|
||||
print("║ ", number, " - ", message, f"{(70 - len(message)) * ' '}║")
|
||||
|
||||
print("║ ║")
|
||||
print("╠===============================================================================╝")
|
||||
#print("║")
|
||||
mode = input("║ Type the number corresponding to your selection then press ENTER: ")
|
||||
|
||||
# -------------------------------------------------------------------------------------------------
|
||||
|
||||
try:
|
||||
mode = int(mode)
|
||||
|
||||
except ValueError:
|
||||
exitInvalidOption()
|
||||
|
||||
# -------------------------------------------------------------------------------------------------
|
||||
|
||||
if (mode < 9 and mode > 0):
|
||||
|
||||
for program in reqs[mode]: # Check for dependencies
|
||||
checkProgramMissing(program)
|
||||
|
||||
delete = deletionChoice(sources[mode]) # Choose to delete source files
|
||||
blocksize = blockSizeChoice(mode == 3, mode > 5) # Choose block size if compressing
|
||||
|
||||
match mode:
|
||||
case 3:
|
||||
bin_files = returnFilteredPwdContents("bin") # Get all BIN files in pwd
|
||||
source_files = returnFilteredPwdContents("cue") # Get all CUE files in pwd
|
||||
checkBinCueMismatch(bin_files, source_files)
|
||||
dupe_list = checkDuplicates(source_files, targets[mode], 1)
|
||||
case 5:
|
||||
source_files = returnFilteredPwdContents(sources[mode]) # Get source files in pwd
|
||||
dupe_list = checkDuplicates(source_files, targets[mode], 2)
|
||||
case 6:
|
||||
source_files = returnFilteredPwdContents(sources[mode]) # Get source files in pwd
|
||||
dupe_list = checkDuplicates(source_files, targets[mode], 1)
|
||||
case _:
|
||||
source_files = returnFilteredPwdContents(sources[mode]) # Get source files in pwd
|
||||
dupe_list = checkDuplicates(source_files, targets[mode])
|
||||
|
||||
|
||||
print("╠===============================================================================╗")
|
||||
|
||||
# ---------------------------------------------------------------------------------------------
|
||||
|
||||
for fname in source_files:
|
||||
|
||||
target_fname = f"{fname[:-4]}.{targets[mode][0]}"
|
||||
commands = createCommandList(mode, fname, target_fname, blocksize)
|
||||
if (fname[:-4] in dupe_list):
|
||||
printSkip(target_fname)
|
||||
continue
|
||||
|
||||
printInitialStatus(mode > 5, f"{fname[:-4]}.{targets[mode][-1]}")
|
||||
|
||||
for step, command in enumerate (commands):
|
||||
|
||||
process = Popen(commands[step], stdout=PIPE, stderr=PIPE) # Execute process
|
||||
stdout, stderr = process.communicate() # Suppress output
|
||||
checkSuccess(mode < 6, fname[:-4], # Ensure target creation
|
||||
targets[mode][step], process.returncode)
|
||||
|
||||
if (step == 1): # Delete intermediate file
|
||||
deleteFile(f"{fname[:-4]}.iso")
|
||||
|
||||
if (delete): # Delete source requested
|
||||
deleteFile(fname)
|
||||
if (mode == 3):
|
||||
deleteFile(f"{fname[:-4]}.bin")
|
||||
|
||||
# ===== EXIT SCRIPT ===============================================================================
|
||||
|
||||
elif (mode == 9):
|
||||
print("╠===============================================================================╗")
|
||||
print("║ Goodbye! :) ║")
|
||||
print("╚===============================================================================╝")
|
||||
sys.exit(0)
|
||||
|
||||
# ===== EXIT SCRIPT WITH ERROR ====================================================================
|
||||
|
||||
else:
|
||||
exitInvalidOption()
|
||||
|
||||
# -------------------------------------------------------------------------------------------------
|
||||
|
||||
print("╠===============================================================================╣")
|
||||
print("║ Process complete! ║")
|
||||
print("╚===============================================================================╝")
|
||||
sys.exit(0)
|
||||
@@ -38,6 +38,7 @@ ControllerSettingsWindow::ControllerSettingsWindow()
|
||||
connect(m_ui.buttonBox, &QDialogButtonBox::rejected, this, &ControllerSettingsWindow::close);
|
||||
connect(m_ui.newProfile, &QPushButton::clicked, this, &ControllerSettingsWindow::onNewProfileClicked);
|
||||
connect(m_ui.applyProfile, &QPushButton::clicked, this, &ControllerSettingsWindow::onApplyProfileClicked);
|
||||
connect(m_ui.renameProfile, &QPushButton::clicked, this, &ControllerSettingsWindow::onRenameProfileClicked);
|
||||
connect(m_ui.deleteProfile, &QPushButton::clicked, this, &ControllerSettingsWindow::onDeleteProfileClicked);
|
||||
connect(m_ui.mappingSettings, &QPushButton::clicked, this, &ControllerSettingsWindow::onMappingSettingsClicked);
|
||||
connect(m_ui.restoreDefaults, &QPushButton::clicked, this, &ControllerSettingsWindow::onRestoreDefaultsClicked);
|
||||
@@ -176,6 +177,48 @@ void ControllerSettingsWindow::onApplyProfileClicked()
|
||||
switchProfile({});
|
||||
}
|
||||
|
||||
void ControllerSettingsWindow::onRenameProfileClicked()
|
||||
{
|
||||
const QString profile_name(QInputDialog::getText(this, tr("Rename Input Profile"),
|
||||
tr("Enter the new name for the input profile:").arg(m_profile_name)));
|
||||
|
||||
if (profile_name.isEmpty())
|
||||
return;
|
||||
|
||||
std::string old_profile_name(m_profile_name.toStdString());
|
||||
std::string old_profile_path(VMManager::GetInputProfilePath(m_profile_name.toStdString()));
|
||||
std::string profile_path(VMManager::GetInputProfilePath(profile_name.toStdString()));
|
||||
if (FileSystem::FileExists(profile_path.c_str()))
|
||||
{
|
||||
QMessageBox::critical(this, tr("Error"), tr("A profile with the name '%1' already exists.").arg(profile_name));
|
||||
return;
|
||||
}
|
||||
|
||||
if (!FileSystem::RenamePath(old_profile_path.c_str(), profile_path.c_str()))
|
||||
{
|
||||
QMessageBox::critical(this, tr("Error"), tr("Failed to rename '%1'.").arg(QString::fromStdString(old_profile_path)));
|
||||
return;
|
||||
}
|
||||
|
||||
FileSystem::FindResultsArray files;
|
||||
FileSystem::FindFiles(EmuFolders::GameSettings.c_str(), "*", FILESYSTEM_FIND_FILES, &files);
|
||||
for (const auto& game_settings : files)
|
||||
{
|
||||
std::string game_settings_path(game_settings.FileName.c_str());
|
||||
std::unique_ptr<INISettingsInterface> update_sif(std::make_unique<INISettingsInterface>(std::move(game_settings_path)));
|
||||
|
||||
update_sif->Load();
|
||||
|
||||
if (!old_profile_name.compare(update_sif->GetStringValue("EmuCore", "InputProfileName")))
|
||||
{
|
||||
update_sif->SetStringValue("EmuCore", "InputProfileName", profile_name.toUtf8());
|
||||
}
|
||||
}
|
||||
|
||||
refreshProfileList();
|
||||
switchProfile({profile_name});
|
||||
}
|
||||
|
||||
void ControllerSettingsWindow::onDeleteProfileClicked()
|
||||
{
|
||||
if (QMessageBox::question(this, tr("Delete Input Profile"),
|
||||
@@ -451,6 +494,7 @@ void ControllerSettingsWindow::createWidgets()
|
||||
}
|
||||
|
||||
m_ui.applyProfile->setEnabled(isEditingProfile());
|
||||
m_ui.renameProfile->setEnabled(isEditingProfile());
|
||||
m_ui.deleteProfile->setEnabled(isEditingProfile());
|
||||
m_ui.restoreDefaults->setEnabled(isEditingGlobalSettings());
|
||||
}
|
||||
|
||||
@@ -76,6 +76,7 @@ private Q_SLOTS:
|
||||
void onCurrentProfileChanged(int index);
|
||||
void onNewProfileClicked();
|
||||
void onApplyProfileClicked();
|
||||
void onRenameProfileClicked();
|
||||
void onDeleteProfileClicked();
|
||||
void onMappingSettingsClicked();
|
||||
void onRestoreDefaultsClicked();
|
||||
|
||||
@@ -113,6 +113,16 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="renameProfile">
|
||||
<property name="text">
|
||||
<string>Rename Profile</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset theme="pencil-line"/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="deleteProfile">
|
||||
<property name="text">
|
||||
|
||||
@@ -151,6 +151,14 @@ void DebugSettingsWidget::onDrawDumpingChanged()
|
||||
m_ui.saveFrame->setEnabled(enabled);
|
||||
m_ui.saveTexture->setEnabled(enabled);
|
||||
m_ui.saveDepth->setEnabled(enabled);
|
||||
m_ui.startDraw->setEnabled(enabled);
|
||||
m_ui.dumpCount->setEnabled(enabled);
|
||||
m_ui.hwDumpDirectory->setEnabled(enabled);
|
||||
m_ui.hwDumpBrowse->setEnabled(enabled);
|
||||
m_ui.hwDumpOpen->setEnabled(enabled);
|
||||
m_ui.swDumpDirectory->setEnabled(enabled);
|
||||
m_ui.swDumpBrowse->setEnabled(enabled);
|
||||
m_ui.swDumpOpen->setEnabled(enabled);
|
||||
}
|
||||
|
||||
#ifdef PCSX2_DEVBUILD
|
||||
|
||||
@@ -167,7 +167,7 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<item row="1" column="1">
|
||||
<widget class="QCheckBox" name="saveRT">
|
||||
<property name="text">
|
||||
<string>Save RT</string>
|
||||
@@ -181,7 +181,7 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<item row="2" column="1">
|
||||
<widget class="QCheckBox" name="saveTexture">
|
||||
<property name="text">
|
||||
<string>Save Texture</string>
|
||||
|
||||
@@ -3229,29 +3229,34 @@ Not Configured/Buttons configured</extracomment>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Settings/ControllerSettingsWindow.ui" line="119"/>
|
||||
<source>Delete Profile</source>
|
||||
<source>Rename Profile</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Settings/ControllerSettingsWindow.ui" line="129"/>
|
||||
<source>Mapping Settings</source>
|
||||
<source>Delete Profile</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Settings/ControllerSettingsWindow.ui" line="139"/>
|
||||
<location filename="../Settings/ControllerSettingsWindow.cpp" line="209"/>
|
||||
<source>Mapping Settings</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Settings/ControllerSettingsWindow.ui" line="149"/>
|
||||
<location filename="../Settings/ControllerSettingsWindow.cpp" line="252"/>
|
||||
<source>Restore Defaults</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Settings/ControllerSettingsWindow.cpp" line="91"/>
|
||||
<location filename="../Settings/ControllerSettingsWindow.cpp" line="105"/>
|
||||
<location filename="../Settings/ControllerSettingsWindow.cpp" line="118"/>
|
||||
<location filename="../Settings/ControllerSettingsWindow.cpp" line="92"/>
|
||||
<location filename="../Settings/ControllerSettingsWindow.cpp" line="106"/>
|
||||
<location filename="../Settings/ControllerSettingsWindow.cpp" line="119"/>
|
||||
<source>Create Input Profile</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Settings/ControllerSettingsWindow.cpp" line="92"/>
|
||||
<location filename="../Settings/ControllerSettingsWindow.cpp" line="93"/>
|
||||
<source>Custom input profiles are used to override the Shared input profile for specific games.
|
||||
To apply a custom input profile to a game, go to its Game Properties, then change the 'Input Profile' on the Summary tab.
|
||||
|
||||
@@ -3259,40 +3264,43 @@ Enter the name for the new input profile:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Settings/ControllerSettingsWindow.cpp" line="101"/>
|
||||
<location filename="../Settings/ControllerSettingsWindow.cpp" line="146"/>
|
||||
<location filename="../Settings/ControllerSettingsWindow.cpp" line="192"/>
|
||||
<location filename="../Settings/ControllerSettingsWindow.cpp" line="529"/>
|
||||
<location filename="../Settings/ControllerSettingsWindow.cpp" line="102"/>
|
||||
<location filename="../Settings/ControllerSettingsWindow.cpp" line="147"/>
|
||||
<location filename="../Settings/ControllerSettingsWindow.cpp" line="193"/>
|
||||
<location filename="../Settings/ControllerSettingsWindow.cpp" line="199"/>
|
||||
<location filename="../Settings/ControllerSettingsWindow.cpp" line="235"/>
|
||||
<location filename="../Settings/ControllerSettingsWindow.cpp" line="573"/>
|
||||
<source>Error</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Settings/ControllerSettingsWindow.cpp" line="101"/>
|
||||
<location filename="../Settings/ControllerSettingsWindow.cpp" line="102"/>
|
||||
<location filename="../Settings/ControllerSettingsWindow.cpp" line="193"/>
|
||||
<source>A profile with the name '%1' already exists.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Settings/ControllerSettingsWindow.cpp" line="106"/>
|
||||
<location filename="../Settings/ControllerSettingsWindow.cpp" line="107"/>
|
||||
<source>Do you want to copy all bindings from the currently-selected profile to the new profile? Selecting No will create a completely empty profile.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Settings/ControllerSettingsWindow.cpp" line="119"/>
|
||||
<location filename="../Settings/ControllerSettingsWindow.cpp" line="120"/>
|
||||
<source>Do you want to copy the current hotkey bindings from global settings to the new input profile?</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Settings/ControllerSettingsWindow.cpp" line="146"/>
|
||||
<location filename="../Settings/ControllerSettingsWindow.cpp" line="147"/>
|
||||
<source>Failed to save the new profile to '%1'.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Settings/ControllerSettingsWindow.cpp" line="156"/>
|
||||
<location filename="../Settings/ControllerSettingsWindow.cpp" line="157"/>
|
||||
<source>Load Input Profile</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Settings/ControllerSettingsWindow.cpp" line="157"/>
|
||||
<location filename="../Settings/ControllerSettingsWindow.cpp" line="158"/>
|
||||
<source>Are you sure you want to load the input profile named '%1'?
|
||||
|
||||
All current global bindings will be removed, and the profile bindings loaded.
|
||||
@@ -3301,24 +3309,39 @@ You cannot undo this action.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Settings/ControllerSettingsWindow.cpp" line="181"/>
|
||||
<location filename="../Settings/ControllerSettingsWindow.cpp" line="182"/>
|
||||
<source>Rename Input Profile</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Settings/ControllerSettingsWindow.cpp" line="183"/>
|
||||
<source>Enter the new name for the input profile:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Settings/ControllerSettingsWindow.cpp" line="199"/>
|
||||
<source>Failed to rename '%1'.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Settings/ControllerSettingsWindow.cpp" line="224"/>
|
||||
<source>Delete Input Profile</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Settings/ControllerSettingsWindow.cpp" line="182"/>
|
||||
<location filename="../Settings/ControllerSettingsWindow.cpp" line="225"/>
|
||||
<source>Are you sure you want to delete the input profile named '%1'?
|
||||
|
||||
You cannot undo this action.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Settings/ControllerSettingsWindow.cpp" line="192"/>
|
||||
<location filename="../Settings/ControllerSettingsWindow.cpp" line="235"/>
|
||||
<source>Failed to delete '%1'.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Settings/ControllerSettingsWindow.cpp" line="210"/>
|
||||
<location filename="../Settings/ControllerSettingsWindow.cpp" line="253"/>
|
||||
<source>Are you sure you want to restore the default controller configuration?
|
||||
|
||||
All shared bindings and configuration will be lost, but your input profiles will remain.
|
||||
@@ -3327,46 +3350,46 @@ You cannot undo this action.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Settings/ControllerSettingsWindow.cpp" line="385"/>
|
||||
<location filename="../Settings/ControllerSettingsWindow.cpp" line="428"/>
|
||||
<source>Global Settings</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Settings/ControllerSettingsWindow.cpp" line="418"/>
|
||||
<location filename="../Settings/ControllerSettingsWindow.cpp" line="473"/>
|
||||
<location filename="../Settings/ControllerSettingsWindow.cpp" line="461"/>
|
||||
<location filename="../Settings/ControllerSettingsWindow.cpp" line="517"/>
|
||||
<source>Controller Port %1%2
|
||||
%3</source>
|
||||
<extracomment>Controller Port is an official term from Sony. Find the official translation for your language inside the console's manual.</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Settings/ControllerSettingsWindow.cpp" line="420"/>
|
||||
<location filename="../Settings/ControllerSettingsWindow.cpp" line="475"/>
|
||||
<location filename="../Settings/ControllerSettingsWindow.cpp" line="463"/>
|
||||
<location filename="../Settings/ControllerSettingsWindow.cpp" line="519"/>
|
||||
<source>Controller Port %1
|
||||
%2</source>
|
||||
<extracomment>Controller Port is an official term from Sony. Find the official translation for your language inside the console's manual.</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Settings/ControllerSettingsWindow.cpp" line="436"/>
|
||||
<location filename="../Settings/ControllerSettingsWindow.cpp" line="493"/>
|
||||
<location filename="../Settings/ControllerSettingsWindow.cpp" line="479"/>
|
||||
<location filename="../Settings/ControllerSettingsWindow.cpp" line="537"/>
|
||||
<source>USB Port %1
|
||||
%2</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Settings/ControllerSettingsWindow.cpp" line="446"/>
|
||||
<location filename="../Settings/ControllerSettingsWindow.cpp" line="489"/>
|
||||
<source>Hotkeys</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Settings/ControllerSettingsWindow.cpp" line="507"/>
|
||||
<location filename="../Settings/ControllerSettingsWindow.cpp" line="551"/>
|
||||
<source>Shared</source>
|
||||
<extracomment>"Shared" refers here to the shared input profile.</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Settings/ControllerSettingsWindow.cpp" line="529"/>
|
||||
<location filename="../Settings/ControllerSettingsWindow.cpp" line="573"/>
|
||||
<source>The input profile named '%1' cannot be found.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@@ -18423,7 +18446,7 @@ Ejecting {3} and replacing it with {2}.</source>
|
||||
<context>
|
||||
<name>SaveState</name>
|
||||
<message>
|
||||
<location filename="../../pcsx2/SaveState.cpp" line="1099"/>
|
||||
<location filename="../../pcsx2/SaveState.cpp" line="1100"/>
|
||||
<source>This save state is outdated and is no longer compatible with the current version of PCSX2.
|
||||
|
||||
If you have any unsaved progress on this save state, you can download the compatible version (PCSX2 {}) from pcsx2.net, load the save state, and save your progress to the memory card.</source>
|
||||
@@ -21613,42 +21636,42 @@ Scanning recursively takes more time, but will identify files in subdirectories.
|
||||
<context>
|
||||
<name>VMManager</name>
|
||||
<message>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="1852"/>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="1856"/>
|
||||
<source>Failed to back up old save state {}.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="1837"/>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="1841"/>
|
||||
<source>Failed to save save state: {}.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="1022"/>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="1026"/>
|
||||
<source>PS2 BIOS ({})</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="1083"/>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="1087"/>
|
||||
<source>Unknown Game</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="1246"/>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="1250"/>
|
||||
<source>CDVD precaching was cancelled.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="1252"/>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="1256"/>
|
||||
<source>CDVD precaching failed: {}</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="1345"/>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="1349"/>
|
||||
<source>Error</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="1346"/>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="1350"/>
|
||||
<source>PCSX2 requires a PS2 BIOS in order to run.
|
||||
|
||||
For legal reasons, you *must* obtain a BIOS from an actual PS2 unit that you own (borrowing doesn't count).
|
||||
@@ -21659,270 +21682,270 @@ Please consult the FAQs and Guides for further instructions.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="1437"/>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="1441"/>
|
||||
<source>Resuming state</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="1442"/>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="1446"/>
|
||||
<source>Boot and Debug</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="1810"/>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="1814"/>
|
||||
<source>Failed to load save state</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="1885"/>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="1889"/>
|
||||
<source>State saved to slot {}.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="1892"/>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="1896"/>
|
||||
<source>Failed to save save state to slot {}.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="1960"/>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="1997"/>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="1964"/>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="2001"/>
|
||||
<source>Loading state</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="1971"/>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="1975"/>
|
||||
<source>Failed to load state (Memory card is busy)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="1990"/>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="1994"/>
|
||||
<source>There is no save state in slot {}.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="2008"/>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="2012"/>
|
||||
<source>Failed to load state from slot {} (Memory card is busy)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="2014"/>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="2018"/>
|
||||
<source>Loading state from slot {}...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="2023"/>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="2027"/>
|
||||
<source>Failed to save state (Memory card is busy)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="2040"/>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="2044"/>
|
||||
<source>Failed to save state to slot {} (Memory card is busy)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="2047"/>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="2051"/>
|
||||
<source>Saving state to slot {}...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="2213"/>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="2217"/>
|
||||
<source>Frame advancing</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="2241"/>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="2245"/>
|
||||
<source>Disc removed.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="2247"/>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="2251"/>
|
||||
<source>Disc changed to '{}'.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="2256"/>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="2260"/>
|
||||
<source>Failed to open new disc image '{}'. Reverting to old image.
|
||||
Error was: {}</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="2265"/>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="2269"/>
|
||||
<source>Failed to switch back to old disc image. Removing disc.
|
||||
Error was: {}</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="3048"/>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="3052"/>
|
||||
<source>Cheats have been disabled due to achievements hardcore mode.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="3101"/>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="3105"/>
|
||||
<source>Fast CDVD is enabled, this may break games.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="3105"/>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="3109"/>
|
||||
<source>Cycle rate/skip is not at default, this may crash or make games run too slow.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="3115"/>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="3119"/>
|
||||
<source>Upscale multiplier is below native, this will break rendering.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="3155"/>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="3159"/>
|
||||
<source>Mipmapping is disabled. This may break rendering in some games.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="3164"/>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="3168"/>
|
||||
<source>Renderer is not set to Automatic. This may cause performance problems and graphical issues.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="3170"/>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="3174"/>
|
||||
<source>Texture filtering is not set to Bilinear (PS2). This will break rendering in some games.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="3633"/>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="3637"/>
|
||||
<source>No Game Running</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="3120"/>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="3124"/>
|
||||
<source>Trilinear filtering is not set to automatic. This may break rendering in some games.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="3125"/>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="3129"/>
|
||||
<source>Blending Accuracy is below Basic, this may break effects in some games.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="3130"/>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="3134"/>
|
||||
<source>Hardware Download Mode is not set to Accurate, this may break rendering in some games.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="3176"/>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="3180"/>
|
||||
<source>EE FPU Round Mode is not set to default, this may break some games.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="3182"/>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="3186"/>
|
||||
<source>EE FPU Clamp Mode is not set to default, this may break some games.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="3187"/>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="3191"/>
|
||||
<source>VU0 Round Mode is not set to default, this may break some games.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="3192"/>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="3196"/>
|
||||
<source>VU1 Round Mode is not set to default, this may break some games.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="3199"/>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="3203"/>
|
||||
<source>VU Clamp Mode is not set to default, this may break some games.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="3204"/>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="3208"/>
|
||||
<source>128MB RAM is enabled. Compatibility with some games may be affected.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="3209"/>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="3213"/>
|
||||
<source>Game Fixes are not enabled. Compatibility with some games may be affected.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="3214"/>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="3218"/>
|
||||
<source>Compatibility Patches are not enabled. Compatibility with some games may be affected.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="3218"/>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="3222"/>
|
||||
<source>Frame rate for NTSC is not default. This may break some games.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="3220"/>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="3224"/>
|
||||
<source>Frame rate for PAL is not default. This may break some games.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="3239"/>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="3243"/>
|
||||
<source>EE Recompiler is not enabled, this will significantly reduce performance.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="3244"/>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="3248"/>
|
||||
<source>VU0 Recompiler is not enabled, this will significantly reduce performance.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="3249"/>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="3253"/>
|
||||
<source>VU1 Recompiler is not enabled, this will significantly reduce performance.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="3254"/>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="3258"/>
|
||||
<source>IOP Recompiler is not enabled, this will significantly reduce performance.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="3259"/>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="3263"/>
|
||||
<source>EE Cache is enabled, this will significantly reduce performance.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="3264"/>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="3268"/>
|
||||
<source>EE Wait Loop Detection is not enabled, this may reduce performance.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="3269"/>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="3273"/>
|
||||
<source>INTC Spin Detection is not enabled, this may reduce performance.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="3272"/>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="3276"/>
|
||||
<source>Fastmem is not enabled, this will reduce performance.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="3276"/>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="3280"/>
|
||||
<source>Instant VU1 is disabled, this may reduce performance.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="3281"/>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="3285"/>
|
||||
<source>mVU Flag Hack is not enabled, this may reduce performance.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="3135"/>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="3139"/>
|
||||
<source>GPU Palette Conversion is enabled, this may reduce performance.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="3140"/>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="3144"/>
|
||||
<source>Texture Preloading is not Full, this may reduce performance.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="3145"/>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="3149"/>
|
||||
<source>Estimate texture region is enabled, this may reduce performance.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="3150"/>
|
||||
<location filename="../../pcsx2/VMManager.cpp" line="3154"/>
|
||||
<source>Texture dumping is enabled, this will continually dump textures to disk.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
||||
@@ -300,7 +300,7 @@ std::string Achievements::GetGameHash(const std::string& elf_path)
|
||||
Error error;
|
||||
if (!cdvdLoadElf(&elfo, elf_path, false, &error))
|
||||
{
|
||||
Console.Error(fmt::format("(Achievements) Failed to read ELF '{}' on disc: {}", elf_path, error.GetDescription()));
|
||||
Console.Error(fmt::format("Achievements: Failed to read ELF '{}' on disc: {}", elf_path, error.GetDescription()));
|
||||
return {};
|
||||
}
|
||||
|
||||
@@ -441,7 +441,7 @@ bool Achievements::Initialize()
|
||||
const std::string api_token = Host::GetBaseStringSettingValue("Achievements", "Token");
|
||||
if (!username.empty() && !api_token.empty())
|
||||
{
|
||||
Console.WriteLn("(Achievements) Attempting login with user '%s'...", username.c_str());
|
||||
Console.WriteLn("Achievements: Attempting login with user '%s'...", username.c_str());
|
||||
s_login_request =
|
||||
rc_client_begin_login_with_token(s_client, username.c_str(), api_token.c_str(), ClientLoginWithTokenCallback, nullptr);
|
||||
}
|
||||
@@ -608,7 +608,7 @@ void Achievements::EnsureCacheDirectoriesExist()
|
||||
|
||||
void Achievements::ClientMessageCallback(const char* message, const rc_client_t* client)
|
||||
{
|
||||
Console.WriteLn("(Achievements) %s", message);
|
||||
Console.WriteLn("Achievements: %s", message);
|
||||
}
|
||||
|
||||
uint32_t Achievements::ClientReadMemory(uint32_t address, uint8_t* buffer, uint32_t num_bytes, rc_client_t* client)
|
||||
@@ -865,7 +865,7 @@ void Achievements::IdentifyGame(u32 disc_crc, u32 crc)
|
||||
// bail out if we're not logged in, just save the hash
|
||||
if (!IsLoggedInOrLoggingIn())
|
||||
{
|
||||
Console.WriteLn(Color_StrongYellow, "(Achievements) Skipping load game because we're not logged in.");
|
||||
Console.WriteLn(Color_StrongYellow, "Achievements: Skipping load game because we're not logged in.");
|
||||
DisableHardcoreMode();
|
||||
return;
|
||||
}
|
||||
@@ -908,7 +908,7 @@ void Achievements::ClientLoadGameCallback(int result, const char* error_message,
|
||||
if (result == RC_NO_GAME_LOADED)
|
||||
{
|
||||
// Unknown game.
|
||||
Console.WriteLn(Color_StrongYellow, "(Achievements) Unknown game '%s', disabling achievements.", s_game_hash.c_str());
|
||||
Console.WriteLn(Color_StrongYellow, "Achievements: Unknown game '%s', disabling achievements.", s_game_hash.c_str());
|
||||
DisableHardcoreMode();
|
||||
return;
|
||||
}
|
||||
@@ -1083,7 +1083,7 @@ void Achievements::HandleUnlockEvent(const rc_client_event_t* event)
|
||||
const rc_client_achievement_t* cheevo = event->achievement;
|
||||
pxAssert(cheevo);
|
||||
|
||||
Console.WriteLn("(Achievements) Achievement %s (%u) for game %u unlocked", cheevo->title, cheevo->id, s_game_id);
|
||||
Console.WriteLn("Achievements: Achievement %s (%u) for game %u unlocked", cheevo->title, cheevo->id, s_game_id);
|
||||
UpdateGameSummary();
|
||||
|
||||
if (EmuConfig.Achievements.Notifications)
|
||||
@@ -1109,7 +1109,7 @@ void Achievements::HandleUnlockEvent(const rc_client_event_t* event)
|
||||
|
||||
void Achievements::HandleGameCompleteEvent(const rc_client_event_t* event)
|
||||
{
|
||||
Console.WriteLn("(Achievements) Game %u complete", s_game_id);
|
||||
Console.WriteLn("Achievements: Game %u complete", s_game_id);
|
||||
UpdateGameSummary();
|
||||
|
||||
if (EmuConfig.Achievements.Notifications)
|
||||
@@ -1133,7 +1133,7 @@ void Achievements::HandleGameCompleteEvent(const rc_client_event_t* event)
|
||||
|
||||
void Achievements::HandleLeaderboardStartedEvent(const rc_client_event_t* event)
|
||||
{
|
||||
DevCon.WriteLn("(Achievements) Leaderboard %u (%s) started", event->leaderboard->id, event->leaderboard->title);
|
||||
DevCon.WriteLn("Achievements: Leaderboard %u (%s) started", event->leaderboard->id, event->leaderboard->title);
|
||||
|
||||
if (EmuConfig.Achievements.LeaderboardNotifications)
|
||||
{
|
||||
@@ -1152,7 +1152,7 @@ void Achievements::HandleLeaderboardStartedEvent(const rc_client_event_t* event)
|
||||
|
||||
void Achievements::HandleLeaderboardFailedEvent(const rc_client_event_t* event)
|
||||
{
|
||||
DevCon.WriteLn("(Achievements) Leaderboard %u (%s) failed", event->leaderboard->id, event->leaderboard->title);
|
||||
DevCon.WriteLn("Achievements: Leaderboard %u (%s) failed", event->leaderboard->id, event->leaderboard->title);
|
||||
|
||||
if (EmuConfig.Achievements.LeaderboardNotifications)
|
||||
{
|
||||
@@ -1171,7 +1171,7 @@ void Achievements::HandleLeaderboardFailedEvent(const rc_client_event_t* event)
|
||||
|
||||
void Achievements::HandleLeaderboardSubmittedEvent(const rc_client_event_t* event)
|
||||
{
|
||||
Console.WriteLn("(Achievements) Leaderboard %u (%s) submitted", event->leaderboard->id, event->leaderboard->title);
|
||||
Console.WriteLn("Achievements: Leaderboard %u (%s) submitted", event->leaderboard->id, event->leaderboard->title);
|
||||
|
||||
if (EmuConfig.Achievements.LeaderboardNotifications)
|
||||
{
|
||||
@@ -1203,7 +1203,7 @@ void Achievements::HandleLeaderboardSubmittedEvent(const rc_client_event_t* even
|
||||
|
||||
void Achievements::HandleLeaderboardScoreboardEvent(const rc_client_event_t* event)
|
||||
{
|
||||
Console.WriteLn("(Achievements) Leaderboard %u scoreboard rank %u of %u", event->leaderboard_scoreboard->leaderboard_id,
|
||||
Console.WriteLn("Achievements: Leaderboard %u scoreboard rank %u of %u", event->leaderboard_scoreboard->leaderboard_id,
|
||||
event->leaderboard_scoreboard->new_rank, event->leaderboard_scoreboard->num_entries);
|
||||
|
||||
if (EmuConfig.Achievements.LeaderboardNotifications)
|
||||
@@ -1234,7 +1234,7 @@ void Achievements::HandleLeaderboardScoreboardEvent(const rc_client_event_t* eve
|
||||
void Achievements::HandleLeaderboardTrackerShowEvent(const rc_client_event_t* event)
|
||||
{
|
||||
DevCon.WriteLn(
|
||||
"(Achievements) Showing leaderboard tracker: %u: %s", event->leaderboard_tracker->id, event->leaderboard_tracker->display);
|
||||
"Achievements: Showing leaderboard tracker: %u: %s", event->leaderboard_tracker->id, event->leaderboard_tracker->display);
|
||||
|
||||
LeaderboardTrackerIndicator indicator;
|
||||
indicator.tracker_id = event->leaderboard_tracker->id;
|
||||
@@ -1251,7 +1251,7 @@ void Achievements::HandleLeaderboardTrackerHideEvent(const rc_client_event_t* ev
|
||||
if (it == s_active_leaderboard_trackers.end())
|
||||
return;
|
||||
|
||||
DevCon.WriteLn("(Achievements) Hiding leaderboard tracker: %u", id);
|
||||
DevCon.WriteLn("Achievements: Hiding leaderboard tracker: %u", id);
|
||||
it->active = false;
|
||||
it->show_hide_time.Reset();
|
||||
}
|
||||
@@ -1265,7 +1265,7 @@ void Achievements::HandleLeaderboardTrackerUpdateEvent(const rc_client_event_t*
|
||||
return;
|
||||
|
||||
DevCon.WriteLn(
|
||||
"(Achievements) Updating leaderboard tracker: %u: %s", event->leaderboard_tracker->id, event->leaderboard_tracker->display);
|
||||
"Achievements: Updating leaderboard tracker: %u: %s", event->leaderboard_tracker->id, event->leaderboard_tracker->display);
|
||||
|
||||
it->text = event->leaderboard_tracker->display;
|
||||
it->active = true;
|
||||
@@ -1288,7 +1288,7 @@ void Achievements::HandleAchievementChallengeIndicatorShowEvent(const rc_client_
|
||||
indicator.active = true;
|
||||
s_active_challenge_indicators.push_back(std::move(indicator));
|
||||
|
||||
DevCon.WriteLn("(Achievements) Show challenge indicator for %u (%s)", event->achievement->id, event->achievement->title);
|
||||
DevCon.WriteLn("Achievements: Show challenge indicator for %u (%s)", event->achievement->id, event->achievement->title);
|
||||
}
|
||||
|
||||
void Achievements::HandleAchievementChallengeIndicatorHideEvent(const rc_client_event_t* event)
|
||||
@@ -1298,14 +1298,14 @@ void Achievements::HandleAchievementChallengeIndicatorHideEvent(const rc_client_
|
||||
if (it == s_active_challenge_indicators.end())
|
||||
return;
|
||||
|
||||
DevCon.WriteLn("(Achievements) Hide challenge indicator for %u (%s)", event->achievement->id, event->achievement->title);
|
||||
DevCon.WriteLn("Achievements: Hide challenge indicator for %u (%s)", event->achievement->id, event->achievement->title);
|
||||
it->show_hide_time.Reset();
|
||||
it->active = false;
|
||||
}
|
||||
|
||||
void Achievements::HandleAchievementProgressIndicatorShowEvent(const rc_client_event_t* event)
|
||||
{
|
||||
DevCon.WriteLn("(Achievements) Showing progress indicator: %u (%s): %s", event->achievement->id, event->achievement->title,
|
||||
DevCon.WriteLn("Achievements: Showing progress indicator: %u (%s): %s", event->achievement->id, event->achievement->title,
|
||||
event->achievement->measured_progress);
|
||||
|
||||
if (!s_active_progress_indicator.has_value())
|
||||
@@ -1323,14 +1323,14 @@ void Achievements::HandleAchievementProgressIndicatorHideEvent(const rc_client_e
|
||||
if (!s_active_progress_indicator.has_value())
|
||||
return;
|
||||
|
||||
DevCon.WriteLn("(Achievements) Hiding progress indicator");
|
||||
DevCon.WriteLn("Achievements: Hiding progress indicator");
|
||||
s_active_progress_indicator->show_hide_time.Reset();
|
||||
s_active_progress_indicator->active = false;
|
||||
}
|
||||
|
||||
void Achievements::HandleAchievementProgressIndicatorUpdateEvent(const rc_client_event_t* event)
|
||||
{
|
||||
DevCon.WriteLn("(Achievements) Updating progress indicator: %u (%s): %s", event->achievement->id, event->achievement->title,
|
||||
DevCon.WriteLn("Achievements: Updating progress indicator: %u (%s): %s", event->achievement->id, event->achievement->title,
|
||||
event->achievement->measured_progress);
|
||||
s_active_progress_indicator->achievement = event->achievement;
|
||||
s_active_progress_indicator->active = true;
|
||||
@@ -1341,13 +1341,13 @@ void Achievements::HandleServerErrorEvent(const rc_client_event_t* event)
|
||||
std::string message = fmt::format(TRANSLATE_FS("Achievements", "Server error in {0}:\n{1}"),
|
||||
event->server_error->api ? event->server_error->api : "UNKNOWN",
|
||||
event->server_error->error_message ? event->server_error->error_message : "UNKNOWN");
|
||||
Console.Error("(Achievements) %s", message.c_str());
|
||||
Console.Error("Achievements: %s", message.c_str());
|
||||
Host::AddOSDMessage(std::move(message), Host::OSD_ERROR_DURATION);
|
||||
}
|
||||
|
||||
void Achievements::HandleServerDisconnectedEvent(const rc_client_event_t* event)
|
||||
{
|
||||
Console.Warning("(Achievements) Server disconnected.");
|
||||
Console.Warning("Achievements: Server disconnected.");
|
||||
|
||||
MTGS::RunOnGSThread([]() {
|
||||
if (ImGuiManager::InitializeFullscreenUI())
|
||||
@@ -1360,7 +1360,7 @@ void Achievements::HandleServerDisconnectedEvent(const rc_client_event_t* event)
|
||||
|
||||
void Achievements::HandleServerReconnectedEvent(const rc_client_event_t* event)
|
||||
{
|
||||
Console.Warning("(Achievements) Server reconnected.");
|
||||
Console.Warning("Achievements: Server reconnected.");
|
||||
|
||||
MTGS::RunOnGSThread([]() {
|
||||
if (ImGuiManager::InitializeFullscreenUI())
|
||||
@@ -1385,7 +1385,7 @@ void Achievements::ResetClient()
|
||||
if (!IsActive())
|
||||
return;
|
||||
|
||||
Console.WriteLn("(Achievements) Reset client");
|
||||
Console.WriteLn("Achievements: Reset client");
|
||||
rc_client_reset(s_client);
|
||||
}
|
||||
|
||||
@@ -1811,11 +1811,11 @@ void Achievements::Logout()
|
||||
if (HasActiveGame())
|
||||
ClearGameInfo();
|
||||
|
||||
Console.WriteLn("(Achievements) Logging out...");
|
||||
Console.WriteLn("Achievements: Logging out...");
|
||||
rc_client_logout(s_client);
|
||||
}
|
||||
|
||||
Console.WriteLn("(Achievements) Clearing credentials...");
|
||||
Console.WriteLn("Achievements: Clearing credentials...");
|
||||
Host::RemoveBaseSettingValue("Achievements", "Username");
|
||||
Host::RemoveBaseSettingValue("Achievements", "Token");
|
||||
Host::RemoveBaseSettingValue("Achievements", "LoginTimestamp");
|
||||
@@ -1961,7 +1961,7 @@ void Achievements::DrawGameOverlays()
|
||||
|
||||
if (!indicator.active && opacity <= 0.01f)
|
||||
{
|
||||
DevCon.WriteLn("(Achievements) Remove challenge indicator");
|
||||
DevCon.WriteLn("Achievements: Remove challenge indicator");
|
||||
it = s_active_challenge_indicators.erase(it);
|
||||
}
|
||||
else
|
||||
@@ -2004,7 +2004,7 @@ void Achievements::DrawGameOverlays()
|
||||
|
||||
if (!indicator.active && opacity <= 0.01f)
|
||||
{
|
||||
DevCon.WriteLn("(Achievements) Remove progress indicator");
|
||||
DevCon.WriteLn("Achievements: Remove progress indicator");
|
||||
s_active_progress_indicator.reset();
|
||||
}
|
||||
|
||||
@@ -2046,7 +2046,7 @@ void Achievements::DrawGameOverlays()
|
||||
|
||||
if (!indicator.active && opacity <= 0.01f)
|
||||
{
|
||||
DevCon.WriteLn("(Achievements) Remove tracker indicator");
|
||||
DevCon.WriteLn("Achievements: Remove tracker indicator");
|
||||
it = s_active_leaderboard_trackers.erase(it);
|
||||
}
|
||||
else
|
||||
@@ -2151,7 +2151,7 @@ bool Achievements::PrepareAchievementsWindow()
|
||||
RC_CLIENT_ACHIEVEMENT_LIST_GROUPING_PROGRESS /*RC_CLIENT_ACHIEVEMENT_LIST_GROUPING_LOCK_STATE*/);
|
||||
if (!s_achievement_list)
|
||||
{
|
||||
Console.Error("(Achievements) rc_client_create_achievement_list() returned null");
|
||||
Console.Error("Achievements: rc_client_create_achievement_list() returned null");
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -2489,7 +2489,7 @@ bool Achievements::PrepareLeaderboardsWindow()
|
||||
s_leaderboard_list = rc_client_create_leaderboard_list(client, RC_CLIENT_LEADERBOARD_LIST_GROUPING_NONE);
|
||||
if (!s_leaderboard_list)
|
||||
{
|
||||
Console.Error("(Achievements) rc_client_create_leaderboard_list() returned null");
|
||||
Console.Error("Achievements: rc_client_create_leaderboard_list() returned null");
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -2920,7 +2920,7 @@ void Achievements::DrawLeaderboardListEntry(const rc_client_leaderboard_t* lboar
|
||||
|
||||
void Achievements::OpenLeaderboard(const rc_client_leaderboard_t* lboard)
|
||||
{
|
||||
Console.WriteLn("(Achievements) Opening leaderboard '%s' (%u)", lboard->title, lboard->id);
|
||||
Console.WriteLn("Achievements: Opening leaderboard '%s' (%u)", lboard->title, lboard->id);
|
||||
|
||||
CloseLeaderboard();
|
||||
|
||||
@@ -2974,7 +2974,7 @@ void Achievements::FetchNextLeaderboardEntries()
|
||||
for (rc_client_leaderboard_entry_list_t* list : s_leaderboard_entry_lists)
|
||||
start += list->num_entries;
|
||||
|
||||
Console.WriteLn("(Achievements) Fetching entries %u to %u", start, start + LEADERBOARD_ALL_FETCH_SIZE);
|
||||
Console.WriteLn("Achievements: Fetching entries %u to %u", start, start + LEADERBOARD_ALL_FETCH_SIZE);
|
||||
|
||||
if (s_leaderboard_fetch_handle)
|
||||
rc_client_abort_async(s_client, s_leaderboard_fetch_handle);
|
||||
|
||||
@@ -403,7 +403,7 @@ void UpdateVSyncRate(bool force)
|
||||
vSyncInfoCalc(&vSyncInfo, frames_per_second, total_scanlines);
|
||||
|
||||
if (video_mode_initialized)
|
||||
Console.WriteLn(Color_Green, "(UpdateVSyncRate) Mode Changed to %s.", ReportVideoMode());
|
||||
Console.WriteLn(Color_Green, "UpdateVSyncRate: Mode Changed to %s.", ReportVideoMode());
|
||||
|
||||
if (custom && video_mode_initialized)
|
||||
Console.WriteLn(Color_StrongGreen, " ... with user configured refresh rate: %.02f Hz", vertical_frequency);
|
||||
|
||||
@@ -118,7 +118,7 @@ void GameDatabase::parseAndInsert(const std::string_view serial, const c4::yml::
|
||||
if (eeVal >= 0 && eeVal < static_cast<int>(FPRoundMode::MaxCount))
|
||||
gameEntry.eeRoundMode = static_cast<FPRoundMode>(eeVal);
|
||||
else
|
||||
Console.Error(fmt::format("[GameDB] Invalid EE round mode '{}', specified for serial: '{}'.", eeVal, serial));
|
||||
Console.Error(fmt::format("GameDB: Invalid EE round mode '{}', specified for serial: '{}'.", eeVal, serial));
|
||||
}
|
||||
if (node["roundModes"].has_child("eeDivRoundMode"))
|
||||
{
|
||||
@@ -127,7 +127,7 @@ void GameDatabase::parseAndInsert(const std::string_view serial, const c4::yml::
|
||||
if (eeVal >= 0 && eeVal < static_cast<int>(FPRoundMode::MaxCount))
|
||||
gameEntry.eeDivRoundMode = static_cast<FPRoundMode>(eeVal);
|
||||
else
|
||||
Console.Error(fmt::format("[GameDB] Invalid EE division round mode '{}', specified for serial: '{}'.", eeVal, serial));
|
||||
Console.Error(fmt::format("GameDB: Invalid EE division round mode '{}', specified for serial: '{}'.", eeVal, serial));
|
||||
}
|
||||
if (node["roundModes"].has_child("vuRoundMode"))
|
||||
{
|
||||
@@ -140,7 +140,7 @@ void GameDatabase::parseAndInsert(const std::string_view serial, const c4::yml::
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.Error(fmt::format("[GameDB] Invalid VU round mode '{}', specified for serial: '{}'.", vuVal, serial));
|
||||
Console.Error(fmt::format("GameDB: Invalid VU round mode '{}', specified for serial: '{}'.", vuVal, serial));
|
||||
}
|
||||
}
|
||||
if (node["roundModes"].has_child("vu0RoundMode"))
|
||||
@@ -150,7 +150,7 @@ void GameDatabase::parseAndInsert(const std::string_view serial, const c4::yml::
|
||||
if (vuVal >= 0 && vuVal < static_cast<int>(FPRoundMode::MaxCount))
|
||||
gameEntry.vu0RoundMode = static_cast<FPRoundMode>(vuVal);
|
||||
else
|
||||
Console.Error(fmt::format("[GameDB] Invalid VU0 round mode '{}', specified for serial: '{}'.", vuVal, serial));
|
||||
Console.Error(fmt::format("GameDB: Invalid VU0 round mode '{}', specified for serial: '{}'.", vuVal, serial));
|
||||
}
|
||||
if (node["roundModes"].has_child("vu1RoundMode"))
|
||||
{
|
||||
@@ -159,7 +159,7 @@ void GameDatabase::parseAndInsert(const std::string_view serial, const c4::yml::
|
||||
if (vuVal >= 0 && vuVal < static_cast<int>(FPRoundMode::MaxCount))
|
||||
gameEntry.vu1RoundMode = static_cast<FPRoundMode>(vuVal);
|
||||
else
|
||||
Console.Error(fmt::format("[GameDB] Invalid VU1 round mode '{}', specified for serial: '{}'.", vuVal, serial));
|
||||
Console.Error(fmt::format("GameDB: Invalid VU1 round mode '{}', specified for serial: '{}'.", vuVal, serial));
|
||||
}
|
||||
}
|
||||
if (node.has_child("clampModes"))
|
||||
@@ -217,7 +217,7 @@ void GameDatabase::parseAndInsert(const std::string_view serial, const c4::yml::
|
||||
|
||||
if (!fixValidated)
|
||||
{
|
||||
Console.Error(fmt::format("[GameDB] Invalid gamefix: '{}', specified for serial: '{}'. Dropping!", fix, serial));
|
||||
Console.Error(fmt::format("GameDB: Invalid gamefix: '{}', specified for serial: '{}'. Dropping!", fix, serial));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -239,7 +239,7 @@ void GameDatabase::parseAndInsert(const std::string_view serial, const c4::yml::
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.Error(fmt::format("[GameDB] Invalid speedhack: '{}={}', specified for serial: '{}'. Dropping!",
|
||||
Console.Error(fmt::format("GameDB: Invalid speedhack: '{}={}', specified for serial: '{}'. Dropping!",
|
||||
id_view, value_view, serial));
|
||||
}
|
||||
}
|
||||
@@ -266,7 +266,7 @@ void GameDatabase::parseAndInsert(const std::string_view serial, const c4::yml::
|
||||
|
||||
if (value.value_or(-1) < 0)
|
||||
{
|
||||
Console.Error(fmt::format("[GameDB] Invalid GS HW Fix Value for '{}' in '{}': '{}'", id_name, serial, str_value));
|
||||
Console.Error(fmt::format("GameDB: Invalid GS HW Fix Value for '{}' in '{}': '{}'", id_name, serial, str_value));
|
||||
continue;
|
||||
}
|
||||
}
|
||||
@@ -276,7 +276,7 @@ void GameDatabase::parseAndInsert(const std::string_view serial, const c4::yml::
|
||||
}
|
||||
if (!id.has_value() || !value.has_value())
|
||||
{
|
||||
Console.Error(fmt::format("[GameDB] Invalid GS HW Fix: '{}' specified for serial '{}'. Dropping!", id_name, serial));
|
||||
Console.Error(fmt::format("GameDB: Invalid GS HW Fix: '{}' specified for serial '{}'. Dropping!", id_name, serial));
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -305,12 +305,12 @@ void GameDatabase::parseAndInsert(const std::string_view serial, const c4::yml::
|
||||
const std::optional<u32> crc = (StringUtil::compareNoCase(crc_str, "default")) ? std::optional<u32>(0) : StringUtil::FromChars<u32>(crc_str, 16);
|
||||
if (!crc.has_value())
|
||||
{
|
||||
Console.Error(fmt::format("[GameDB] Invalid CRC '{}' found for serial: '{}'. Skipping!", crc_str, serial));
|
||||
Console.Error(fmt::format("GameDB: Invalid CRC '{}' found for serial: '{}'. Skipping!", crc_str, serial));
|
||||
continue;
|
||||
}
|
||||
if (gameEntry.patches.find(crc.value()) != gameEntry.patches.end())
|
||||
{
|
||||
Console.Error(fmt::format("[GameDB] Duplicate CRC '{}' found for serial: '{}'. Skipping, CRCs are case-insensitive!", crc_str, serial));
|
||||
Console.Error(fmt::format("GameDB: Duplicate CRC '{}' found for serial: '{}'. Skipping, CRCs are case-insensitive!", crc_str, serial));
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -442,18 +442,18 @@ void GameDatabaseSchema::GameEntry::applyGameFixes(Pcsx2Config& config, bool app
|
||||
{
|
||||
// Only apply core game fixes if the user has enabled them.
|
||||
if (!applyAuto)
|
||||
Console.Warning("[GameDB] Game Fixes are disabled");
|
||||
Console.Warning("GameDB: Game Fixes are disabled");
|
||||
|
||||
if (eeRoundMode < FPRoundMode::MaxCount)
|
||||
{
|
||||
if (applyAuto)
|
||||
{
|
||||
Console.WriteLn("(GameDB) Changing EE/FPU roundmode to %d [%s]", eeRoundMode, s_round_modes[static_cast<u8>(eeRoundMode)]);
|
||||
Console.WriteLn("GameDB: Changing EE/FPU roundmode to %d [%s]", eeRoundMode, s_round_modes[static_cast<u8>(eeRoundMode)]);
|
||||
config.Cpu.FPUFPCR.SetRoundMode(eeRoundMode);
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.Warning("[GameDB] Skipping changing EE/FPU roundmode to %d [%s]", eeRoundMode, s_round_modes[static_cast<u8>(eeRoundMode)]);
|
||||
Console.Warning("GameDB: Skipping changing EE/FPU roundmode to %d [%s]", eeRoundMode, s_round_modes[static_cast<u8>(eeRoundMode)]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -461,12 +461,12 @@ void GameDatabaseSchema::GameEntry::applyGameFixes(Pcsx2Config& config, bool app
|
||||
{
|
||||
if (applyAuto)
|
||||
{
|
||||
Console.WriteLn("(GameDB) Changing EE/FPU divison roundmode to %d [%s]", eeRoundMode, s_round_modes[static_cast<u8>(eeDivRoundMode)]);
|
||||
Console.WriteLn("GameDB: Changing EE/FPU divison roundmode to %d [%s]", eeRoundMode, s_round_modes[static_cast<u8>(eeDivRoundMode)]);
|
||||
config.Cpu.FPUDivFPCR.SetRoundMode(eeDivRoundMode);
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.Warning("[GameDB] Skipping changing EE/FPU roundmode to %d [%s]", eeRoundMode, s_round_modes[static_cast<u8>(eeRoundMode)]);
|
||||
Console.Warning("GameDB: Skipping changing EE/FPU roundmode to %d [%s]", eeRoundMode, s_round_modes[static_cast<u8>(eeRoundMode)]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -474,12 +474,12 @@ void GameDatabaseSchema::GameEntry::applyGameFixes(Pcsx2Config& config, bool app
|
||||
{
|
||||
if (applyAuto)
|
||||
{
|
||||
Console.WriteLn("(GameDB) Changing VU0 roundmode to %d [%s]", vu0RoundMode, s_round_modes[static_cast<u8>(vu0RoundMode)]);
|
||||
Console.WriteLn("GameDB: Changing VU0 roundmode to %d [%s]", vu0RoundMode, s_round_modes[static_cast<u8>(vu0RoundMode)]);
|
||||
config.Cpu.VU0FPCR.SetRoundMode(vu0RoundMode);
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.Warning("[GameDB] Skipping changing VU0 roundmode to %d [%s]", vu0RoundMode, s_round_modes[static_cast<u8>(vu0RoundMode)]);
|
||||
Console.Warning("GameDB: Skipping changing VU0 roundmode to %d [%s]", vu0RoundMode, s_round_modes[static_cast<u8>(vu0RoundMode)]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -487,12 +487,12 @@ void GameDatabaseSchema::GameEntry::applyGameFixes(Pcsx2Config& config, bool app
|
||||
{
|
||||
if (applyAuto)
|
||||
{
|
||||
Console.WriteLn("(GameDB) Changing VU1 roundmode to %d [%s]", vu1RoundMode, s_round_modes[static_cast<u8>(vu1RoundMode)]);
|
||||
Console.WriteLn("GameDB: Changing VU1 roundmode to %d [%s]", vu1RoundMode, s_round_modes[static_cast<u8>(vu1RoundMode)]);
|
||||
config.Cpu.VU1FPCR.SetRoundMode(vu1RoundMode);
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.Warning("[GameDB] Skipping changing VU1 roundmode to %d [%s]", vu1RoundMode, s_round_modes[static_cast<u8>(vu1RoundMode)]);
|
||||
Console.Warning("GameDB: Skipping changing VU1 roundmode to %d [%s]", vu1RoundMode, s_round_modes[static_cast<u8>(vu1RoundMode)]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -501,13 +501,13 @@ void GameDatabaseSchema::GameEntry::applyGameFixes(Pcsx2Config& config, bool app
|
||||
const int clampMode = enum_cast(eeClampMode);
|
||||
if (applyAuto)
|
||||
{
|
||||
Console.WriteLn("(GameDB) Changing EE/FPU clamp mode [mode=%d]", clampMode);
|
||||
Console.WriteLn("GameDB: Changing EE/FPU clamp mode [mode=%d]", clampMode);
|
||||
config.Cpu.Recompiler.fpuOverflow = (clampMode >= 1);
|
||||
config.Cpu.Recompiler.fpuExtraOverflow = (clampMode >= 2);
|
||||
config.Cpu.Recompiler.fpuFullMode = (clampMode >= 3);
|
||||
}
|
||||
else
|
||||
Console.Warning("[GameDB] Skipping changing EE/FPU clamp mode [mode=%d]", clampMode);
|
||||
Console.Warning("GameDB: Skipping changing EE/FPU clamp mode [mode=%d]", clampMode);
|
||||
}
|
||||
|
||||
if (vu0ClampMode != GameDatabaseSchema::ClampMode::Undefined)
|
||||
@@ -515,13 +515,13 @@ void GameDatabaseSchema::GameEntry::applyGameFixes(Pcsx2Config& config, bool app
|
||||
const int clampMode = enum_cast(vu0ClampMode);
|
||||
if (applyAuto)
|
||||
{
|
||||
Console.WriteLn("(GameDB) Changing VU0 clamp mode [mode=%d]", clampMode);
|
||||
Console.WriteLn("GameDB: Changing VU0 clamp mode [mode=%d]", clampMode);
|
||||
config.Cpu.Recompiler.vu0Overflow = (clampMode >= 1);
|
||||
config.Cpu.Recompiler.vu0ExtraOverflow = (clampMode >= 2);
|
||||
config.Cpu.Recompiler.vu0SignOverflow = (clampMode >= 3);
|
||||
}
|
||||
else
|
||||
Console.Warning("[GameDB] Skipping changing VU0 clamp mode [mode=%d]", clampMode);
|
||||
Console.Warning("GameDB: Skipping changing VU0 clamp mode [mode=%d]", clampMode);
|
||||
}
|
||||
|
||||
if (vu1ClampMode != GameDatabaseSchema::ClampMode::Undefined)
|
||||
@@ -529,13 +529,13 @@ void GameDatabaseSchema::GameEntry::applyGameFixes(Pcsx2Config& config, bool app
|
||||
const int clampMode = enum_cast(vu1ClampMode);
|
||||
if (applyAuto)
|
||||
{
|
||||
Console.WriteLn("(GameDB) Changing VU1 clamp mode [mode=%d]", clampMode);
|
||||
Console.WriteLn("GameDB: Changing VU1 clamp mode [mode=%d]", clampMode);
|
||||
config.Cpu.Recompiler.vu1Overflow = (clampMode >= 1);
|
||||
config.Cpu.Recompiler.vu1ExtraOverflow = (clampMode >= 2);
|
||||
config.Cpu.Recompiler.vu1SignOverflow = (clampMode >= 3);
|
||||
}
|
||||
else
|
||||
Console.Warning("[GameDB] Skipping changing VU1 clamp mode [mode=%d]", clampMode);
|
||||
Console.Warning("GameDB: Skipping changing VU1 clamp mode [mode=%d]", clampMode);
|
||||
}
|
||||
|
||||
// TODO - config - this could be simplified with maps instead of bitfields and enums
|
||||
@@ -543,14 +543,14 @@ void GameDatabaseSchema::GameEntry::applyGameFixes(Pcsx2Config& config, bool app
|
||||
{
|
||||
if (!applyAuto)
|
||||
{
|
||||
Console.Warning("[GameDB] Skipping setting Speedhack '%s' to [mode=%d]",
|
||||
Console.Warning("GameDB: Skipping setting Speedhack '%s' to [mode=%d]",
|
||||
Pcsx2Config::SpeedhackOptions::GetSpeedHackName(it.first), it.second);
|
||||
continue;
|
||||
}
|
||||
// Legacy note - speedhacks are setup in the GameDB as integer values, but
|
||||
// are effectively booleans like the gamefixes
|
||||
config.Speedhacks.Set(it.first, it.second);
|
||||
Console.WriteLn("(GameDB) Setting Speedhack '%s' to [mode=%d]",
|
||||
Console.WriteLn("GameDB: Setting Speedhack '%s' to [mode=%d]",
|
||||
Pcsx2Config::SpeedhackOptions::GetSpeedHackName(it.first), it.second);
|
||||
}
|
||||
|
||||
@@ -559,12 +559,12 @@ void GameDatabaseSchema::GameEntry::applyGameFixes(Pcsx2Config& config, bool app
|
||||
{
|
||||
if (!applyAuto)
|
||||
{
|
||||
Console.Warning("[GameDB] Skipping Gamefix: %s", Pcsx2Config::GamefixOptions::GetGameFixName(id));
|
||||
Console.Warning("GameDB: Skipping Gamefix: %s", Pcsx2Config::GamefixOptions::GetGameFixName(id));
|
||||
continue;
|
||||
}
|
||||
// if the fix is present, it is said to be enabled
|
||||
config.Gamefixes.Set(id, true);
|
||||
Console.WriteLn("(GameDB) Enabled Gamefix: %s", Pcsx2Config::GamefixOptions::GetGameFixName(id));
|
||||
Console.WriteLn("GameDB: Enabled Gamefix: %s", Pcsx2Config::GamefixOptions::GetGameFixName(id));
|
||||
|
||||
// The LUT is only used for 1 game so we allocate it only when the gamefix is enabled (save 4MB)
|
||||
if (id == Fix_GoemonTlbMiss && true)
|
||||
@@ -694,7 +694,7 @@ void GameDatabaseSchema::GameEntry::applyGSHardwareFixes(Pcsx2Config::GSOptions&
|
||||
const bool apply_auto_fixes = !config.ManualUserHacks;
|
||||
const bool is_sw_renderer = EmuConfig.GS.Renderer == GSRendererType::SW;
|
||||
if (!apply_auto_fixes)
|
||||
Console.Warning("[GameDB] Manual GS hardware renderer fixes are enabled, not using automatic hardware renderer fixes from GameDB.");
|
||||
Console.Warning("GameDB: Manual GS hardware renderer fixes are enabled, not using automatic hardware renderer fixes from GameDB.");
|
||||
|
||||
for (const auto& [id, value] : gsHWFixes)
|
||||
{
|
||||
@@ -703,7 +703,7 @@ void GameDatabaseSchema::GameEntry::applyGSHardwareFixes(Pcsx2Config::GSOptions&
|
||||
if (configMatchesHWFix(config, id, value))
|
||||
continue;
|
||||
|
||||
Console.Warning("[GameDB] Skipping GS Hardware Fix: %s to [mode=%d]", getHWFixName(id), value);
|
||||
Console.Warning("GameDB: Skipping GS Hardware Fix: %s to [mode=%d]", getHWFixName(id), value);
|
||||
fmt::format_to(std::back_inserter(disabled_fixes), "{} {} = {}", disabled_fixes.empty() ? " " : "\n ", getHWFixName(id), value);
|
||||
continue;
|
||||
}
|
||||
@@ -790,7 +790,7 @@ void GameDatabaseSchema::GameEntry::applyGSHardwareFixes(Pcsx2Config::GSOptions&
|
||||
if (config.TriFilter == TriFiltering::Automatic)
|
||||
config.TriFilter = static_cast<TriFiltering>(value);
|
||||
else if (config.TriFilter > TriFiltering::Off)
|
||||
Console.Warning("[GameDB] Game requires trilinear filtering to be disabled.");
|
||||
Console.Warning("GameDB: Game requires trilinear filtering to be disabled.");
|
||||
}
|
||||
}
|
||||
break;
|
||||
@@ -832,7 +832,7 @@ void GameDatabaseSchema::GameEntry::applyGSHardwareFixes(Pcsx2Config::GSOptions&
|
||||
if (config.InterlaceMode == GSInterlaceMode::Automatic)
|
||||
config.InterlaceMode = static_cast<GSInterlaceMode>(value);
|
||||
else
|
||||
Console.Warning("[GameDB] Game requires different deinterlace mode but it has been overridden by user setting.");
|
||||
Console.Warning("GameDB: Game requires different deinterlace mode but it has been overridden by user setting.");
|
||||
}
|
||||
}
|
||||
break;
|
||||
@@ -919,7 +919,7 @@ void GameDatabaseSchema::GameEntry::applyGSHardwareFixes(Pcsx2Config::GSOptions&
|
||||
break;
|
||||
}
|
||||
|
||||
Console.WriteLn("[GameDB] Enabled GS Hardware Fix: %s to [mode=%d]", getHWFixName(id), value);
|
||||
Console.WriteLn("GameDB: Enabled GS Hardware Fix: %s to [mode=%d]", getHWFixName(id), value);
|
||||
}
|
||||
|
||||
// fixup skipdraw range just in case the db has a bad range (but the linter should catch this)
|
||||
@@ -954,7 +954,7 @@ void GameDatabase::initDatabase()
|
||||
auto buf = FileSystem::ReadFileToString(Path::Combine(EmuFolders::Resources, GAMEDB_YAML_FILE_NAME).c_str());
|
||||
if (!buf.has_value())
|
||||
{
|
||||
Console.Error("[GameDB] Unable to open GameDB file, file does not exist.");
|
||||
Console.Error("GameDB: Unable to open GameDB file, file does not exist.");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -971,7 +971,7 @@ void GameDatabase::initDatabase()
|
||||
// However, YAML's keys are as expected case-sensitive, so we have to explicitly do our own duplicate checking
|
||||
if (s_game_db.count(serial) == 1)
|
||||
{
|
||||
Console.Error(fmt::format("[GameDB] Duplicate serial '{}' found in GameDB. Skipping, Serials are case-insensitive!", serial));
|
||||
Console.Error(fmt::format("GameDB: Duplicate serial '{}' found in GameDB. Skipping, Serials are case-insensitive!", serial));
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -988,9 +988,9 @@ void GameDatabase::ensureLoaded()
|
||||
{
|
||||
std::call_once(s_load_once_flag, []() {
|
||||
Common::Timer timer;
|
||||
Console.WriteLn(fmt::format("[GameDB] Has not been initialized yet, initializing..."));
|
||||
Console.WriteLn(fmt::format("GameDB: Has not been initialized yet, initializing..."));
|
||||
initDatabase();
|
||||
Console.WriteLn("[GameDB] %zu games on record (loaded in %.2fms)", s_game_db.size(), timer.GetTimeMilliseconds());
|
||||
Console.WriteLn("GameDB: %zu games on record (loaded in %.2fms)", s_game_db.size(), timer.GetTimeMilliseconds());
|
||||
});
|
||||
}
|
||||
|
||||
@@ -1115,7 +1115,7 @@ bool GameDatabase::loadHashDatabase()
|
||||
auto buf = FileSystem::ReadFileToString(Path::Combine(EmuFolders::Resources, HASHDB_YAML_FILE_NAME).c_str());
|
||||
if (!buf.has_value())
|
||||
{
|
||||
Console.Error("[GameDB] Unable to open hash database file, file does not exist.");
|
||||
Console.Error("GameDB: Unable to open hash database file, file does not exist.");
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@@ -540,14 +540,14 @@ bool SDLInputSource::ProcessSDLEvent(const SDL_Event* event)
|
||||
{
|
||||
case SDL_CONTROLLERDEVICEADDED:
|
||||
{
|
||||
Console.WriteLn("(SDLInputSource) Controller %d inserted", event->cdevice.which);
|
||||
Console.WriteLn("SDLInputSource: Controller %d inserted", event->cdevice.which);
|
||||
OpenDevice(event->cdevice.which, true);
|
||||
return true;
|
||||
}
|
||||
|
||||
case SDL_CONTROLLERDEVICEREMOVED:
|
||||
{
|
||||
Console.WriteLn("(SDLInputSource) Controller %d removed", event->cdevice.which);
|
||||
Console.WriteLn("SDLInputSource: Controller %d removed", event->cdevice.which);
|
||||
CloseDevice(event->cdevice.which);
|
||||
return true;
|
||||
}
|
||||
@@ -558,7 +558,7 @@ bool SDLInputSource::ProcessSDLEvent(const SDL_Event* event)
|
||||
if (SDL_IsGameController(event->jdevice.which))
|
||||
return false;
|
||||
|
||||
Console.WriteLn("(SDLInputSource) Joystick %d inserted", event->jdevice.which);
|
||||
Console.WriteLn("SDLInputSource: Joystick %d inserted", event->jdevice.which);
|
||||
OpenDevice(event->cdevice.which, false);
|
||||
return true;
|
||||
}
|
||||
@@ -569,7 +569,7 @@ bool SDLInputSource::ProcessSDLEvent(const SDL_Event* event)
|
||||
if (auto it = GetControllerDataForJoystickId(event->cdevice.which); it != m_controllers.end() && it->game_controller)
|
||||
return false;
|
||||
|
||||
Console.WriteLn("(SDLInputSource) Joystick %d removed", event->jdevice.which);
|
||||
Console.WriteLn("SDLInputSource: Joystick %d removed", event->jdevice.which);
|
||||
CloseDevice(event->cdevice.which);
|
||||
return true;
|
||||
}
|
||||
@@ -657,7 +657,7 @@ bool SDLInputSource::OpenDevice(int index, bool is_gamecontroller)
|
||||
|
||||
if (!gcontroller && !joystick)
|
||||
{
|
||||
ERROR_LOG("(SDLInputSource) Failed to open controller {}", index);
|
||||
ERROR_LOG("SDLInputSource: Failed to open controller {}", index);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -667,7 +667,7 @@ bool SDLInputSource::OpenDevice(int index, bool is_gamecontroller)
|
||||
{
|
||||
if (it->joystick_id == joystick_id)
|
||||
{
|
||||
ERROR_LOG("(SDLInputSource) Controller {}, instance {}, player {} already connected, ignoring.", index, joystick_id, player_id);
|
||||
ERROR_LOG("SDLInputSource: Controller {}, instance {}, player {} already connected, ignoring.", index, joystick_id, player_id);
|
||||
if (gcontroller)
|
||||
SDL_GameControllerClose(gcontroller);
|
||||
else
|
||||
@@ -680,7 +680,7 @@ bool SDLInputSource::OpenDevice(int index, bool is_gamecontroller)
|
||||
if (player_id < 0 || GetControllerDataForPlayerId(player_id) != m_controllers.end())
|
||||
{
|
||||
const int free_player_id = GetFreePlayerId();
|
||||
WARNING_LOG("(SDLInputSource) Controller {} (joystick {}) returned player ID {}, which is invalid or in "
|
||||
WARNING_LOG("SDLInputSource: Controller {} (joystick {}) returned player ID {}, which is invalid or in "
|
||||
"use. Using ID {} instead.",
|
||||
index, joystick_id, player_id, free_player_id);
|
||||
player_id = free_player_id;
|
||||
@@ -690,7 +690,7 @@ bool SDLInputSource::OpenDevice(int index, bool is_gamecontroller)
|
||||
if (!name)
|
||||
name = "Unknown Device";
|
||||
|
||||
INFO_LOG("(SDLInputSource) Opened {} {} (instance id {}, player id {}): {}", is_gamecontroller ? "game controller" : "joystick",
|
||||
INFO_LOG("SDLInputSource: Opened {} {} (instance id {}, player id {}): {}", is_gamecontroller ? "game controller" : "joystick",
|
||||
index, joystick_id, player_id, name);
|
||||
|
||||
ControllerData cd = {};
|
||||
@@ -717,7 +717,7 @@ bool SDLInputSource::OpenDevice(int index, bool is_gamecontroller)
|
||||
for (size_t i = 0; i < std::size(s_sdl_button_names); i++)
|
||||
mark_bind(SDL_GameControllerGetBindForButton(gcontroller, static_cast<SDL_GameControllerButton>(i)));
|
||||
|
||||
INFO_LOG("(SDLInputSource) Controller {} has {} axes and {} buttons", player_id, num_axes, num_buttons);
|
||||
INFO_LOG("SDLInputSource: Controller {} has {} axes and {} buttons", player_id, num_axes, num_buttons);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -726,14 +726,14 @@ bool SDLInputSource::OpenDevice(int index, bool is_gamecontroller)
|
||||
if (num_hats > 0)
|
||||
cd.last_hat_state.resize(static_cast<size_t>(num_hats), u8(0));
|
||||
|
||||
INFO_LOG("(SDLInputSource) Joystick {} has {} axes, {} buttons and {} hats", player_id,
|
||||
INFO_LOG("SDLInputSource: Joystick {} has {} axes, {} buttons and {} hats", player_id,
|
||||
SDL_JoystickNumAxes(joystick), SDL_JoystickNumButtons(joystick), num_hats);
|
||||
}
|
||||
|
||||
cd.use_game_controller_rumble = (gcontroller && SDL_GameControllerRumble(gcontroller, 0, 0, 0) == 0);
|
||||
if (cd.use_game_controller_rumble)
|
||||
{
|
||||
INFO_LOG("(SDLInputSource) Rumble is supported on '{}' via gamecontroller", name);
|
||||
INFO_LOG("SDLInputSource: Rumble is supported on '{}' via gamecontroller", name);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -752,25 +752,25 @@ bool SDLInputSource::OpenDevice(int index, bool is_gamecontroller)
|
||||
}
|
||||
else
|
||||
{
|
||||
ERROR_LOG("(SDLInputSource) Failed to create haptic left/right effect: {}", SDL_GetError());
|
||||
ERROR_LOG("SDLInputSource: Failed to create haptic left/right effect: {}", SDL_GetError());
|
||||
if (SDL_HapticRumbleSupported(haptic) && SDL_HapticRumbleInit(haptic) != 0)
|
||||
{
|
||||
cd.haptic = haptic;
|
||||
}
|
||||
else
|
||||
{
|
||||
ERROR_LOG("(SDLInputSource) No haptic rumble supported: {}", SDL_GetError());
|
||||
ERROR_LOG("SDLInputSource: No haptic rumble supported: {}", SDL_GetError());
|
||||
SDL_HapticClose(haptic);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (cd.haptic)
|
||||
INFO_LOG("(SDLInputSource) Rumble is supported on '{}' via haptic", name);
|
||||
INFO_LOG("SDLInputSource: Rumble is supported on '{}' via haptic", name);
|
||||
}
|
||||
|
||||
if (!cd.haptic && !cd.use_game_controller_rumble)
|
||||
WARNING_LOG("(SDLInputSource) Rumble is not supported on '{}'", name);
|
||||
WARNING_LOG("SDLInputSource: Rumble is not supported on '{}'", name);
|
||||
|
||||
if (player_id >= 0 && static_cast<u32>(player_id) < MAX_LED_COLORS && gcontroller && SDL_GameControllerHasLED(gcontroller))
|
||||
{
|
||||
|
||||
@@ -237,7 +237,7 @@ static void doBranch(s32 tar) {
|
||||
// This detects when SYSMEM is called and clears the modules then
|
||||
if(tar == 0x890)
|
||||
{
|
||||
DevCon.WriteLn(Color_Gray, "[R3000 Debugger] Branch to 0x890 (SYSMEM). Clearing modules.");
|
||||
DevCon.WriteLn(Color_Gray, "R3000 Debugger: Branch to 0x890 (SYSMEM). Clearing modules.");
|
||||
R3000SymbolGuardian.ClearIrxModules();
|
||||
}
|
||||
|
||||
|
||||
@@ -260,11 +260,11 @@ void FolderMemoryCard::LoadMemoryCardData(const u32 sizeInClusters, const bool e
|
||||
{
|
||||
if (enableFiltering)
|
||||
{
|
||||
Console.WriteLn(Color_Green, "(FolderMcd) Indexing slot %u with filter \"%s\".", m_slot, filter.c_str());
|
||||
Console.WriteLn(Color_Green, "FolderMcd: Indexing slot %u with filter \"%s\".", m_slot, filter.c_str());
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLn(Color_Green, "(FolderMcd) Indexing slot %u without filter.", m_slot);
|
||||
Console.WriteLn(Color_Green, "FolderMcd: Indexing slot %u without filter.", m_slot);
|
||||
}
|
||||
|
||||
CreateFat();
|
||||
@@ -636,7 +636,7 @@ bool FolderMemoryCard::AddFile(MemoryCardFileEntry* const dirEntry, const std::s
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLn("(FolderMcd) Could not open file: %s", relativeFilePath.c_str());
|
||||
Console.WriteLn("FolderMcd: Could not open file: %s", relativeFilePath.c_str());
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -1082,7 +1082,7 @@ void FolderMemoryCard::Flush()
|
||||
WriteToFile(m_folderName.GetFullPath().RemoveLast() + L"-debug_" + wxDateTime::Now().Format(L"%Y-%m-%d-%H-%M-%S") + L"_pre-flush.ps2");
|
||||
#endif
|
||||
|
||||
Console.WriteLn("(FolderMcd) Writing data for slot %u to file system...", m_slot);
|
||||
Console.WriteLn("FolderMcd: Writing data for slot %u to file system...", m_slot);
|
||||
Common::Timer timeFlushStart;
|
||||
|
||||
// Keep a copy of the old file entries so we can figure out which files and directories, if any, have been deleted from the memory card.
|
||||
@@ -1104,7 +1104,7 @@ void FolderMemoryCard::Flush()
|
||||
FlushBlock(m_superBlock.data.backup_block2);
|
||||
if (m_backupBlock2.programmedBlock != 0xFFFFFFFFu)
|
||||
{
|
||||
Console.Warning("(FolderMcd) Aborting flush of slot %u, emulation was interrupted during save process!", m_slot);
|
||||
Console.Warning("FolderMcd: Aborting flush of slot %u, emulation was interrupted during save process!", m_slot);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1150,7 +1150,7 @@ void FolderMemoryCard::Flush()
|
||||
m_lastAccessedFile.ClearMetadataWriteState();
|
||||
m_oldDataCache.clear();
|
||||
|
||||
Console.WriteLn("(FolderMcd) Done! Took %.2f ms.", timeFlushStart.GetTimeMilliseconds());
|
||||
Console.WriteLn("FolderMcd: Done! Took %.2f ms.", timeFlushStart.GetTimeMilliseconds());
|
||||
|
||||
#ifdef DEBUG_WRITE_FOLDER_CARD_IN_MEMORY_TO_FILE_ON_CHANGE
|
||||
WriteToFile(m_folderName.GetFullPath().RemoveLast() + L"-debug_" + wxDateTime::Now().Format(L"%Y-%m-%d-%H-%M-%S") + L"_post-flush.ps2");
|
||||
@@ -1763,7 +1763,7 @@ std::string FolderMemoryCard::GetDisabledMessage(uint slot) const
|
||||
|
||||
std::string FolderMemoryCard::GetCardFullMessage(const std::string& filePath) const
|
||||
{
|
||||
return fmt::format("(FolderMcd) Memory Card is full, could not add: {}", filePath);
|
||||
return fmt::format("FolderMcd: Memory Card is full, could not add: {}", filePath);
|
||||
}
|
||||
|
||||
std::vector<FolderMemoryCard::EnumeratedFileEntry> FolderMemoryCard::GetOrderedFiles(const std::string& dirPath) const
|
||||
|
||||
@@ -145,7 +145,7 @@ void PadDualshock2::ConfigLog()
|
||||
// VS: Vibration Small (how is the small vibration motor mapped)
|
||||
// VL: Vibration Large (how is the large vibration motor mapped)
|
||||
// RB: Response Bytes (what data is included in the controller's responses - D = Digital, A = Analog, P = Pressure)
|
||||
Console.WriteLn(fmt::format("[Pad] DS2 Config Finished - P{0}/S{1} - AL: {2} - AB: {3} - VS: {4} - VL: {5} - RB: {6} (0x{7:08X})",
|
||||
Console.WriteLn(fmt::format("Pad: DS2 Config Finished - P{0}/S{1} - AL: {2} - AB: {3} - VS: {4} - VL: {5} - RB: {6} (0x{7:08X})",
|
||||
port + 1,
|
||||
slot + 1,
|
||||
(this->analogLight ? "On" : "Off"),
|
||||
|
||||
@@ -47,7 +47,7 @@ void PadGuitar::ConfigLog()
|
||||
|
||||
// AL: Analog Light (is it turned on right now)
|
||||
// AB: Analog Button (is it useable or is it locked in its current state)
|
||||
Console.WriteLn(fmt::format("[Pad] Guitar Config Finished - P{0}/S{1} - AL: {2} - AB: {3}",
|
||||
Console.WriteLn(fmt::format("Pad: Guitar Config Finished - P{0}/S{1} - AL: {2} - AB: {3}",
|
||||
port + 1,
|
||||
slot + 1,
|
||||
(this->analogLight ? "On" : "Off"),
|
||||
|
||||
@@ -53,7 +53,7 @@ void PadJogcon::ConfigLog()
|
||||
|
||||
// AL: Analog Light (is it turned on right now)
|
||||
// AB: Analog Button (is it useable or is it locked in its current state)
|
||||
Console.WriteLn(fmt::format("[Pad] Jogcon Config Finished - P{0}/S{1} - AL: {2} - AB: {3}",
|
||||
Console.WriteLn(fmt::format("Pad: Jogcon Config Finished - P{0}/S{1} - AL: {2} - AB: {3}",
|
||||
port + 1,
|
||||
slot + 1,
|
||||
(this->analogLight ? "On" : "Off"),
|
||||
|
||||
@@ -50,7 +50,7 @@ void PadNegcon::ConfigLog()
|
||||
|
||||
// AL: Analog Light (is it turned on right now)
|
||||
// AB: Analog Button (is it useable or is it locked in its current state)
|
||||
Console.WriteLn(fmt::format("[Pad] Negcon Config Finished - P{0}/S{1} - AL: {2} - AB: {3}",
|
||||
Console.WriteLn(fmt::format("Pad: Negcon Config Finished - P{0}/S{1} - AL: {2} - AB: {3}",
|
||||
port + 1,
|
||||
slot + 1,
|
||||
(this->analogLight ? "On" : "Off"),
|
||||
|
||||
@@ -56,7 +56,7 @@ void PadPopn::ConfigLog()
|
||||
// AL: Analog Light (is it turned on right now)
|
||||
// AB: Analog Button (is it useable or is it locked in its current state)
|
||||
// RB: Response Bytes (what data is included in the controller's responses - D = Digital, A = Analog, P = Pressure)
|
||||
Console.WriteLn(fmt::format("[Pad] Pop'n Config Finished - P{0}/S{1} - AL: {2} - AB: {3} - RB: {4} (0x{5:08X})",
|
||||
Console.WriteLn(fmt::format("Pad: Pop'n Config Finished - P{0}/S{1} - AL: {2} - AB: {3} - RB: {4} (0x{5:08X})",
|
||||
port + 1,
|
||||
slot + 1,
|
||||
(this->analogLight ? "On" : "Off"),
|
||||
|
||||
@@ -415,6 +415,10 @@ bool VMManager::Internal::CPUThreadInitialize()
|
||||
if (EmuConfig.EnableDiscordPresence)
|
||||
InitializeDiscordPresence();
|
||||
|
||||
// Check for advanced settings status and warn the user if its enabled
|
||||
if (Host::GetBaseBoolSettingValue("UI", "ShowAdvancedSettings", false))
|
||||
Console.Warning("Settings: Advanced Settings are enabled; only proceed if you know what you're doing! No support will be provided if you have the option enabled.");
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -1543,7 +1543,7 @@ static void iopRecRecompile(const u32 startpc)
|
||||
// This detects when SYSMEM is called and clears the modules then
|
||||
if(startpc == 0x890)
|
||||
{
|
||||
DevCon.WriteLn(Color_Gray, "[R3000 Debugger] Branch to 0x890 (SYSMEM). Clearing modules.");
|
||||
DevCon.WriteLn(Color_Gray, "R3000 Debugger: Branch to 0x890 (SYSMEM). Clearing modules.");
|
||||
R3000SymbolGuardian.ClearIrxModules();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user