Repository navigation
Ferris-AO Switch v1.00
π¦ Ferris-AO Switch β v1.00
Attorney Online 2, running natively on your Nintendo Switch. First 1.0 release β the client is now fully playable end to end: connect, pick a character, and actually hold court with a keyboard that doesn't freeze and chat that flows live.
Runs as a single .nro on real modded hardware (AtmosphΓ¨re) and on the Ryujinx emulator β same binary. Characters, backgrounds, music and sounds all stream from the server, so there's nothing to pre-download.
π§ Hotfix
The v1.00 download has been updated with three fixes:
- π Audio works now. The mixer was opening at 44.1 kHz, but the Switch runs audio at 48 kHz natively β the resample was coming out silent (worst on Ryujinx). It now opens at 48 kHz, so blips / shout SFX / music actually play.
- β¨οΈ USB / host keyboard types. A physical keyboard (incl. Ryujinx's, with keyboard input enabled) now types straight into the IC/OOC composer β read directly from the Switch HID keyboard. The on-screen keyboard still handles touch / mouse / controller.
- π― Composer layout. The message box no longer overlaps the Flip / Realization / Screenshake toggles.
Follow-up pass:
- π΅ Opus music plays. Server music is Opus, which SDL_mixer's auto-detector kept misreading (Opus rides in the same
OggScontainer as Vorbis) β silence. The player now forces the Opus decoder by file extension, so BGM actually streams.- β¨οΈ No more double letters. On Ryujinx the physical keyboard reached both SDL and the new HID poll, so every key typed twice β HID is now the sole physical-keyboard source on Switch.
- π Change Character button. A small Char button in the courtroom HUD jumps straight back to character select.
- π More mislabeled sprites fixed. Animated GIFs shipped with a
.webpname (e.g. Tyrell Badd) now get correct transparency on every load path, not just when they happened to be pre-cached.- π Fewer random disconnects. Added a proactive
CHkeep-alive every 15 s β servers that never send their ownCHECKping were silently timing out the socket during idle. Long sessions stay connected now.
π What's new since v0.5
- β¨οΈ In-app keyboard that doesn't freeze the game. Typing used to open the blocking system keyboard, which froze the whole client β incoming messages piled up and only appeared after you sent one. The IC/OOC keyboard is now an on-screen keyboard the app draws itself, so chat keeps flowing live while you type. Works with touch (handheld), mouse (Ryujinx), controller (D-pad cursor + A/B β so it works docked), and a USB keyboard.
- β Send shouts & effects. The IC composer can now SEND Objection! / Hold It! / Take That! / Custom shouts, plus Flip, Realization, and Screenshake β not just receive them.
- π Navigate huge rosters. The character grid zooms (32 β 220 per page via on-screen
β / +) and has a right-edge scrollbar you drag to jump β built for 3000+ character servers. - π§Ή OOC chat fixed. The OOC log no longer overlaps itself on long lines β entries stack cleanly by their real height.
- β‘ Much faster on big HTTPS/Cloudflare servers. Fixed a connection bug that did a fresh TLS handshake on every file; now the workers keep warm connections and stream back-to-back. Plus off-thread image decode and a smarter, WebP-first, self-learning asset probe.
- π¦ Mislabeled assets handled. Old GIF sprites shipped with a
.webpname (e.g. Polly) no longer render as a "giant pink screen," and WebP emote buttons load correctly.
Feature highlights
- Full IC gameplay β animated idle/talk sprites, pre-animations, typewriter text with the AO2 colour palette, shouts, realization, screenshake, pairing (rendered), an always-on IC log.
- Server browser + direct connect (TCP /
ws:/// securewss://). - Character search/filter, music & rooms/areas panels, OOC chat, evidence viewer, HP bars, narrator mode.
- Themes β drop any AO2
courtroom_design.initheme on the SD card and pick it. - Streams everything from the server's CDN β no base pack required (optional local pack supported).
Full feature list
Connecting β public server browser (configurable master URL); direct host/port/username; TCP, WebSocket, secure WebSocket (TLS); akashi/tsuserver/Ferris-AO compatible; clean reconnect.
Characters β zoomable grid for thousands of chars; instant name search; streamed icons; taken-dimming; narrator mode.
IC β typewriter + word-wrap; 10 AO2 colours; custom/character shownames; idle/talk + pre-anims; Objection!/Hold It!/Take That!/Custom shouts; Flip / Realization / Screenshake; pairing; positions; always-on word-wrapped IC log.
Text entry β non-blocking on-screen keyboard (touch / mouse / controller / USB keyboard).
Panels β OOC chat (own-message highlight, clean wrap); music list (play any track, now-playing, crossfade); evidence viewer; rooms/areas with live counts/status/lock (ARUP); HP bars.
Audio β per-character blips, message & shout SFX, crossfading BGM, separate SFX/music volumes.
Assets β HTTP/HTTPS streaming (no base pack); four-tier resolution (CDN β community CDN β local β bundled); persistent disk cache; WebP-first learned probing; off-thread decode; decoded-animation cache; keep-alive connection reuse; content-based format detection.
Themes/settings β courtroom_design.ini themes (live switch, auto-scaled); persistent showname/theme/master-URL/volumes.
Input/display β touchscreen (tap + drag); Joy-Con/Pro Controller; on-screen + USB keyboard; 1280Γ720 docked & handheld, hardware-accelerated.
Why it's so fast
The render loop never waits on anything: 8 worker threads fetch and decode assets off the main thread, the client probes WebP-first and learns each server's format (so it asks for one file, not five), reuses warm HTTPS connections, and caches decoded sprites in memory + raw files on the SD card. The payoff β it stays responsive even on 3000+ file servers, and a repeat visit is nearly instant.
Installing
Modded Switch (Atmosphère): download ferris-ao-switch.nro, copy it to /switch/ on your SD card, open the Homebrew Menu, and launch Ferris-AO.
Ryujinx: download ferris-ao-switch.nro, drag it onto Ryujinx (or File β Load Application from Fileβ¦), and make sure internet access is enabled.
No firmware keys, no title install, no base pack.
Controls
| Where | Controls |
|---|---|
| Connect | L/R tabs Β· A connect/edit Β· R refresh |
| Character select | D-pad move Β· A pick Β· Y/F/tap search Β· on-screen β / + zoom Β· drag the scrollbar to jump |
| Courtroom | X IC composer Β· L OOC Β· R Music Β· Y Evidence Β· β Rooms Β· β/β emote Β· A quick-talk Β· + leave |
| Keyboard | tap keys, or D-pad cursor + A press + B cancel (docked) |
β οΈ Known limitations
- Evidence is viewable but not yet attachable to a message; pair-up partner picker, judge/CM controls and mod-calls aren't wired into the UI yet.
- Build-tested; please report anything odd on the repo.
Credits
Created by SyntaxNyah, for the Attorney Online community, devkitPro and SDL2. You can fork it, do what you like with it, just obey the AGPL guidelines.
Unofficial homebrew β not affiliated with the official Attorney Online project or Nintendo.