sceFont: Use the HLE and our own fonts for the Monster Hunter 3rd HD remaster

- Fixes #22982

This remaster only ever ran in the PS3's emulator, and its unofficial
Simplified Chinese translation renders no Chinese text with the
firmware's sceFont and fonts, which we now use whenever a firmware is
installed. Its entry in the HD remaster table now says so: sceFont stays
HLE'd whatever the settings and compat flags say, and the HLE sceFont
loads our fonts rather than the NAND's (and doesn't install any from the
disc's updater).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Henrik RydgårdandClaude Opus 5.5 committed 2026-11-07 16:21:04 +01:00
1 parent cb0e01d647
commit c7c5fc0ac6
6 files changed
+22 -3

No files matched your search

+4 -1
View File
@@ -20,10 +20,13 @@
bool g_RemasterMode;
bool g_DoubleTextureCoordinates;
bool g_RemasterHLEFonts;
// TODO: Do all of the remasters aside from Monster Hunter/Shin Sangoku use double texture coordinates?
extern const struct HDRemaster g_HDRemasters[] = {
{ "NPJB40001", 0x04000000, false }, // MONSTER HUNTER PORTABLE 3rd HD Ver.
// It only ever ran in the PS3's emulator, never on a PSP. Its unofficial Simplified Chinese
// translation renders no Chinese text with the firmware's sceFont and fonts (#22982).
{ "NPJB40001", 0x04000000, false, nullptr, true }, // MONSTER HUNTER PORTABLE 3rd HD Ver.
{ "NPJB40002", 0x04000000, true }, // K-ON Houkago Live HD Ver
{ "NPJB40003", 0x04000000, false }, // Shin Sangoku Musou Multi Raid 2 HD Ver
{ "ULJM05170", 0x04000000, true, "ULJM-05170|55C069C631B22685|0001|G" }, // Eiyuu Densetsu Sora no Kiseki FC Kai HD Edition
+4
View File
@@ -27,11 +27,15 @@ extern bool g_RemasterMode;
extern bool g_DoubleTextureCoordinates;
// Keep sceFont HLE'd and give it our own fonts, never the firmware's.
extern bool g_RemasterHLEFonts;
struct HDRemaster {
const char *gameID;
u32 memorySize;
bool doubleTextureCoordinates;
const char *umdDataValue;
bool hleFonts;
};
extern const struct HDRemaster g_HDRemasters[];
+6 -1
View File
@@ -46,6 +46,7 @@
#include "Core/HLE/sceKernelModule.h"
#include "Core/HLE/sceFont.h"
#include "Core/FileSystems/MetaFileSystem.h"
#include "Core/HDRemaster.h"
#include "Core/HLE/HLE.h"
enum {
@@ -424,7 +425,11 @@ void HLECheckModuleAvailability() {
// libfont.prx/sceFont is shipped on game discs but reads its fonts from flash0:/font and has
// nothing to fall back on, so the fonts are required.
if (AlwaysDisableHLEFlags() & DisableHLEFlags::sceFont) {
if (g_RemasterHLEFonts) {
// Overrides the setting and the compat flag too.
g_unavailableDisableFlags |= DisableHLEFlags::sceFont;
INFO_LOG(Log::HLE, "This HD remaster needs the HLE sceFont and our fonts.");
} else if (AlwaysDisableHLEFlags() & DisableHLEFlags::sceFont) {
if (!NandFontsComplete()) {
g_unavailableDisableFlags |= DisableHLEFlags::sceFont;
INFO_LOG(Log::HLE, "flash0:/font doesn't have this firmware's fonts - using the HLE sceFont rather than the disc's.");
+6 -1
View File
@@ -24,6 +24,7 @@
#include "Core/System.h"
#include "Core/ELF/ParamSFO.h"
#include "Core/Font/PGF.h"
#include "Core/HDRemaster.h"
#include "Core/Util/PathUtil.h"
#include "Core/Util/PSARUnpack.h"
#include "Common/Data/Text/I18n.h"
@@ -1001,8 +1002,12 @@ static void __LoadInternalFonts() {
const std::string gameFontPath = "disc0:/PSP_GAME/USRDIR/";
const bool checkClassicOverrides = pspFileSystem.GetFileInfo(fontOverridePath).exists;
// See g_HDRemasters. Our own fonts, from assets, then.
const bool useNand = !checkClassicOverrides && !g_RemasterHLEFonts;
if (checkClassicOverrides) {
WARN_LOG(Log::sceFont, "Classic font overrides active, ignoring NAND: %s", fontOverridePath.c_str());
} else if (g_RemasterHLEFonts) {
INFO_LOG(Log::sceFont, "Not using the NAND's fonts for this HD remaster");
} else if (!NandFontsComplete()) {
InstallFontsFromDiscUpdater();
}
@@ -1035,7 +1040,7 @@ static void __LoadInternalFonts() {
// No game font, let's try classic override path. NOTE: This is not recommended - use flash0.
fontFilename = fontOverridePath + entry.fileName;
bufferRead = pspFileSystem.ReadEntireFile(fontFilename, buffer, true) >= 0;
} else if (!bufferRead) {
} else if (useNand && !bufferRead) {
// The real fonts, from a firmware the user installed or that we took off a disc.
fontFilename = std::string(g_nandFontPath) + entry.fileName;
bufferRead = pspFileSystem.ReadEntireFile(fontFilename, buffer, true) >= 0;
+1
View File
@@ -197,6 +197,7 @@ void InitMemorySizeForGame() {
g_RemasterMode = true;
Memory::g_MemorySize = entry.memorySize;
g_DoubleTextureCoordinates = entry.doubleTextureCoordinates;
g_RemasterHLEFonts = entry.hleFonts;
break;
}
if (g_RemasterMode) {
+1
View File
@@ -387,6 +387,7 @@ static bool CPU_Init(FileLoader *fileLoader, IdentifiedFileType type, std::strin
g_RemasterMode = false;
g_DoubleTextureCoordinates = false;
g_RemasterHLEFonts = false;
Memory::g_PSPModel = g_Config.iPSPModel;
g_CoreParameter.fileType = type;