Skip to content

Android Beta 0.10

Latest

Choose a tag to compare

@sergiomanzur sergiomanzur released this 19 Aug 15:41

Castlevania: Symphony of the Night, running natively on Android. Not an emulator — the
PlayStation code is statically recompiled into C# and built into a real app.

This one catches the port up to upstream's Beta 0.5.1b, which is mostly a widescreen
release, and fixes controller detection. Tested on a Retroid Pocket 6.


Widescreen is properly widescreen now

Beta 0.9.1 made the game render wider instead of stretching a 4:3 picture sideways. That
fixed how it looked, but the game underneath still only reasoned about the original view.
Upstream has since reworked that part, and this release brings it over.

Enemies now spawn and can be hit at the edges of the screen. Spawning, hit detection and
camera collision are handled for the widened view itself rather than being nudged afterwards.
Previously things could walk into frame already resolved, or sit in the extra space at the
sides without properly existing.

Backgrounds stop losing chunks of tile in widescreen. The PlayStation had 2 MB of work
RAM and the widescreen hooks run out of it while building the extra tile columns a wider view
needs. The emulated console now gets 8 MB, which is what upstream raised it to for the same
reason.

The Prologue throne room is filled in. Widening that room exposed empty space to the left
of the throne, and the artwork that covers it was never being drawn on Android.

Inverted castle screen bounds are correct, which upstream fixed separately.


Controllers

A pad connected after the game is already running now works. This was reported with a
wired USB-C controller, and it was never about that particular pad — on Android nothing
attached after startup was ever picked up. The only scan happened once during launch, before
Android had even finished enumerating its input devices, so a pad was found by luck. Built-in
controls like the Retroid's usually got lucky. A USB-C pad, which you plug into a phone that
is already running, never did.

Connecting and disconnecting are both noticed within a frame now, with no restart.

A controller no longer takes the game down with it. Opening certain pads makes SDL leave a
harmless complaint in its error slot — the pad opens and works fine. But that message is
sticky, and the layer above throws on any pending error, whether or not its own call failed.
So the frame after a controller was opened could die and stop the game. This is the more likely
reason a specific controller looked like it "wasn't recognised": with the pad attached at
launch, the same trap could leave the app running with nothing on screen.

New: ⚙ MENU → System → Controllers. A pad that does nothing has more than one cause — the
system never saw it, or it was seen but has no button mapping and so cannot be driven — and
from the outside those look the same. This screen lists every controller the system reports,
marks each Usable or No button mapping, shows which player slots are filled, and can scan
again without restarting. If a pad still misbehaves, this is the screen to photograph in a bug
report.

I don't own the controller this was reported with, so the wired path was verified with a
synthetic USB gamepad on the device rather than the real thing.


Changed

High resolution is now a render scale picker (⚙ MENU → System → Display → Render scale),
following upstream replacing its own on/off toggle with a slider. The old switch could only
say 1x or 4x; on a phone 2x is often the better trade between a clean picture and battery.
It applies immediately — no restart, unlike the desktop build.


Also from upstream

Minotaur and Werewolf crash fix. Soft reset now returns to the title screen properly.
Japanese and Simplified Chinese interface translations. Fixes to the GTE, the sound processor's
note handling, interrupt dispatch, and a stale frame that could linger after a video. CHD disc
images are supported by the runtime, though the importer here still asks for cue/bin.


Worth knowing before you update

Save states are now about 8 MB each instead of 2 MB, because the emulated console has more
RAM to record. Five slots is roughly 40 MB. Your existing save states still load — but a state
made with this version will load incompletely if you ever go back to 0.9.1, so keep a memory
card export if you plan to downgrade.

Memory cards are unaffected.


Install

The APK holds no game data. You supply your own disc the first time you open it, and the app
never asks again. Android 5.0 (API 21) or newer, arm64 or x64.

This is not affiliated with or endorsed by BlackLabelHQ. Please don't take questions about
this port to their repo or their Discord — bugs here are mine. See the README for the longer
version of that.