Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
3ed2f52
Start new render targets as zeros, not undefined
arnaldolima1 Oct 13, 2026
2886672
Present a repeated flip once a vblank; let a profile cap flips at one…
arnaldolima1 Oct 13, 2026
21bbec9
Add a launcher, interface translations and a switch for multiplayer
arnaldolima1 Oct 13, 2026
0010295
Android: launcher art in the APK, spaced face buttons, tappable hints
arnaldolima1 Oct 13, 2026
15cf441
Renderer: cheaper framebuffer textures, depthless passes on tiled GPUs
arnaldolima1 Oct 13, 2026
a26f40b
Skip frames to keep a slow device at full speed
arnaldolima1 Oct 13, 2026
173f9a9
Begin each render pass over the part of its target the game draws in
arnaldolima1 Oct 13, 2026
784d283
Trace how a game feeds the GE: <prefix>_TRACE_GE_CALLS
arnaldolima1 Oct 13, 2026
6b30f85
Take texture packs made for another release; import them on Android
arnaldolima1 Oct 14, 2026
04d6691
Renderer: stencil test, framebuffers inside another's, clamped target…
arnaldolima1 Oct 14, 2026
8079a1f
Skip a movie with START, for a game whose profile asks
arnaldolima1 Oct 14, 2026
382cb50
Add Limit to 30 fps, for a game that makes 60
arnaldolima1 Oct 14, 2026
9a3d053
GE: draw prims in a row with the same state as one draw
arnaldolima1 Oct 14, 2026
7c0f3a2
psp_recomp: --sparse-entries, dispatcher entries only where needed
arnaldolima1 Oct 14, 2026
80597d2
psp_recomp: memory view in a local, --return-hints
arnaldolima1 Oct 14, 2026
4634998
Generated units: no /Ob0 under clang-cl
arnaldolima1 Oct 14, 2026
9c08258
Savedata: show the save list for LISTLOAD, LISTSAVE and LISTDELETE
arnaldolima1 Oct 14, 2026
46fbcf0
Save list: wait for the pad, slot numbers, and how the choice went
arnaldolima1 Oct 14, 2026
76f8443
GE: texture coordinate generation (TMAP projection and shade mapping)
arnaldolima1 Oct 15, 2026
cb96bd2
GE: through-mode vertices without a colour take the material colour
arnaldolima1 Oct 15, 2026
249c7db
Window fits the screen; music in the launcher
arnaldolima1 Oct 15, 2026
f3b7e37
Movie mods: remastered movies in place of the game's, and a Mods page
arnaldolima1 Oct 15, 2026
61fd11e
Mods page: texture packs and movie skipping; folders open on Windows
arnaldolima1 Oct 15, 2026
ab88b5c
Folder choices open the system dialog; a clearer texture pack review
arnaldolima1 Oct 15, 2026
404c463
File mods: read mods/files/PATH in place of the disc's file PATH
arnaldolima1 Oct 15, 2026
9e06794
Renderer shutdown: destroy the descriptor pool after the sets in it
arnaldolima1 Oct 15, 2026
0fafbdb
Antialiasing: FXAA over the finished picture (video.antialiasing)
arnaldolima1 Oct 15, 2026
e2b6536
File mods of a new size by sector; <prefix>_SYSTEM_LANGUAGE
arnaldolima1 Oct 15, 2026
73a6d93
GE: read display lists through a host window; write triangle indices …
arnaldolima-rt Oct 15, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 13 additions & 1 deletion cmake/PortableKit.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ set(PORTABLEKIT_HOST_SOURCES
host/corpus_library.cpp
host/audio/atrac_decoder.cpp
host/movie/avc_decoder.cpp
host/movie/replacement_movie.cpp
host/movie/psmf_demuxer.cpp
host/movie/psmf_header.cpp
host/audio/audio_sink.cpp
Expand All @@ -51,6 +52,7 @@ set(PORTABLEKIT_HOST_SOURCES
host/kernel/rtc_time.cpp
host/kernel/load_trace.cpp
host/kernel/fast_loading.cpp
host/kernel/file_mods.cpp
host/kernel/stall_watchdog.cpp
host/kernel/load_detector.cpp
host/kernel/iso_image.cpp
Expand Down Expand Up @@ -101,9 +103,12 @@ set(PORTABLEKIT_RENDERER_SOURCES
host/ui/font_menu.cpp
host/input/motion.cpp
host/input/steam_deck_imu.cpp
host/ui/i18n.cpp
host/ui/input_script.cpp
host/ui/launcher.cpp
host/ui/layer.cpp
host/ui/menu.cpp
host/ui/save_chooser.cpp
host/ui/save_screen.cpp
host/ui/setup_screens.cpp
host/ui/text_input.cpp
Expand Down Expand Up @@ -276,6 +281,10 @@ function(portablekit_add_game target)
if(MSVC)
if(PSPRECOMP_GENERATED_OPT_LEVEL STREQUAL "0")
set(generated_options "/Od;/bigobj")
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
# clang-cl: /Ob0 would turn off inlining; its optimizer copes
# with these units, as clang does on the other platforms.
set(generated_options "/O${PSPRECOMP_GENERATED_OPT_LEVEL};/bigobj")
else()
set(generated_options "/O${PSPRECOMP_GENERATED_OPT_LEVEL};/Ob0;/bigobj")
endif()
Expand Down Expand Up @@ -315,7 +324,8 @@ function(portablekit_add_game target)
"kGeCheckVertexShader=GE_RAW_VERTICES,GE_CHECK_DECODE@${PORTABLEKIT_ROOT}/host/gpu/shaders/ge.vert"
"kGeFragmentShader=${PORTABLEKIT_ROOT}/host/gpu/shaders/ge.frag"
"kLevelVertexShader=${PORTABLEKIT_ROOT}/host/gpu/shaders/level.vert"
"kLevelFragmentShader=${PORTABLEKIT_ROOT}/host/gpu/shaders/level.frag")
"kLevelFragmentShader=${PORTABLEKIT_ROOT}/host/gpu/shaders/level.frag"
"kFxaaFragmentShader=${PORTABLEKIT_ROOT}/host/gpu/shaders/fxaa.frag")
if(ANDROID)
# Pre-rotation of the finished frame for a display turned sideways.
list(APPEND shaders
Expand Down Expand Up @@ -634,6 +644,8 @@ function(_portablekit_add_overlay host_target meta_path output_dir)
target_compile_definitions(${target} PRIVATE PSPRECOMP_IMPORT_HOST_SYMBOLS=1)
if(PSPRECOMP_GENERATED_OPT_LEVEL STREQUAL "0")
target_compile_options(${target} PRIVATE /Od /bigobj)
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
target_compile_options(${target} PRIVATE /O${PSPRECOMP_GENERATED_OPT_LEVEL} /bigobj)
else()
target_compile_options(${target} PRIVATE /O${PSPRECOMP_GENERATED_OPT_LEVEL} /Ob0 /bigobj)
endif()
Expand Down
6 changes: 6 additions & 0 deletions docs/PROFILE_GUIDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,12 @@ Two more are for a port that goes further than the PSP did, and both are null un

`interpolation_thresholds` is for frame interpolation, which blends the game's frames and must not blend across a camera cut. The angles and fractions it uses to tell a cut from motion hold for any game; its distances are in the game's own world units, and the defaults were measured on Monster Hunter Portable 3rd. A game whose world is on a very different scale gives its own; one that does not, gets those defaults.

`adhoc_play` is false for a game with no multiplayer: the menu then has no Network page and no row about multiplayer. It is true by default, so a profile that says nothing keeps them.

`launcher`, a `LauncherTheme`, puts a launcher before the game: a side bar with the game's logo and the menu's pages, a home page with a banner and quick settings, and a Play button. Its colours become the whole interface's, the in-game menu and the setup included. Its art is never the repository's: images the player puts in the data folder's `launcher/` (or an app's `Resources/launcher/`), else `PSP_GAME/PIC1.PNG` and `PSP_GAME/ICON0.PNG` read from their disc image. Null: the game starts at once, as before. The player can turn it off, `--play` skips it once and `--launcher` shows it once. Sparta's `host/sparta_profile.cpp` is the example.

The interface speaks English and Brazilian Portuguese (`host/ui/i18n.hpp`): the widgets look up what they draw in a table, and the player picks the language under System. A profile's own text, such as a launcher's credits, is translated when the table has it and shown as written when it does not.

A driver writes into the game's memory, so check the code it relies on before it writes anything — Yakumo compares every instruction and constant it depends on at start-up, from `patch_loaded_image`, and stays out, saying why, if one differs.

## Generated code stays out of the repository
Expand Down
5 changes: 5 additions & 0 deletions host/app_paths.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,11 @@ std::filesystem::path bundled_font_directory() {
return shipped_directory("Resources", "fonts");
}

std::filesystem::path bundled_launcher_directory() {
if (!bundled_resource_directory().empty()) return bundled_resource_directory() / "launcher";
return shipped_directory("Resources", "launcher");
}

std::vector<std::filesystem::path> bundled_fonts() {
std::vector<std::filesystem::path> fonts;
const std::filesystem::path directory = bundled_font_directory();
Expand Down
4 changes: 4 additions & 0 deletions host/app_paths.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,10 @@ namespace portablekit {
// Contents/Resources/fonts in a macOS app bundle.
[[nodiscard]] std::filesystem::path bundled_font_directory();

// Where the images the launcher shows may ship (LauncherTheme): launcher/ next
// to the executable, or Contents/Resources/launcher in a macOS app bundle.
[[nodiscard]] std::filesystem::path bundled_launcher_directory();

// Font files a release ships in fonts/ next to the executable, as fallbacks
// after the system's own fonts.
[[nodiscard]] std::vector<std::filesystem::path> bundled_fonts();
Expand Down
Loading