EN-US - Added "High Frame Rate Physics Fix" (auto_safe_fps, on by default): any QTE prompt kind caps the engine at 60, held 5 s after the last one, never saved - Kept chests and other hold-a-button prompts at the player's rate - Added the Cronos blade pull cap: R1 near the one pull that throws Kratos out of the map caps the engine at 60 for 4 s - Added src/player_hook.h, which finds Kratos for that cap - Added the "High FPS Wall Seam Fix" patch, on by default, so Kratos holds the Realm of Hades wall - Fixed imported settings: shader notes stay off and new default patches are ticked once - Marked frame generation as experimental in the launcher (#1149) - Changed the trophy notification defaults and added a built-in unlock sound - Added tools/find_rate_readers.py and the high FPS docs --- PT-BR - Adicionado "Correção de física em FPS alto" (auto_safe_fps, ligado por padrão): qualquer tipo de prompt de QTE trava o motor em 60, mantido 5 s depois do último, nunca salvo - Mantidos os baús e outros prompts de segurar botão na taxa do jogador - Adicionada a trava da puxada no Cronos: R1 perto da única puxada que joga o Kratos para fora do mapa trava o motor em 60 por 4 s - Adicionado src/player_hook.h, que acha o Kratos para essa trava - Adicionado o patch "High FPS Wall Seam Fix", ligado por padrão, para o Kratos segurar a parede do Reino de Hades - Corrigidas as configurações importadas: as notas de shader ficam desligadas e os novos patches padrão são marcados uma vez - Marcada a geração de quadros como experimental no launcher (#1149) - Alterados os padrões das notificações de troféu e adicionado um som de desbloqueio embutido - Adicionados tools/find_rate_readers.py e a documentação de FPS alto
15 KiB
Trophies
The game calls the PlayStation trophy library (sceNpTrophy*). This port answers those calls, keeps
the unlocked trophies on disk and shows them to the player: a notification when a trophy is
unlocked, a trophy window inside the game and a Trophies page in the launcher.
Everything is read from the player's own game folder (sce_sys/trophy/trophy00.trp); no game data
is part of the port.
Contents: What the player sees · Order and rarity · Notifications · Language · Saved state · Trophy ids · What is in this repository · How it works · Limits
What the player sees
| Where | What |
|---|---|
| In the game, when a trophy unlocks | A notification in the theme chosen in the trophy window (below). The default, Card, cinematic platinum, is a dark card at the top-right with the trophy's art, its grade and name; it stays 7 seconds, the platinum longer and with light around it, and the built-in sound plays. |
| In the game, F8 or R3+R2 | The trophy window, in two pages. Trophies: every trophy with its icon, a cup in its grade's colour, its name, what to do to unlock it, its state and how many players earned it; an unlocked trophy is framed in its grade's colour (bronze, silver, gold, and a platinum that shines). Above the list: the count, a filter by state (all / unlocked / locked), one by grade (every grade / platinum / gold / silver / bronze, with how many of each are unlocked; the two combine) and the order. Notifications: the language, and the look and sound of the notification, with previews. |
| Launcher, Trophies page | The same list, with the category (platinum, gold, silver, bronze) and a filter. |
Keys of the Trophies page: Up/Down, W/S, PageUp/PageDown, Home/End, mouse wheel or D-pad scroll; Left/Right, A/D or D-pad Left/Right change the state filter; Square or G the grade filter; Triangle or Tab changes the order; L1/R1 or Q/E go to the Notifications page; F8, Esc, Backspace, Enter, Circle/Cross or R3+R2 close it. The Notifications page is used like the Insert menu (D-pad or arrows, Cross or Enter, the mouse); L1/R1 or Q/E go back to the list; F8, Esc or R3+R2 close it. While the window is open the game gets no input (like the Insert menu), and the game stops until it closes, as it does with the Insert menu: Game tab > Pause the game (on by default) turns that off. R3 held with R2 or L2 never reaches the game, so opening the window or the menu does not use the item or the magic.
The platinum (id 0) is unlocked with the last other trophy, as the PlayStation does.
Order and rarity
Each trophy shows the share of players who earned it and its tier, as a PlayStation shows them: Common (over 50%), Rare (over 15%), Very rare (over 5%) and Ultra rare. The order is the game's list, Most earned first or Rarest first.
The port has no PSN connection, so the numbers are fixed: the share of the players tracked by
Exophase who earned each
trophy, as listed in October 2026 (gpu/shim/spartanport_trophy_rarity.h). They are only shown for
this game's list of 35 trophies; another package keeps the list's order and shows no percentage.
Notifications
The Notifications page of the trophy window (F8 or R3+R2, then L1/R1) chooses how an unlock is
shown and heard. Without changes it uses Card, cinematic platinum, 7 seconds on screen, the
platinum light at 100%, the grade written and the built-in sound at 80%. A notifications.ini
saved before keeps its choices.
| Option | What it does |
|---|---|
| Theme | Original (the port's card, above), Card (a dark card at the top-right with the trophy's art, the grade's cup and an animated badge; the platinum gets a short drawn animation), Card, cinematic platinum (the platinum stays longer, with light around it) or Corner popup (a rectangle that rises in the bottom-right corner with the art framed in the grade's colour, the name and what the trophy asks). |
| Mute the sound, Volume | The notification's sound only; the game's own sound is not touched. |
| Time on screen | 0 to 20 seconds; "Theme default" keeps the theme's own time. |
| Platinum light | Card, cinematic platinum only: how bright its light is. |
| Animate the platinum | Off: the platinum shows its own picture, like the other trophies. |
| Write the grade | Writes the grade's name (Bronze, Silver...) before the second line. |
| Preview | Bronze, Silver, Gold, Platinum, all four in a row or three at once, through the same queue, drawing and sound as a real unlock. Nothing is unlocked or saved. |
The grade of each trophy is told by the colour of its icon, as the launcher does (the grades in the package are encrypted); for this game's 35 trophies it matches the package's own list. The page is in the menu's language (below).
Your own files
Put them in user/custom_trophy (inside your saves folder, so updates keep them). None is part of
the port: without them the drawn art, the built-in fonts and the built-in sound (a few bell notes
rising, generated by the port, two more for the platinum) are used.
| File | Effect |
|---|---|
bronze, silver, gold, platinum .wav .mp3 .ogg .flac .m4a .opus |
The sound of that grade (at most 20 seconds). trophy.* is used for every grade without its own. The audio device is never opened with SPARTAN_AUDIO=none. Reload sounds reads them again while playing. |
<grade>_anim.gif, .apng, .png, .webp, .jpg |
Replaces the art of that grade's notification (Card and Corner popup). A GIF or an animated PNG plays once with its own timing; a still picture is shown as it is. trophy_anim.* covers every grade without its own. |
<grade>_anim.png + <grade>_anim.ini |
A sheet of frames: frames=, columns=, fps=, loop=1 to repeat, delay_ms= to start later. |
badge.png |
The disc on the right of the Card. |
font.ttf, font-light.ttf |
The Card's fonts (the name, the second line). |
notifications.ini |
The options above, written by the page. It also holds the texts, in any language: text_unlocked= (the Card's second line), text_banner= (the first line of the Original card), name_bronze=, name_silver=, name_gold=, name_platinum=. |
Pictures and animations are read when the game starts. Larger than 8192 pixels on a side, longer than 20 seconds or 600 frames, or more than 64 MB of decoded frames are refused or cut. Files are opened as local files only: a "sound" that is really a playlist or a link is not followed. A broken or missing file is skipped and written to the log; the game never stops for it.
Language
The launcher writes user/trophy_texts.txt every time it starts the game, in the launcher's
language, and the same in every language in user/trophy_texts/<language>.txt. The game reads the
first at start. Language, at the top of the Insert menu's Game tab and of the trophy
window's Notifications page, switches the menu, the trophy window and the trophy names at once,
reading the second; the choice is kept in spartanport.ini (ui_language), and Same as the
launcher follows the launcher again.
The menu and the trophy window are drawn in English, Portuguese, Spanish, French, German, Italian, Polish, Turkish, Indonesian, Russian and Chinese (Chinese with an installed CJK font, see the README). Arabic, Japanese and Korean keep them in English, because the overlay's font does not draw those scripts; the trophy names still come in those languages in the launcher.
Languages: English, Russian, Arabic, Spanish, Portuguese, French, German, Italian, Polish, Turkish,
Chinese, Japanese and Korean (launcher-rust/assets/i18n.json, made from
launcher/spartanport_trophies.py by tools/launcher_i18n.py). The names and descriptions are
the game's own, as the PS4 trophy list shows them in each language, so a trophy can be looked up by
the name the game gives it: English, Portuguese (Brazil), Spanish (the Latin American list), French,
German, Italian, Polish, Turkish, Russian, Japanese and Korean. Arabic and Simplified Chinese are
translations: the game has no list in those languages. A language without a list uses English.
Without the launcher, put the same file by hand in the saves folder (user/ or SPARTAN_USER_DIR):
trophy_texts.txt, or trophy_names.txt (same format, used when there is no trophy_texts.txt).
File format
# comment
@heading=Trophies
@notice=TROPHY UNLOCKED
@unlocked=UNLOCKED
@locked=LOCKED
@all=All trophies
@only_unlocked=Unlocked
@only_locked=Locked
@counter={} of {} unlocked
@hint=Up/Down: scroll Left/Right: filter F8 / R3+R2 / Esc: close
@notifications=Notifications
@order_list=List order
@order_common=Most earned first
@order_rare=Rarest first
@rarity={}% of players
@common=Common
@rare=Rare
@very_rare=Very rare
@ultra_rare=Ultra rare
@hint_order=Triangle/Tab: order L1/R1: notifications
@hint_notifications=L1/R1: trophies F8 / R3+R2 / Esc: close
0=King of the Hill | Unlock all trophies
1=Releasing the Floodgates | Kill Poseidon
ID=Name | Description (the description is optional), UTF-8, one trophy per line. A name takes up to
63 bytes and a description up to 159. A trophy without a line is shown as Trophy ID N. Missing
@ lines use the English labels.
Saved state
user/trophies.dat: 16 bytes, four little-endian 32-bit words. Trophy id is bit id % 32 of
word id / 32. Delete the file to reset the trophies. It is separate from the game's own saves.
Trophy ids
The ids are the numbers in the icon names of the package (TROP000.PNG ... TROP034.PNG): 35
trophies, id 0 the platinum, 1-18 bronze, 19-29 silver, 30-34 gold (by the colour of the icons).
The texts are listed in the order of the PlayStation list, which matches this order.
What is in this repository, and what is not
Players often ask what can be shared. The trophy features are built so that nothing in this repository belongs to Sony or to the game's makers:
- No game files. The icons, the trophy package and the game are read from the player's own copy at run time; none of them is copied into the port.
- No PlayStation logos, sounds or pictures. The notification's art (cups, badge, the platinum's animation) is drawn with shapes in code. The look of the Card is the port's own; it only follows the usual layout of a notification (art on the left, two lines of text, a badge).
- The texts are the names and descriptions of the game's public trophy list, the short lines every trophy site shows and that the port already carried in English and Portuguese. They are what lets a player find a trophy by its name; nothing else of the game's text is included.
- The rarity numbers are statistics (a share of players), with their source named above. A number about how many people did something is a fact, not a work.
- Your own files in
user/custom_trophy(a sound you like, a picture, a logo) stay on your computer. They are not part of the port, and you should not upload them to this repository or share them if they belong to someone else.
This is not legal advice; it is how the port keeps its own repository clean.
How it works
src/runtime_services.c: thesceNpTrophy*functions. OnRegisterContextit readstrophy00.trp(header big endian: magicDC A2 4D 00, file count at0x10, entry size at0x14, entries from0x60: name, offset, size) and the texts file.UnlockTrophysets the bit, saves the state and shows the notification; the platinum is granted when every other trophy is set.GetTrophyUnlockStatereturns the saved bits and the trophy count.gpu/spartanportgpu.h:spartanportgpu_toast_trophy(the notification, with the trophy's id) andspartanportgpu_trophy_setup(the window: texts, icons and a pointer to the live state), handed over once by the runtime.gpu/shim/spartanport_overlay.cpp: draws the Original notification and the trophy window with Dear ImGui, decodes the icons withSpartanPng(on a worker thread), tells each trophy's grade by its icon and handles the keys and buttons of the window.gpu/shim/spartanport_trophy_toast.{h,cpp}: the other themes: the queue, the drawing, and a worker thread for the sounds (an SDL audio stream of its own beside the game's).gpu/shim/spartanport_trophy_toast_model.{h,cpp}:notifications.ini, the animation settings, the timeline and the grade by colour. No window, GPU or audio, so it is unit-tested.gpu/shim/spartanport_trophy_media.{h,cpp}: the player's sounds and pictures decoded with FFmpeg, with the limits above.gpu/shim/spartanport_trophy_rarity.h: the share of players for each trophy.gpu/shim/spartanport_trophy_texts.{h,cpp}: readsuser/trophy_texts/<language>.txtfor the language chosen in the game.gpu/shim/spartanport_ui_language.h,gpu/shim/ui_language/: the menu's and the trophy window's texts in every language, keyed by the English text.gpu/tools/overlay_preview.cpp(overlay-preview): draws the menu, the trophy window and the notifications offscreen with made-up trophies, and the game's save list with made-up saves, without the game, to work on their look.launcher-rust/assets/i18n.json: the texts and labels in every language, made fromlauncher/spartanport_trophies.pyandlauncher/spartanport_lang.pybytools/launcher_i18n.py.launcher-rust/src/core/trophies.rs: the reader of the.trpand oftrophies.dat, and the share of players (the same table as the game's).launcher-rust/src/core/env.rs:write_trophy_texts, the files the game reads.launcher-rust/src/ui/pages/trophies.rs: the launcher's Trophies page, with the same order and rarity as the game's window.tests/test_trophies.py,tests/test_trophy_toast.cpp,tests/test_ui_language.cpp,tests/test_services.c: unit tests. They build their own files and need no game files;trophy-toast-test SCRATCH_DIR trophy00.trpalso checks the grades of the game's own icons.
Limits
- Only trophies unlocked through this port are known. Trophies earned on a PlayStation are not imported, and with an already advanced save the game usually does not unlock again what it did before.
- The names and descriptions of the package are encrypted (
TROP*.ESFM) and are not read: the texts above are built into the launcher. - Trophy synchronisation with PSN is not implemented, and there is no online profile. The rarity is a fixed snapshot and does not change while you play.
- R3+R2 can be pressed by accident in combat; the Insert menu uses R3+L2 for the same reason.