MSPA-3DS: Difference between revisions
More actions
No edit summary |
No edit summary |
||
| (2 intermediate revisions by one other user not shown) | |||
| Line 24: | Line 24: | ||
* Any MSPFA (MS Paint Fan Adventures) story via <code>mspfa.com</code> | * Any MSPFA (MS Paint Fan Adventures) story via <code>mspfa.com</code> | ||
== | == Installation == | ||
=== 3DS app === | |||
Download <code>MSPA-3DS.3dsx</code> from the latest release. | |||
Copy <code>MSPA-3DS.3dsx</code> to <code>/3ds/MSPA-3DS/</code> on your SD card. | |||
=== Bundle builder (PC) === | |||
'''Option 1. Standalone EXE:''' | |||
Download <code>MSPA-3DS-Builder.exe</code> from the latest release and run it, it's a standalone executable, no Python needed. | |||
'''Option 2. Run from source:''' | |||
Requirements: | |||
* Python 3.8+ | * Python 3.8+ | ||
* <code>pip install requests beautifulsoup4 Pillow yt-dlp</code> | * <code>pip install requests beautifulsoup4 Pillow yt-dlp</code> | ||
| Line 73: | Line 45: | ||
* FFDec is auto-downloaded on first run, no manual install needed | * FFDec is auto-downloaded on first run, no manual install needed | ||
< | Run <code>python build_gui.py</code>. | ||
python build_gui.py | |||
</ | '''Using the bundle builder:''' | ||
* Pick a source tab (MSPA Mirror or MSPFA). | |||
* Enter a URL, slug, or story ID. | |||
* Set the page range and pack name. | |||
* Click Build Bundle. | |||
* Copy the generated folder to your 3DS SD card. | |||
The builder handles everything: | |||
* Downloads pages and images from the MSPA mirror or MSPFA's JSON API. | |||
* Converts GIFs and images to 3DS-native <code>.tex</code> textures for instant loading. | |||
* Extracts <code>[S]</code> page Flash animations via FFDec → frame sequences at 6 FPS with WAV audio. | |||
* Downloads YouTube videos from MSPFA pages via yt-dlp → frame sequences. | |||
* Downloads direct video files (MP4/WebM) from MSPFA pages → frame sequences. | |||
* Extracts and resamples audio to 44100Hz stereo WAV for 3DS playback. | |||
* Splits multi-image pages into separate navigable pages. | |||
< | === Transferring bundles to 3DS === | ||
sdmc:/3ds/MSPA-3DS/packs/ | After building a pack, copy its folder to: <code>sdmc:/3ds/MSPA-3DS/packs/</code> | ||
</ | |||
The folder structure looks like: | The folder structure looks like: | ||
<pre> | <pre> | ||
packs/ | packs/ | ||
| Line 104: | Line 85: | ||
</pre> | </pre> | ||
== File format notes == | === File format notes === | ||
* <code>.tex</code> - 3DS GPU texture (format 0x80 = untiled RGBA, format 0x00 = GPU-tiled) | * <code>.tex</code> - 3DS GPU texture (format 0x80 = untiled RGBA, format 0x00 = GPU-tiled) | ||
* <code>.anim</code> - Animation manifest: frame count + per-frame delays (ms) | * <code>.anim</code> - Animation manifest: frame count + per-frame delays (ms) | ||
| Line 128: | Line 108: | ||
Each pack remembers where you left off and resumes from the last-read page. | Each pack remembers where you left off and resumes from the last-read page. | ||
== Media type support == | |||
'''MSPA Mirror (MSPA To Go):''' | |||
* Static images (GIF/PNG/JPEG) → converted to <code>.tex</code> textures | |||
* Flash <code>[S]</code> pages → SWF extracted via FFDec → frame sequences at 6 FPS + WAV audio | |||
* Multi-image pages → split into separate sub-pages | |||
'''MSPFA (fan adventures):''' | |||
* <code>[img]</code> tags → converted to <code>.tex</code> textures | |||
* <code>[flash]</code> tags → SWF extracted via FFDec → frame sequences | |||
* YouTube embeds (<code><iframe></code>) → downloaded via yt-dlp → frame sequences | |||
* Direct video (<code><video></code> tags, MP4/WebM) → downloaded and converted via ffmpeg | |||
* <code>@mspfa audio</code> CSS → audio downloaded and resampled to WAV | |||
== Controls == | == Controls == | ||
| Line 139: | Line 133: | ||
D-Pad Up/Down - Scroll text | D-Pad Up/Down - Scroll text | ||
== Limitations == | == Limitations == | ||
Latest revision as of 05:56, 28 June 2026
| MSPA-3DS | |
|---|---|
| General | |
| Author | Animalino5 |
| Type | Other Apps |
| Version | 1.0.0 |
| License | N/A |
| Last Updated | 2026/06/27 |
| Links | |
| Download | |
| Website | |
| Source | |
A Homestuck (and other MSPA comics) reader for the Nintendo 3DS. It lets you read MS Paint Adventures webcomics on your 3DS.
It comes with a companion PC tool that downloads and pre-converts comic pages into a format the 3DS can display instantly. No internet connection needed on the console itself.
Fully Supported Comics:
- Jailbreak
- Problem Sleuth
- Homestuck (all pages including
[S]animations)
Also supported:
- Any MSPFA (MS Paint Fan Adventures) story via
mspfa.com
Installation
3DS app
Download MSPA-3DS.3dsx from the latest release.
Copy MSPA-3DS.3dsx to /3ds/MSPA-3DS/ on your SD card.
Bundle builder (PC)
Option 1. Standalone EXE:
Download MSPA-3DS-Builder.exe from the latest release and run it, it's a standalone executable, no Python needed.
Option 2. Run from source:
Requirements:
- Python 3.8+
pip install requests beautifulsoup4 Pillow yt-dlp- ffmpeg (required for video/audio conversion — install via your package manager)
- Java (required for SWF/Flash conversion — install JRE 11+)
- yt-dlp (for YouTube videos — installed via pip above)
- FFDec is auto-downloaded on first run, no manual install needed
Run python build_gui.py.
Using the bundle builder:
- Pick a source tab (MSPA Mirror or MSPFA).
- Enter a URL, slug, or story ID.
- Set the page range and pack name.
- Click Build Bundle.
- Copy the generated folder to your 3DS SD card.
The builder handles everything:
- Downloads pages and images from the MSPA mirror or MSPFA's JSON API.
- Converts GIFs and images to 3DS-native
.textextures for instant loading. - Extracts
[S]page Flash animations via FFDec → frame sequences at 6 FPS with WAV audio. - Downloads YouTube videos from MSPFA pages via yt-dlp → frame sequences.
- Downloads direct video files (MP4/WebM) from MSPFA pages → frame sequences.
- Extracts and resamples audio to 44100Hz stereo WAV for 3DS playback.
- Splits multi-image pages into separate navigable pages.
Transferring bundles to 3DS
After building a pack, copy its folder to: sdmc:/3ds/MSPA-3DS/packs/
The folder structure looks like:
packs/
homestuck-1-100/
manifest.json
bookmark.txt
pages/
190100.json
190200.json
...
media/
001901_0-000.tex
001901_0.anim
001901.wav
001902_0.gif
001902_0-000.tex
...
File format notes
.tex- 3DS GPU texture (format 0x80 = untiled RGBA, format 0x00 = GPU-tiled).anim- Animation manifest: frame count + per-frame delays (ms).wav- PCM audio (44100Hz stereo) for[S]pages.gif- Original GIF (fallback for on-device conversion).json- Page metadata (command, text, media references, next page)manifest.json- Pack metadata (title, page range, schema version)bookmark.txt- Last-read page number (auto-generated by 3DS app)
User guide
Run MSPA-3DS (reader) on the 3DS.
Browse your installed packs from the main menu.
Navigate with A (next page), B (previous page), X (back to menu).
Animated GIFs play automatically as frame sequences.
[S] pages play as animations with audio.
Scroll text on the bottom screen with D-Pad Up/Down.
Each pack remembers where you left off and resumes from the last-read page.
Media type support
MSPA Mirror (MSPA To Go):
- Static images (GIF/PNG/JPEG) → converted to
.textextures - Flash
[S]pages → SWF extracted via FFDec → frame sequences at 6 FPS + WAV audio - Multi-image pages → split into separate sub-pages
MSPFA (fan adventures):
[img]tags → converted to.textextures[flash]tags → SWF extracted via FFDec → frame sequences- YouTube embeds (
<iframe>) → downloaded via yt-dlp → frame sequences - Direct video (
<video>tags, MP4/WebM) → downloaded and converted via ffmpeg @mspfa audioCSS → audio downloaded and resampled to WAV
Controls
A - Next page (or next image on multi-image pages)
B - Previous page
X - Return to pack selection
START - Exit app
D-Pad Up/Down - Scroll text
Limitations
[S]pages are converted to 6 FPS frame sequences. Smooth but not full video quality.- Interactive Flash pages (with ActionScript games) may not convert correctly. FFDec can only extract timeline animations, not interactive content.
- Audio for
[S]pages is extracted from the source; some pages may have audio sync issues. - No internet connectivity from the 3DS. all content must be pre-built on PC.
- Very long animations may use significant SD card space (~1MB per 10 seconds at 6 FPS).
Changelog
v1.0.0
- What's new in v1.0.0
- MSPFA support -- build packs from any fan adventure on mspfa.com via the JSON API
- SWF conversion --
[S]page Flash animations are automatically extracted to frame sequences using JPEXS FFDec (auto-downloaded on first run) - YouTube support -- MSPFA pages with YouTube embeds are automatically downloaded via yt-dlp
- Direct video support -- MSPFA pages with
<video>tags (MP4/WebM) are downloaded and converted - Per-pack bookmarks -- the 3DS app remembers where you left off in each pack individually
- Auto-downloaded FFDec -- no manual installation needed, the builder fetches it from GitHub
- Two-column builder GUI -- compact layout that fits on smaller screens
- Builder EXE -- for those who hate python!
v0.5.0
- What works
- Full comic reading -- navigate pages with A/B, scroll text with D-pad
- Animated GIFs -- pre-converted to frame sequences, play smoothly
- pages -- converted to 6 FPS frame sequences with WAV audio
- Multi-image pages -- automatically split into separate navigable pages
- Multiple comics -- Homestuck, Jailbreak, and Problem Sleuth supported
- Pack system -- each comic pack is a folder on SD, easy to add/remove
- PC bundle builder -- GUI tool downloads, converts, and packages everything
- Known issues
- Audio quirks -- some [S] pages may have audio sync or playback issues
- No Bard Quest -- excluded because it has branching paths (multiple "next" links per page) which the reader doesn't support
- No Homestuck Beta -- excluded because it's flash-only with no static images
- pages are 6 FPS -- smooth enough for reading, but not full video quality
- Large [S] pages use more space -- frame sequences are bigger than video files (roughly 300KB/frame at 320x240)
v0.1.0
- FEATURES PRESENT SO FAR:
- You can read most homestuck pages
- You have their gif showing up at the top screen
- You can scroll down
- You can teleport to whatever page you want
- You can save your progress
- LIMITATIONS SO FAR:
- Pages with double images just render one
- Flashes are not usable
- Depending on gif complexity, FPS may fall
- Pesterlogs aren't colored