Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Warn the user about bad CHDs #18803

Merged
merged 2 commits into from
Jan 31, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions Common/System/OSD.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ enum class OSDType {
MESSAGE_ERROR_DUMP, // displays lots of text (after the first line), small size
MESSAGE_FILE_LINK,
MESSAGE_CENTERED_WARNING,
MESSAGE_CENTERED_ERROR,

ACHIEVEMENT_UNLOCKED,

Expand Down
7 changes: 7 additions & 0 deletions Core/FileSystems/BlockDevices.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -643,6 +643,13 @@ CHDFileBlockDevice::CHDFileBlockDevice(FileLoader *fileLoader)

impl_->chd = file;
impl_->header = chd_get_header(impl_->chd);

if (impl_->header->hunkbytes != 2048) {
badCHD_ = true;
} else {
badCHD_ = false;
}

readBuffer = new u8[impl_->header->hunkbytes];
currentHunk = -1;
blocksPerHunk = impl_->header->hunkbytes / impl_->header->unitbytes;
Expand Down
4 changes: 3 additions & 1 deletion Core/FileSystems/BlockDevices.h
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ class BlockDevice {
return (u64)GetNumBlocks() * (u64)GetBlockSize();
}
virtual bool IsDisc() const = 0;
virtual bool IsBadCHD() const { return false; }

void NotifyReadError();

Expand Down Expand Up @@ -146,14 +147,15 @@ class CHDFileBlockDevice : public BlockDevice {
bool ReadBlocks(u32 minBlock, int count, u8 *outPtr) override;
u32 GetNumBlocks() const override { return numBlocks; }
bool IsDisc() const override { return true; }

bool IsBadCHD() const override { return badCHD_; }
private:
struct ExtendedCoreFile *core_file_ = nullptr;
std::unique_ptr<CHDImpl> impl_;
u8 *readBuffer = nullptr;
u32 currentHunk = 0;
u32 blocksPerHunk = 0;
u32 numBlocks = 0;
bool badCHD_ = false;
};

BlockDevice *constructBlockDevice(FileLoader *fileLoader);
4 changes: 3 additions & 1 deletion Core/Reporting.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -203,8 +203,10 @@ namespace Reporting
it = crcResults.find(gamePath);
}

