diff --git a/src/core/libraries/font/font.cpp b/src/core/libraries/font/font.cpp index a79df9061..bbc2366e3 100644 --- a/src/core/libraries/font/font.cpp +++ b/src/core/libraries/font/font.cpp @@ -40,19 +40,39 @@ s32 PS4_SYSV_ABI sceFontCharacterGetTextFontCode() { return ORBIS_OK; } -s32 PS4_SYSV_ABI sceFontCharacterGetTextOrder() { - LOG_ERROR(Lib_Font, "(STUBBED) called"); +s32 PS4_SYSV_ABI sceFontCharacterGetTextOrder(OrbisFontTextCharacter* textCharacter, + void** pTextOrder) { + if (!pTextOrder) { + LOG_DEBUG(Lib_Font, "Invalid parameter"); + return ORBIS_FONT_ERROR_INVALID_PARAMETER; + } + + if (!textCharacter) { + LOG_DEBUG(Lib_Font, "Invalid parameter"); + *pTextOrder = NULL; + return ORBIS_FONT_ERROR_INVALID_PARAMETER; + } + + // Retrieve text order + *pTextOrder = textCharacter->textOrder; return ORBIS_OK; } -s32 PS4_SYSV_ABI sceFontCharacterLooksFormatCharacters() { - LOG_ERROR(Lib_Font, "(STUBBED) called"); - return ORBIS_OK; +u32 PS4_SYSV_ABI sceFontCharacterLooksFormatCharacters(OrbisFontTextCharacter* textCharacter) { + if (!textCharacter) { + return 0; + } + + // Check if the format flag (bit 2) is set + return (textCharacter->formatFlags & 0x04) ? textCharacter->characterCode : 0; } -s32 PS4_SYSV_ABI sceFontCharacterLooksWhiteSpace() { - LOG_ERROR(Lib_Font, "(STUBBED) called"); - return ORBIS_OK; +u32 PS4_SYSV_ABI sceFontCharacterLooksWhiteSpace(OrbisFontTextCharacter* textCharacter) { + if (!textCharacter) { + return 0; + } + + return (textCharacter->charType == 0x0E) ? textCharacter->characterCode : 0; } s32 PS4_SYSV_ABI sceFontCharacterRefersTextBack() { diff --git a/src/core/libraries/font/font.h b/src/core/libraries/font/font.h index 3debcf1e8..d770251e4 100644 --- a/src/core/libraries/font/font.h +++ b/src/core/libraries/font/font.h @@ -13,7 +13,11 @@ namespace Libraries::Font { struct OrbisFontTextCharacter { // Other fields... - u8 bidiLevel; // Assuming the field at offset 0x3B stores the Bidi level + void* textOrder; // Field at offset 0x10 (pointer to text order info) + u32 characterCode; // Field assumed at offset 0x28 + u8 charType; // Field assumed at offset 0x39 + u8 bidiLevel; // Field assumed at offset 0x3B stores the Bidi level + u8 formatFlags; // Field at offset 0x3D (stores format-related flags) }; s32 PS4_SYSV_ABI sceFontAttachDeviceCacheBuffer(); @@ -22,9 +26,10 @@ s32 PS4_SYSV_ABI sceFontCharacterGetBidiLevel(OrbisFontTextCharacter* textCharac int* bidiLevel); s32 PS4_SYSV_ABI sceFontCharacterGetSyllableStringState(); s32 PS4_SYSV_ABI sceFontCharacterGetTextFontCode(); -s32 PS4_SYSV_ABI sceFontCharacterGetTextOrder(); -s32 PS4_SYSV_ABI sceFontCharacterLooksFormatCharacters(); -s32 PS4_SYSV_ABI sceFontCharacterLooksWhiteSpace(); +s32 PS4_SYSV_ABI sceFontCharacterGetTextOrder(OrbisFontTextCharacter* textCharacter, + void** pTextOrder); +u32 PS4_SYSV_ABI sceFontCharacterLooksFormatCharacters(OrbisFontTextCharacter* textCharacter); +u32 PS4_SYSV_ABI sceFontCharacterLooksWhiteSpace(OrbisFontTextCharacter* textCharacter); s32 PS4_SYSV_ABI sceFontCharacterRefersTextBack(); s32 PS4_SYSV_ABI sceFontCharacterRefersTextNext(); s32 PS4_SYSV_ABI sceFontCharactersRefersTextCodes();