Skip to content

Commit

Permalink
Merge pull request #18803 from hrydgard/bad-chd-warning
Browse files Browse the repository at this point in the history
Warn the user about bad CHDs
  • Loading branch information
hrydgard committed Jan 31, 2024
2 parents 5f96e55 + 61bd011 commit af20992
Show file tree
Hide file tree
Showing 54 changed files with 109 additions and 18 deletions.
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

0 comments on commit af20992

Please sign in to comment.