if (crcThread.joinable())
if (crcThread.joinable()) {
INFO_LOG(SYSTEM, "Finished CRC calculation");
crcThread.join();
}
return it->second;
}

Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ What's new in 1.17
- When opening the pause menu, there's now an option to keep the game running behind the menu.
This is enforced in multiplayer to avoid inadvertent desyncs ([#18517], [#18515])
- ISO loading improvements
- The CHD file format is now fully supported, including with Remote ISO and Retroachievements
- The CHD file format is now fully supported (use `chdman createdvd`!), including with Remote ISO and Retroachievements
- Improvements to [remote ISO](https://www.ppsspp.org/docs/reference/disc-streaming/): optional tab on home screen, can now share whole folders ([#18627], [#18639], [#18640], [#18631], [#18632], [#18633],)
- Controller and touchscreen fixes
- More control bindings, organize into categories ([#18635], [#18589])
Expand Down Expand Up @@ -387,4 +387,4 @@ Credit goes to:
[#18785]: https://github.com/hrydgard/ppsspp/issues/18785 "Fix issue with the collapsible sections in control mapping collapsing on every change, plus, combo fix"
[#18777]: https://github.com/hrydgard/ppsspp/issues/18777 "Expand primitives: Check the vertex count too."
[#18779]: https://github.com/hrydgard/ppsspp/issues/18779 "More fixes"
[#18772]: https://github.com/hrydgard/ppsspp/issues/18772 "Add volume slider for RetroAchievements sound effects"
[#18772]: https://github.com/hrydgard/ppsspp/issues/18772 "Add volume slider for RetroAchievements sound effects"
5 changes: 5 additions & 0 deletions UI/EmuScreen.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -274,6 +274,11 @@ void EmuScreen::bootGame(const Path &filename) {
return;
}

if (info->badCHD) {
auto e = GetI18NCategory(I18NCat::ERRORS);
g_OSD.Show(OSDType::MESSAGE_CENTERED_ERROR, e->T("BadCHD", "Bad CHD file.\nCompress using \"chdman createdvd\" for good performance."), gamePath_.ToVisualString(), 7.0f);
}

auto sc = GetI18NCategory(I18NCat::SCREEN);
if (info->fileType == IdentifiedFileType::PSP_DISC_DIRECTORY) {
g_OSD.Show(OSDType::MESSAGE_CENTERED_WARNING, sc->T("ExtractedIsoWarning", "Extracted ISOs often don't work.\nPlay the ISO file directly."), gamePath_.ToVisualString(), 7.0f);
Expand Down
6 changes: 5 additions & 1 deletion UI/GameInfoCache.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,9 @@ u64 GameInfo::GetGameSizeUncompressedInBytes() {
}

// Not too meaningful if the object itself is a savedata directory...
// Call this under lock.
std::vector<Path> GameInfo::GetSaveDataDirectories() {
_dbg_assert_(hasFlags & GameInfoFlags::PARAM_SFO); // so we know we have the ID.
Path memc = GetSysDirectory(DIRECTORY_SAVEDATA);

std::vector<File::FileInfo> dirs;
Expand Down Expand Up @@ -263,7 +265,6 @@ void GameInfo::DisposeFileLoader() {
}

bool GameInfo::DeleteAllSaveData() {
_assert_(hasFlags & GameInfoFlags::PARAM_SFO); // so we know we have the ID.
std::vector<Path> saveDataDir = GetSaveDataDirectories();
for (size_t j = 0; j < saveDataDir.size(); j++) {
std::vector<File::FileInfo> fileInfo;
Expand Down Expand Up @@ -687,6 +688,9 @@ class GameInfoWorkItem : public Task {
if (!bd) {
return;
}
if (bd->IsBadCHD()) {
info_->badCHD = true;
}
ISOFileSystem umd(&handles, bd);

// Alright, let's fetch the PARAM.SFO.
Expand Down
4 changes: 3 additions & 1 deletion UI/GameInfoCache.h
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,8 @@ class GameInfo {

bool Ready(GameInfoFlags flags) {
std::unique_lock<std::mutex> guard(lock);
return (hasFlags & flags) != 0;
// Avoid the operator, we want to check all the bits.
return ((int)hasFlags & (int)flags) == (int)flags;
}

void MarkReadyNoLock(GameInfoFlags flags) {
Expand Down Expand Up @@ -146,6 +147,7 @@ class GameInfo {
int disc_total = 0;
int disc_number = 0;
int region = -1;
bool badCHD = false;
IdentifiedFileType fileType;
ParamSFOData paramSFO;
bool hasConfig = false;
Expand Down
22 changes: 15 additions & 7 deletions UI/GameScreen.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ void GameScreen::update() {
void GameScreen::CreateViews() {
std::shared_ptr<GameInfo> info = g_gameInfoCache->GetInfo(NULL, gamePath_, GameInfoFlags::PARAM_SFO | GameInfoFlags::ICON | GameInfoFlags::BG);

if (info && !info->id.empty()) {
if (info->Ready(GameInfoFlags::PARAM_SFO)) {
saveDirs = info->GetSaveDataDirectories(); // Get's very heavy, let's not do it in update()
}

Expand All @@ -110,7 +110,7 @@ void GameScreen::CreateViews() {
root_->Add(leftColumn);

leftColumn->Add(new Choice(di->T("Back"), "", false, new AnchorLayoutParams(150, WRAP_CONTENT, 10, NONE, NONE, 10)))->OnClick.Handle(this, &GameScreen::OnSwitchBack);
if (info) {
if (info->Ready(GameInfoFlags::PARAM_SFO)) {
ViewGroup *badgeHolder = new LinearLayout(ORIENT_HORIZONTAL, new AnchorLayoutParams(10, 10, 110, NONE));
LinearLayout *mainGameInfo = new LinearLayout(ORIENT_VERTICAL, new LinearLayoutParams(1.0f));
mainGameInfo->SetSpacing(3.0f);
Expand Down Expand Up @@ -149,6 +149,11 @@ void GameScreen::CreateViews() {
tvCRC_->SetVisibility(Reporting::HasCRC(gamePath_) ? V_VISIBLE : V_GONE);
tvVerified_ = infoLayout->Add(new NoticeView(NoticeLevel::INFO, ga->T("Click \"Calculate CRC\" to verify ISO"), "", new LinearLayoutParams(FILL_PARENT, WRAP_CONTENT)));
tvVerified_->SetVisibility(UI::V_GONE);
tvVerified_->SetSquishy(true);
if (info->badCHD) {
auto e = GetI18NCategory(I18NCat::ERRORS);
infoLayout->Add(new NoticeView(NoticeLevel::ERROR, e->T("BadCHD", "Bad CHD file.\nCompress using \"chdman createdvd\" for good performance."), "", new LinearLayoutParams(FILL_PARENT, WRAP_CONTENT)))->SetSquishy(true);
}
} else {
tvTitle_ = nullptr;
tvGameSize_ = nullptr;
Expand Down Expand Up @@ -292,7 +297,7 @@ ScreenRenderFlags GameScreen::render(ScreenRenderMode mode) {
tvTitle_->SetText(info->GetTitle());
}

if (info->gameSizeOnDisk) {
if (info->Ready(GameInfoFlags::SIZE | GameInfoFlags::UNCOMPRESSED_SIZE)) {
char temp[256];
if (tvGameSize_) {
snprintf(temp, sizeof(temp), "%s: %s", ga->T("Game"), NiceSizeFormat(info->gameSizeOnDisk).c_str());
Expand Down Expand Up @@ -346,7 +351,7 @@ ScreenRenderFlags GameScreen::render(ScreenRenderMode mode) {

// Let's check the CRC in the game database, looking up the ID and also matching the crc.
std::vector<GameDBInfo> dbInfos;
if (tvVerified_ && !info->id_version.empty() && g_gameDB.GetGameInfos(info->id_version, &dbInfos)) {
if (tvVerified_ && info->Ready(GameInfoFlags::PARAM_SFO) && g_gameDB.GetGameInfos(info->id_version, &dbInfos)) {
bool found = false;
for (auto &dbInfo : dbInfos) {
if (dbInfo.crc == crcVal) {
Expand All @@ -361,21 +366,23 @@ ScreenRenderFlags GameScreen::render(ScreenRenderMode mode) {
// Like the other messages below, disabled until we have a database we have confidence in.
// tvVerified_->SetText(ga->T("CRC checksum does not match, bad or modified ISO"));
// tvVerified_->SetLevel(NoticeLevel::ERROR);
tvVerified_->SetVisibility(UI::V_GONE);
}
} else {
} else if (tvVerified_) {
// tvVerified_->SetText(ga->T("Game ID unknown - not in the Redump database"));
// tvVerified_->SetVisibility(UI::V_VISIBLE);
// tvVerified_->SetLevel(NoticeLevel::WARN);
tvVerified_->SetVisibility(UI::V_GONE);
}
} else if (!isHomebrew_) {
GameDBInfo dbInfo;
if (tvVerified_) {
std::vector<GameDBInfo> dbInfos;
if (!info->id_version.empty() && !g_gameDB.GetGameInfos(info->id_version, &dbInfos)) {
if (info->Ready(GameInfoFlags::PARAM_SFO) && !g_gameDB.GetGameInfos(info->id_version, &dbInfos)) {
// tvVerified_->SetText(ga->T("Game ID unknown - not in the ReDump database"));
// tvVerified_->SetVisibility(UI::V_VISIBLE);
// tvVerified_->SetLevel(NoticeLevel::WARN);
} else if (info->gameSizeUncompressed != 0) { // don't do this check if info still pending
} else if (info->Ready(GameInfoFlags::UNCOMPRESSED_SIZE) && info->gameSizeUncompressed != 0) { // don't do this check if info still pending
bool found = false;
for (auto &dbInfo : dbInfos) {
// TODO: Doesn't take CSO/CHD into account.
Expand All @@ -387,6 +394,7 @@ ScreenRenderFlags GameScreen::render(ScreenRenderMode mode) {
// tvVerified_->SetText(ga->T("File size incorrect, bad or modified ISO"));
// tvVerified_->SetVisibility(UI::V_VISIBLE);
// tvVerified_->SetLevel(NoticeLevel::ERROR);
// INFO_LOG(LOADER, "File size %d not matching game DB", (int)info->gameSizeUncompressed);
} else {
tvVerified_->SetText(ga->T("Click \"Calculate CRC\" to verify ISO"));
tvVerified_->SetVisibility(UI::V_VISIBLE);
Expand Down
23 changes: 18 additions & 5 deletions UI/OnScreenDisplay.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -52,14 +52,19 @@ static ImageID GetOSDIcon(NoticeLevel level) {

static NoticeLevel GetNoticeLevel(OSDType type) {
switch (type) {
case OSDType::MESSAGE_INFO: return NoticeLevel::INFO;
case OSDType::MESSAGE_INFO:
return NoticeLevel::INFO;
case OSDType::MESSAGE_ERROR:
case OSDType::MESSAGE_ERROR_DUMP: return NoticeLevel::ERROR;
case OSDType::MESSAGE_ERROR_DUMP:
case OSDType::MESSAGE_CENTERED_ERROR:
return NoticeLevel::ERROR;
case OSDType::MESSAGE_WARNING:
case OSDType::MESSAGE_CENTERED_WARNING:
return NoticeLevel::WARN;
case OSDType::MESSAGE_SUCCESS: return NoticeLevel::SUCCESS;
default: return NoticeLevel::SUCCESS;
case OSDType::MESSAGE_SUCCESS:
return NoticeLevel::SUCCESS;
default:
return NoticeLevel::SUCCESS;
}
}

Expand Down Expand Up @@ -295,6 +300,7 @@ void OnScreenMessagesView::Draw(UIContext &dc) {
typeEdges[(size_t)OSDType::LEADERBOARD_SUBMITTED] = (ScreenEdgePosition)g_Config.iAchievementsLeaderboardSubmittedPos;
typeEdges[(size_t)OSDType::ACHIEVEMENT_UNLOCKED] = (ScreenEdgePosition)g_Config.iAchievementsUnlockedPos;
typeEdges[(size_t)OSDType::MESSAGE_CENTERED_WARNING] = ScreenEdgePosition::CENTER;
typeEdges[(size_t)OSDType::MESSAGE_CENTERED_ERROR] = ScreenEdgePosition::CENTER;

dc.SetFontScale(1.0f, 1.0f);

Expand Down Expand Up @@ -459,6 +465,8 @@ void OnScreenMessagesView::Draw(UIContext &dc) {
case OSDType::MESSAGE_SUCCESS:
case OSDType::MESSAGE_WARNING:
case OSDType::MESSAGE_ERROR:
case OSDType::MESSAGE_CENTERED_ERROR:
case OSDType::MESSAGE_CENTERED_WARNING:
case OSDType::MESSAGE_ERROR_DUMP:
case OSDType::MESSAGE_FILE_LINK:
case OSDType::ACHIEVEMENT_UNLOCKED:
Expand Down Expand Up @@ -553,11 +561,16 @@ void NoticeView::GetContentDimensionsBySpec(const UIContext &dc, UI::MeasureSpec
if (bounds.h < 0) {
bounds.h = vert.size;
}

ApplyBoundsBySpec(bounds, horiz, vert);
MeasureNotice(dc, level_, text_, detailsText_, iconName_, 0, &w, &h, &height1_);
// Layout hack! Some weird problems with the layout that I can't figure out right now..
if (squishy_) {
w = 50.0;
}
}

void NoticeView::Draw(UIContext &dc) {
dc.PushScissor(bounds_);
RenderNotice(dc, bounds_, height1_, level_, text_, detailsText_, iconName_, 0, 1.0f);
dc.PopScissor();
}
4 changes: 4 additions & 0 deletions UI/OnScreenDisplay.h
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,9 @@ class NoticeView : public UI::InertView {
void SetLevel(NoticeLevel level) {
level_ = level;
}
void SetSquishy(bool squishy) {
squishy_ = squishy;
}

void GetContentDimensionsBySpec(const UIContext &dc, UI::MeasureSpec horiz, UI::MeasureSpec vert, float &w, float &h) const override;
void Draw(UIContext &dc) override;
Expand All @@ -79,4 +82,5 @@ class NoticeView : public UI::InertView {
std::string iconName_;
NoticeLevel level_;
mutable float height1_ = 0.0f;
bool squishy_ = false;
};
1 change: 1 addition & 0 deletions assets/lang/ar_AE.ini
Original file line number Diff line number Diff line change
Expand Up @@ -460,6 +460,7 @@ Zoom = ‎تقريب
[Error]
7z file detected (Require 7-Zip) = ‎الملف مضغوط (7z).\nمن فضلك فك الضغط أولاً (جرب 7-Zip أوWinRAR).
A PSP game couldn't be found on the disc. = A PSP game couldn't be found on the disc.
BadCHD = Bad CHD file.\nCompress using "chdman createdvd" for good performance
Cannot boot ELF located outside mountRoot. = Cannot boot ELF located outside mountRoot.
Could not save screenshot file = ‎لا يمكن حفظ ملف لقطة الشاشة.
D3D9or11 = Direct3D 9? (or "no" for Direct3D 11)
Expand Down
1 change: 1 addition & 0 deletions assets/lang/az_AZ.ini
Original file line number Diff line number Diff line change
Expand Up @@ -452,6 +452,7 @@ Zoom = Zoom
[Error]
7z file detected (Require 7-Zip) = file is compressed (7z).\nPlease decompress first (try 7-Zip or WinRAR).
A PSP game couldn't be found on the disc. = A PSP game couldn't be found on the disc.
BadCHD = Bad CHD file.\nCompress using "chdman createdvd" for good performance
Cannot boot ELF located outside mountRoot. = Cannot boot ELF located outside mountRoot.
Could not save screenshot file = Could not save screenshot file.
D3D9or11 = Direct3D 9? (or "no" for Direct3D 11)
Expand Down
1 change: 1 addition & 0 deletions assets/lang/bg_BG.ini
Original file line number Diff line number Diff line change
Expand Up @@ -452,6 +452,7 @@ Zoom = Zoom
[Error]
7z file detected (Require 7-Zip) = file is compressed (7z).\nPlease decompress first (try 7-Zip or WinRAR).
A PSP game couldn't be found on the disc. = A PSP game couldn't be found on the disc.
BadCHD = Bad CHD file.\nCompress using "chdman createdvd" for good performance
Cannot boot ELF located outside mountRoot. = Cannot boot ELF located outside mountRoot.
Could not save screenshot file = Could not save screenshot file.
D3D9or11 = Direct3D 9? (or "no" for Direct3D 11)
Expand Down
1 change: 1 addition & 0 deletions assets/lang/ca_ES.ini
Original file line number Diff line number Diff line change
Expand Up @@ -452,6 +452,7 @@ Zoom = Zoom
[Error]
7z file detected (Require 7-Zip) = file is compressed (7z).\nPlease decompress first (try 7-Zip or WinRAR).
A PSP game couldn't be found on the disc. = A PSP game couldn't be found on the disc.
BadCHD = Bad CHD file.\nCompress using "chdman createdvd" for good performance
Cannot boot ELF located outside mountRoot. = Cannot boot ELF located outside mountRoot.
Could not save screenshot file = Could not save screenshot file.
D3D9or11 = Direct3D 9? (or "no" for Direct3D 11)
Expand Down
1 change: 1 addition & 0 deletions assets/lang/cz_CZ.ini
Original file line number Diff line number Diff line change
Expand Up @@ -452,6 +452,7 @@ Zoom = Přiblížení
[Error]
7z file detected (Require 7-Zip) = Soubor je zabalen (7z).\nNejdříve ho musíte rozbalit (zkuste 7-Zip nebo WinRAR).
A PSP game couldn't be found on the disc. = A PSP game couldn't be found on the disc.
BadCHD = Bad CHD-file.\nCompress using "chdman createdvd" for good performance
Cannot boot ELF located outside mountRoot. = Cannot boot ELF located outside mountRoot.
Could not save screenshot file = Soubor se snímkem obrazovky nelze uložit.
D3D9or11 = Direct3D 9? (or "no" for Direct3D 11)
Expand Down
1 change: 1 addition & 0 deletions assets/lang/da_DK.ini
Original file line number Diff line number Diff line change
Expand Up @@ -452,6 +452,7 @@ Zoom = Zoom
[Error]
7z file detected (Require 7-Zip) = Fil er pakket (7z).\nPak venligst ud først (prøv 7-Zip eller WinRAR).
A PSP game couldn't be found on the disc. = A PSP game couldn't be found on the disc.
BadCHD = Bad CHD file.\nCompress using "chdman createdvd" for good performance
Cannot boot ELF located outside mountRoot. = Cannot boot ELF located outside mountRoot.
Could not save screenshot file = Kunne ikke gemme skærmbilledefilen.
D3D9or11 = Direct3D 9? (or "no" for Direct3D 11)
Expand Down
1 change: 1 addition & 0 deletions assets/lang/de_DE.ini
Original file line number Diff line number Diff line change
Expand Up @@ -452,6 +452,7 @@ Zoom = Zoom
[Error]
7z file detected (Require 7-Zip) = Datei ist komprimiert (7z).\nBitte entpacken Sie diese zuerst (mit 7-Zip oder WinRAR).
A PSP game couldn't be found on the disc. = Ein PSP Spiel konnte nicht auf der Disk gefunden werden.
BadCHD = Bad CHD-file.\nCompress using "chdman createdvd" for good performance
Cannot boot ELF located outside mountRoot. = Kann ELF außerhalb von mountRoot nicht booten.
Could not save screenshot file = Screenshot konnte nicht gespeichert werden.
D3D9or11 = Direct3D 9? (oder "nein" für Direct3D 11)
Expand Down
1 change: 1 addition & 0 deletions assets/lang/dr_ID.ini
Original file line number Diff line number Diff line change
Expand Up @@ -452,6 +452,7 @@ Zoom = Zoom
[Error]
7z file detected (Require 7-Zip) = file is compressed (7z).\nPlease decompress first (try 7-Zip or WinRAR).
A PSP game couldn't be found on the disc. = A PSP game couldn't be found on the disc.
BadCHD = Bad CHD file.\nCompress using "chdman createdvd" for good performance
Cannot boot ELF located outside mountRoot. = Cannot boot ELF located outside mountRoot.
Could not save screenshot file = Could not save screenshot file.
D3D9or11 = Direct3D 9? (or "no" for Direct3D 11)
Expand Down
1 change: 1 addition & 0 deletions assets/lang/en_US.ini
Original file line number Diff line number Diff line change
Expand Up @@ -477,6 +477,7 @@ Zoom = Zoom
7z file detected (Require 7-Zip) = File is compressed (7z).\nPlease decompress first (try 7-Zip or WinRAR).
A PSP game couldn't be found on the disc. = A PSP game couldn't be found on the disc.
Cannot boot ELF located outside mountRoot. = Cannot boot ELF located outside mountRoot.
BadCHD = Bad CHD file.\nCompress using "chdman createdvd" for good performance.
Could not save screenshot file = Could not save screenshot file.
D3D9or11 = Direct3D 9? (or "no" for Direct3D 11)
D3D11CompilerMissing = D3DCompiler_47.dll not found. Please install. Or press Yes to try again using Direct3D 9 instead.
Expand Down
1 change: 1 addition & 0 deletions assets/lang/es_ES.ini
Original file line number Diff line number Diff line change
Expand Up @@ -452,6 +452,7 @@ Zoom = Acercar
[Error]
7z file detected (Require 7-Zip) = Es un archivo comprimido (en 7z).\nPor lo que necesita ser descomprimido (usa 7-Zip o WinRAR).
A PSP game couldn't be found on the disc. = No se pudo encontrar un juego de PSP en el disco.
BadCHD = Bad CHD file.\nCompress using "chdman createdvd" for good performance
Cannot boot ELF located outside mountRoot. = No se pudo inicar el ELF localizado fuera del mountRoot.
Could not save screenshot file = No se pudo guardar la captura de pantalla.
D3D9or11 = ¿Direct3D 9? (o "no" para Direct3D 11)
Expand Down
1 change: 1 addition & 0 deletions assets/lang/es_LA.ini
Original file line number Diff line number Diff line change
Expand Up @@ -452,6 +452,7 @@ Zoom = Zoom
[Error]
7z file detected (Require 7-Zip) = Es un archivo comprimido (7z).\nPor favor, descomprima primero (usa 7-Zip o WinRAR).
A PSP game couldn't be found on the disc. = No se detecta el juego de PSP en el disco.
BadCHD = Bad CHD-file.\nCompress using "chdman createdvd" for good performance
Cannot boot ELF located outside mountRoot. = No puede iniciar ELF localizado fuera de mountRoot.
Could not save screenshot file = No se pudo guardar la captura de pantalla.
D3D9or11 = ¿Direct3D 9? (o "no" para Direct3D 11)
Expand Down
1 change: 1 addition & 0 deletions assets/lang/fa_IR.ini
Original file line number Diff line number Diff line change
Expand Up @@ -452,6 +452,7 @@ Zoom = Zoom
[Error]
7z file detected (Require 7-Zip) = file is compressed (7z).\nPlease decompress first (try 7-Zip or WinRAR).
A PSP game couldn't be found on the disc. = A PSP game couldn't be found on the disc.
BadCHD = Bad CHD-file.\nCompress using "chdman createdvd" for good performance
Cannot boot ELF located outside mountRoot. = Cannot boot ELF located outside mountRoot.
Could not save screenshot file = Could not save screenshot file.
D3D9or11 = Direct3D 9? (or "no" for Direct3D 11)
Expand Down
1 change: 1 addition & 0 deletions assets/lang/fi_FI.ini
Original file line number Diff line number Diff line change
Expand Up @@ -452,6 +452,7 @@ Zoom = Zoom
[Error]
7z file detected (Require 7-Zip) = file is compressed (7z).\nPlease decompress first (try 7-Zip or WinRAR).
A PSP game couldn't be found on the disc. = A PSP game couldn't be found on the disc.
BadCHD = Bad CHD-file.\nCompress using "chdman createdvd" for good performance
Cannot boot ELF located outside mountRoot. = Cannot boot ELF located outside mountRoot.
Could not save screenshot file = Could not save screenshot file.
D3D9or11 = Direct3D 9? (or "no" for Direct3D 11)
Expand Down
Loading
Loading