Toggle menu
Toggle preferences menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

MSPA-3DS: Difference between revisions

From GameBrew
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>


== How does it work? ==
== Installation ==
'''On your PC: The Bundle Builder'''
=== 3DS app ===
 
Download <code>MSPA-3DS.3dsx</code> from the latest release.
Run the included Python GUI tool to download comic pages and package them into '''bundles''':
 
* 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:
Copy <code>MSPA-3DS.3dsx</code> to <code>/3ds/MSPA-3DS/</code> on your SD card.


* Downloads pages and images from the MSPA mirror or MSPFA's JSON API
=== Bundle builder (PC) ===
* Converts GIFs and images to 3DS-native <code>.tex</code> textures for instant loading
'''Option 1. Standalone EXE:'''
* 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


'''On your 3DS: The Reader'''
Download <code>MSPA-3DS-Builder.exe</code> from the latest release and run it, it's a standalone executable, no Python needed.


* Browse your installed packs from the main menu
'''Option 2. Run from source:'''  
* Navigate with A (next page), B (previous page), X (back to menu)
* Animated GIFs play automatically as frame sequences
* <code>[S]</code> pages play as animations with audio
* Scroll text on the bottom screen with D-Pad Up/Down
* Resumes from last-read page -- each pack remembers where you left off
 
== 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)'''
* Download <code>MSPA-3DS-Builder.exe</code> from the latest release, it's a standalone executable, no Python needed.
 
'''Or run from source:'''
 
'''Requirements:'''


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


<pre>
Run <code>python build_gui.py</code>.
python build_gui.py
 
</pre>
'''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.


== Transferring bundles to your 3DS ==
The builder handles everything:
After building a pack, copy its folder to:
* 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.


<pre>
=== Transferring bundles to 3DS ===
sdmc:/3ds/MSPA-3DS/packs/
After building a pack, copy its folder to: <code>sdmc:/3ds/MSPA-3DS/packs/</code>
</pre>


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>&lt;iframe&gt;</code>) → downloaded via yt-dlp → frame sequences
* Direct video (<code>&lt;video&gt;</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
== 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 → 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


== Limitations ==
== Limitations ==

Latest revision as of 05:56, 28 June 2026

MSPA-3DS
General
AuthorAnimalino5
TypeOther Apps
Version1.0.0
LicenseN/A
Last Updated2026/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 .tex textures 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 .tex textures
  • 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 .tex textures
  • [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 audio CSS → 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

External links

Advertising: