Homebrew Homebrew game [WIP] P3P3DS - Persona 3 Portable Statically Recompiled for New 3DS

  • Thread starter Thread starter enderlit
  • Start date Start date
  • Views Views 2,795
  • Replies Replies 17
  • Likes Likes 6

enderlit

Member
Newcomer
Joined
Oct 1, 2026
Messages
11
Reaction score
22
Trophies
0
Age
26
XP
62
Country
Israel
P3P3DS — Persona 3 Portable on New Nintendo 3DS

P3P3DS is an open-source, MIT-licensed project that brings the North American release of Shin Megami Tensei: Persona 3 Portable (ULUS-10512) to the New Nintendo 3DS, New 3DS XL and New 2DS XL.

The Builder translates the game's PSP executable into C++ ahead of time and compiles it to ARM code on your PC. The port provides the PSP system services the game needs and renders on the 3DS GPU using citro3d.

Latest release: P3P3DS Builder v0.3.2
Release notes and checksums · Windows ZIP · Linux x86-64 tarball

Current status: playable, still early
  • I've played through the opening days and the first battle on my New 2DS XL. Later parts of the game are still untested.
  • In earlier New 2DS XL tests, the dorm ran at about 28–30 fps, dialogue was usually at 30 fps, and the first battle ran at about 16–25 fps. These are game frames. The 40–60 fps figure I posted early in the thread came from counting screen refreshes.
  • Saving and loading work through a bottom-screen menu. Use the D-Pad to choose a slot, B to confirm and A to go back. The port uses its own save format, so PSP and PPSSPP saves are currently incompatible.
  • The ATLUS and CRIWARE startup logos are back in 0.3.2. I checked them on console, and the fix was also verified in Azahar.
  • There is no sound on the 3DS yet, and the opening movie is skipped. Some scene transitions still show black frames, and changed dialogue expressions can have a light outline.
  • This build supports the New 3DS family. Old 3DS and Old 2DS models run out of memory at startup.

How to try it
You'll need a New 3DS-family console with the Homebrew Launcher, your own North American ULUS-10512 ISO, and devkitPro with the 3DS development tools on your PC.

  1. Download and extract the Builder for your platform.
  2. On Windows, run P3P3DS-Builder.exe, select your ISO and the devkitPro folder if needed, then click Build. On Linux, run ./P3P3DS-Builder --iso "/path/to/Persona 3 Portable.iso". Use --devkitpro <dir> if devkitPro is installed somewhere else.
  3. Put the generated p3p3ds.3dsx in /3ds/ on the SD card and your ISO in /p3p3ds/. The Windows Builder can copy them for you.
  4. Start P3P3DS from the Homebrew Launcher.

The Builder package contains the tools and runtime. It generates the game-derived code locally from your ISO. Please keep the resulting .3dsx for your own use.

Changelog
  • 0.3.2 — Restored the startup logos, sped up C++ generation on PC, validated save paths, and fixed how failed asynchronous opens and event-flag timeouts report their results. The release workflow now runs host tests before packaging.
  • 0.3.1 — Moved periodic report writes off the game thread to fix stalls on slow SD cards. New render targets are cleared so transitions no longer show leftover video memory.
  • 0.3.0 — Moved graphics preparation and submission to the second CPU core. The first battle ran at 16–25 fps in New 2DS XL testing.
  • 0.2.9 — Cached model vertices and grouped draws more aggressively. Fixed VFPU state for new threads and retries for blocking audio and file calls.
  • 0.2.8 — Reduced redundant GPU state changes and combined consecutive draws.
  • 0.2.7 — Fixed the inverted models and missing scenery in the first battle.
  • 0.2.6 — Moved model transforms, skinning and lighting to the GPU. Added the Linux Builder with help from Dmitri Shimanski.
  • 0.2.5 — Got past the first Shadow battle crash.
  • 0.2.2 — Added saving and loading, corrected menu timing and capped gameplay at real time.

What's next
Sound through NDSP, better battle performance, and fixes for scene fades and portrait edges. Opening movie support and .cia packaging are also on the roadmap. Old 3DS support would require a different approach to memory use.

