Each hint quotes the old label as that language showed it. Khmer and Lao
get the English text for now.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Offset 0 only helps with a real PSP running the old Pro Online plugin. Also
say that all players must use the same offset.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Many games drop to 30fps when they miss a vblank, and on the PSP some of them
nearly always do. In PPSSPP the GE is fast enough that they spend much of their
time at 60 instead, and some things misbehave (Midnight Club).
With the limit on, the GE takes until just after the vblank two on from the one
the previous frame was done in, so the frame goes up every other vblank whether
the game flips as soon as it's done, waits for a vblank first, or latches the
flip. A new frame starts at the first list after a flip, or at a list that
starts after a vblank, for games that enqueue their lists from the vblank
interrupt and never flip (Midnight Club: LA Remix).
Auto applies it to games with the LimitFrameRateTo30 compat flag, the two
Midnight Club games for now.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Many of the "mistranslation" fixes replaced a translator's looser but
sensible wording with a more literal one, like zh_CN "Unofficial"
(the heading over unpromoted achievements), which was "custom
achievements". In the files where human translations are the
majority, those go back. Fixes of real errors stay: opposite or wrong
meanings, a different setting or button named, typos, garbled text
and text in another language. So do the resets of gibberish to
English.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The "one word for each term" pass replaced translators' own wording
with a uniform term, which made the text less natural. In the files
where human translations outnumber AI ones, the values go back to what
they were, except where the old wording was actually wrong: mostly a
save state called a game save (most of them in zh_TW), plus a few that
named the wrong thing.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Most values started with a left-to-right mark, which forced a left-to-
right layout, and many had their Latin words and punctuation moved by
hand to look right that way. Now that RTL text is laid out right to
left everywhere, those strings came out scrambled.
The hand-ordered ones are converted to logical order, checked to look
exactly as before. Lines that were already in logical order with a
stray mark in front just lose the mark, which also fixes how they
looked until now.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Recurring terms (save state, savedata, cheats, relay, rendering,
upscaling, Memory Stick, default, analog stick and so on) were
translated several ways within one file. Each file now uses the form it
already used most, or the standard term where a minority form was the
correct one. Save states and the game's own savedata are kept apart,
most visibly in zh_TW, which used one word for both. zh_TW also gets
Taiwan terms where it had mainland ones, and the same English string in
two sections now reads the same.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The previous two commits reset some values to English that were usable:
ku_SO's sensible Kurmanji strings (wrong dialect and script for the
file, but readable), Indonesian text in jv_ID, and values where only a
word or a stale suffix was off. Those are back, with the broken part
fixed where there was one. Values that were gibberish or said something
else stay in English.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Values that said something other than the English: opposite meanings
(Move Up/Down swapped, Disabled as "Enable", a lossless codec as lossy,
"(slower)" as "low latency"), the wrong sense of a word ("Recent" as
current, backend as background, Resume as summarize, Cancel as Ignore),
messages naming the wrong setting or fallback backend, swapped and
duplicated strings, and text in the wrong language (Brazilian forms in
pt_PT, Latvian in lt-LT, Hungarian in hr_HR, Tajik in tg_PH). Also a
batch of spelling mistakes.
Gibberish values that couldn't be translated with confidence, most of
them in ku_SO, lo_LA, km_KH and jv_ID, are back to the English string.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- InsufficientOpenGLDriver: now a Yes/No question about switching to
DirectX, but many languages still had the old "update your drivers"
text, which asks nothing.
- BufferedRenderingRequired still pointed at the removed rendering mode
setting, and "Skip buffer effects" kept the old "(non-buffered,
faster)" suffix.
- "Save frame dump" was still "Dump next frame to log", and Software
rendering was still "(experimental)".
- "Completed %1" (softcore) had the same text as "Mastered %1"
(hardcore) in many languages.
- The generic restart prompt named one particular setting in three
languages.
Languages I can't translate confidently go back to the English string.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The PSP dialog buttons and messages, the credits and the confirm button
setting were still stored reversed, or with their words reordered, for
text drawing without bidi support. All text drawers handle bidi now, so
they showed backwards. The two-line "Please wait" messages also get back
their line break.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Outside [DesktopUI] an & is shown as is, so accelerators copied into
labels like "Pause when not focused" appeared on screen. Also fixes
mangled \n escapes, menu accelerators placed on a space or doubled,
lines without an = (never loaded) and a doubled "Warning:" prefix.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
At boot it checks for savedata space with SIZES and said there was none:
the default 16GB stick, with no save yet, comes to 2^34 bytes, which is
0 in 32 bits. Saving worked fine when told to go ahead anyway.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Translated strings that were printf formats now use %1, %2, %3 and go
through ApplySafeSubstitutions, which fills them in without interpreting
anything else. Lang files can come from downloads, and a value like
"%s%s%s%n" would otherwise crash or write memory. The lang file keys and
values are converted to match, and "%0.2f Hz" is merged into "%1 Hz".
Slider format strings still go through snprintf, so their check now
requires exactly one conversion of the expected type, which keeps out
%n and friends.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
With clip and cull distances, the GPU drops ground textures on modded maps (#18561): 25551 pixels off the PSP
render on a Pixel 3a, against 1987 with the flag.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Since a37e1f3660, the CPU waits for the depth rasterizer every time a display list ends, because Syphon
Filter reads its depth buffer for the light flares right after. It reads it in the list's GE interrupt
callback though, and so do Wipeout Pure and Resistance: Retribution. On hardware the drawing is done
when that runs, so that's where to wait now, letting the worker overlap with the CPU until then.
sceGeDrawSync and sceGeListSync wait as before.
With interpreter loads from the depth buffer counted and the worker slowed down by 10-50 ms a batch,
no read in Syphon Filter: Logan's Shadow, Wipeout, Resistance or Midnight Club: L.A. Remix landed while
it was busy. Without any wait, nearly all of Syphon Filter's, Wipeout's and Resistance's did.
L.A. Rush reads its depth buffer only after sceGeDrawSync, and the new compat flag
DepthRasterNoCallbackWait skips the callback wait for it.
10 emulated seconds on a Moto G54 (two Cortex-A78, six A55):
Wipeout Pure 7.24 s -> 6.50 s
Resistance 17.98 s -> 13.26 s
Midnight Club 8.75 s -> 8.01 s
L.A. Rush 5.95 s -> 4.76 s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A firmware only has the files of the model it was installed for, and its XMB looks for the files of
the model we report, so a mismatch brings back #22909's blank theme colors and 6.61's red error
screen. Which models an install is for shows in the names of its ipl/ files (nandipl_01g.bin,
nandipl_psp2000.ipl); an install for every model has all of them, and firmwares older than the
PSP-2000 have one ipl for every model.
Changing the PSP model to one the installed firmware doesn't fit now asks first, with a way to
cancel, and booting the XMB with a mismatch shows a warning.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
An upgrade gets its own notice, informational rather than a warning, since the new shell migrates
the registry and nothing is lost. ReplaceFirmware stays for when a version can't be told.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Installing a firmware set category_version to the new firmware's schema, so no shell ever migrated
the settings PPSSPP keeps in its config. A shell upgrades the registry itself at its first boot: it
writes the default of every key added since the stored version and stores its own (seen booting
2.82, 3.71, 4.05, 5.50 and 6.61 from 1, and 3.71 and 6.61 from the previous firmware's version).
So an upgrade now leaves the version alone. A PSP can't be downgraded, and an older shell takes a
newer version for a corrupt registry, so a downgrade sets it back to 1; that shell's first boot then
rewrites everything added since 1.50, the theme, colour and wallpaper settings among them. Values a
newer shell left there across a downgrade and back broke the theme settings and then 6.61's boot.
The install screen says a downgrade resets the XMB's settings. Headless no longer sets the version
per boot either, so each boot migrates like a fresh config does.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>