Bug reports and contributions
If you hit a crash, a graphics glitch or a slowdown, please say which console you're using and where it happened. A photo of the bottom screen and sdmc:/p3p3ds/report.txt are especially helpful. Reports from beyond the first battle are welcome.

Contributions are welcome, especially from people familiar with PSP internals, citro3d, NDSP or PSP movie decoding.

Source code · Issue tracker · All releases

photo_2026-10-11_15-51-30.jpgphoto_2026-10-11_15-51-32.jpgphoto_2026-10-11_15-56-44.jpg
 
Last edited by enderlit,
I feel like this should have maybe been shared once it got past the point of being ports of the ATLUS and CRIWARE logos lol

Either way, best of luck to you. I'm all for seeing more wacky ports. Might also be an idea to add a disclaimer that you are indeed driving development and not just blindly following Claude (assuming this is the case) if you want people to join in on development.
 
  • Like
Reactions: Exnor
I feel like this should have maybe been shared once it got past the point of being ports of the ATLUS and CRIWARE logos lol

Either way, best of luck to you. I'm all for seeing more wacky ports. Might also be an idea to add a disclaimer that you are indeed driving development and not just blindly following Claude (assuming this is the case) if you want people to join in on development.
small UPD: now you can play the game at 40-60 fps

EDIT: this number was wrong (the counter measured screen refreshes); real numbers are in the first post.
 

Attachments

  • _02.10.26_00.00.15.176.png
    _02.10.26_00.00.15.176.png
    107.9 KB · Views: 4
  • _01.10.26_23.58.56.831.png
    _01.10.26_23.58.56.831.png
    100.4 KB · Views: 6
Last edited by enderlit,
I'm not going to complain about this being only on New 3DS since it's clearly pretty early in development right now, but I do hope you'll optimise the game well and consider making it playable on old models too.
 
I'm not going to complain about this being only on New 3DS since it's clearly pretty early in development right now, but I do hope you'll optimise the game well and consider making it playable on old models too.
Yeah, Old 3DS optimization is planned.
 
Update - P3P3DS Builder 0.2.2

  • Saving and loading work. The PSP's save dialog is replaced by a menu on the bottom screen: D-Pad to choose, B to confirm, A to go back.
  • Fixed the crash at the first Shadow (battle transition).
  • Menus now run at their real 30 FPS (an input timing bug made them run at 20).
  • The speed limiter keeps the game from running faster than real time.

A correction: the "30-60 FPS" I posted earlier came from a counter that measured screen refreshes, not game frames. The bottom-screen report now shows both. Real numbers: about 87% of full speed on average on my New 2DS XL; in Azahar the Dark Hour drops to around 7 game FPS. Getting a stable 100% is what I'm working on next, then audio.

Download: https://github.com/endercodezz/P3P3DS/releases (you still need your own ISO and devkitPro).
If it crashes, please post a photo of the bottom screen or the file sdmc:/p3p3ds/report.txt.
Post automatically merged:

P3P3DS Builder 0.2.4 is out

Download: https://github.com/endercodezz/P3P3DS/releases (same as before: run the Builder on your PC with your own ULUS-10512 ISO, then copy p3p3ds.3dsx and the ISO to the SD card).

What changed since 0.2.2

  • Speed: removed a lot of wasted work outside the game code: per-call allocations in debug code, a memory leak (every GPU display list was kept forever), and a full 12 MB GPU-memory cache flush on every frame. The renderer also no longer re-presents a frame that hasn't changed.
  • Crash fix: 0.2.3 could crash at the first Shadow, with an exception screen and then the console shutting down. Fixed in 0.2.4.
  • Bottom-screen report: now shows where the time goes over the last 10 seconds (game code, system calls, graphics, idle). Useful if you want to send a report.
Measured on my New 2DS XL (build before the crash fix):

  • In the field: mostly a steady 30 fps, sometimes down to 20.
  • Average: 88% of real time.
  • First Shadow: drops to about 15 fps. Battles are the next thing to optimize.
  • Saving and loading work.
Not working yet: no sound, no opening movie (it's skipped). Old 3DS / 2DS is still not supported.

Not verified yet: whether battles after the first Shadow work. If you get there, please post your sdmc:/p3p3ds/report.txt and say where it happened. That's the most useful feedback right now.
 
Last edited by enderlit,
P3P3DS Builder 0.2.6 — first battle renders characters, Linux builder

  • The first Shadow battle no longer crashes (since 0.2.5).
  • New: 3D models are now transformed, skinned and lit on the 3DS GPU (vertex shader). In battle, characters now show up with lighting. Still broken: models look distorted, faces are missing, the background is black, and battles run at about 7–11 fps. That's what I'm working on next.
  • Field: about 21–30 fps, saves work, no sound yet.
  • Linux builder (console version) — thanks to Dmitri Shimanski, the project's first outside contributor.
  • Releases are now built automatically on GitHub (Windows zip + Linux tar.gz).
Known issues are listed in the README. Reports from your console (sdmc:/p3p3ds/report.txt plus a photo) are very welcome.
 
P3P3DS 0.2.7 is out.

The "exploded" models and black battle background from 0.2.6 were one bug: for 3D draws the back-face culling kept the wrong side, so models were drawn inside out and the walls and floor facing the camera were culled. Fixed in both renderers (the PC reference renderer had the same problem, which is how I found it: the PC runner now plays through the whole first battle). Confirmed on a New 2DS XL, photos attached.
  • Battle: 5-7.5 fps, 18-25% of real time. GE work on the CPU takes 63-70% of the time (about 1,000 draws per frame); GPU wait 10-20%.
  • Field: 21-30 fps, about 90% speed.
Known issues: battles are slow (next target: 20 fps at full speed), no sound, opening movie skipped, own save format, New 3DS only.

Download: https://github.com/endercodezz/P3P3DS/releases/tag/v0.2.7 (Builder for Windows and Linux; you need your own ULUS-10512 ISO and devkitPro).

Reports (photo + sdmc:/p3p3ds/report.txt) are very welcome.

photo_2026-10-05_21-06-48.jpgphoto_2026-10-05_21-06-49.jpgphoto_2026-10-05_21-06-50.jpg
 
P3P3DS 0.2.8: faster battles

0.2.7 fixed how battles look; 0.2.8 is about speed.

The 3DS renderer was doing a lot of CPU work for every single draw: P3P draws its 3D models as thousands of tiny pieces, and for each piece the port re-sent the whole GPU state and rebuilt the shader inputs. Now state is only sent when it changes, and consecutive pieces with the same state are merged into one GPU draw: in the first battle about 2 million game draws became 55 thousand.

Numbers (tested on the first battle, Evoker scene)
  • 0.2.7: 5.8 fps, 19% of real time
  • 0.2.8: 9.9 fps, 33% of real time
  • The rest of the time now goes to the game's own code and to unpacking model vertices, which are the next targets (goal: 20 fps).
Known issues: battles still slow, no sound, opening movie skipped, own save format, New 3DS only.

Download: https://github.com/endercodezz/P3P3DS/releases/tag/v0.2.8 (Builder for Windows and Linux; you need your own ULUS-10512 ISO and devkitPro).

Reports welcome: a photo of the bottom screen in battle, or sdmc:/p3p3ds/report.txt.
 
  • Like
Reactions: Serph-DDS
P3P3DS 0.2.9: battles faster again

0.2.8 cut the GPU state work per draw; 0.2.9 goes after what was left of the per-draw cost.

What changed
- P3P draws a battle scene as about 2,000 tiny pieces per frame, most of them just 4 vertices. Each piece used to be unpacked and copied on its own. Now pieces whose vertices follow each other in memory are merged into one block (about 34 pieces per block in the first battle), and the converted vertices are kept between frames, so an unchanged model is not unpacked again.
- The speed report itself was expensive: it read the system clock with a slow conversion twice for every PSP system call. It now uses the raw tick counter.
- Two emulation bugs found in a code review are fixed: new PSP threads started with the wrong VFPU (vector unit) state, and a blocking audio or file call could be skipped when the thread was interrupted right after waking up. Neither caused a visible problem in the scenes tested so far, but both could have caused subtle glitches later (wrong math, a lost audio buffer, a stuck file read).

Numbers (first battle, Evoker scene, Azahar emulator)
0.2.7: 5.8 fps, 19% of real time
0.2.8: 9.9 fps, 33%
0.2.9: about 16 fps, 52%
Not measured on real hardware yet. If you have a New 3DS / New 2DS XL, a photo of the bottom screen in the first battle would help a lot.

Where the time goes now: about 45% the game's own code, about 26% the 3DS renderer, the rest system calls, sound mixing and waiting for vblank. The next big step is running the PSP graphics work in parallel with the game, the way the PSP's own GPU does (on the New 3DS's extra CPU core), after checking that a homebrew .3dsx can use that core at all.

Known issues: battles still below 30 fps, no sound, opening movie skipped, own save format, New 3DS only.

Download: https://github.com/endercodezz/P3P3DS/releases/tag/v0.2.9 (Builder for Windows and Linux; you need your own ULUS-10512 ISO and devkitPro).

Reports welcome: a photo of the bottom screen in battle, or sdmc:/p3p3ds/report.txt.
 
P3P3DS 0.3.0: playable on New 3DS (no sound yet)

Tested on my New 2DS XL: title screen, NEW GAME, the first days and the first battle, all on real hardware.

Numbers (real hardware, New 2DS XL)
  • Dorm: 28-30 fps
  • Dialogue scenes: 30 fps most of the time
  • Battle: 16-25 fps (0.2.7: 5-7.5 fps)

What changed
On the PSP, the GPU works in parallel with the CPU: the game hands it a list of drawing commands and keeps running. Until now the port did all of that on one 3DS core, so the game waited while its frame was being drawn. In 0.3.0 the 3DS-side graphics work (preparing the models and talking to the PICA200) runs on the New 3DS's second CPU core, in parallel with the game. A check at start confirms the core is really available to a homebrew .3dsx: on my console it runs at 1.98x of one core.

In battle the game now almost never waits for the renderer (0-4% of the time). The game's own recompiled code is now the largest share, so that is where the next speed-ups have to come from.

Known issues
  • No sound (next on the list) and no opening movie.
  • Right after start, the logos are replaced by gray garbage (leftover video memory); the game then continues normally. New in 0.3.0, being looked at.
  • Some scene transitions show a garbage frame (black in emulators) instead of a fade.
  • A light outline around changed facial expressions in dialogue portraits.
  • New 3DS only. Own save format.

Download: https://github.com/endercodezz/P3P3DS/releases/latest (Builder for Windows and Linux; you need your own ULUS-10512 ISO and devkitPro).

Reports welcome: a photo of the bottom screen, or sdmc:/p3p3ds/report.txt.

photo_2026-10-11_15-51-32.jpg
 
Last edited by enderlit,
though sound like maniac
i really hope that we could get modded version(like the femc cg mod)
anyway, beautiful work
 
P3P3DS Builder v0.3.2 is out

The ATLUS and CRIWARE logos are back. I checked them on my New 2DS XL, and they also show up in Azahar.

The Builder now generates the game's C++ source much faster. In one Windows test, that step went from 40.31 seconds to 9.26 seconds and produced byte-identical files. This speeds up the PC build step. The game on the 3DS uses the same generated code.

I also fixed save-path validation, error reporting when an asynchronous file open fails, and the bits returned when an event-flag wait times out. The Windows and Linux packages passed their release tests.

Download v0.3.2 for Windows or Linux. You'll need your own ULUS-10512 ISO and devkitPro with the 3DS development tools. Sound and the opening movie are still missing.

If you try 0.3.2 on hardware, I'm especially interested in whether you still see black frames during scene transitions. Please include the scene, your console model and, if possible, sdmc:/p3p3ds/report.txt.
 

Site & Scene News

New Hot Discussed User Submitted